معرفی و مقایسه 20 زبان برنامه نویسی قسمت اول

1395/9/23 محمدصادق خوش نظر 1092

با سلام. محمد صادق خوش نظر هستم. با جنگ آشنایی با زبان های برنامه نویسی.

این رو به خودتون واگذار میکنم که این رو Jang بخونید، یا Jong  اما از نظر من تکنولوژی ها هیچ وقت با هم نمیجنگن. جنگ بیشتر حاصل کوتاهی ما آدم هاست.

اولین زبانی که باهاش آشنا میشیم، شاید معمولا به عنوان زبان برنامه نویسی مطرح نشه. اما هم میشه گفت یه زبان برنامه نویسی declarative هست. هم دیگه به لطف فریم ورک های مختلف، میشه باهاش برنامه های کاربردی برای سیستم عامل های مختلف نوشت.
اگر چند سال پیش بود، شاید نمیتونستم اینا رو بگم. اما میتونستم بگم این زبان معمولا برای خیلی ها زمینه ای هست که برنامه نویسی رو شروع کنن.

 

HTML5


شاید همون طور که اکثر شاگردا دیسک های فلاپی یا برنامه زرنگار رو یادشون نیست، به زودی وقتی برسه که کسی دوران سرد و تاریک html4 و xhtml1.1 یادش نیاد.
قبلا طراحی یک صفحه وب که توی تمام مرورگرها به یک شکل نمایش داده بشه یه مصیبت بزرگ بود. به خصوص اینترنت اکسپلورر کابوس طراحان وب بود. از طرفی هم هیچ کس html رو جدی نمیگرفت چون خیلی از نظر برنامه نویس ها استاندارد نبود.
برای استاندارد سازی html یک عده xhtml رو طراحی کردن که طراح وب رو مجبور میکنه قواعد xml که یک زبان قاعده مند هست رو رعایت کنه. اینطوری تفسیر کردن کدهای html با مشکلات کمتری روبرو بود. اما این مشکلات جدیدی رو به وجود آورد چون خیلی ها xhtml رو درست استفاده نمیکردن و فقط امید دروغی به برنامه نویس ها میدادن.
نهایتا html5 برای نجات همه وارد شد. یک استاندارد برای حکومت بر دنیای وب. البته انقدر این استاندارد جذابه که راهع خودش رو به دنیای موبایل و دسکتاپ هم باز کرده و تقریبا با html5 هر کاری (نه دیگه هر کاری) میتونید بکنید.
یکی از مهمترین خصوصیات html5 و تکنولوژی های همراهش اینه که وظیفه هر کدوم به خوبی مشخصه. مثلا وظیفه خود html5 معنادار (semantic) کردن محتوا و مشخص کردن ساختار صفحه ست. به همین خاطر خیلی از تگ ها و خصوصیت هایی که مربوط به تغییر رنگ و لعاب صفحه بوده از این نسخه حذف شده.
پس اگر html5 مینویسید همیشه این نکته رو به یاد داشته باشید. موقع نوشتن کد html باید تمرکزتون مشخص کردن ساختار و معنادار کردن محتوا به بهترین و تمیزترین شکل ممکن باشه.

CSS3


اوضاع css هم به هیچ وجه بهتر از html نبود. انقدر که آدم احساس میکرد داره مرورگرها رو هک میکنه تا بتونه یه صفحه ساده رو توی همه شون به یه شکل نمایش بده. مرورگرها هر کدوم به یه شکل از css پشتیبانی میکردن و تقریبا برای هر مرورگر باید یه کد مجزا مینوشتیم.
همینطور خیلی از آرزوهای طراحان وب با css2 برآورده نمیشد. مثلا خبری از انیمیشن یا سایه یا طراحی رسپانسیو نبود.
خیلی از کارایی که الان به راحتی با css3 انجام میشه قبلا باید با مقدار زیادی کد javascript انجام میشد که همون طور که حدس میزنید اونم مصیبتای خودش رو داشت.

اگر css مینویسید توصیه خاصی ندارم. فقط یادتون باشه که امکانات css3 تنها در اختیار شما نیست. هر کسی بدون ذره ای خلاقیت میتونه انبوهی از انیمیشن و افکت به صفحه ش بده و حتی رسپانسیو کردن صفحه هم اصلا کار سختی نیست. این امکانات جای خلاقیت و طراحی حرفه ای رو نمیگیره. یا طراح حرفه ای استخدام کنید یا یه طراح حرفه ای بشید.

پینوشت: استفاده از پالت رنگ متریال و فونت یکان طراحی حرفه ای نیست

LESS و SASS


یکی از مشکلات css نویس ها همیشه این بوده که چیزی به اسم متغیر یا با یه نگاه بازتر چیزی به اسم code reusability و راهی برای پیروی از اصل DRY ندارن.
LESS و Sass برای حل این مشکل طراحی شدن. میپرسید مثلا چه کمکی میکنن؟ مثلا شما توی سایتتون از سه رنگ اصلی بنفش، خاکستری و نارنجی استفاده میکنید. خیلی جاها هم طبیعتا میخواید این سه رنگ کمی روشن تر یا کمی تیره تر بشن. نهایتا از چیزی حدود 20 رنگ استفاده کردید.
حالا فرض کنید کارفرما بگه این سه رنگ رو به ترتیب به رنگ های خاکستری، سیاه و بنفش تغییر بدید. این کار به صورت دستی یعنی هزاران خط کد رو بخونید و توی هر مورد از 20 رنگ، رنگ جدیدی قرار بدید و اگر خیال کردید با search و replace ممکنه در اشتباهید چون رنگ های خاکستری و بنفش تکراری هستن و جاشون عوض شده و این یعنی وقتی یکی از رنگ های اولی رو تغییر بدید دو ست رنگ مشابه دارید که معلوم نیست کدوم جدیده کدوم قدیمی. پس don't even think about it
اما چشم شما خیلی راحت میفهمه که همه چیز به سه رنگ برمیگرده، پس نباید زندگی انقدر سخت باشه، درسته؟ درسته. Sass و Less به شما اجازه میدن سه تا متغیر تعریف کنید و توی تمام سایت فقط به اون متغیر ها اشاره کنید. کارفرما هم که گفت رنگا رو عوض کن فقط سه خط کد رو عوض میکنید و تمام. حتی روشن و تاریک کردن رنگا هم متغیرهای جدید نمیخواد، طبق همون سه متغیر و با کمک توابع داخلی سس و لس میتونید تغییرات زیادی روی رنگا بدید.
تازه این فقط بخش بسیار کوچکی از قدرت Sass و Less هست.
اما چطوری کار میکنن؟ فایل Sass و Less رو جای css میذارید؟ نه. شما اول به این زبونا استایل هاتون رو مینویسید و وقتی کارتون تموم شد با یه مبدل اونا رو به css های نهایی تبدیل میکنید. اگر نیاز به تغییر داشتید، Less یا Sass رو تغییر میدید و دوباره کامپایل میکنید. به همین خاطر به اینا میگن preprocessor.
اگر توی طراحی وب جدی هستید و قراره پروژه های جدی و بزرگ انجام بدید توصیه میکنم حتما با Sass و Less کار کنید.

JavaScript


جاوااسکریت یه زمانی برای این بود که وقتی یه نفر میاد توی وبلاگت یه پیغام بدی بگی "به وبلاگ من خوش آمدید" و وقتی میخواد صفحه رو ببنده (اون وقتا تب هم نبود که تب رو ببنده!) یه پیام بدی که "تو رو خدا بازم بیا"  حداقل استفاده عمده ش توی ایران این بود.
توی سایت های خارجی هم خبر زیادی از جاوا اسکریپت نبود. حتی تایید اعتبار فرم ها اکثرا طرف سرور و با php و asp انجام میشد. کمی قبل از ورود jquery و با معرفی شدن تکنیک ajax بود که جاوا اسکریپت جدی تر گرفته شد و به خاطر ساپورت متفاوت مرورگرها کتابخونه های زیادی به وجود اومد که درباره شون توی قسمتای بعدی توضیح میدم.
و به طور خاص یه مساله باعث شد جاوا اسکریپت بدجوری جدی گرفته بشه و اونم رقابتی بود که سر سرعت اجرای جاوا اسکریپت توی مرورگر ها شکل گرفت و حاصلش موتور v8 گوگل بود که توی کروم و خیلی جاهای دیگه استفاده میشه. تا قبل از این سرعت جاوا اسکریپت فقط برای کارای بسیار ابتدایی و محدود قابل اعتماد بود.
یکی دیگه از چیزایی که سرنوشت جاوا اسکریپت رو عوض کرد nodejs بود. موتوری که از v8 گوگل استفاده میکنه و جاوا اسکریپت رو خارج از بروزر اجرا میکنه و بهش قابلیت هایی مثل دسترسی به فایلها رو اضافه میکنه.
این یعنی دیگه میتونید از جاوا اسکریپت به جای php و asp و ruby و پایتون، برای نوشتن برنامه های سمت سرور استفاده کنید. یا به جای cpp و سی شارپ و جاوا، برای نوشتن برنامه های کراس پلت فرم ازش استفاده کنید.
بعضی از برنامه هایی که توی همین جنگ باهاشون آشنا میشیم با جاوا اسکریپت (با زبان هایی که به جاوا اسکریپت کامپایل میشن و باز با اونا هم آشنا میشیم)  نوشته شدن.

اگر از جاوااسکریپت استفاده میکنید نکات زیر رو بدونید:
- جاوا اسکریپت هیچ ربطی به جاوا نداره غیر از اسمی که به اشتباه روش گذاشته شده، نه مالکشون یکیه، نه سینتکسشون یکیه، نه سمنتیک و ساختارشون یکیه، انقدر بی شباهتن که معنایی نداره فرقاشون رو لیست کنم
- هرچند جاوا اسکریپت هنوز مهربونه و میشه باهاش alert داد، اما دیگه واسه خودش کسی شده و جا داره شما هم جدی بگیریدش و خوب با مفاهیم پیشرفته ش آشنا بشید
- جاوا اسکریپت یه زبان شیءگراست اما اگر با جاوا یا سی شارپ کار کردید، باید تعریف خیلی متفاوتی رو از شیءگرایی باهاش آشنا بشید

و نهایتا این رو بدونید که جاوا اسکریپت بسیار بسیار بد استفاده میشه معمولا و بسیار بدتر از اون درک شده، حتی خارج از ایران. پس به دنبال یه مرجع خوب برای آموزش باشید.

CoffeeScript


یکی از زبان هایی هست که به جاوا اسکریپت تبدیل میشه. یه چیزی شبیه نسبت سس و لس با css. اما مگه محدودیت جاوا اسکریپت چی بوده که نیاز داشته باشیم به یه زبان سطح بالاتر کد بنویسیم و بعد کامپایل کنیم تا بشه javascript؟
خب تا وقتی به توصیه قبلیم عمل نکرده باشید و سراغ برنامه نویسی پیشرفته با روش های مدرن جاوا اسکریپت نرفته باشید این رو درک نمیکنید و جاوا اسکریپت سنتی کاملا پاسخگوی شماست.
اما وقتی توی جاوا اسکریپت جدی تر میشید مثلا میبینید یه عالمه function داخل هم دارید و برای نوشتن شرط ها و حلقه ها کلی آکولاد و پرانتز و سمی کلن ریختید توی کدتون.
کافی اسکریپت برای این درست شده که کد شما رو پاکسازی کنه و با قرض گرفتن یه سری از شیرینی های سینتکس ruby و python کار کدنویسی شما رو راحت کنه.
البته بازم میگم، اگر قراره ده بیست خط جاوا اسکریپت بنویسید، به جاوا اسکریپت بنویسید سنگین تره و زحمت تون کمتره. اما برای نوشتن برنامه های پیچیده شاید (شاید) استفاده از کافی اسکریپت گزینه مناسبی باشه.
مشکلات دیگه ای هم توی جاوا اسکریپت هست مثل مدل متفاوت شیءگرایی و تایپ سیستم ضعیف که باعث شده استاندارد ECMAScript6 و TypeScript و زبان های دیگه تولید بشن که همگی به جاوا اسکریپت سنتی قابل تبدیل هستن. البته ECMAScript6 چون استاندارد هست در آینده توسط مرورگرها به طور مستقیم پشتیبانی میشه.

PHP


(خدا به خیر کنه )
خیلی خیلی وقت پیش، برنامه نویسی تحت وب گرفتاری های زیادی داشت. زبونایی مثل perl هم چندان سینتکس جذابی نداشتن. یه آقایی برای سایت شخصی خودش php رو طراحی کرد. به همین دلیل این زبان شبیه perl بود اما ساده تر، محدودتر و بی قاعده تر.
از اونجایی که این زبون ساده بود و مخصوص ساخت وبسایت بود و رایگان بود، خیلی زود مشتری های خودش رو پیدا کرد و چندین بار بازنویسی شد تا مشکلاتش برطرف بشه. کم کم شیءگرایی هم به این زبون اضافه شد و توی نسخه آخرش بهینه سازی های خیلی جدی توی سرعت اجراش صورت گرفته.
همون قدر که بین مایکروسافت و اپل، ویندوز و لینوکس، فیفا و پس، پپسی و کوکا و استقلال و پرسپولیس دعوا وجود داره، بین php و asp هم دعوا وجود داشته همیشه. هرچند زبان های دیگه ای مثل ruby و python و جاوا و اخیرا nodejs هم برای برنامه های تحت وب به کار میره، اما این دعوا ظاهرا جذاب تره.
اگر فکر کردید من درباره این دعوا نظری میدم اشتباه میکنید :)) من پیش مخالفای php از php دفاع میکنم و پیش مخالفای asp از asp. چون اصولا دنیا رو سیاه و سفید دیدن درست نیست و هر چیزی نکات مثبت و منفی داره که باید اونا رو در کنار هم دید. و به طور خاص این مقایسه به چندین دلیل غلطه، اولیش اینه که php یه زبانه اما asp یه چارچوبه. پس مقایسه سیب و پرتقاله.
به هر حال یاد گرفتن php خالی از لطف نیست، خیلی هم کاربردیه. اما بدونید که php چندان زبان منظمی نیست، هرچند شاید در آینده تغییرات اساسی بکنه.

Python


پایتون با این هدف ساخته شد که یه زبان اسکریپت نویسی باشه که برای برنامه نویس ها C و Unix و هکرها جذاب باشه. زبان اسکریپت نویسی معمولا سطح بالاتره و علاوه بر این که کدنویسی راحت تری داره، اجرا کردنش هم راحت تره.
پایتون نه تنها برای هکرها و برنامه نویس های C و Unix جذاب شد، بلکه به یکی از مهمترین و تاثیرگذارترین زبان های برنامه نویسی هم تبدیل شد. یکی از دلایل مهمش به نظر من اینه که ساختار حساب شده و فلسفه روشنی پشتش هست.
شاید براتون جالب باشه که پایتون یه اساسنامه رسمی داره به اسم "ذن پایتون" که اگر رعایتش نکنید یه مار پایتون میفرستن شما رو بخوره. این متن اساسنامه به فارسیه که چون جایی پیدا نکردم خودم ترجمه کردم:

«ذن پایتون»
زیبا بهتر از زشت است.
تصریح بهتر از اشاره ضمنی است.
ساده بهتر از سخت است.
سخت بهتر از پیچیده است.
تخت بهتر از تو در تو است.
پراکنده بهتر از متراکم است.
خوانا بودن مهم است.
هیچ «مورد خاص»ی آنقدر خاص نیست که به خاطر آن قانون را بشکنیم.
اگرچه کاربردی بودن مهمتر از ناب بودن است.
خطاها هرگز نباید بدون اعلان رد شوند.
مگر آن که صریحا دستور به سکوت آن ها داده باشیم.
در مورد ابهام، وسوسه نشو که حدس بزنی.
همیشه باید یک -و ترجیحا فقط یک- راه واضح برای انجام یک کار وجود داشته باشد.
هرچند شاید آن راه در نگاه اول واضح نباشد، مگر این که شما هلندی باشید.
حالا رسیدن بهتر از هرگز نرسیدن است.
هرچند هرگز نرسیدن معمولا بهتر از «دقیقا همین الان» رسیدن است.
اگر توضیح دادن روش پیاده سازی تان سخت است، ایده بدی دارید.
اگر توضیح دادن روش پیاده سازی تان آسان است، شاید ایده خوبی داشته باشید.
نیم اسپیس ها خیلی معرکه هستند، لطفا بازم از اینا!

این چیزا باعث شده پایتون فقط یه زبان برنامه نویسی نباشه و یه فرهنگ بشه. و این فرهنگ روی جریان های بزرگ و معروفی اثرگذار بوده. نسخه جدید جاوا اسکریپت، گو، گرووی، روبی، کافی اسکریپت و زبان جدید اپل به اسم سویفت، که یا باهاشون آشنا شدید یا تو همین جنگ آشنا میشیم، همه از پایتون متاثر شدن.
پایتون برای نوشتن برنامه های علمی و محاسباتی و Big Data، برای نوشتن برنامه های تحت وب، برای نوشتن اسکریپت های ساده روزمره و برای خیلی کارهای دیگه استفاده میشه.
اگر خودتون رو برنامه نویس حساب میکنید یا علاقه دارید برنامه نویس بشید جدا توصیه میکنم پایتون رو جدی بگیرید. پشیمون نمیشید.

Ruby


از روبی و پایتون خیلی وقتا کنار هم اسم برده میشه و از شباهتاشون گفته میشه. تقریبا کارهای مشابهی هم با هر دو انجام میشه و قابلیت های مشابهی هم دارن. اما جالبه بدونید که بین طرفداران جدی و پروپاقرص این دو گروه هم همون دعوای استقلال و پرسپولیسی وجود داره. منتها شاید چون به اندازه php و asp توی ایران استفاده نمیشن خیلی برای ما روشن نباشه. البته من وارد این دعوا هم نمیشم و از هر دو زبون کنار هم استفاده میکنم بسته به نیازم.
روبی made in japan هست که میتونه برای خانومای خونه دار مزیت خیلی بزرگی باشه. روبی تاکید و ادعای خیلی زیادی روی شیءگرایی داره و اگر مثل پایتون براش یه فلسفه قائل بشیم، احتمالا انعطاف توش خیلی بیشتر دیده میشه تا قانون مندی. توی روبی شما دستتون خیلی بازه و حتی میتونید کلاس های پایه مثل اعداد و string ها رو کاملا تغییر بدید! این همه قدرت البته سختی های خودش رو هم داره. و به نظر من خیلی ها به زبان روبی مینویسن اما از این انعطاف استفاده ای نمیکنن و در واقع به روش پایتونی از روبی استفاده میکنن.
زبان روبی معمولا چند سر و گردن پایین تر از پایتون قرار میگیره توی لیست ها و اگر فریم ورک «روبی آن ریلز» نبود شاید از این هم پایین تر میرفت. اما از نظر من روبی یه زبان بسیار جذابه و کار باهاش خیلی لذت بخشه.
این حرفا باعث نشه روبی رو جدی نگیرید. چون من خودم به لیست ها اعتقادی ندارم، و اتفاقا وقتی کاربردی نگاه میکنیم روبی خیلی وقتا ترجیح داده میشه به پایتون. یاد گرفتن روبی رو هم بهتون توصیه میکنم. خالی از لطف نیست.

Java


جاوا یه مقداری پیر شده. اما از اون پیرا که باید گفت دود از کنده بلند میشه. خیلیا سر جاوا غر میزنن که پیچیده ست یا کدهای جاوا طولانیه و یه عالمه کد اضافه باید نوشت برای یه کار ساده. اما نمیشه انکار کرد که ساختار جاوا بسیار حساب شده است و همین باعث شده تقریبا روی تمام سیستم عامل ها بشه کدهای جاوا رو اجرا کرد و تقریبا همه جور برنامه ای رو بشه باهاش نوشت.
حالا این خصوصیت مهم جاوا چی بوده؟ ببینید ما یه سری زبان مثل c و cpp داریم که بعد از این که کد رو نوشتید کامپایل میشن به زبان ماشین و مستقیم با CPU حرف میزنن و بعد از کامپایل کاملا مستقل هستن اما فقط برای یه محیط و یه سیستم عامل خاص، مثلا فقط ویندوز. یه سری زبان داریم مثل javascript و python که مستقل نیستن و باید توی یه محیط مثل مرورگر یا مفسر پایتون اجرا بشن. به اینا میگیم زبونای اسکریپت نویسی. جاوا اومد یه راه دیگه رفت. شما وقتی جاوا مینویسید کامپایل میشه اما نه به زبان یه CPU خاص. بلکه به زبان خاصی به اسم byte code که طراحای جاوا طراحیش کردن. بعد اومدن یه موتور به اسم jvm (ماشین مجازی جاوا) برای هر سیستم عامل به صورت مجزا نوشتن که همون کد شما رو هر جا بخواید اجرا میکنه.
در واقع به جای این که برنامه نویس زحمت بکشه و برای چند سیستم عامل بنویسه میگن تو یه بار بنویس ما زمینه اجراش رو همه جا فراهم میکنیم. قانع کننده ست نه؟
البته با این حال دنیای زبان های برنامه نویسی همیشه جای رقابته. همیشه حواستون به این نکته باشه. و زبان ها بر اساس مزیت های رقابتی مختلف از هم پیشی میگیرن. مثلا یکی از دلایل مهم تداوم حیات جاوا، اینه که زبان پیش فرض برنامه نویسی برای اندرویده و اندروید فراگیر ترین سیستم عامل دنیاست.
برنامه نویسی برای jvm (بعدا توضیح میدم چرا مثل آدم نگفتم برنامه نویسی با جاوا) گزینه بسیار خوبیه. آشنایی با این فضا رو هم به کسایی که به ساختن برنامه های کاربردی برای محیط های متفاوت علاقه دارن توصیه میکنم.
جاوا رو تو ذهنتون داشته باشید چون توی معرفی چند زبان دیگه هم باهاش کار داریم. انقدر مهمه.

Visual Basic


شنیدید میگن هر کی از مامانش قهر میکنه خواننده (یا رپر یا گرافیست یا طراح وب یا متخصص UX یا خدای SEO یا پروردگار ...) میشه؟ (اینم مثل قضیه استقلال و پرسپولیس یه الگوی تکرار شونده است انگار که ریشه در ویژگی های اساسی ما آدم ها داره)  خب vb یکی از دلایلی بود که باعث شد هر کی از مامانش قهر میکنه برنامه نویس بشه. چون قهر کردن از مامان دلیلی خوبی برای برنامه نویسی با C نبود مثلا. چون خیلی سخت بود.
باورش برای خود من سخت بود اما خیلی ها هنوز با vb6 کار میکنن. خارج از ایرانو میگما! شاید اگر بگم «فلسفه» مخالفای vb منو بزنن، اما «ایده» ی vb این بوده که برنامه نویسی رو بسیار راحت کنیم. و راستش از این جهت موفق هم بوده. هرچند برنامه نویسایی که خیلی به حرفه ای بودن خودشون مینازن (که اشکالی هم نداره) از غیرحرفه ای بودن vb بدشون میاد.
به هر حال بعد از معرفی .NET خیلی از انتقادهایی که به vb میشد برطرف شد و آبروی جدیدی پیدا کرد. تا مدتی هم زبان اصلی محیط دات نت بود که الان جای خودش رو به سی شارپ داده. اما این به نظرم اتفاق خوبیه. چون vb داره کم کم فلسفه پیدا میکنه و توسعه ش به سمتی میره که تاکیدش کاملا روی برنامه نویسی سریع (RAD) باشه.
آینده وی بی برای من خیلی روشن نیست اما اگر به محیط دات نت (که آینده ش به نظرم خیلی روشنه) علاقه دارید، خوبه حداقل با vb آشنا باشید. چون زبان های دات نت همگی میتونن با هم تعامل داشته باشن و بعید نیست که توی کارای تیمی با کسی همکاری کنید که فقط vb کار کرده.

.NET


دات نت و جاوا خیلی با هم مقایسه میشن و علتش هم اینه که ساختارشون با هم شباهت زیادی داره. کدهای دات نت هم به یه زبان میانی به اسم IL کامپایل میشن و بعد روی موتور .NetCore اجرا میشن. مثل اتفاقی که با bytecode و jvm میافته.
اما تفاوت هایی هم هست، یا بوده و هرچند برطرف شده آثارش مونده.
یک تفاوت مهم اینه که پلت فرم دات نت با چند زبان معرفی شد و اصلا به عنوان ایده خودش مطرح کرد که ما میخوایم شما با هر زبانی حال میکنید کد بنویسید و زبان مهم نباشه. اما این ایده اولیه جاوا نبود. هرچند به خاطر ساختار مشابهشون این امکان توی جاوا هم هست (آها، برای همین گفتم jvm و نگفتم جاوا). و اتفاقا این امکان به وقوع هم پیوسته. ما زبان های زیادی داریم که به bytecode جاوا تبدیل میشن و روی jvm اجرا میشن. فعلا برای این که بگید wow فقط به jruby و jython اشاره میکنم. بله. شما میتونید با سینتکس روبی و پایتون برای jvm برنامه بنویسید. اما بازم از همون جا که این ایده اولیه جاوا نبوده، دات نت کمی جلوتر از جاوا بوده. هرچند آینده رو باید واستیم و تماشا کنیم.
یک تفاوت مهم دیگه اینه که پشت دات نت شرکت عظیمی مثل مایکروسافت هست که قابل مقایسه با اوراکل نیست. همین باعث شد دات نت نه تنها بتونه با جاوا رقابت کنه، از بعضی جهات میشه گفت از جاوا هم جلو زده. یعنی اگر جاشون عوض میشد و اول دات نت وارد بازار شده بود شاید خیلی معادلات متفاوت بود. البته از اون طرف همین نکته باعث شد دات نت تا حدی هم خودش رو محدود کنه. به چی؟ به محصول دیگه مایکروسافت: ویندوز.
این که دات نت به ویندوز محدود بوده و جاوا همه جا حضور داشته تا الان تاثیر زیادی توی سرنوشت این دو پلت فرم داشته. پروژه مانو (mono) سعی کرد دات نت رو به لینوکس و مک ببره و خیلی هم موفق بود اما چون حرکت رسمی نبود، معادلات بازی رو چندان تغییر نداد.
اما اخیرا یه اتفاق بزرگ افتاد. مایکروسافت طی یه حرکت انتهاری، دات نت رو اوپن سورس کرد. OMG! بله الان دیگه دات نت و زبان های اصلیش (سی شارپ، وی بی، اف شارپ) و بخش های مختلفش (ASP.NET و Entity FW و .NET Core) همگی اوپن سورس هستن. هرچند این اتفاق هم با فاصله و پشت سر جاوا افتاده، اما قطعا ترازو رو به نفع مایکروسافت سنگین تر میکنه.
من فعلا ترجیح کاملی بین .NET و جاوا نمیبینم و آشنایی با هر دو رو توصیه میکنم. با هردوشون تقریبا هر نوع برنامه کاربردی میشه نوشت هرچند یه نوع برنامه توی یکی راحت تر یا مرسوم تر باشه. مطمئنا بسته به نیازتون به سمت یکیشون کشیده میشید. مثلا جاوا برای نوشتن اپ موبایل و دات نت برای ساخت برنامه های وب.

ASP.NET


اول برای اونایی که دوره ASP.NET رو نبودن یه چیز رو روشن کنم. ASP.NET یک زبان برنامه نویسی نیست. آخیش. راحت شدم.
همون طور که گفتم ASP.NET یک زبان برنامه نویسی نیست. زبان های برنامه نویسی مثل c، php، python و جاوا، همگی دارای یه سینتکس خاص، یه تایپ سیستم خاص، سمنتیک خاص و کتابخونه استاندارد خودشون هستند. ASP.NET هیچ کدوم از این ویژگی ها رو نداره. البته این به معنای ضعف ASP.NET نیست، به معنای انعطاف ASP.NET هست.
در واقع ASP.NET یک تکنولوژی و یک چارچوب برای توسعه انواع نرم افزار تحت وب هست که با زبان های برنامه نویسی زیادی میشه براش کد نوشت و به کتابخونه عظیم .NET دسترسی داره که دست شما رو برای نوشتن برنامه های بسیار قوی توی اینترنت باز میکنه. یعنی تقریبا هر کاری که توی برنامه های ویندوزی با سی شارپ انجام میدید به همون راحتی توی ASP.NET قابل اجراست.
شما برای نوشتن ASP.NET (یا هر برنامه ای توی فریم ورک .NET) به زبان خاصی محدود نیستید. هرچند سی شارپ و VB بیشتر استفاده میشن اما تقریبا هر زبونی که اسمش رو شنیدید و خیلی از زبون هایی که اسمشون رو هم نشنیدید (بیشتر از 30 زبا ن) میتونن برای نوشتن برنامه های .NET به کار برن.
در مورد ASP کلاسیک هم که قبل از ASP.NET استفاده میشد همین طور بود. شما میتونستید با VBScript یا JavaScript براش کد بنویسید و به اشیاء خاص سمت سرور هم دسترسی داشته باشید.
این انعطاف ASP.NET باعث شده با تغییرات سریع دنیای وب همراه بشه و تغییرات ساختاری زیادی داشته باشه. از سال 2013 پروژه ASP.NET اوپن سورس شده و نسخه آینده ASP.NET یه فریم ورک مدرن ماژولار کراس پلت فرم خواهد بود که با نسخه های اولیه ASP.NET خیلی متفاوته.
البته یکی از مشکلات ASP.NET خارج از ایران بحث هزینه ها و کپی رایت هست که هیچ کدوم اینا توی ایران مشکل جدی نیست. توی خیلی از بحث ها هم به این استناد میشه که ASP.NET کمتر از بعضی زبان های دیگه استفاده میشه. اما توجه نمیشه که علتش چیه و به همین خاطر مقایسه کامل و درستی صورت نمیگیره. به عنوان مثال اگر ASP.NET رو با JSP که شرایط مشابهی داره مقایسه کنید میبنید خیلی خیلی بیشتر استفاده میشه.
در هر صورت همون طور که ضمن صحبت از php هم گفتم، خوبه با همه تکنولوژی ها آشنا باشید و بدونید هر ابزاری برای حل چه مشکلاتی مناسب تره.

C#


بازم دوست دارم اول براتون یه نکته رو روشن کنم. اسم این علامت # شارپ نیست اسم این علامت توی آمریکا پوند و خارج از آمریکا هش هست و اسم استاندارد ترش Number Sign هست که یعنی «علامت شماره». چون مثلا به جای این که بنویسن room number 4 مینویسن room #4 و همون room number 4  میخونن که یعنی اتاق شماره چهار. پس شارپ چیه این وسط؟ اونایی که موسیقی کار میکنن میدونن برای این که یک نوت رو نیم پرده زیرتر کنیم از علامت دیز استفاده میکنیم که توی انگلیسی بهش میگن شارپ. پس سی شارپ یعنی همون دو دیز خودمون. نوت سی (دو) که نیم پرده زیرتر شده. این اسم گذاری هم اشاره به این داره که مایکروسافت سی شارپ رو یک اثر هنری میدونه. هم شاید بگید اون دو تا پلاس cpp داخل هم رفته یا شده چهار تا پلاس که دوتا دوتا روی هم قرار گرفتن و تفسیرای دیگه ای که از این اسم میکنن. اینم یادتون باشه که علامت شارپ و پوند دقیقا هم شکل نیستن، فقط چون روی کیبورد استاندارد علامت شارپ رو نداریم از پوند استفاده میکنیم. بیشتر نکته اخلاقیش اینه که وقتی جاهای دیگه میخواید به این علامت اشاره کنید نگید شارپ! مگر این که در مورد تکنولوژی های دیگه دات نت باشه مثل ای شارپ، جی شارپ، اف شارپ و جی تی کی شارپ. تمام.

سی شارپ زبان بسیار محبوبیه. ساده لوحانه ست که بگیم دلیلش اینه که سینتکس C-Style هنوز طرفدارای زیادی داره. چون جدا از این که محبوبیت این سینتکس (به خصوص توی حالت سخت گیرانه ش) خیلی کاهش پیدا کرده، سینتکس جدی ترین عامل انتخاب برای یه برنامه نویس حرفه ای نیست.
سی شارپ با یه ساپورت قوی از شیءگرایی و دسترسی به کتابخونه عظیم دات نت شروع کرد. اون موقع خیلی ها ابراز کردن که سی شارپ کپی برداری از جاواست. اما طراحان C# توصیه میکردن به جای توجه به ظاهر و پوسته به ساختار و روش کار زبان توجه بشه و ادعاشون این بود که سی شارپ بیشتر به cpp شبیهه از نظر ساختار.
اما سی شارپ اینجا متوقف نشد و علاوه برنوآوری های نسخه های بعد، تقریبا هر مفهومی که برای برنامه نویسا جذاب شد رو توی ساختار خودش هضم کرد. چون اینجا کلاس آموزش سی شارپ نیست وارد جزئیات نمیشم اما لامبداها، ساپورت عالی از برنامه نویسی چند رشته ای و LINQ از چیزاییه که سی شارپ کارها خیلی بهشون مینازن. توی جریان این پیشرفت گاهی جاوا بود که خصوصیات جدید سی شارپ رو کپی میکرد. (بازم همون استقلال و پرسپولیس خودمون)
زبان سی شارپ هم زبان بسیار قدرتمند و کاربردی هست که آشنایی باهاش رو حتما توصیه میکنم. زبان آینده داریه.

C++


سی پلاس پلاس یکی از اولین آفرینش های خداست که بقیه چیزا با اون ساخته شده. اما اعتقادات زیادی درباره ش وجود داره که چندان درست نیست.
خیلیا معتقدن cpp زبان سختیه. چون مدیریت حافظه باید به صورت دستی انجام بشه و سینتکسش کمی پیچیده تره. نمیگم نیست، اما به نظرم قدرت و سرعت cpp کاملا ارزشش رو داره.
خیلی ها هم فکر میکنن دیگه دوران cpp گذشته و نرم افزارهای کاربردی از این به بعد با .net و java و javascript نوشته میشه. با این کاملا مخالفم. درسته که قبل از معرفی این زبان ها، سهم cpp از بازار خیلی بزرگتر بوده، اما به این معنا نیست که قراره این سهم رفته رفته کمتر بشه تا به صفر برسه. و این دلایل زیادی داره.
زبان cpp همیشه کاملا روی assembly پیاده میشه. یعنی بر خلاف تصور بعضی ها با c نوشته نشده. بعد از کامپایل شدن به زبان ماشین تبدیل میشه و به خاطر همین دسترسی نزدیک به حافظه و پردازنده، تا جایی که ممکنه سریع اجرا میشه. البته بخش بزرگی از مسئولیت سرعت اجرا روی دوش برنامه نویس هست. به همین خاطر تسلط به مبانی برنامه نویسی برای برنامه نویسان cpp اجتناب ناپذیره. این یعنی پیاده سازی سیستم عامل، درایور ها، بازی ها و هر نرم افزاری که نیاز به سرعت بالا و دسترسی سطح پایین داشته باشه محتاج زبانی مثل cpp ه.
گفتم مثل cpp چون زبان های دیگه ای هم توی این یک خصوصیت با cpp مشترک هستن. مثل c. خیلی ها فکر میکنن با وجود cpp دیگه c نباید استفاده بشه. و شاید براتون خیلی تعجب داشته باشه این یکی، اما ماجرای استقلال و پرسپولیس بین c و cpp هم وجود داره. در واقع cpp منتقدان بزرگی داره که وارد توضیحاتش نمیشم.
اما خصوصیاتی توی cpp هست که توی بقیه زبون های سطح پایین نیست. مثلا بین زبان های استاندارد آینده دار (هم سطح پایین هم سطح بالا) cpp تنها زبانی هست که میشه باهاش به راحتی برای تمام پلت فرم ها برنامه native کامل کاربردی همراه با GUI نوشت. و از اونجایی که ساپورت پلت فرم های مختلف یکی از دغدغه های روز هست که هرروز هم جدی تر میشه، نه تنها cpp  فراموش نمیشه، جدی تر هم خواهد شد.