و آنگاه مایکروسافت گند زد...
قصد دارم تو این مطلب در مورد زبانهای تحت تکنولوژی NET Framework و معایبشون بحثی رو مطرح کنم. لطفاً نظر خودتونو در مورد این مقایسه بگید و به نتیجه رسیدن مطلب کمک کنید.
حتماً میدونید که تکنولوژی Net Framework یا همون داتنت، توسط مایکروسافت به عنوان یک محیط استاندارد برای توسعهی ویندوز ارائه شده. زبانهایی که با این فریمورک هماهنگ شدن سیشارپ، جیشارپ، بیسیک، و اخیراً #F هست. همونطور که از اسماشون هم مشخصه همهی اینا از زبانهای معروف دیگه مشتق شدن. مثلاً سیشارپ از سی++ و جیشارپ از جاوا. خوب احتمالاً خیلی از شماها غیر از محیط ویژوال استودیو با ابزار دیگهای به طور جدی برنامهنویسی نمیکنید و احتمالاً مثل خیلی از برنامهنویسهای این مملکت از سیشارپ یا جاوا استفده میکنید. دلیلش هم کاملاً مشخصه: تبلیغات بیمورد و ناآگاهی.
مایکروسافت عاجزانه سعی میکنه توی بازار توسعهی نرمافزار باقی بمونه. اما برای همه مشخصه که تکنولوژیهای مایکروسافت خیلی ضعیفتر از اونی هستن که بشه بهشون اعتماد کرد. برای همین هم هست که هیچ توسعهدهندهی درست و حسابی از فریمورک داتنت استفاده نمیکنه. مثلاً شرکتهای بزرگی مثل Adobe و یا AutoDesk از فریمورکهای اختصاصی خودشون استفاده میکنن. سازمانها و نهادهای علمی هم همگی از پایتون استفاده میکنن. (مثلاً ناسا، سازمان فضایی اروپا، انیستیتو تحقیقات ژنتیک، آزمایشگاه CERN و ...)
سیر توسعهی فریمورک هم مؤید همین قضیه است. کافیه یه نگاهی به تاریخچهی داتنت بندازین تا متوجه بشین که دارن سعی میکنن رفته رفته خودشونو شکل پایتون و پرل دربیارن! بار اول که داتنت ۱ در اومد هیچ کلکسیونی وجود نداشت. حتی ژنریکها رو هم اضافه نکرده بودن. و با وجود اینکه #C و بقیهی زبانهای داتنت همگی static و imperative هستن، مکانیسمهای get, setter اضافه شده بود. که البته این کار تقلیدی از Python و رفقا بود. توی داتنت ۲ هم تغییرات زیادی اعمال نشد. ولی از داتنت ۳ به بعد دیگه شورشو درآوردن[!] اول کلمهی کلیدی dynamic رو به زبان اضافه کردن که البته برای ایجاد قابلیتهای داینامیکی و انواع دادهای Mutable اضافه شد. این یعنی آخر تقلید ... بعدشم که دیگه در نهایت پررویی زبان جدید #F معرفی شد. این زبان نسخهی جدیدی از OCamel بود که دههی ۵۰ به وجود اومده بود. نظریهی زبان #F با #C و بقیه فرق داره. #F یک زبان declarative ، functional و dynamic هست.
برای بررسی ضعف تئوریک زبان #C یک مقایسه انجام بدیم:
| multi paradigm | hardware independent | portable | dynamic/ static |
framework independent | cross platform | object oriented | Language - Feature |
| × | × | × | full static | × | × | √ | C# |
| √ | √ | √ | native dynamic with static support | √ | √ | √ | Python |
خوب یکی یکی این موارد رو بررسی کنیم:
object oriented design
سیشارپ و پایتون، هر دو شیءگرا هستن؛ اما پایتون از شیءگرایی پشتیبانی وسیعتری داره. مثلاً میشه از کلاسای استاتیک مشتق گرفت و پشتیبانی از وراثت چندگانه هم هست.
cross platform
سیشارپ در مورد پلاتفرمها یک فاجعه است. شما اگر با این زبان برنامهای بنویسید تنها میتونید توی سیستم عامل ویندوز اجراش کنید، اونم نه هر ویندوزی! فقط اون ویندوز که فریمورک مبدأ روش نصب باشه. حالا اینکه همهی نسخههای فریمورک روی همهی ویندوزا نصب نمیشن هم جای خود دارد...
اما پایتون در این مورد خیلی انعطافپذیرتره. فرقی نمیکنه با چه روشی و چه ابزاری بنویسید، کد شما روی همهی نسخههای ویندوز (98,XP,VISTA,Se7en) همهی نسخههای لینوکس (واقعاً همشون) ، مکینتاش ، سیستمعامل symbian و چندین پلاتفرم مختلف دیگه اجرا خواهد شد. برای این کار فقط کافیه از ابزار کامپایل مربوطه و کتابخانههای اون سیستم عامل استفاده کنید.
framework independent
یعنی یک زبان وابسته به چهارچوب خاصی نباشه. سیشارپ بدون داتنت معنی نداره و شما به هیچ وجه نمیتونید غیر از داتنت از چهارچوب دیگهای استفاده کنید. اما پایتون به شما این اجازه رو میده که از هر فریمورکی خوشتون میاد استفاده کنید. در واقع هستهی پایتون مستقل از فریمورک و هرجور پیشنیاز دیگهای طراحی شده. همین الان دهها فریمورک برای پایتون در حال توسعه است که اکثرشون cross-platform هستن. و شما میتونید هز هرکدومشون و یا ترکیبی از اونا استفاده کنید. هیچ مشکلی هم توی هماهنگی با سیستم عاملهای مختلف پیش نمییاد.
dynamic/static
سیشارپ کلاً استاتیکه و امکانات mutable که به تازگی اضافه شدن به شدت ناهنجار هستن و با بقیهی قسمتها ناسازگارن. اما با پایتون بسته به نیازتون میتونید استاتیک یا داینامیک بنویسید.
(ایستایی و پویایی یک زبان، طبقهبندی خاصی از نظریهی پشتیبان اون زبانه. بعداً در این مورد اینجا یه توضیح مینویسم)
portable
سیشارپ تنها روی PC قابل استفاده است (فقط ویندوزی با فریمورک همون نسخه)
اما با پایتون میتونید برای میکروچیپها، سیستمعاملهای موبایل، سختافزارهای مداربسته، روباتهای هوشمند (Smart-Kit-Development) و هر چیزی که به نظرتون برسه برنامه بنویسید.
hardware independent
سختافزار مورد استفاده برای پایتون معنی نداره. فرقی نمیکنه از کدوم تکنولوژی برای سازماندهی حافظ، پردازش دادهها و ... استفاده بشه. پایتون با همهچیز کار میکنه. مثلاً انواع دادهی عددی توی پایتون هیچ محدودیتی ندارن. یعنی هر چه قدر که سیستمتون بکشه، میتونید از اعداد بزرگ استفاده کنید. من با کامپیوتر نسبتاً ضعیف خودم، اعداد تقریباً 32000 رقمی رو پردازش کردم. خیلی بالاتر از اینا هم میتونه بره. اما دادههای سیشارپ....
multi paradigm
سیشارپ فقط شیءگراست. اما پایتون میتونه متودولوژی دلخواه شما رو پیاده کنه.
گذشته از اینا سینتاکس پایتون خیلی خلاصهتر و راحتتر از سیشارپه. پارازیت کد هم کمتره. مثلاً اینکه براکتها، یعنی { و }، وجود ندارن. و لازم نیست نگران درست باز و بسته شدن اونا باشیم. همچنین فهم کد پایتون، یادگیری و نگهداریش خیلی راحتتره.
نتیجهگیری اخلاقی: سیشارپ برای توسعهی نرمافزار و یادگیری برنامهنویسی یکی از بدترین انتخابهای ممکنه.
پیشنهاد: متأسفانه توی دانشگاه ما و خیلی از دانشگاههای دیگهی کشورمون سیشارپ و جاوا تدریس میشه. بیاین بیخیال اینا بشیم و خودمون پایتون کار کنیم. اگر موافق باشید کتابهای پایتون رو اینجا میذارم و یه سری آموزشهای ابتدایی برای پایتون اینجا مینویسم. نظرتون چیه؟