پیشنهاد میکنم به زبان انقلابی و بسیار قدرمند Rust توجه داشته باشید. این زبان که در StackOverflow بیشترین طرفدار رو داره، اشکالات فاجعه بار C++ و خیلی از زبان های مشابه رو با ترکیبی از الگوهای مدیریت حافظه مثل RAII یا همون Resource Acquisition Is Initialization و Memory Safty در زمان کمپایل و همچنین Strong Static Type و Type System ِ بسیار قابل اعتمادش، پوشش داده.
همه دادهها در این زبان به صورت پیشفرض غیر قابل تغییر یا Immutable هستند و قوانین محکمی برای دادههایی که کاربر به صورت قابل تغییر یا mutable تعریف میکنه. در نتیجه به شکل شگفت آوری از Race Condition و تغییر ناخواسته داده ها جلوگیری میکنه.
زبان Rust بسیار صعودپذیره و برای Concurrency ساخته شده و البته همه قدرت C رو هم در خودش داره.
نباید محبوبیت رو معادل برتری و مناسب بودن بدونیم. مثلا محبوبترین آدمها به اون دیدی که در مورد زبانهای برنامهنویسی نوشتید، تتلو و بهنوش بختیاری هستند. یا توی دنیا کتیپری و کندال هستند! اما برای بسیاری از ما مصاحبت با اونها نهتنها لطفی نداره بلکه خیلی هم زجر آور میتونه باشه.
این بحث محبوبیت در بعضی مواقع حتی به معنی بد بودن یک زبان هست! مثلا بسیاری اوقات این شاخص رو بر اساس تعداد سوالات توی استک میسنجن. خوب معلومه که این موضوع لزوما به معنی جامعه آماری بالا نیست بلکه به معنی افتضاح مستندات یا ساختار اون زبان هست.
نکته نهایی این که زبان برنامهنویسی رو کارکرد تعیین میکنه. یعنی باید ببینید میخواهید پروتوتایپ بزنید؟ میخواهید اسکریپت بنویسید؟ میخواهید برنامه با قابلیتهای خاص مثل همزمانی و … بنویسید؟ سطح شما بالا است و درک خوبی از توابع یا شیگرایی دارید؟ بازی میخواهید بنویسید؟ بهتره یک قلمرو تعریف کنید و بعد برید سمت این که حالا چه زبانی در اون قلمرو برای اون کاربرد مناسب شخص شماست.
من خودم بر خلاف بسیاری به بچههای ترم اول کامپیوتر پایتون میگم به جای جاوا و سی. در عوض ازشون درک برنامهنویسی بالا رو درخواست میکنم. حالا یک مفاهیمی هم ممکنه گفته نشه که در ترمهای بعد براشون میگم.
گاهی حتی ما یک زبان بسیار ناجور رو برای یک پروژه استفاده میکنیم به خاطر این که هر کسی نتونه توش دست ببره و حتما باید آدم ماهری باشه. یا اشتباهات آدمها کم بشه، همونجوری که کیبورد رو طراحی کردن. همونجوری که اپل اجازه نمیده هر گجتی به ابزارهاش وصل بشه.
این که از این پارادایم (و نه متد) استفاده کنیم یا نه، تاثیر مستقیم روی زبان مورد نظر داره! این که از پارادایمهای فانکشنال (مخصوصا بحثهایی چون ترامپولین و رکرژن واقعی) استفاده کنیم یا نه، دقیقا ما رو محدود میکنه. پارادایم در کنار بستر، در کنار مهارت همه و همه فضای انتخابهای شما رو محدودتر میکنه.
یک اصطلاحی داریم به نام نفخ نرمافزار. زمانی که یک جورایی یک نرمافزار بیش از اون حدی که باید منابع مصرف میکنه (یه چیزی توی مایههای اورکوالیفای شدن). مثل ویندوز ویستا. از نظر من زبانهایی چون جاوا، سی و از این دست برای پروتوتایپ ناجور هستند. زبانی که مستندات کافی نداره ناجوره، حالا بگو … زبانی که متنباز نباشه، لطف چندانی نداره. زبانی که جامعه کاری و بازار کافی نداشته باشه (با توجه به پروژه مورد نظر) ناجوره.
سیاست اپل به نحوی هست که ابزارها و گجتهای سایر شرکتها به ابزارهای اون نخوره. یعنی شما به سادگی نمیتونی هر کابلی رو به ابزارهای اپل نصب کنی، نمیتونی هر چیزی رو روش نصب کنی. جدای از از بازار، بحث کیفیت، امنیت و انحصار هم هست. یک زمانی شما دوست ندارید هر تازه به کیبورد رسیدهای بتونه بیاد روی کد تو نظر بده یا بفهمه پروژت رو تحت چه معماری یا سبکی زدی. دوست نداری یک برنامهنویس عادی توان توسعه سیستمت رو داشته باشه. تا استخون رو لای گوشت نگه داری. روشهایی هم هست که مثل کد رو آگلیفای، مینیفای یا … میکنی. اما همه اینها راحت قابل بازگشت هستند.
توی این لایهای که دارید صحبت میکنید به نظر من برای اون شخص انتخاب زبان مطرح نیست! چون به درجه بالایی از مهارت رسیده که بهتره سوالش برای انتخاب زبان رو در یک فضای تخصصیتر و حرفهایتر مطرح کنه، نه این که در یک جمع عمومی مطرح کنه سوالش رو.
یک مقایسه نامناسبی که به نظرم داره رخ میده، مقایسه یک systems programming language با سایر
application programming language هاست! راست یک زبان برای سیستمنویسی هست که به لحاظ ماهیتی نباید با یک زبان اپلیکیشن و نرمافزار نویسی مقایسه بشه! مثل اینه که تراکتور رو با بنز سواری مقایسه کنی. یا به زبان تخصصیتر، زبان اسمبلی رو با زبان آموزشی یکی بدونی. هر کدوم برای کاری ساخته شدن و نام آوردن این زبان بدون اشاره به این موضوع به نظرم کمی اجحاف در حق سایر زبانهاست.
به هر حال شما روی جنبههای سیستمیش تاکید داشتید و اون رو مبنای برتری دونستید. شرکتهایی که نام بردید برای نوشتن سیستم استفاده کرده بودند.
توی بحث چندنخی (multiThread) هم بحثهایی که اشاره کردید برای یک برنامهنویس حرفهای قابل حله و برای یک برنامهنویس معمولی نیازی به اونقدر عمق نیست. نمیدونم چند وقته با C++ یا حتی پایتون کد نزدید، ولی برای همه اون مسائل مخصوصا بحث mutable ها کلی روش خوب وجود داره.
با توجه به نوشتههای شما، من برداشت میکنم که پارادیم مورد علاقه شما فانکشناله (همه زبانهایی که اشاره کردید). کمی دارید اصرار میکنید که زبان فانکشنال از بقیه بهتره. از نظر من، بهتری وجود نداره (در این سطح)، هر چیزی کاربرد خودش رو داره. توی هر انتخابی میزان منابع مالی، انسانی، امنیت توسعه و زمانی رو باید لحاظ کنید و از نظر من راست، توی این موضوعات توی رده ۱۰ ام زبانهای عام هم قرار نمیگیره. اما به قطع میتونه در یک کشور با برنامهنویسهای زیاد و خوب و برای کارکردهای خاص، انتخاب اول باشه.
یکی هم هست که داره روی آموزش به زبان سادۀ راست کار میکنه، تا حالا هم کلی ویدئو از همین متنها ساخته که واقعاً برای شروع خوبه. من مقداریش رو خوندم و خیلی خوب و ساده توضیح میده.