چند روز پیش مطلبی در سایت قرار دادم با عنوان “رودمپ یادگیری رایگان Binary Exploitation از دید DayZeroSec (نسخه 2024)“، در این مطلب به یک مقاله اشاره شده بود با عنوان “You Can’t Dig Upwards” که در زمینه اهمیت یادگیری زبان برنامه نویسی C هستش. در این پست این مقاله رو که مربوط به سال 2014 و نوشته ی Evan Miller هستش رو ارائه دادیم تا مطلب رو تکمیل کنیم.
اگه در زمینه ی مهندسی معکوس فعالیت دارید، این مقاله میتونه کمک کننده باشه.
وقتی کمی بعد از 15 سالگی، رانندگی رو یاد گرفتم، مادرم اصرار داشت که با مزدا میاتای پدرم تمرین کنم: یک خودروی کانورتبل (کروکی) نقرهای، دو دره با سقف پارچهای.
میاتا ماشین سختی برای رانندگی بود. ماشین نه تنها گیربکس اتومات نداشت، بلکه با بالا بودن سقف، تقریبا دیدن پشت، غیر ممکن بود. آفتاب شیشه ی عقب پلاستیکی رو اونقدر قهوهای و کج کرده بود که سقف نرم، وقتی پایین بود، شبیه به دستگاه آماده برای درست کردن پانینی (یه نوع ساندویچ) به نظر میرسید.
میاتا بطور خاص خودرو ایمنی نبود و شرکت خودروسازی مزدا هم تلاش نکرد که خلاف این رو نشون بده. این یک ماشین مقرون به صرفه بود که رانندگی باهاش لذت بخش بود، نوعی BMW برای افراد کم درآمد. یادم میاد که میاتای پدرم اونقدر باریک و کوتاه بود که وقتی باهاش در بزرگراه سوار میشدم، فکر میکردم آیا ماشین اون میتونه بدون اینکه راننده کامیون متوجه بشه، زیر یک کامیون باری کناری جا بشه یا نه.
خانواده ما همچنین یک مینی ون و یک شاسی بلند داشت که فکر میکنید یک والد نگران، ترجیح میده پسر نوجوانش با اون ماشینها که بزرگتر، ایمن تر و دارای شیشه عقب شفاف بودن، رانندگی رو یاد بگیره. اما مادرم این عقیده رو نداشت.
مادرم با اطمینان مثله یک نوستراداموس مدرن به من توضیح داد: «یک روز در یک مهمونی خواهی بود. اونجا ماشینی خواهد بود که هیچکس نمیتونه باهاش رانندگی کنه چون گیربکس اتومات نیست. شما باید بتونی اون ماشین رو برونی و باید الان یادش بگیری، وگرنه هرگز ماشین دنده ای رو یاد نمیگیری.»
مهمونی که مادرم پیش بینی کرده بود، هرگز اتفاق نیافتاد اما گذر زمان پیش بینی دومش رو ثابت کرد. وقتی رانندگی با میاتای پدرم رو یاد گرفتم، مجبور شدم گیربکس دنده ای رو یاد بگیرم.
برای کسانی که آشنا به تعویض دنده نیستن، یادگیری گیربکس دنده ای یک کار پر از اضطراب و طاقت فرساست. شما باید نگران خراب کردن گیربکس، خاموش شدن ماشین و عقب رفتن روی تپه باشید. اگه حرکت اشتباه انجام بدید، ماشین صدا میده و تکون میخوره.
من یادم میاد که در پارکینگ نشسته بودم و سعی میکردم برای سی امین بار اون ماشین لعنتی رو در دنده یک قرار بدم و اشک هام رو نگه داشته بودم. همچنین یادم میاد که یکبار وقتی یک مرسدس بنز قرمز پشت سرم در یک تپه شیبدار بالا می اومد، احساس وحشت کامل میکردم.
یادگیری گیربکس دنده ای فرآیند لذتبخشی نیست و تقریبا مطمئن هستم که اگه مادرم اصرار نمیکرد، این کار رو انجام نمیدادم. اما با تمرین کافی، در نهایت تونستم میاتای پدرم رو با سرعت مشخص در جاده حرکت بدم، بدون اینکه صندلی جلو رو با عرق و اشک هام خیس کنم.
در سالهای بعد از یادگیری رانندگی، الگوی جالبی رو مشاهده کردم. متوجه شدم تعداد کمی از ما که با افتخار راننده گیربکس دنده ای هستیم، تمایل داریم راننده های بسیار بهتری نسبت به کسانی باشیم که به گیربکس اتوماتیک تکیه میکنن. ما کنترل بیشتری روی ماشینهامون داریم و مدل ذهنی بهتری از نحوه کارکرد موتور خودرو داریم. حتی اگه ما هرگز داخل جعبه دنده رو ندیده باشیم، میدونیم که دنده اضافه در ماشینهای گیربکس اتوماتیک به چه معناست و چگونه میتونیم از اون برای صرفهجویی در بنزین استفاده کنیم. ما میدونیم که اون برچسبهای مرموز ۱ و ۲ چی رو نشون میده و چرا هنگام پایین اومدن از تپه از اونا استفاده میکنیم. در هر لحظه، احتمالا درک بهتری نسبت به اینکه ماشین چه کاری انجام میده داریم.
با نگاه به گذشته، یادگیری گیربکس دنده ای یک سرمایهگذاری زمانی محتاطانه بود، حتی اگه من هرگز مجبور نشده باشم اون رو، مثلا با رانندگی یک آمبولانس با گیربکس دنده ای پر از بچه، در حالیکه از آتش سنگین جلوگیری میکنم، به جامعه ثابت کنم. رانندگی با گیربکس دنده ای یک مهارت خوب هستش. به نظر من افراد بیشتری باید این مهارت رو داشته باشن.
خواننده تیزبین تاکنون حدس زده که من همه اینا رو برای اثبات صلاحیت خودم به عنوان راننده خودروهای کانورتبل ارزان قیمت یا برای جلوگیری از هحوم اجتنابناپذیر گیربکس اتوماتیک در صنعت خودرو به شما نمیگم. من این موضوع رو مطرح میکنم چون شباهتهای مهمی بین حرکت به سمت گیربکس اتوماتیک در خودروها و ظهور پایتون در دنیای کامپیوتر میبینم.
پایتون راحته و از بسیاری جهات، پیشرفت بزرگی نسبت به زبان برنامهنویسی C هستش. با این حال، درست همونطور که آموزش رانندگی با گیربکس اتوماتیک به نوجوانان، تضمین کننده اینه که اونا، هرگز گیربکس دنده ای رو یاد نمیگیرن، توصیه به مبتدیان برای یادگیری پایتون، در حال ایجاد برنامهنویسانی هستش که هرگز زحمت یادگیری کدنویسی به زبان C رو نخواهند کشید و من معتقدم این یک چیز بدی هستش.
من با این نظر در اقلیت هستم، که همین دلیل بیشتر باعث میشه که احساس کنم مجبورم نظرات خودم رو اینجا به اشتراک بذارم. پایتون اخیرا، جاوا رو به عنوان محبوبترین زبان یادگیری مقدماتی در دانشگاهها پشت سر گذاشت. Eric Raymond، نگهبان فایل Jargon ، و نویسنده «چگونه هکر شویم»، پایتون رو به عنوان اولین زبان توصیه میکنه. Peter Norvig، متخصص کامپیوتر و هوش مصنوعی، در مقاله معروف خودش «خودآموز برنامهنویسی در ده سال» نیز همین توصیه رو داره. Paul Graham حتی پارادوکس خاص خودش رو به پایتون داده.
این روزا، اگه تبلیغی در راستای آموزش برنامهنویسی در X هفته دیدید، تقریباً مطمئناً تبلیغ کننده قول میده که پایتون رو به شما آموزش بده.
با وجود جذابیت ظاهری پایتون یعنی سینتکس ساده، تعاملی بودن، پشتیبانی کتابخونهای قوی، جامعه بزرگ کاربران، و مستندات عالی، استفاده از پایتون به عنوان اولین زبان برنامهنویسی یک مشکل جدی داره. برنامه نویسانی که تنها پایتون میدونن، مدل ذهنی مناسبی از نحوه کار کامپیوترها ندارن. اونا تمایل دارن به زبان C به عنوان یک مهارت عجیب و غریب نگاه کنن که باید با ترکیبی از احترام و تحقیر در نظر بگیریمش. احترام به این دلیل که به اونا گفته میشه C سخت هستش، و تحقیر به این دلیل که به اونا گفته میشه سختیهای تحمیل شده توسط C، میراث منسوخ شدهای از عصر صرفه جویی هستش. (خلاصه مطلب اینکه، زمان انسان ارزشمندتر از زمان کامپیوترِ.)
اما پایتون و C جایگزین سادهای برای هم نیستن، که یکی شکل کندتر و راحتتر دیگری باشه. همچنین پایتون پیشرفت محض در فناوری، نسبت به C نیست. بهترِ به پایتون و C به عنوان دو سطح موازی و جدا از واقعیت فکر کنیم، که C در سطح نزدیکتر به ماشین قرار داره.
Paul Graham یک تشبیه جالب (نه همیشه درست) درباره قدرت زبانهای برنامهنویسی داره، که اونا رو اینجوری تصور میکنه که اونا در امتداد یک طیف عمودی قرار دارن. زبانهایی با ویژگیهای کم در پایین این طیف قرار دارن و زبانهایی با ویژگیهای زیاد در بالای اون قرار دارن. جایی در وسط، یک زبان فرضی به نام Blub وجود داره که از همه نظر شبیه به C هستش. ایشون ادامه میده که کاربران Blub به تمام زبانهای زیر Blub در این طیف، مانند کوبول و زبان ماشین میخندن و به سادگی نمیتونن ویژگیهای زبانهای بالاتر رو درک کنن.
این تصویر قانعکننده ای هستش، اما ارزش داره که این تشبیه رو از زاویه مقابل بررسی کنیم. پایتون ممکنه بالای C قرار داشته باشه و Lisp ممکنه از لحاظ مفاهیم انتزاعی در بالای این طیف قرار داشته باشه. اما یادگیری پایتون یا لیسپ در واقع بینش زیادی در مورد نحوه کار کامپیوترها در پایین این طیف ارائه نمیده. یعنی با وجود این برداشت بصری که برنامه نویسان لیسپ امکان انجام کارهای پیچیده رو با راه حل های نوآورانه دارن، در سلسله مراتب زبانهای برنامهنویسی، نگاه کردن به “پایین” آسونتر از نگاه کردن به “بالا” نیست.
در واقع، من میگم نگاه کردن به پایین سختتر از نگاه کردن به بالاست. یک فرد کاملاً لیسپی که به C نگاه میکنه فقط سینتکس آزاردهنده، توابع ناآشنا و توضیحات کد مبهم درباره خطوط کش (Cache Lines) رو میبینه. اما یک برنامهنویس C که به بالا نگاه میکنه، یک سری چیز پیاده سازی شده در C رو میبینه.
جذابیت پایتون اینه که در موقعیت میانی-بالایی در این طیف قرار داره. این زبان انتزاعی تر از C هستش و در نتیجه تجربه پرباری رو ارائه میده، اما اونقدرها هم انتزاعی نیست که باعث بشه گیج بشید و از پیچیدگیهای انتزاعی و مفهومی اون، سرتون بترکه.
مشکل اینجاست که همونطور که لیسپ برای یک برنامهنویس معمولی Blub، عجیب و غیرضروری به نظر میرسه، زبان C هم برای یک برنامهنویس معمولی پایتون عجیب و غیرضروری به نظر میرسه. این اشاره گرهایی که مردم مدام در موردشون صحبت میکنن، چیه؟ (برنامهنویس پایتون فکر میکنن) به نظر سخت میاد و اگه تا اینجا بدون اونا پیش رفتم، احتمالا به اونا نیازی ندارم.
بنابراین، برنامهنویسان پایتون، بطور کلی، هرگز به سمت یادگیری C نمیرن.
بدون شک میشه یک شغل طولانی و پربار در نرمافزار، بدون دونستن C داشت. این موضوع مورد بحث نیست. با این حال، چندین اثر زیان بار ناشی از فرهنگ برنامهنویسی بدون C وجود داره که در نتیجه آموزش مبتنی بر پایتون در حال ظهور هستش.
اولا افراد کمی قادر به نوشتن نرمافزار عالی هستن. برای نوشتن نرمافزار عالی، چه دسکتاپ، موبایل و …، به درک جامعی از نحوه کار کامپیوترها و سیستمعاملها در سطح پایین نیاز دارید. چند ساختار داده ای در کش CPU جا میشن؟ چرا این کد کندِ در حالیکه متریک داخلی میگه سریع هستش؟ وقتی از سیستم عامل میخوام کاری انجام بده، در واقع اون پشت چه کاری انجام میده؟
فرض میکنم شما میتونید این دانش رو با یک مطالعه دقیق و مستمر بدست بیارید، اما برای درک کامل، هیچ راه جایگزینی بغیر از نوشتن و بهینه سازی مقدار زیادی کد در C، وجود نداره.
شاید بشه گفت در این مقطع خاص تاریخی، نرمافزار بیشتر، با ارزشتر از نرمافزار بهتر هستش. از دیدگاه اقتصادی ممکنه اینطور باشه. فناوری، سریع در حال حرکت هستش و ساختن یک نرمافزار عالی که هیچکس نمیخوادش، بیفایده. با این حال، فرهنگ “فقط از پایتون استفاده کنید”، “کامپیوترها به اندازه کافی سریع هستن” و “مشکل رو با سختافزار حل کنید” یک مشکل سیستماتیک عمیقتر ایجاد میکنه: در نتیجه آموزش پایتون بعنوان زبان اول و تحقیر C، افراد باهوش کمتری میخوان برنامهنویس حرفهای بشن.
برای یک لحظه چاقوتون رو کنار بذارید و استدلال من رو بشنوید.
من معتقدم دو مکانیسم جداگانه وجود داره که پایتون رو برای افراد باهوشی که اولین بار برنامهنویسی رو یاد میگیرن جذاب نمیکنه. اول اینکه یادگیری پایتون کار بسیار دشواری نیست. مفاهیم اصلی زبان هیچ چالش واقعی برای افراد باهوش ایجاد نمیکنن و در نتیجه نیاز به تعامل شدید ندارن. یادگیری پایتون، به نوعی حفظی و کسلکننده هستش. احساس میشه مثل مدرسهای هستش که کلاسهای پیشرفته نداره.
مکانیسم دوم توسط دوست من نشون داده شد که اخیرا در یک کارگاه پایتون ثبت نام کرده بود. اون به من گفت که از یادگیری در مورد حلقه ها و توابع لذت بردم. این خوب بود، حلقه ها و توابع کوچک، مفاهیم قابل فهم و مستقلی هستن، اما بعدش مربی تصمیم گرفت نشون بده که پایتون چقدر قدرتمنده و بقیه کارگاه رو صرف ایجاد یک برنامه بیفایده با API توییتر در پایتون کرد.
استفاده از کتابخونه های نرمافزاری یک مهارت مهم هستش، همونطور که هر توسعه دهنده نرمافزار حرفهای تایید میکنه. با این حال، اگه کتابخونه های نرمافزاری خیلی زود معرفی بشن، در نهایت یک دیوار انتزاعی تشکیل میدن که افراد باهوش رو گیج میکنه. در اینجا دوستم فکر میکرد که در آستانه یادگیری قوانین مخفی هستش که کامپیوترها رو کنترل میکنن؛ اما در عوض، مربی به سادگی یک کد انتزاعی، از نحوه ی کار با کتابخونه رو ارائه داده بود. بدون تسلط بر زبان اول و یادگیری نحوه خوندن کد منبع کتابخونه، دوستم ابزار لازم برای درک عمیقتر و فهمیدن اونچه در پایین زنجیره فراخوانیها (Call Chain) اتفاق می افته رو نداشت.
ممکنه استدلال کنید که اون در یک کارگاه ضعیف شرکت کرده. اما نکته بزرگتری وجود داره: بدون تسلط بر C بعنوان زبان اول، برنامه نویسان ابزار لازم برای درک عمیقتر و فهمیدن چه اتفاقی در سیستمی که استفاده میکنن رو ندارن.
اگه شما یک برنامهنویس پایتون باهوش و کنجکاو هستید، به سرعت به یک لایه سخت خاکی به نام C برخورد خواهید کرد. در زیر اون لایه، به شما گفته میشه، اژدها، استخوانها و دیباگرها وجود دارن. در نتیجه، تا زمانیکه به اندازه کافی شجاع نباشید که توصیه ها رو نادیده بگیرید و خودتون متعهد به یادگیری زبان C نشید، هرگز لذت کاوش در چیزی رو به همون اندازه که میتونید صرفاً به خاطر کنجکاوی داشته باشید رو، تجربه نخواهید کرد.
در مقابل، برنامهنویس C که سعی در درک یک قطعه کد C داره، در بدترین حالت، به بررسی انبوهی از فایلهای هدر، صفحات راهنما و کد منبع میپردازه. اما به ندرت پیش میاد که در حین این بررسی، با بخشهایی از کد مواجه بشه که به زبانهای دیگه ای مانند Lisp یا Python نوشته شدن. شما به پایین حرکت میکنید نه بالا. کامپیوترها دقیقا اینجوری کار میکنن.
برنامهنویسان تمایل دارن که انگیزه اشون رو یا با انجام کارها یا با درک نحوه کار چیزها حفظ کنن. شکی نیست که پایتون برای انجام کار عالی هستش. محبوبیت پایتون در استارت آپها و علوم (از جمله علوم داده) این رو تایید میکنه. اگه فقط میخوایید در طول عمر خود یک زبان برنامهنویسی یاد بگیرید، پایتون یک انتخاب مطمئن، پربار و معقول هستش.
اما پایتون یک زبان بسیار ضعیف برای کسی هستش که میخواد نحوه کار کامپیوترها رو درک کنه. این یک مشکل هستش، چون در طولانی مدت، بهترین برنامهنویسان تمایل دارن، افرادی باشن که با عطش دانش برانگیخته میشن. اونا ممکنِ در کوتاه مدت جزء بهترین کارمندان نباشن، وقتشون رو صرف خوندن کتاب در محل کار و اجرای بهینه سازیهای بیفایده بکنن، اما بعد از اینکه به اندازه کافی عمیق شدن، به درک جامعی از سیستمها میرسن و میتونن به دیگران توضیح بدن که سیستم چگونه کار میکنه، مثله کسی که نقشه ای از جهان رو برای شما ترسیم میکنه.
بنابراین، به نظر من این مشکل واقعی با برنامهنویسی بدون C و همچنین با ایده بزرگتر که زبانهای برنامهنویسی مقدماتی باید بیانگر و مناسب برای مبتدیان باشن، هستش. اینجوری شغل برنامهنویسی افرادی رو از دست میده که میتونستن بهترین برنامهنویسها باشن.
افراد باهوش و کنجکاو که ابتدا پایتون رو یاد میگیرن و به اونا گفته میشه که پایتون همه اون چیزی هستش که این روزها کسی نیاز داره، یا به این دلیل که به اندازه کافی چالشبرانگیز نیست که علاقه اونارو حفظ کنه، یا اینکه به لایهای از کد C برخورد میکنن و نمیدونن بعدش چی کار کنن، کم کم علاقه اشون رو به برنامه نویسی از دست میدن.
من باید تاکید کنم که این منطق در مورد افرادی که بعنوان بخشی از کار خودشون به برنامهنویسی نیاز دارن (دانشمندان، روزنامهنگاران، طراحان وب و غیره) صدق نمیکنه. بلکه این در خصوص افرادی هستش که نسبت به برنامهنویسی کنجکاو هستن و فکر میکنن ممکنِ روزی در اون بسیار ماهر بشن، اما مطمئن نیستن که از اون برای چه کاری میخوان استفاده کنن.
در ادامه این مورد رو بررسی میکنیم که چرا دانشگاهها تصمیم گرفتن پایتون (و قبل از اون جاوا) رو آموزش بدن با توجه به اینکه برنامه نویسای خوبی تولید نمیکنن.
مهمترین دلیل اینکه اکثر دانشگاهها در زمینه ی کسب و کار تولید برنامه نویس خیلی خوب، نیستن. اکثر دپارتمانهای علوم کامپیوتر میخوان تعداد فارغالتحصیلانی رو که یا به تحصیلات تکمیلی میرن یا مشاغل برنامهنویسی پردرآمد پیدا میکنن رو به حداکثر برسونن. تبدیل شدن به یک برنامهنویس بسیار خوب برای هیچ کدوم از این موارد واقعاً لازم نیست.
از دیدگاه اکثر مدرسان علوم کامپیوتر، یک زبان برنامهنویسی فقط چیزی هستش که در مسیر آموزش اصول علوم کامپیوتر، مورد استفاده قرار میگیره: الگوریتمها، ساختارهای داده و غیره. پایتون تعادل خوبی بین چیزی که آموزش اون آسون هستش (که اساتید رو خوشحال میکنه) و چیزی که صنعت خصوصی از اون استفاده میکنه، داره.
محبوبیت پایتون در علوم، فراوانی مطالب آموزشی آنلاین، ادعای عمومی مبنی بر اینکه پایتون زبان آموزشی خوبی هستش رو اگه به این موارد اضافه کنید، بنابراین به نظر میرسه که هیچ دلیلی برای نگرانی وجود نداره؟ (پایتون بعنوان زبان اول مناسبه)
قبل از اینکه رانندگی یاد بگیرم، یادم میاد پدرم در مورد یک BMW اسپورت کروکی که در خیابان پارک شده بود، نظر داد. اون گفت اگه توان خرید ماشینی مثل این رو دارید، چرا باید دنده اتومات بخرید؟
من اون موقع حرفش رو نفهمیدم. من فکر میکردم دنده اتومات، مثل شیشه های برقی و ترمز ضد قفل، یک ارتقای اساسی هستش که همه به جز حساسترین افراد حاضرن برایش پول پرداخت کنن. اما بعد از چند ماه آموزش رانندگی با پدرم، متوجه منظورش شدم: وقتی مهارت پیدا میکنید، رانندگی با گیربکس دنده ای واقعاً لذتبخش هستش. احساس میکنید به ماشین نزدیکترید، به جاده نزدیکترید. لذت خاصی در تسلط بر یک ماشین وجود داره، دنده پایین حرکت کردن در پیچها و دورها، درگیر کردن کلاچ در لحظه مناسب، شناختن ماهیت هر دنده در گیربکس جذابه. این یک لذت مشخص انسانی هستش، شبیه به لذت برنامهنویسی اسمبلی که در اون تواناییهای کامپیوتر رو به حداکثر حد اون میرسونید.
من احساس میکنم برنامهنویسانی که اول پایتون رو یاد میگیرن، چیزهای زیادی رو از لذت برنامهنویسی از دست میدن. تصور اشتباهی وجود داره که برنامهنویسی در زمانی که شما کارهای متنوعی رو با کمترین مقدار کد انجام میدید، با استفاده از کتابخونه ها و غیره، لذت بخشتر هستش. این برای افرادی که سعی میکنن کاری رو برای رسیدن به یک ضربالاجل انجام بدن صادق هستش؛ اما برای افرادی که با یادگیری انگیزه میگیرن و میخوان برنامهنویسهای بسیار خوبی بشن، در واقع سرگرمکنندهتر هستش که برنامههایی توسعه بدن که کار کمتری انجام میدن، اما ذهن رو خیلی تحریک میکنن.
برای کسی که قبلاً برنامهنویسی نکرده ، زبان C یک چالش سالم ارائه میده. اشاره گرها و محاسبات ریاضی اشاره گرها، معادلهای نزدیک در دنیای واقعی ندارن و در حین یادگیری زبان، احتمالاً با پیامهای خطای به ظاهر بیمعنی و خرابیهای غیرقابل پیشبینی مواجه خواهید شد. اگه ریاضی شما بد هستش، خطر خراب کردن call stack رو دارید؛ بررسی محدوده مجاز رو فراموش میکنید، و HEAP خراب میشه. گاهی اوقات، میخوایید یک مشت به مونیتور بزنید و روی کیبوردتون گریه کنید.
اما یک امتیاز مهم وجود داره: زبان C شما رو مجبور میکنه تا یک مدل ذهنی از کاری که کامپیوتر هنگام اجرای برنامه هاتون انجام میده، بسازید، درست مانند یک نوجوان که با بازی کردن با کلاچ، نحوه کارکرد مکانیزم دنده رو کشف میکنه. با پرسیدن سوال “چرا؟” و جستجوی مداوم برای پاسخ، مدل ذهنی شما به گونهای رشد میکنه که شامل مدل فرایند، معماری CPU، سلسلهمراتب حافظه، سیستمعامل و غیره میشه. این مدل ذهنی هستش، نه خود زبان C، که به شما این امکان رو میده تا از میان انتزاعاتی که دیگران ساختن، عبور کنید و برنامههایی بنویسید که فکر میکنید هرگز ممکن نیستن.
بنابراین، اگه میخوایید نرمافزارهای فوقالعاده خوبی بنویسید، به هر زبانی، باید تمام توصیه های یادگیری پایتون یا (خدای ناکرده) لیسپ رو نادیده بگیرید و در عوض، سفر خودتون رو با C شروع کنید. منظره از بالا زیباست، اما اگه آرزوی صعود به قلههای کوه رو دارید، هیچ نقطهای بهتر از پایین برای شروع وجود نداره.