دنیا از حدود 50 سال پیش یعنی حدودن دهه ی 1970 همواره شاهد یک جنگ تمام عیار بوده. نه، این نبرد, تقابل بین شرق و غرب, چین و آمریکا یا ایران و اسراییل نبوده. یه جنگ فوتبالی بین برزیل و آرژانتین هم نیست. یه جنگ نرم, فوق العاده نرم, در دنیای نرم افزار ولی جذاب مثل یه مسابقه ی فوتبال یا یه مبارزه ی کشتی. جنگ بین استاتیک و داینامیک.
اینکه کدوم یک از این ها بهترن, زبان های Static Type و Dynamic Type رو میگم, هیچ موقع یه جواب مشخصی نداشته. از همون عصر C و پاسکال تا به الان, هیچ موقع شاهد برتری بی چون و چرای یکی بر دیگری نبودیم. این دو رقیب, دو حریف خیلی سرسخت برای هم بودن و همین رقابت هدیه های زیادی رو برای ما به ارمغان آورده.
چراغ اول رو دو غول دهه ی 1970 روشن میکنن. تقابل بین استاتیک و داینامیک رسمن شروع میشه. پاسکال در جبهه ی استاتیک ها و C در طرف مقابل پرچم دار داینامیک ها هستن.
در این نبرد باوجود خوبی های پاسکال, این C هست که پیروز میشه و این دهه رو باید به نام داینامیک تایپ ها ثبت کنیم. طرفدارن پاسکال هر چه تلاش میکنن و هر چه خودشون رو به در و دیوار میکوبونن, نمیتونن طرفداران پر شمار و البته متعصب C رو قانع کنن.
رفته رفته اما, عاشقان متعصب C با مشکلات زیادی روبرو میشن. ولی فقط و فقط به علت تعصب و چون که نمیخوان در مقابل پاسکالی ها کم بیارن از اسب خودشون پایین نمیان. ولی اون ها خودشون میدونن که توی بد مخمصه ای گیر افتادن.
دهه ی 1980 اما, یک منجی ظهور میکنه و به فریاد بی صدای عاشقان متعصب میرسه. ورژن OO زبان C و البته استاتیک تایپ, C++, وارد گود میشه. توسعه دهنده های C که حاضر نشده بودن به حرف پاسکالی ها گوش کنن و به هیچ وجه قانع نمیشدن که از زبان استاتیک تایپ استفاده کنن, بدون چون و چرا به C++ مهاجرت میکنن. از این رو دهه ی 1980, این استاتیک ها هستن که بالاخره طعم پیروزی رو میچشن.
دهه ی 1990 اما, یکی از طلایی ترین دهه های تاریخ دنیای نرم افزار هست. این دهه, زبان های استاتیک تایپ به اوج خودشون میرسن. جاوا متولد میشه و احتمالن باید استاتیک ها رو برنده ی بی چون و چرای این نبرد بدونیم. اما داینامیک ها ساکت نمیشینن. در مقابل جولان استاتیک ها, Smalltalk داره دوران طلایی خودش رو سپری میکنه. بزرگان در این پروژه نقش ایفا میکنن. بزرگانی که هر کدومشون یک ستون اساسی برای شکوفایی دنیای نرم افزار و البته Object Oriented هستن. نبرد به لحظات حساس خودش میرسه. در اواسط این دهه وب ظهور میکنه. کمپانی های بزرگ میدونن که باید روی وب سرمایه گذاری کنن. دو کمپانی گوی سبقت رو از بقیه میرباین. یکی از اون ها روی زبان های استاتیک تایپ سرمایه گذاری میکنه و دیگری روی داینامیک ها. و این جنگ رو خونین تر از قبل میکنه. یک جنگ تمام عیار.
داینامیک ها سرعت توسعه خودشون رو به رخ میکشن و استاتیک ها باگ خیز بودن رو دستاویزی برای غلبه بر حریف قرار میدن. درسته داینامیک ها سرعت توسعه بالایی دارن ولی باگ خیز هستن و خطاهایی رو که استاتیک ها در زمان کامپایل شناسایی میکنن تا زمان اجرای برنامه به تعویق میندازن و خطر کرش کردن برنامه رو بالا و بالاتر میبرن. باید به فکر چاره بود. اما چاره چیه؟
قراره تحول بزرگی اتفاق بیوفته. یک ابداع بزرگ, که تا سال ها دنیا رو تحت تاثیر خودش قرار میده.
Kent Beck و یارانش که در سمت داینامیک ها و از طرفداران پر و پا قرص Smalltalk هستن, یه متد جدید رو ابداع میکنن.
آره…. TDD.پاسخی برای تمام حمله های رقیب.
حالا باگ خیز بودن با متدی به نام TDD کاملن از صحنه ی روزگار محو میشه و داینامیک ها مجددن بر سر زبان ها میوفتن.
این روند تا جایی ادامه پیدا میکنه که یه سوال اساسی برای جاوایی ها بوجود میاد؟
چرا ما داریم جاوا کار میکینم؟ الان که دیگه بهونه ای نداریم. الان که دیگه مشکل باگ خیز بودن داینامیک ها هم برطرف شد!!!
به راستی کدوم یک بهتره؟ آیا باید type safe بودن رو به طور کلی بیخیال بشیم و از متد جدید استفاده کنیم؟
در ادامه اما دنیا شاهد کوچ توسعه دهندگان Smalltalk به سمت جاوا و گسترش متد TDD در جاوا هستیم. Kent Beck به سمت جاوا میاد و JUnit رو برای جاوا توسعه میده. بعد ها بقیه از JUnit الهام میگیرن و فریمورک هایی مثل XUnit در دات نت توسعه داده میشن. تا جایی که این متد رفته رفته سراسر دنیا رو تصاحب میکنه و نتیجه ی نبرد دو غول بزرگ از دهه ی 1970, تولد یه اعجوبه در اواخر دهه ی 1990 و بالغ شدنش در سال های آتی میشه.
TDD شاید برای رفع نواقص زبان های داینامیک تایپ ابداع شد, ولی چنان شگفت انگیز بود که به سرعت و در کمتر از یک دهه کل دنیا رو فرا گرفت و ابعاد گسترده ای پیدا کرد.
حالا در سال 2024, شاید ما باید TDD رو مدیون Kent Beck بدونیم. یا شاید باید اون رو مدیون متعصبان C بدونیم. مدیون تمام متعصبانی که در این نبرد علیه هم تاختن و در نهایت به ما این هدیه رو ارزانی داشتن.
به راستی کدوم یک بهترن…داینامیک ها یا استاتیک ها؟
در یک سمت Ruby , Python و … قرار میگیرن و در سمت مقابل جولان گاه بزرگانی چون JAVA و C# هست.
این نبرد همچنان ادامه داره و هر چند سال یکبار, یکی سبقت میگیره… .
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.