چرا برخی از زبان های برنامه نویسی قدیمی همچنان محبوب و پراستفاده هستند؟
از جملهی محبوبترین زبانهای برنامهنویسی که امروزه مورد استفاده قرار میگیرند، میتوان به پی اچ پی با عمری 20 ساله، پایتون با 23 سال، اچ تی ام ال با 21 سال، جاوا اسکریپت با 19 سال و زبان بی مانند سی با 42 سال قدمت اشاره کرد.
شاید در زمان توسعهی این زبانها کسی تصور موفقیت آنها را تا این حد پیشبینی نمیکرد. برایان کرنیگان، یکی از نویسندگان اولین کتاب در رابطه با زبان C است که امروزه نیز مورد استفاده قرار میگیرد. کرنیگان در نگارش این کتاب، دنیس ریچی، خالق زبان سی را یاری کرده است. وی در خصوص ماندگاری و موفقیت این زبان برنامهنویسی چنین اظهار نظر کرده است:
به یاد دارم که در زمان پایان نگارش این کتاب، در سخنی با ویراستاران از فروش تنها 5٫000 نسخه از این کتاب حرف میزدیم. ولی ما موفق شدیم تا خیلی بهتر از تصورات خودمان عمل کنیم. هنوز نمیتوانم باور کنم که سال 2015 شماری از دانشجویان از این کتاب به عنوان مرجع آموزشی استفاده میکنند.
موضوعی که در مورد سی اهمیت دارد و بسیار جالب به نظر میرسد، این است که گوگل هماکنون زبانی را با نام Go توسعه داده که هدف از آن حل مسائل، بهینهتر از روشهایی است که زبان C حل میکند. به بیان بهتر گوگل زبان Go را ایجاد کرده تا مسائل موجود را از روش بهینهتری در مقایسه با زبان C حل کند. البته این موضوع برای کرنیگان قابل پذیرش نیست که Go میتواند C را پشت سر بگذارد.
وی دربارهی مرگ زبانهای برنامهنویسی میگوید:
بسیاری از زبانها از بین نمیروند یا حداقل در صورتی که به حدی از مقبولیت برسند، از بین نمیروند. در حال حاضر زبان C قادر است بسیاری از مشکلات و مسائل موجود را بهتر از هر گزینهی دیگری حل کند.
توسعه با زبانی که برنامه نویسان با آن بیشتر آشنا هستند
دلیل محبوبیت شماری از زبانهای برنامهنویسی چیست و چرا برخی از زبانها به موفقیت میرسند؟ دلیل این امر بسیار روشن است؛ برنامهنویسان این زبانهای برنامهنویسی را انتخاب میکنند. هرچند انتخاب یک زبان برنامهنویسی توسط برنامهنویسان دلیل قانعکنندهای برای نشان دادن محبوبیت یک زبان است، اما بهتر است به کنکاش دلایل انتخاب زبان مورد نظر توسط برنامهنویسان بپردازیم.
آری رابکین و لئو مایروویچ محققانی از دانشگاههای پرینستون و کالیفرنیا هستند که طی یک تحقیق دو ساله به یافتن پاسخ این پرسش پرداختهاند. نتیجهی تحقیق این دو فرد در دانشگاههای نامبرده شامل بیش از 200٫000 پروژه و 13٫000 برنامه نویس است.
اما اصلیترین دلیل برای انتخاب یک زبان از سوی برنامهنویسان چه بوده است؟ توسعهدهندگان به سراغ زبانهایی میروند که با آن آشنایی دارند.
آری رابکین در این مورد چنین اظهار نظر کرده است:
شماری از زبانهای برنامهنویسی هستند که به دلیل استفادهی مداوم از آنها، به سراغشان میرویم. برای مثال منجمان بصورت سنتی از زبان برنامه نویسی IDL در برنامههای رایانهای خود استفاده میکنند. دلیل استفاده از این زبان برنامه نویسی، داشتن خاصیت جالب توجه در رابطه با ستارهها یا هر چیز دیگری مرتبط با نجوم نیست، بلکه استفاده از این زبان به یک سنت تبدیل شده است. در نجوم برنامههای فراوانی با IDL توسعه یافته و از اینرو منجمان دوست دارند تا از این زبان استفاده کنند.
بنابراین داشتن شناخت از یک زبان را باید دلیل اصلی برای ادامهی استفاده از آن خواند. البته این بدین معنی نیست که زبانهای برنامهنویسی در طول تاریخ تغییر نمیکنند. رابکین به این موضوع اشاره کرده که زبان برنامهنویسی C که در حال حاضر مورد استفاده قرار میگیرد، بسیار متفاوت از آن چیزی است که کرنیگان از آن سخن میگوید. به اعتقاد رابکین شاید کد توسعه یافته در C اولیه با کامپایلرهای امروز مطابقت نداشته باشد. به گفتهی رابکین زبانهای برنامهنویسی با عمر بالا معمولا در طول سالهای مختلف تغییراتی را به خود میبینند. این تغییرات شامل اضافه شدن ویژگیهای جدید در کار بهبود قابلیتهای جدید است. البته معمولا این تغییرات به معنای پشتیبانی نکردن از کدهای قدیمی نیست.
پشتیبانی از کدهای قدیمی به این معنا است که نهتنها برنامهنویسان میتوانند برنامههای خود را بروزرسانی کنند، بلکه نیازی نیز به دوبارهنویسی کدهای قدیمی نیست. به کدهای قدیمی موجود در برنامهها که در طول زمان با بروزرسانی قطعات دیگر قدیمی شدهاند، کدهای به ارث رسیده اطلاق میشود.
پی اچ پی: یک زبان برنامهنویسی با قدمت بالا
Legacy Code یا کد به ارث رسیده به برنامه یا قطعه کدی اطلاق میشود که کد توسعه یافته برای آن قدیمی باشد. برای مثال فرض کنید که قطعه کدی از یک برنامهی تجاری یا یک پروژهی مهندسی در زبانی توسعه یافته که در حال حاضر از آن پشتیبانی نمیشود. البته باید به این نکته اشاره کرد که این قطعه کد هدف اصلی از توسعهی آن را که همانا دریافت یک خروجی است، به خوبی انجام میدهد، اما مساله اینجا است که برنامهنویسان به دلیل هزینهی بالا برای تبدیل آن به قطعه کد مدرن یا سخت بودن فرآیند تبدیل، ترجیح میدهند تا همچنان از این قطعه کد قدیمی استفاده کنند.
هر زبان برنامهنویسی که برای چندین سال مورد استفاده قرار گیرد، از مشکل کد به ارث رسیده رنج میبرد و پیاچپی نیز یک مثال بارز در این مورد است. شدت تغییرات در پی اچ پی بسیار بالا است و از همین رو سرعت تبدیل شدن یک قطعه کد به Legacy Code بسیار بیشتر است و در فاصلهی چند سال کدهای توسعه یافته قدیمی میشوند.
اَندی گوتمانز، یکی از توسعهدهندگان فریمورک زند است. این فریمورک بصورت استاندارد در زمان ارائهی PHP4 روانهی بازار شد. گوتمانز به یاد میآورد که وی و همکارش سعی داشتند تا این فریمورک را برای PHP 3 ارائه کنند، اما ورود راسموس لردورف همه چیز را تغییر داد. این گروه فریمورک زند را برای PHP 4 و سپس PHP 5 توسعه دادند که همین امر منجر به موفقیت شد.
نتیجهی تغییرات در پی اچ پی باعث شده تا آنچه که امروز از این زبان میشناسیم، با نسخهی اولین متفاوت باشد. همین امر باعث شده تا وجود انواع Legacy Codeها در این زبان و اپلیکیشنها و وبسایتهای توسعه داده شده، بسیاری از منتقدان را پابرجا نگه دارد، چراکه به اعتقاد این افراد پی اچ پی مملو از حفرههای امنیتی است و نمیتوان از آن برای انجام محاسبات در مقیاس بزرگ استفاده کرد.
گوتمانز در این خصوص میگوید:
افرادی که زبان برنامهنویسی پی اچ پی را مورد انتقاد قرار میدهند، مفهوم این زبان در سال 1998 را در نظر دارند. این افراد بروز نیستند و از جزئیات اکوسیستم پی اچ پی و قابلیتهای آن در قالب مدرن هیچ اطلاعی ندارند.
در حال حاضر گوتمانز و همکارانش توسعهدهندگان و کاربرانی را که از زبان پی اچ پی استفاده میکنند، تشویق میکنند تا کدهای خود را بروز کنند. ور در این باره میگوید:
پی اچ پی در حال حاضر از جامعهی بسیار بزرگی تشکیل شده و کدهای قدیمی در کدهای توسعه یافته با آن به وفور یافت میشود.
مساله اینجا است که کاربر هیچگاه آخرین نسخه از زبان را مورد استفاده قرار نمیدهد. برای مثال میتوان به توسعهدهندگان زبان پایتون اشاره کرد که از پایتون 2 که در سال 2000 توسعه یافته بیشتر استفاده میکنند. در حال حاضر پایتون 3 نیز که در سال 2008 توسعه یافته، برای استفاده در دسترس است. دلایل بسیاری برای اینکه توسعهدهندگان به نسخهی جدیدتر بروز نمیشوند، وجود دارد، اما احتیاط بسیاری از برنامهنویسان را از اینکار باز میدارد.
رابکین در این خصوص میگوید:
یک زبان که از وجود کدهای قدیمی و به ارث رسیده بهرهمند است، هرگز نمیمیرد. بازنویسی گران است و از اینرو اگر کد همچنان کار کند، دیگر نیاز به تغییر نیست.
مطمئنا توسعهدهندگان زبانهای برنامهنویسی را برای باقی گذاشتن کدهای قدیمی انتخاب نمیکنند. رابکین و مایروویچ در تحقیقات خود به این نتیجه رسیدهاند که انتخاب زبان و آگاهی از زبانهای مختلف هیچ ارتباطی با سن توسعهدهندگان ندارد.
این دو نفر در تحقیق خود در این مورد چنین نوشتهاند:
ما افرادی را که در جامعهی آماریمان قرار داشتند، به گروههای سنی مختلفی تقسیم کردیم و از آنها پرسیدیم که با چه تعداد زبان برنامهنویسی آشنا هستند. پاسخی که ما را شوکه کرد، این بود که سن هیچ ارتباطی با بیشتر شدن تعداد زبانهای برنامهنویسی که فرد از آن استفاده میکند، ندارد. در واقع تعداد زبانهای برنامهنویسی که گروه سنی 25 و 40 سال از آن آگاهی داشتند، یکسان بود.
این بدین معنا است که تنها توسعهدهندگان قدیمی به سراغ زبانهای برنامهنویسی با قدمت بالا نمیروند، بلکه توسعهدهندگان جوان نیز ابتدا به سراغ زبانهای برنامهنویسی قدیمیتر رفته و سپس به سراغ گزینههای جدیدتر میروند. شاید دلیل این موضوع بهرهگیری زبانهای مورد نظر از کتابخانهها و قابلیتهایی باشد که جذاب به نظر میرسند. همچنین بودن در یک اجتماع نیز تاثیرگذار است، بطوریکه بعضا گروهی از برنامهنویسان به یکباره اقدام به یادگیری و استفاده از یک زبان جدید میکنند.
رابکین اضافه میکند:
اخلاق خاصی نیز در بین برنامهنویسان رواج دارد. در صورتی که یک زبان برنامهنویسی قابلیتهای مشخصی داشته باشد، برنامهنویسان به سراغ یادگیری و استفاده از آن میروند. در صورتی که شما در یک جامعهی برنامهنویسی قرار داشته باشید که رفته رفته همه شروع به استفاده از یک زبان جدید کرده و آن را با دیگران به اشتراک میگذارند، شما نیز به سمت زبان مورد نظر حرکت میکنید.
جامعهی برنامهنویسان نقش به سزایی در عملکرد زبانهای برنامهنویسی دارند. برای مثال میتوان به پایتون و روبی اشاره کرد. این دو زبان سطح بالا تفاوت چندانی با یکدیگر ندارند، اما توجه برنامهنویسان یکی را از دیگری برتر کرده است.
در پایان میتوان چنین نتیجه گرفت که وجود کدهای به ارث رسیده و قدیمی در کنار تعامل جامعهی برنامهنویسی با یک زبان، به ماندگاری آن کمک میکند.
نظر شما در این خصوص چیست؟