بازگشت به انجمن

برنامه‌نویس چندزبانه شدن

می‌پرسید «چندزبانه» یعنی چه؟ خب، بنا بر فرهنگ لغت، یعنی توانایی دانستن چندین زبان! حالا چطور «چندزبانه» می‌شوید؟ با اریک اسخیربوم صحبت کنید و از اطلاعات دست‌اول بهره‌مند شوید!

تماشا در YouTube
مدت 57دقیقه

Jonathan: خوب، سلام به همه و به پادکست یا پخش زنده‌ی Exercism خوش آمدید. اسم من Jonathan است و امروز افتخار میزبانی شما را دارم. کنار من Eric هست که عضوی از تیم Exercism است و چند سالی است در این پروژه فعالیت می‌کند. اگر در چند سال گذشته در هر مقطعی بخشی از اکوسیستم Exercism بوده باشید، احتمال بسیار زیادی دارد که جایی به Eric برخورده باشید. اما Eric، حضورت در برنامه‌ی امروز عالی است. مشتاقم کمی بیشتر درباره‌ی داستان تو بدانم و اینکه چطور سر از دنیای فناوری درآوردی و چه دیدگاه‌هایی درباره‌ی موضوع‌های مختلف این حوزه داری. اما پیش از آنکه زیادی در این موضوع‌ها غرق شویم، دوست دارم خودت را معرفی کنی و کمی از پیشینه‌ات بگویی، کمی از داستان اینکه چطور به جایی که الان هستی رسیدی.

Erik: حتماً. بله. خوشحالم که اینجا هستم. خب، همان‌طور که احتمالاً اشاره کردید، من Eric هستم. در هلند زندگی می‌کنم. همان‌جا به دنیا آمدم، پس تمام عمرم را همین‌جا گذرانده‌ام. داشتم فکر می‌کردم که اولین بار کی با کامپیوتر کار کردم. فکر می‌کنم باید یک دستگاه NES بوده باشد، بازی کردن Mario. و همین مرا گرفتار کرد. بله، فوق‌العاده بود. و البته خیلی هم کلافه‌کننده، چون بازی‌های آن زمان بی‌رحم بودند.

Jonathan: نقطه‌ی ذخیره و این چیزها نداشتید؛ باید دوباره از اول شروع می‌کردید.

Erik: خب، بستگی دارد به اینکه در آمریکا زندگی می‌کردید یا در بقیه‌ی دنیا، چون در واقع دو نسخه‌ی متفاوت وجود داشت. ولی بله، فکر می‌کنم درِ جلویی دستگاه را باز می‌کردید و بعد دیسک‌ها یا هر چیز دیگری، یعنی کارتریج‌ها را داخلش می‌گذاشتید. و من واقعاً عاشق آن بودم. ما NES نداشتیم، ولی چند تا از دوستانم داشتند. پس مرتب می‌رفتم خانه‌شان بازی کنم و بازی‌های خیلی خوبی بود که بازی می‌کردم، و بازی‌های کلافه‌کننده هم. اما چیز خیلی خیلی خوبی بود. و همین مرا گرفتار کرد. فکر می‌کنم خیلی از برنامه‌نویس‌ها همین‌طور گرفتار می‌شوند، فقط به این خاطر که می‌خواهند یک بازی بسازند. به آن فکر کردم. ولی، هشدار اسپویل: من هیچ‌وقت این کار را نکردم. من بازی‌ساز نیستم. خب. نه، نه، نه. ولی همین دلیل بود که من به کامپیوتر علاقه‌مند شدم. بعد بابای من قبل از تولد من دچار یک حادثه شد. از پایین شانه‌ها فلج شد. پس روی ویلچر بود. ولی همیشه خانه بود. و همین عالی بود. یعنی پدری داشتم که شبانه‌روزی خانه بود. پس همیشه برگشتن به خانه خوب بود. او هم کامپیوتر دوست داشت. پس یک جایی، فکر می‌کنم آن موقع حدوداً ۱۰ ساله بودم، یک کامپیوتر چندان شیکی نخرید. فکر می‌کنم یک X286 بود. سیاه‌وسفید بود و MS-DOS روی آن نصب بود. و می‌شد با آن بازی کرد. بازی‌های زیادی بود و من هم بازی‌ها را از دوستانم می‌گرفتم و آن‌ها باید همه‌ی آن برگه‌های رمز عبور را چاپ می‌کردند تا بتوانم بازی‌ها را بالا بیاورم، چون با رمز عبور محافظت می‌شد. مثل دفترچه‌ی راهنما بود. الان نمی‌توانید از این کارها بکنید. ولی آن زمان می‌شد. و من عاشق بازی کردن آن بازی‌ها بودم، ولی دوست داشتم سر از کارشان هم دربیاورم. و کامپیوترم را خراب کردم. حتی یادم نیست چند بار. یک میز کمک هم داشتم که پدر یکی از دوستانم بود و با کامپیوتر خیلی خوب بود. هر وقت سیستمم را خراب می‌کردم به او زنگ می‌زدم و او خیلی بزرگواری می‌کرد و می‌آمد و کمکم می‌کرد سیستمم را درست کنم. اما هنوز یادم هست که در حالت وحشت بودم وقتی می‌فهمیدم نمی‌توانم از این مشکل بیرون بیایم. ولی خیلی چیزها از آن یاد گرفتم.

Jonathan: ...این مشکل. ولی خیلی چیزها از آن یاد گرفتم. روی یک فلاپی‌دیسک و یادم هست که سال‌ها برای این چیز پول جمع کردم و بعد گذاشتمش داخل و بعد هیچ‌وقت، هیچ‌وقت روی آن فلاپی‌دیسک‌های کوچک بالا نمی‌آمد. پس آن یکی از کلافه‌کننده‌ترین چیزهای من بود. فکر نمی‌کنم هرگز از مرحله‌ی تلاش برای فهمیدن اینکه چطور درستش کنم گذشته باشم. اما یعنی بازی‌ها روی فلاپی‌دیسک می‌آمدند و باید... یک کارتریج کوچک می‌گرفتید که داخلشان می‌گذاشتید و بالا می‌آمد و از این جور چیزها؟

Erik: هرگز.

Jonathan: بله.

Erik: بله، بعضی وقت‌ها چند فلاپی‌دیسک داشتید. پس بله، در واقع دوره‌ی فوق‌العاده‌ای بود. و من عاشق MS-DOS بودم و اینکه بفهمم چه کارهایی می‌توانم بکنم. و بعد فهمیدم چه کارهایی نمی‌توانم بکنم. پس بله، واقعاً عالی بود.

Jonathan: بله، واقعاً عالی بود. پس مادرتان تمام‌وقت کار می‌کرد؟ و پدرتان خانه بود؟

Erik: نه، مادرم تمام‌وقت از پدرم مراقبت می‌کرد. او به مراقبت زیادی نیاز داشت. اول می‌توانست با دست‌هایش حرکت کند و بعدها می‌توانست از چانه‌اش استفاده کند، چون دست‌هایش کم‌کم ضعیف شد و کنترلش کمتر شد. اما مادرم تمام‌وقت از او مراقبت می‌کرد. پس پدر و مادرم همیشه خانه بودند. برای من واقعاً عجیب بود که به خانه‌ی دیگران بروم و پدر و مادرشان سر کار باشند. یعنی آخر روز بود و پدر و مادرشان هنوز خانه نبودند. برای من واقعاً عجیب بود. ولی بله، شرایط متفاوتی بود.

Jonathan: برای من هم عجیب بود. یعنی فقط خودتان بودید.

Erik: بله، یک خواهر دارم. سه سال از من کوچک‌تر است. هیچ‌کس باور نمی‌کند که خواهر و برادریم. خیلی با هم فرق داریم. قبلاً زیاد با او دعوا می‌کردم، ولی حالا کاملاً خوب هستیم. پس خوب تمام شد. خب. و او کامپیوتر دوست نداشت، پس وقت کامپیوتر من را اشغال نمی‌کرد.

Jonathan: ولی ما اغلب سر کامپیوتر دعوا می‌کردیم. او می‌خواست Sims بازی کند و من می‌خواستم SimCity بازی کنم یا هر چیز دیگری. پس از این نظر همیشه با هم درگیر بودیم.

Erik: خداحافظ. قطعاً انتخاب SimCity را خیلی بیشتر دوست دارم. ولی نه، او هرگز واقعاً به کامپیوتر علاقه‌ای نداشت. تنها راهی که می‌توانستم علاقه‌مندش کنم این بود که SNES داشتم، یعنی Super Nintendo، و Mario Kart داشتیم. و او Mario Kart را دوست داشت، پس با هم زیاد Mario Kart بازی کردیم. البته من همیشه برنده می‌شدم، چون خیلی بیشتر تمرین داشتم، ولی او باز هم دوستش داشت.

Jonathan: پس هنوز هم دوست دارید ور بروید؟ بله، MS-DOS، اگر اشتباه نکنم، چیز نسبتاً سطح‌پایینی است. بله. پس آن هم احتمالاً خیلی سطح‌پایین بود. بله، قطعاً. و آن موقع چند سالتان بود که با آن سیستم ور می‌رفتید؟

Erik: خب. بله، نسبتاً سطح‌پایین. قطعاً سطح‌پایین. بله، آن موقع فکر می‌کنم ۱۰ سالم بود. بعد دوستی داشتم که در تیم فوتم بود، یعنی در تیم فوتبالم، بهتر است بگویم. ولی او از قبل برنامه‌نویس خوبی بود و واقعاً می‌توانست بازی کدنویسی کند. و این کار را با Visual Basic انجام می‌داد. و من کاملاً مبهوت شده بودم. می‌آمد سر کامپیوتر من و نشان می‌داد که دارد چیزی تایپ می‌کند و من هیچی از آن نمی‌فهمیدم. ولی بعد از نیم ساعت، چیزی داشت که روی صفحه راه می‌رفت و برای من کاملاً جادویی بود. فقط ماتم برده بود. اما آن موقع واقعاً هیچ‌وقت تلاش نکردم برنامه بنویسم. هنوز حس می‌کردم برای من زیادی سخت است که حتی امتحان کنم. پس این کار را نکردم. فقط ور می‌رفتم و بازی می‌کردم.

Jonathan: پس من... فقط وسط حرفتان می‌پرم.

Erik: و بعد وقتی کمی بزرگ‌تر شدم.

Jonathan: چطور این ارتباط شکل گرفت که «وای، من می‌توانم بازی را برنامه‌نویسی کنم» و اینکه بتوانم این را به شکلی جدی ادامه دهم، اگر منظورم را می‌رسانم، یا بتوانم این مسیر را جدی‌تر دنبال کنم؟

Erik: بله، این بعداً پیش آمد. وقتی حدوداً، فکر می‌کنم ۱۷ ساله بودم، اساساً باید انتخاب می‌کردم کدام مسیر را بروم. دو گزینه در ذهنم داشتم. یکی خواندن تاریخ بود و دیگری فناوری اطلاعات. در نهایت انتخاب نسبتاً ساده‌ای بود، چون حس می‌کردم فناوری اطلاعات چیزی است که کمی بیشتر از تاریخ دوست دارم انجام دهم. ممکن است بخش‌های خیلی خسته‌کننده‌ای در تاریخ باشد و فکر نمی‌کردم در علوم کامپیوتر بخش خسته‌کننده وجود داشته باشد، ولی البته که دارد. پس اشتباه می‌کردم. بله، بله. نه، خب، می‌توانیم وقت دیگری به آن بپردازیم. ولی بله، بخش‌های کسل‌کننده هم دارد. آن موقع این انتخاب را کردم. و در دوره‌ای بود که همه‌چیز رونق داشت. یعنی زمان رونق دات‌کام. وقتی داشتیم از دبیرستانم بازدید می‌کردیم، یعنی مدرسه‌ای که قرار بود بروم، یک دانشگاه علوم کاربردی بود. می‌توانستم بین دانشگاه علوم کاربردی و دانشگاه یکی را انتخاب کنم. ولی علوم کاربردی را دوست داشتم، چون می‌خواهم چیز بسازم. تئوریسین خوبی نیستم. نمی‌دانم چطور می‌گویید، ولی در نظریه خوب نیستم. پس دوست دارم چیز بسازم. خیلی اهل عمل هستم. پس با بخش عملی شروع کردم. و واقعاً دوستش داشتم. و آن دوره، دوره‌ای بود که همه‌ی این شرکت‌ها پول فراوان درمی‌آوردند. و می‌گفتند: «هی، وقتی فارغ‌التحصیل شوی، ماشین می‌گیری، این را می‌گیری، آن را می‌گیری.» و بعد وقتی فارغ‌التحصیل شدم، رکود دات‌کام شد. همه‌چیز به هم ریخت و پیدا کردن کار واقعاً سخت بود. آن موقع حس کردم شاید بهتر است دانشگاه را امتحان کنم، چون بخش علوم کاربردی خیلی لذت‌بخش بود. و آنجا بود که واقعاً برنامه‌نویسی یاد گرفتم. ولی با خودم گفتم شاید کمی شروع کار حرفه‌ای‌ام را عقب بیندازم و ببینم می‌توانم دانشگاه را ادامه بدهم. پس خوب بود.

Jonathan: پس تا آنجا که من می‌دانم، در نظام آموزشی اروپا خیلی سریع دسته‌بندی می‌شوید، بین مهارت عملی و دانشگاه، که آن یکی احتمالاً بیشتر مسیر دانشگاهی است. آیا در هلند هم همین‌طور است؟ آیا آن‌ها در این زمینه که بگویند «هی، تو واقعاً برای این مناسب هستی» خیلی خوب عمل می‌کنند؟ می‌دانم در سوئیس، که چارچوب مرجع واقعی من است، اگر در هلند خیلی خوب باشید، می‌توانید بگویید: «خب، خیلی خوب، برو کارآموزی کن و از آن راه مهارت پیدا کن.» و در واقع همان‌قدر ارزش دارد، یعنی نه کمتر از رفتن به دانشگاه و نه بیشتر. فقط با ترجیحات شما سازگارتر است. آیا در هلند هم همین‌طور است؟ و آیا در مسیر بزرگ شدن، آن نوع فرآیند را از سر می‌گذراندید؟

Erik: نمی‌گویم که برابر تلقی می‌شد. هنوز این تصور هست که رفتن به دانشگاه و نه دانشگاه علوم کاربردی بهتر است، یا سخت‌تر است، یا حداقل اعتبار بیشتری دارد. عنوان متفاوتی هم می‌گیرید. ولی برای من آن‌قدر جذابیتی نداشت. بیش از حد نظری بود. می‌خواستم برنامه‌نویسی یاد بگیرم، چون هنوز برنامه‌نویسی یاد نگرفته بودم. می‌دانستم احتمالاً دوستش خواهم داشت. تکه‌هایی از HTML را دیده بودم، ولی هرگز یک خط کد ننوشته بودم. با این حال تقریباً مطمئن بودم که واقعاً دوستش خواهم داشت. وقتی شروع کردم، سال اول اساساً یک خط کد هم ننوشتم. فقط در یک گروه با چند همکلاسی‌ام سوار کار می‌شدم، چون یکی از آن‌ها واقعاً برنامه‌نویس فوق‌العاده‌ای بود که همه‌چیز می‌دانست. همه‌کار را او می‌کرد، پس من حتی فرصت نمی‌کردم کار زیادی بکنم. ولی سال دوم آگاهانه تصمیم گرفتم که این‌طور پیش نمی‌رود و من هرگز برنامه‌نویسی یاد نمی‌گیرم. پس تمام‌قد وارد شدم و تا خرخره برنامه‌نویسی کردم. آن یک غوطه‌وری عمیق بود. با C شروع کردم که زبان افتضاحی برای شروع است. وارد نمی‌شوم که به‌عنوان یک زبان واقعی چه فکری درباره‌ی C می‌کنم، ولی برای شروع، زبان بسیار سختی است. اینکه در درس دوم یا سوم یک لیست پیوندی بسازید، قطعاً چیزی نیست که به‌عنوان دانشجو از آن لذت ببرید، اگر هیچ پیش‌زمینه‌ای نداشته باشید. ولی توانستم برنامه بنویسم و آن‌قدر دوستش داشتم که در وقت آزادم زیاد برنامه‌نویسی کردم. روشی که تقریباً خودم برنامه‌نویسی را یاد گرفتم، چون روشی که آن‌ها درس می‌دادند واقعاً بد بود، این بود که چیزی پیدا کنم که خودم دوست دارم استفاده کنم و بعد بسازمش، یا حداقل تلاش کنم بسازمش، چون اولش فقط دست‌وپا می‌زنید و واقعاً کار زیادی نمی‌کنید. همین در واقع مفید است. ولی در نهایت فقط تمرین، تمرین، تمرین است. پس فهمیدم برنامه‌نویسی مهارتی است که فقط با انجام دادن به دست می‌آید. می‌توانید هر چقدر نظریه که دوست دارید بخوانید و مثلاً ۱۰ میلیون ویدئو تماشا کنید. ولی اگر واقعاً وقت نگذارید، فکر نمی‌کنم هرگز برنامه‌نویس خوبی شوید. باید انجامش دهید. و همین یک قدم بزرگ است. هنوز یادم هست که توانستم کد بخوانم و از این بابت خیلی خوشحال بودم. ولی اینکه بعد مجبور شوم کد بنویسم، آن قدم خیلی بزرگی بود.

Jonathan: ...از این بابت خوشحال بودم و اینکه مجبور بودید کد بنویسید، قدم خیلی بزرگی بود. در چند برنامه‌ی اخیر از مهمان‌ها پرسیده‌ام که برنامه‌نویسی کِی برایشان جا می‌افتد. آیا برای شما هم لحظه‌ای بود که مثل این باشد که سکه افتاد و با خودتان بگویید «وای، همه‌چیز جا افتاد»؟ آیا داشتید دست‌وپا می‌زدید و می‌خواستید نظریه را بفهمید، یا لحظه‌ای بود که گفتید «خب نه، این دیگر سرراست است»؟

Erik: فکر نمی‌کنم یک لحظه‌ی «یافتم» واحد داشته باشم. فکر می‌کنم چند تا داشتم. یعنی مرحله‌به‌مرحله پیش می‌آید. فکر می‌کنم اولین برنامه‌ی واقعی که نوشتم همانی بود که باید یک کلمه را حدس می‌زدید. مثل آن بازی که این روزها خیلی محبوب است و در آن... خب، مثل Hangman است، بگذارید بگوییم Hangman. ولی با C بود و واقعاً توانستم کارش بیندازم، طوری که خودم می‌توانستم بازی خودم را بازی کنم. پس تا حدی فهمیدم چه خبر است و بعد کمی جلوتر می‌روید. یک چیزی هم داشتم که فکر می‌کنم مربوط به mutexها بود. یعنی قطارهایی بودند که نباید تصادف می‌کردند. و می‌شد برای لحظه‌ی تلاقی‌شان از mutex استفاده کرد. و mutex اساساً مثل تابلویی است که می‌گوید بایست یا برو. همین خیلی سرگرم‌کننده بود. پس از آن خیلی خوشحال بودم. آن را به استادم دادم. و او گفت: «ولی اگر بخواهم چهار قطار داشته باشم چه؟» و من گفتم: «اوه، اوه، آهان، به این فکر نکرده بودم.» همین یک چشم‌بازکن بود و تازه یک جمله‌ی ساده بود. و با خودم گفتم باید این را در نظر می‌گرفتم که ممکن است او چنین چیزی بپرسد. پس آخر هفته را گذاشتم که کدم را طوری پارامتریک کنم که بشود چند قطار داشت و موفق شدم. با کلک جاگذاری‌اش کردم. زیبا نبود، ولی کار می‌کرد. پس آن هم لحظه‌ی دیگری بود که با خودم گفتم: «اوه، این واقعاً عالی است و من می‌توانم این‌جور کارها را بکنم.»

Jonathan: عالی. می‌بینم که می‌توانید این‌جور کارها را بکنید. از آشنایی با شما این را می‌دانم. و از یادگیری کدنویسی هم این فرآیند هست که اول هر چیزی را می‌نویسید، کارش می‌اندازید و بعد بهترش می‌کنید. تجربه‌ی شما هم همین بود؟ یعنی فقط می‌نوشتیدش، کارش می‌انداختید، به بقیه‌اش چه کار دارید؟ و بعد بهترش می‌کردید.

Erik: بله، بله، فکر می‌کنم سال اول یا حول‌وحوش آن فقط همین بود که اگر اجرا می‌شد، خیلی خوشحال بودم. چیزی به اسم زیبایی و این حرف‌ها وجود نداشت. فقط این مهم بود که اجرا شود. و در کامنت گذاشتن روی کد کاملاً زیاده‌روی کردم، چون استادم گفت باید روی کدت کامنت بگذاری. و نسبت کد به کامنت فکر می‌کنم یک به ده بود یا چیزی شبیه آن، خیلی زیاد بود. و بله، قدیمی‌ترین پروژه‌ام هنوز آنلاین است، همان که گذاشتم، اولین پروژه‌ی متن‌باز من بود. یادتان هست MSN Messenger که می‌توانستید پیام بفرستید؟

Jonathan: خب، زنگ آشنایی می‌زند، ولی نه.

Erik: Winamp یادتان هست؟

Jonathan: بله.

Erik: بله، Winamp یک پخش‌کننده‌ی رسانه بود. مربوط به دوره‌ی Napster بود. MP3 دانلود می‌کردید و بعد با Winamp پخشش می‌کردید. من می‌خواستم که اگر آهنگی پخش می‌کنم، به‌طور خودکار به اسمم در MSN Messenger اضافه شود. و آن موقع خیلی علاقه داشتم برنامه‌نویسی ویندوز انجام دهم. یعنی Win32. خیلی قدیمی بود، نه مثل چیزی که الان داریم، ولی سطح‌پایین و در عین حال خیلی باحال. پس یک افزونه با ++C ساختم، که آن زمان زبان محبوبم بود، ولی آن موقع فقط سه زبان می‌دانستم، پس چیز خاصی نمی‌گفت. ولی یک افزونه ساختم. اگر Winamp در حال پخش بود، اسم را از طریق APIهای شیک Win32 می‌گرفت و بعد اسمی را که در پنجره‌ی MSN داشتید به‌روزرسانی می‌کرد. پس همه می‌توانستند ببینند چه آهنگی پخش می‌کنم. و در واقع آن را آنلاین گذاشتم، چون فکر کردم شاید دیگران هم دوستش داشته باشند. فکر می‌کنم روی SourceForge بود، که الان دیگر هیچ‌کس از آن استفاده نمی‌کند، چون فکر می‌کنم مشکل حریم خصوصی و این چیزها داشتند. ولی در واقع آدم‌های دیگری در دنیا از آن استفاده کردند و من خیلی شگفت‌زده شدم. می‌توانستم تعداد دانلودها را ببینم، مثلاً چند صد دانلود، و مردم داشتند از نرم‌افزاری که من نوشته بودم استفاده می‌کردند. آن بهترین حس دنیا بود. و آن اولین برنامه‌ی متن‌باز من بود. من هرگز واقعاً سندرم ایمپاستر نداشتم. حس می‌کردم این کد من است. اگر کسی فکر می‌کند بد است، مشکلی نیست. کار می‌کند، پس از آن راضی بودم. و می‌توانم از کامنت‌های دیگران یاد بگیرم. هرگز آدم سندرم ایمپاستر نبودم، که کسانی که مرا می‌شناسند از این حرف تعجب نمی‌کنند.

Jonathan: من هم تعجب نمی‌کردم. درباره‌ی تجربه‌تان با استادها و مدرس‌های دانشگاه، آیا مدرس خاصی بود که برایتان برجسته باشد و شیوه‌ی تدریسش یادگیری شما را سرعت بخشیده باشد، یا حس کنید تأثیر عظیمی بر درک شما از برنامه‌نویسی و کدنویسی داشته؟ و به‌طور مشخص چه کاری کرد که توانستید فاصله‌ی بین نظریه و پیاده‌سازی عملی را پر کنید؟ این سؤال بزرگی است. می‌توانید آن را به هر تعداد تکه که می‌خواهید بشکنید. بله، بله.

Erik: بله، بله. پس باید بین دانشگاه علوم کاربردی و دانشگاه تفکیک کنم. اول درباره‌ی دومی بگویم: در دانشگاه، فکر می‌کنم سطح کلی مهارت کسانی که باید به مردم درس می‌دادند خیلی خیلی پایین بود. سطح انتظار بسیار پایینی بود. و حس من این بود که خیلی از کسانی که در دانشگاه تدریس می‌کردند، این کار را به این خاطر می‌کردند که مجبور بودند، نه چون می‌خواستند. خیلی وقت‌ها در دانشگاه می‌خواهید پژوهش کنید، ولی تعداد ساعاتی هست که باید صرف درس دادن به مردم کنید. وگرنه، خب، بخشی از شغل است، ولی واقعاً دوستش نداشتند. من بعد از اینکه برنامه‌نویسی یاد گرفتم می‌خواستم بیشتر یاد بگیرم. پس آنجا گرایش برنامه‌نویسی را انتخاب کردم، ولی خیلی بد بود. تقریباً عصبانی بودم که سطح دانش برنامه‌نویسی که می‌خواستند به من منتقل کنند این‌قدر بد بود، تا جایی که به امنیت تغییر رشته دادم. و واقعاً اهل امنیت نیستم، ولی درس‌های برنامه‌نویسی آن‌قدر بد بود. همیشه می‌گویم در دوره‌ی دانشگاهم، تنها چیزی که واقعاً یاد گرفتم این بود که چطور مقاله بنویسم، چطور درست منبع‌پژوهی کنم تا منابعتان را بشناسید و هر منبعی را صرفاً قبول نکنید. این را در آن سال‌ها یاد گرفتم، ولی درباره‌ی برنامه‌نویسی اصلاً چیزی یاد نگرفتم.

Jonathan: حالا خیلی هم شبیه تاریخ به نظر می‌رسد، اینکه چطور یک منبع را بازجویی می‌کنید، چطور مطمئن می‌شوید استدلالتان جفت‌وجور است، از این جور چیزها. مهارت‌ها و لذت تاریخ چطور...

Erik: خیلی هم.

Jonathan: چطور در کدنویسی و یادگیری کدنویسی شما بروز کرد، اگر اصلاً بروز کرده باشد؟ چه هم‌پوشانی‌هایی آنجا وجود داشت؟

Erik: سؤال سختی است. خب، هر دو شامل خواندن زیاد هستند. تاریخ درباره‌ی خواندن است. ولی برنامه‌نویسی هم درباره‌ی خواندن کد است. تعداد بارهایی که واقعاً کد می‌نویسید خیلی کمتر از بارهایی است که کد می‌خوانید. پس آن هم تا حد زیادی شبیه خواندن است. می‌تواند کمی مثل باستان‌شناس بودن باشد؛ اگر شغل جدیدی داشته باشید و با یک سیستم قدیمی و میراثی روبه‌رو شوید که باید خودتان را در آن پیدا کنید. حس می‌کنید دارید گوشه‌وکنارها را نگاه می‌کنید و می‌بینید چه چیزی آنجا پنهان است. و بعضی وقت‌ها هم اسکلت‌هایی از گنجه بیرون می‌آید و از این حرف‌ها. پس کمی حس کاوش دارد. یعنی شما از چه چیزی در آن لذت می‌بردید؟ نمی‌دانم چیز دیگری هم بود یا نه، لذتش اصلاً چه بود؟

Jonathan: ممنون. لذت این رشته برای شما کجا بود؟

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

Jonathan: آن‌ها را دوست داشتم. نه، دلیل اینکه این را پرسیدم، فقط درباره‌ی تاریخ، این بود که...

Erik: بله، داستان را می‌دانم.

Jonathan: آدم‌های زیادی را دیده‌ام که رشته‌های هنری‌تر یا علوم اجتماعی را دوست دارند، چه بگوییم؟ شاید در چارچوب انگلیسی، هنرها یعنی هنر و تاریخ و از این دسته. ولی هرچه بیشتر آدم‌هایی را دیده‌ام که از آن فضا لذت می‌بردند و بعد به یادگیری برنامه‌نویسی روی آورده‌اند. و دلیل علاقه‌ام این است که آشکارا... هم‌پوشانی وجود دارد و تلاش برای ترسیمش بخش بسیار جالبی از گفت‌وگوهایی بوده که با آدم‌های مختلف داشته‌ام. و حس می‌کنم اگر بتوانید تصویر بزرگ را ببینید و روی چیزهای مختلفی که می‌خوانید رویکردی چندرشته‌ای داشته باشید، آوردن این‌ها به برنامه‌نویسی خیلی مفید است، چون می‌توانید مهارت‌های مختلف را در فضای برنامه‌نویسی به کار ببرید. و فکر می‌کنم، بله، همین، فقط می‌خواستم این را بگویم. پس جالب است که شما عاشق تاریخ بودید و حالا تجربه‌ی بیش از ۳۰ زبان برنامه‌نویسی مختلف را دارید و بسیاری از آن‌ها را نگه می‌دارید. خب، نه لزوماً نگهداری، بلکه به‌شدت درگیر مدیریت همه‌ی آن‌ها در Exercism هستید، که... خب، بله، بله. بله، بفرمایید.

Erik: چقدرش مال خودتان است؟ می‌توانم کمی به چیزی که گفتید برگردم؟ اشاره کردید که انواع مختلفی از آدم‌ها با علایق متفاوت برنامه‌نویسی می‌کنند. ولی یکی از دلایلی که فکر می‌کنم این‌طور است این است که برنامه‌نویسی هم برای آدم‌های خیلی فنی جذاب است، چون خب، قواعد سختگیرانه دارد، زبان‌ها خیلی ثابت‌اند. دستور زبان دارد، نحوه‌ی نگارش دارد. کلی چیزهایی دارد که برای کسانی که چیزها را به شکلی خاص دوست دارند جذاب است. مثلاً اگر فیزیک‌دان باشید، قواعد را دوست دارید، قانون‌ها را دوست دارید و غیره. و چیزهایی مثل این در برنامه‌نویسی هم هست، ولی برنامه‌نویسی شبیه یک هنر هم هست. بعضی وقت‌ها آن را به نوشتن کتاب تشبیه می‌کنند و من هنوز فکر می‌کنم... آن احتمالاً یکی از مثال‌های بهتر است. مثلاً مثال ساختن خانه را دوست ندارم، چون هیچ‌کس، هیچ خانه‌ای ساخته نمی‌شود اگر نرم‌افزار را همان‌طور که خانه می‌سازیم بسازیم. ولی به نظر من واقعاً هم علم است و هم هنر. Jeremy اخیراً در همان محتواهای عمیق‌تر اشاره کرد که با یک تمرین خیلی ساده، مردم می‌توانند صدها راه‌حل مختلف بسازند، حتی وقتی فکر می‌کنید فقط باید یک راه برای حلش وجود داشته باشد. ولی همیشه بیش از یک راه هست. و این همان چیزی است که در برنامه‌نویسی دوست داشتم: می‌توانید چیزی داشته باشید که کار می‌کند، ولی بعد می‌توانید مثلاً ۲۰ گزینه‌ی دیگر را کاوش کنید، بنویسید و ببینید: «هی، این هم کار می‌کند.» همین ترکیب هنر و علم بودن است که واقعاً دوستش دارم، چون فکر می‌کنم تنها راهی است که واقعاً می‌توانم خلاق باشم. من اصلاً آدم خلاقی نیستم. دست راست و چپ دارم، ولی معلوم می‌شود، اگر کارهایی مثل کارهای خانه یا نجاری یا هر چیز دیگری انجام دهم، از هم مشخص است که در آن خوب نیستم. که به این هم مربوط است که پدرم واقعاً نمی‌توانست یادم بدهد. واقعاً جالب است.

Jonathan: ولی من هم واقعاً به آن علاقه‌ای نداشتم. من در مدرسه هنر خواندم. موسیقی کار کرده‌ام، گیتار زده‌ام یا هر چیزی. پس چارچوب من برای خلاقیت همیشه نقاشی یا موسیقی و این چیزها بوده. و هرگز واقعاً به جنبه‌ی خلاقانه‌ی کد فکر نکرده بودم. و حالا که شما به آن اشاره کردید، برای شما چطور پیش می‌رود؟ یعنی سازی می‌نوازید یا...؟ شما از موسیقی لذت می‌برید، می‌دانم که از موسیقی لذت می‌برید، ولی فقط می‌خواهم این دو را به هم وصل کنم.

Erik: خب، ام... بله، دارم، دارم. بله، سعی کردم گیتار یاد بگیرم. برای همسرم خیلی سخت بود، چون در یک... در آپارتمان دانشجویی او زندگی می‌کردیم و شاید ۲۰ متر مربع بود. داشتم سعی می‌کردم گیتار یاد بگیرم و خیلی به هم نزدیک بودیم. هنوز شگفت‌زده شوم که چطور تحملش کرد. ولی من استعداد...

Jonathan: فقط...

Erik: هیچ استعداد ذاتی برای نوازندگی ندارم. باید واقعاً واقعاً سخت کار می‌کردم تا به سطحی برسم که باز هم خیلی پایین بود. می‌توانستم تمپوها و از این چیزها را درست انجام دهم. ولی یک جایی معلم گیتارم از من خواست بداهه‌نوازی کنم و سولو بزنم و من کاملاً گم شدم. به هیچ وجه نمی‌توانستم انجامش دهم. هیچ خلاقیت موسیقایی در من نیست.

Jonathan: هیچ خلاقیت موسیقایی در من نیست. کدنویسی؟ برخلاف شما. وقتی تازه به کدنویسی می‌رسید، مثلاً یک توضیح کوتاه از Jeremy می‌گیرید یا یک درخواست ویژگی در Exercism و ماجرا این است که می‌خواهیم فلان و بهمان کار را انجام دهیم. آیا این واقعاً از نظر ذهنی سرحالتان می‌کند و حس می‌کنید «وای، خب عالی، بیا واقعاً این را کاوش کنیم» و از آن لذت می‌برید؟ آیا از آن فرآیند لذت می‌برید؟ آیا واقعاً همان چیزی است که در آن حس زنده بودن می‌کنید؟

Erik: برخلاف شما. خب. بله، بله. برنامه‌نویسی یعنی اینکه ایده‌ای داشته باشید و آن را به چیزی تبدیل کنید، تقریباً مثل یک خدای کوچک، بله، یعنی از هیچ شروع می‌کنید، ایده‌ای دارید و بعد چیزی وجود پیدا می‌کند. و این خیلی جادویی است. هنوز وقتی یک اسکریپت دارم خیلی ذوق می‌کنم. کلی متن خط‌به‌خط هست و بعد می‌بینید که دارد کارها را انجام می‌دهد. و خیلی لذت‌بخش است که ببینید کامپیوتر بر اساس آنچه گفته‌اید باید انجام دهد، برایتان کار می‌کند. هنوز دوستش دارم. پس جنبه‌ی خلاقانه قطعاً در همین کاوش هم هست، در اینکه کدام راه را برای ساختن چیزی امتحان کنید. و بعد وقتی ساختیش، احتمالاً درباره‌ی چرخه‌ی بازآرایی شنیده‌اید، یعنی چیزی دارید که کار می‌کند و بعد شروع می‌کنید به بهتر کردنش و می‌بینید می‌توانید بهترش کنید. و من عاشق بازآرایی هستم. یکی از کتاب‌ها آنجاست، کجاست؟ اوه، نمی‌توانم ببینمش چون خیلی بیرون کادر دوربین است. ولی کتاب Refactoring نوشته‌ی Martin Fowler است. و یکی از بهترین تجربه‌های من در خواندن درباره‌ی نرم‌افزار است. پس عاشق بازآرایی هستم. همان فرآیندی که چیزی دارید که کار می‌کند، ولی می‌توانید بهترش کنید یا زیباترش کنید، سریع‌ترش کنید، هر معیاری که دارید. و همین دلیل دیگری است که Exercism را واقعاً دوست داشتم، چون برای همین ساخته شده: تست‌ها را حل می‌کنید و بعد، یک بستر تست دارید و می‌توانید هر کاری با کدتان بکنید. و تا وقتی سبز باشد، یعنی کار می‌کند. پس...

Jonathan: این را خیلی دوست دارم. پس می‌خواهم دوباره به دوره‌های زمانی مختلف برگردم. حالا دانشگاهتان را تمام کرده‌اید، برنامه‌نویسی یاد گرفته‌اید، واقعاً به این نتیجه رسیده‌اید که «خب، به این مسیر یادگیری متعهد هستم، می‌خواهم عمیق در آن غرق شوم». پس از آن نقطه چه شد؟ از آنجا که واقعاً متعهد شدید و بعد احتمالاً کم‌کم به حرفه و آینده‌ی شغلی فکر کردید، که همیشه بخش بزرگی از دوران دانشگاه است: اینکه بقیه‌ی عمرم چه کار خواهم کرد؟ ماجرا چطور پیش رفت؟ فکرتان درباره‌اش چه بود؟ چه چیزی جلوی شما باز شد؟

Erik: حتماً. من هرگز واقعاً به حرفه‌ام فکر نکردم. فکر نمی‌کنم در عمرم این کار را کرده باشم. تنها چیزی که واقعاً برایم مهم است این است که کاری را بکنم که دوست دارم و نزدیک خودم باشد تا مجبور نباشم زیاد رانندگی کنم. زیاد رانندگی کردن را دوست ندارم. ولی نه، هرگز واقعاً به حرفه‌ام فکر نکردم. و به‌طرز باورنکردنی هم خوش‌شانس بوده‌ام. اساساً هرگز مجبور نشدم برای شغلی درخواست بفرستم، جز شاید یکی دو بار. همیشه دوستانی داشتم یا کسانی که مرا می‌شناختند. درباره‌ی Exercism هم همین‌طور. Jeremy مرا می‌شناخت و مجبور نبودم درخواست بدهم، از چهار پنج مرحله‌ی مصاحبه‌ی مختلف بگذرم که شما مجبور بودید. راستش شاید حتی بیشتر از آن برای شما. ولی، اوه، من... نه، نه، می‌دانم. ولی من هیچ‌کدام را نداشتم. وقتی دنبال کار می‌گشتم هم همین‌طور بود. همیشه، همیشه کنار درس خواندن در مدرسه کار می‌کردم، حتی در دبیرستان همیشه سعی می‌کردم کمی پول دربیاورم، چون پدر و مادرم پول زیادی نداشتند. پس باید سهم خودم را درمی‌آوردم. ولی عاشق کار کردن هستم. و فکر می‌کنم وقتی دانشگاه می‌رفتم شاید ۲۰ ساعت در یک شغل برنامه‌نویسی کار می‌کردم، چون وقت واقعی‌ای که باید در دانشگاه می‌گذراندیم این‌قدر کم بود که می‌توانستم پول نسبتاً خوبی دربیاورم و با آن این مجموعه‌ی عظیم DVD را خریدم.

Jonathan: بیایید وارد آن نشویم.

Erik: بیایید وارد آن نشویم. بله، متأسفم، در واقع بیشترشان را بخشیده‌ام و آن‌هایی را نگه داشتم که خیلی خیلی خاطره‌ی عزیزی از آن‌ها دارم، ولی بیشترش را بخشیدم. یک زمانی ۴۰۰ یا ۵۰۰ تا DVD داشتم.

Jonathan: یک زمانی ۴۰۰ تا ۵۰۰ تا DVD. اوه، چه بامزه.

Erik: نزدیک همین بود. نزدیک همین بود. بله. ولی خب، وقتی دانشگاه بودم، یکی از دوستانم، همان که آن روزها که ۱۰ ساله بودم برنامه‌نویس بود، با من دانشگاه می‌آمد. او شاغل بود و از من پرسید: «هی، دوست داری به این شرکت بیایی تا کمی پول اضافه دربیاوری؟» پس رفتم. و بعد اساساً همان‌جا ماندم؛ وقتی دانشگاهم تمام شد، پرسیدند آیا می‌خواهی دکترا بخوانی. ولی من آن را این‌طور خواندم که «تو چیزی جالب برای دکترایت پیدا کرده‌ای»، که اتفاقی محض بود، راستش من کار را کردم، ولی شانس بود. من آن را این‌طور خواندم که «می‌خواهیم اسم ما هم روی چیزی که می‌نویسی باشد تا یک مقاله‌ی منتشرشده داشته باشیم». پس اهلش نبودم. و نمی‌خواستم چهار سال کار نظری بکنم. و کل دنیای دانشگاهی واقعاً برایم جذاب نبود. با کار عملی در یک شرکت خیلی راحت‌تر بودم. پس همان‌جا که کار می‌کردم ماندم. آنجا PHP کار می‌کردم و تیم فوق‌العاده‌ای داشتیم. فکر می‌کنم جز شاید تیم فعلی‌مان، هرگز در تیمی این‌قدر متنوع و توانمند کار نکرده بودم. ولی مدیریتمان خیلی بد بود. جو فناوری آنجا خیلی ناراضی بود. فقط، خوب نبود، ولی با این حال خیلی خوش گذشت. ولی PHP زبان محبوب من نیست. پس مشتاق ‌C# بودم. از وقتی هنوز C# 1.0 بود طرفدار C# بودم. آن موقع خیلی ناهموار و نپخته بود. از آمریکا کتاب سفارش دادم و مجبور شدم مالیات اضافه هم بپردازم و در نهایت نسبتاً گران تمام شد، ولی هنوز واقعاً خیلی از آن کتاب استفاده می‌کنم. و بعد گفتم می‌خواهم C# را به‌عنوان شغل انجام دهم، نه فقط در کنار کار. پس درخواست دادم. در واقع برای دانشگاه هم بود، ولی پژوهش و این چیزها نبود. بیشتر پشتیبانی از بخش‌های مختلف دانشگاه بود. و حدود هفت سال C# کار کردم.

Jonathan: و حدود هفت سال C# کار کردم. فقط داستان آنجا را برایم تعریف کنید. چون به‌عنوان داوطلب یا مشارکت‌کننده شروع کردید، درست است؟ و بعد از آنجا کم‌کم بالا آمدید.

Erik: بله. بله، وقتی در دانشگاه کار می‌کردم، آن‌ها خیلی آزادانه اجازه می‌دادند چیزهایی بخوانید یا به کنفرانس‌ها بروید و از این حرف‌ها. یک جایی چیزی به اسم برنامه‌نویسی تابعی به گوشم خورد. و با خودم گفتم: «هی، نمی‌دانم این چیست.» می‌دانستم در دانشگاه یک درس اختیاری درباره‌اش داشتند، ولی من واقعاً کاری با آن نکرده بودم. و فکر کردم شاید بهتر باشد برنامه‌نویسی تابعی یاد بگیرم، شاید لذت‌بخش باشد. یکی دیگر از همکارانم را هم پیدا کردم که می‌خواست همراهی کند. پس یک دوره‌ی رایگان، یک دوره‌ی Scala در Coursera گذراندیم. اگر الان انجامش دهید باید پول بدهید، ولی آن روزها لازم نبود. و تدریسش با Martin Odersky بود، که نویسنده‌ی Scala است، زبانی تابعی که آن را در Exercism هم داریم. و یادگیری برنامه‌نویسی تابعی برایم خیلی لذت‌بخش بود، هرچند بعضی وقت‌ها هم کشمکش ذهنی بود، چون روش واقعاً متفاوتی برای فکر کردن به چیزهاست. ولی دوام آوردم و واقعاً دوستش داشتم. یک انجمن هم بود که می‌توانستید با دانشجوهای دیگر بحث کنید، مثلاً درباره‌ی تمرین‌هایی که نمی‌توانستید حل کنید. بعضی‌ها هم پرسیدند چه منابعی می‌توانم استفاده کنم اگر بخواهم بیشتر درباره‌ی Scala یاد بگیرم؟ و کسی گفت: «هی، Exercism را امتحان کن، چیز جالبی دارند که در آن کلی تمرین مختلف انجام می‌دهید، مثل پازل‌های کوچک.» و با خودم گفتم: «هی، این خوب به نظر می‌رسد.» پس عضو شدم و مسیر Scala را انجام دادم. و واقعاً چیزهای زیادی یاد گرفتم. آن اولین قدم من در دنیای برنامه‌نویسی تابعی بود. بعد گفتم شاید باید غوطه‌وری عمیق بکنم. و رفتم سراغ Haskell. و آن موقع برای من واقعاً غوطه‌وری عمیق بود. ولی خیلی از آن Exercism V1 بود. یعنی فقط مردم روی کدتان کامنت می‌گذاشتند و سیستم مربیگری رسمی یا چیزی شبیه آن وجود نداشت. ولی آدم‌های Haskell کاملاً فوق‌العاده بودند. اساساً Haskell را از آن‌ها یاد گرفتم. کلی گوگل کردم و راه‌حل‌های عجیب پیدا کردم، خودم هم راه‌حل‌های عجیبی می‌نوشتم، ولی آن‌ها همیشه سعی می‌کردند مرا به سمت چیزی هدایت کنند که Haskell اصطلاحی و زیبا باشد. و آن‌قدر تجربه‌ی خوبی بود که با خودم گفتم: «هی، احتمالاً باید خودم هم این کار را برای دیگران انجام دهم. شاید من هم بتوانم کمک کنم.» همیشه کمک کردن را دوست داشتم. پس گفتم C# را انجام می‌دهم و روی کد C# دیگران کامنت می‌گذارم. و همین را دوست داشتم. بعد دیدم که هی، مسیر C# فکر کنم ۴۰ تمرین دارد و Haskell بیشتر دارد. چرا؟ پس سعی کردم بفهمم چرا. و هی، می‌توانستید به Exercism درخواست ادغام بفرستید و تمرین‌های جدید اضافه کنید. و همین چیزی بود که مرا گرفتار کرد. بعد هر آخر هفته تمرین اضافه می‌کردم. و وقتی C# تمام شد، با خودم گفتم: «هی، F#، بیا F# کار کنیم.» F# تابعی است و در اکوسیستم Microsoft است. پس هر دو را دوست دارم. بیا چیزهای محبوبم را ترکیب کنیم. F# را انجام دادم و همان کار را کردم. یعنی نگهدارنده‌ی F# شدم و تمرین ساختم و واقعاً واقعاً عاشقش بودم.

Jonathan: واقعاً واقعاً عاشقش بودم. یک زبان می‌آید، می‌گویید «خب، می‌خواهم Scala را امتحان کنم». تا حدی در آن دندان گیر کردم و بعد در آن غوطه‌وری عمیق کردید. حالا، وقتی که برای فهمیدن هر زبان لازم بود کمتر شد؟ چون الان چند تای آن‌ها را دارید. یعنی این ماجرا چطور پیش رفت؟

Erik: بله، بله. خب، درباره‌ی زبان‌های طبیعی هم همین‌طور کار می‌کند. اگر فرانسوی یاد بگیرید و فرانسوی را خوب بدانید، بعد یاد گرفتن اسپانیایی خیلی راحت‌تر می‌شود، چون دانش مشترک زیادی وجود دارد، مثل واژگان مشترک، تقریباً گویش‌های نزدیک. درباره‌ی برنامه‌نویسی کامپیوتر هم همین‌طور است. اگر C بدانید و به ++C بروید، مفاهیم جدید زیادی هست، ولی چیزهای زیادی هم هست که دقیقاً یکسان است. کل خانواده‌ی زبان‌های Cمانند، که همین یکی از چیزهایی است که در برنامه‌نویسی دوست دارم: اینکه درخت‌های خانوادگی دارید. یک شاخه‌ی Lisp هست، یک شاخه‌ی ML هست، یک شاخه‌ی Cمانند هست. و تقریباً مثل تاریخ است، که شجره‌نامه دارید، درخت خانوادگی و از این چیزها. بلند گفتم. بله، مثل Haskell یا Prolog. ولی آن زبان‌های بیرون از گله را هم دوست دارم، چون ایده‌های یکتا دارند. معمولاً همین چیزی است که می‌خواهم امتحان کنم. یعنی زبانی پیدا کنم که کاری را متفاوت انجام دهد، هرچند همه‌ی زبان‌های برنامه‌نویسی دانش مشترک زیادی دارند. همه‌شان منطق بولی دارند، و این منطق ثابت است، مفروض است. پس همه‌جا یکسان کار می‌کند. ممکن است لازم باشد دو تا & بگذارید، یا and را به‌صورت کلمه بنویسید یا چیزی شبیه آن، ولی پایه‌ها همان است. پس وقتی آن پایه‌ها را داشته باشید و خوب بلد باشید، می‌توانید راحت‌تر به زبان‌های دیگر منتقلش کنید.

Jonathan: تقریباً مثل تاریخ است، که این شجره‌نامه را در یک درخت خانوادگی دارید یا چیزی شبیه آن... راحت‌تر به زبان‌های دیگر. کدنویسی یاد می‌گیرید و تجربه‌ی خودتان را در نظر می‌گیرید. برخی از رفتارها و کارهایی که مردم برای یادگیری کدنویسی انجام می‌دهند چیست؟ و مطمئنم در رشته‌های مختلف هم‌پوشانی وجود دارد. اشاره کردید که متعهد شدید و غوطه‌وری عمیق کردید و آن‌قدر با آن کشتی گرفتید تا فهمیدش. آیا رفتارها یا کارهای دیگری هم هست که در کسانی که دیده‌اید انجام می‌دهند و با خودتان بگویید «آری، آن‌ها خودشان را در موقعیت یادگیری قرار می‌دهند»؟ بله، خیلی خوب.

Erik: ام، من همیشه سعی کرده‌ام مردم را تشویق کنم چیزی بسازند که خودشان دوست دارند بسازند. وقتی PHP یاد می‌گرفتم، چیزی ساختم که ۲۵۰ فیلم برتر IMDB را که دیده بودم پیگیری می‌کرد. خب، فیلم زیاد می‌دیدم و می‌خواستم تک‌تک آن‌ها را تیک بزنم، و همین‌طور کلی PHP و MySQL از آن یاد گرفتم، فقط با ساختن چیزی که می‌خواستم بسازم. چون آن‌وقت اگر به دیوار بخورید، نمی‌خواهید متوقف شوید، می‌خواهید ادامه دهید، می‌خواهید درستش کنید، می‌خواهید کار کند. و من این توصیه را به چند نفر که تازه یادگیری برنامه‌نویسی را شروع کرده بودند داده‌ام و برایشان خوب جواب داده. و امروز خیلی متفاوت از زمانی است که من یاد می‌گرفتم و باید با Stack Overflow و از این چیزها سر و کله می‌زدم. دانش زیادی هست که می‌توانید آنلاین پیدا کنید. ولی پیدا کردن منابع درست هم سخت است. و همین‌جاست که فکر می‌کنم Exercism واقعاً می‌تواند بدرخشد، چون ما می‌توانیم تقریباً دروازه‌بان باشیم، یعنی در جامعه‌ی ما آدم‌هایی هستند که می‌دانند منابع درست کدام‌اند. و این یکی از چیزهایی است که می‌بینم تازه‌واردها با آن دست‌وپنجه نرم می‌کنند. و همچنین این نکته که... تقریباً هرگز منبعی پیدا نمی‌کنید که واقعاً از صفر شروع کند. مخاطب Exercism معمولاً حداقل یک زبان را می‌داند. و بعد سراغ زبان‌های دیگر می‌رود یا در همان زبان عمیق‌تر می‌شود. ولی برای کسانی نیست که... هیچ پیش‌زمینه‌ای در برنامه‌نویسی ندارند. یعنی نمی‌دانید حلقه‌ی for چیست. نمی‌دانید متغیرها چه هستند. stringها برای ذهن شما چیز کاملاً دیگری هستند. بله، همیشه نگاه‌های عجیبی می‌گیرم وقتی همسرم می‌بیند دارم درباره‌ی stringها حرف می‌زنم. در هلند معنای دیگری دارد.

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

Erik: من خیلی از این نظرها را دارم، ولی فکر می‌کنم آن یکی که دوست دارم اینجا توضیحش دهم این است که باید زبان‌های بیشتری از آنچه الان می‌دانید یاد بگیرید. یعنی زبان‌های جدیدی را که نمی‌دانید امتحان کنید و زبان‌هایی را امتحان کنید که با آنچه می‌دانید خیلی فرق دارند. خیلی ساده است. مثلاً اگر C# می‌دانید، همین C# بمانید و مشکلی نیست. ولی اگر توانستید وقت و اراده‌اش را پیدا کنید که چیز دیگری امتحان کنید، مثلاً F# یا نمی‌دانم، Kotlin را امتحان کنید، فقط یک کار متفاوت بکنید و ببینید تفاوت‌ها چیست. برنامه‌نویس خیلی بهتری خواهید شد. من صددرصد مطمئنم که یادگیری F# مرا برنامه‌نویس بهتری در C# کرده، حتی با اینکه زبان‌های متفاوتی هستند و فلسفه‌های متفاوتی دارند. ولی امروز هم‌پوشانی بین زبان‌ها خیلی زیاد است. وقتی زبان‌ها هنوز نسبتاً جوان بودند، مثلاً Lisp هیچ شبیه C نبود. زبان‌های تابعی خیلی از زبان‌های امری متفاوت بودند. ولی زبان‌های مدرن مثل C#، مثل Java، مثل Kotlin، مثل Rust، از زبان‌های دیگر هم الهام می‌گیرند، از زبان‌های تابعی هم همین‌طور. وقتی من دانشگاه بودم، این شوخی رایج بود که برنامه‌نویسی تابعی عالی است، ولی هیچ‌کس انجامش نمی‌دهد. ولی دیگر این‌طور نیست. پس حتی اگر با یک زبان تابعی کار نکنید، زبان‌های تابعی همه‌جا هستند. JavaScript مفاهیم تابعی زیادی دارد. در C# هم تطبیق الگوی پیشرفته هست، هم link هست، کلی چیز تابعی هست. و آنچه می‌بینید این است که زبان‌ها دارند از همه‌جا مفاهیم قرض می‌گیرند. پس دیگر این‌قدر روشن نیست که کدام زبان تابعی است و کدام فقط امری است. الان بیشتر قاطی‌پاتی شده. ولی هنوز فکر می‌کنم اگر یادگیری یک زبان جدید را شروع کنید چیزهای زیادی به دست می‌آورید. بعضی‌ها گفتند هر سال یک زبان جدید یاد بگیرید. من سعی می‌کنم این کار را بکنم. می‌توانم تصور کنم که این برای بعضی‌ها آزاردهنده باشد و کلافه‌شان کند. ولی حداقل یک زبان متفاوت را امتحان کنید و بگذارید زبانی باشد که کمی بیرون از منطقه‌ی راحتی‌تان است. و قول می‌دهم چیزهایی یاد می‌گیرید، چیزهای زیادی یاد می‌گیرید و به‌طور کلی برنامه‌نویس بهتری می‌شوید. و همچنین برای زبانی که همین حالا با آن کار می‌کنید.

Jonathan: و همچنین برای زبانی که همین حالا با آن کار می‌کنید. واضح است که مردم زبان‌های جدیدی برای رفع نیازهای خاص می‌سازند. و می‌گویید که امری و تابعی کمی دارند به هم می‌آمیزند. آیا هرگز وضعیتی می‌بینید که زبان‌ها کنار بروند و ما با چند زبان اصلی بمانیم؟ یا این ساده‌لوحانه است؟

Erik: نه، نه، فکر می‌کنم آدم‌ها برای این کار بیش از حد نظرهای قاطع دارند. پس همیشه زبان‌های جدیدی خواهند بود. هر روز زبان‌های جدیدی می‌آید، که مشکلی نیست. ولی درخت‌ها تکان می‌خورند. زبان‌های محبوب در نهایت احتمالاً دوام می‌آورند. پس نمی‌بینم Java یا C# به این زودی‌ها از میان بروند. ولی مثلاً C یا ++C همیشه زبان‌های عظیمی بوده‌اند. الان Rust را می‌بینیم که تلاش تازه‌ای است برای پرداختن به همان مسائل، ولی با ایمنی بیشتر، ایمنی توکار. و زبان فوق‌العاده‌ای است که واقعاً باید بیشتر درباره‌اش یاد بگیرم. ولی جالب است که Rust الان کم‌کم دارد به همین جا نفوذ می‌کند، یعنی مردم دارند به‌جای C یا ++C از آن استفاده می‌کنند، که به نظر شخصی من چیز خیلی خوبی است. مثلاً در Linux، الان می‌توانید درایورهایتان را با Rust بنویسید. یعنی... همیشه ++C بود. ولی الان از نوشتن درایور با Rust پشتیبانی می‌کنند. آن قدم نسبتاً بزرگی بود. پس فکر می‌کنم زبان‌ها همچنان خواهند بود، چون نمی‌توانید زبانی بسازید که به هر هدفی بخورد. همین یکی از دلایلی است که فکر می‌کنم باید چند زبان یاد بگیرید، چون موقعیت‌های مختلف زبان‌های مختلف می‌خواهند. پس می‌توانید امتحان کنید و شبیه همان است که... آن ضرب‌المثل چیست؟ با چکش مثل اره رفتار کردن. نمی‌دانم این اصطلاح چه بود.

Jonathan: اصطلاح؟ این‌طور است: خب، شما به یک اره نیاز دارید، ولی فقط یک چکش دارید. چه کار می‌کنید؟ خب.

Erik: بله، بله، چیزی شبیه آن. فکر می‌کنم با میخ و چکش بود، چیزی شبیه آن، ولی در ضرب‌المثل‌های انگلیسی خوب نیستم، و شما را با نسخه‌ی هلندی‌اش هم اذیت نمی‌کنم. ولی اساساً این است: اگر فقط C# بدانید، شاید وسوسه شوید برای همه‌چیز از C# استفاده کنید، ولی شاید زبان‌های بهتری برای برنامه‌نویسی سیستمی یا نمی‌دانم، AI، وجود داشته باشد، حتی اگر با C# هم بشود این کار را کرد، معنی‌اش این نیست که باید بکنید. پس اگر زبان‌های بیشتری بدانید، احتمالاً بهتر می‌توانید انتخاب خوبی بکنید، انتخاب‌هایی که با حوزه‌ی کارتان سازگارتر باشند.

Jonathan: خب، پس هم لذت‌بخش است و هم زیبا. درباره‌ی جامعه‌ی Exercism، این هفته چه توصیه‌ای به جامعه‌ی Exercism می‌کنید که قویاً پیشنهاد دهید امتحانش کنند؟ و می‌تواند از هر چیزی باشد، مثلاً می‌تواند این باشد که بروید پیاده‌روی. یا بالانس دستی تمرین کنید. نمی‌دانم. می‌توانید، و اگر بخواهید می‌توانید بیش از یکی داشته باشید... می‌دانم چه می‌خواهم بگویم، پس می‌توانید سه توصیه داشته باشید.

Erik: پس هم لذت‌بخش است و هم مفید. می‌دانم چه می‌خواهم بگویم. خب. خب، اولین چیزی که به ذهنم می‌آید این است که تب «Dig Deeper» که الان داریم را ببینید. ما ویژگی جدیدی به اسم Dig Deeper را اضافه کرده‌ایم که در آن، وقتی تمرینی را حل کردید، یا حداقل وقتی روی آن کار و بازبینی کردید، می‌توانید «رویکردها» را ببینید، یعنی راه‌های مختلفی که یک تمرین می‌تواند حل شود. و اساساً همه در Exercism V1 همین‌طور یاد می‌گرفتند، همراه با کامنت‌ها: با نگاه کردن به کد دیگران و دیدن اینکه چطور حلش کرده‌اند. من هم Haskell را خیلی همین‌طور یاد گرفتم، جدا از کامنت‌هایی که خودم گذاشتم. فقط می‌دیدم: «اوه، این‌طور هم می‌شود انجامش داد.» و بعد خودتان امتحان می‌کردید و می‌گفتید: «هی، اوه، این واقعاً شیک است و می‌توانم کارهای بیشتری با آن بکنم.» و بعد آن را به تمرین‌های دیگر هم منتقل می‌کردید. پس اینکه بتوانید این راه‌های مختلف انجام کارها را پیدا کنید، تقریباً به همان هنر بودن برنامه‌نویسی برمی‌گردد، به اینکه می‌توانید چیزها را به راه‌های مختلف حل کنید. پس این رویکردهای مختلف وجود دارند. من مقاله و رویکرد درباره‌ی معکوس کردن یک رشته نوشته‌ام. این یکی از سؤال‌های پایه‌ی مصاحبه‌های فناوری اطلاعات است: چطور یک رشته را معکوس می‌کنید؟ در C# چند راه اصطلاحی مختلف وجود دارد، ولی با هم فرق دارند و ویژگی‌های کارایی متفاوتی دارند و یکی از آن‌ها خیلی روی کارایی متمرکز است، ولی خوانایی کمتری دارد. من دوست دارم که در وب‌سایت، وقتی تمرین را به شکلی خاص حل کردید، می‌توانید بگویید: «هی، راه‌های دیگری هم هست، و این‌ها مزیت‌های انجامش به این شکل است و این‌ها هم بده‌بستان‌هایش.» و نه تنها می‌توانید رویکردهای مختلف را ببینید، بلکه سعی می‌کنیم یک سند مقدمه هم بنویسیم که به شما در انتخاب بین آن‌ها کمک می‌کند. در فناوری اطلاعات همیشه بده‌بستان وجود دارد. تقریباً هرگز راه‌حلی نیست که فقط بهترین باشد. پس همیشه می‌توانید چیزها را به شکل دیگری بنویسید. و اغلب، بله. خواناپذیرترین راه‌حل همیشه بهترین عملکرد را ندارد. پس کمک کردن به شما در بده‌بستان کردن، فهمیدن بده‌بستان‌ها و انتخاب بین رویکردهای مختلف. این هم چیزی است که در تب Dig Deeper سعی می‌کنیم انجام دهیم. و من در وقت آزادم دارم آن‌ها را می‌نویسم. خیلی لذت می‌برم که این اطلاعات را می‌نویسم و با مردم به اشتراک می‌گذارم. پس واقعاً مردم را تشویق می‌کنم که یا خودشان بنویسند یا فقط رویکردها را بخوانند. می‌دانم هر تمرینی آن‌ها را ندارد. ما این ویژگی را فقط یک هفته پیش شروع کرده‌ایم. پس نسبتاً محدود به چند تمرین C# خواهد بود، ولی به‌شدت گسترشش می‌دهیم. و برای این‌جور چیزها درخواست‌های ادغام از طرف جامعه می‌پذیریم. و با خوشحالی کمک می‌کنم بنویسید و این کار را به سرانجام برسانید و دانشتان از زبانتان را به اشتراک بگذارید. پس فکر می‌کنم این یکی از چیزهایی است که مردم همیشه دوست دارند. اگر زبانی را دوست داشته باشند، دوست دارند دیگران هم دوستش داشته باشند. رویکردها راه خیلی خوبی برای نشان دادن توانایی زبان شماست. بروید ببینیدش. بله.

Jonathan: بروید ببینیدش. توصیه‌ی دیگری برای این هفته دارید؟

Erik: ام، خب، با این خطر که آدم خیلی Exercismمحور به نظر برسم، من واقعاً انجمن Exercism را دوست دارم. یکی از چیزهایی که در حرفه‌ام دیده‌ام این است که پیدا کردن یک جامعه‌ی فناوری‌محور که تقریباً فضای امنی باشد واقعاً سخت است، جایی که بتوانید درباره‌ی چیزها بحث کنید بدون اینکه دیگران حس حماقت به شما بدهند یا کار به دعوا و ستیزه‌گری بکشد. پس واقعاً دوست دارم که ما با انجمن سعی می‌کنیم آن را به جای خیلی امن و شادی‌بخشی برای مردم تبدیل کنیم، و همچنین جایی که بتوانید با برنامه‌نویس‌های خیلی خوب آشنا شوید. یعنی آدم‌هایی که خیلی ماهرند و بینش‌های عالی درباره‌ی زبان‌هایشان یا فضای برنامه‌نویسی دارند. و من واقعاً لذت می‌برم که فقط بنویسم دیگران چه نوشته‌اند. یک رشته‌ی گفت‌وگو درباره‌ی کتاب‌های برنامه‌نویسی محبوبتان هست. و من همین حالا چند کتاب را در فهرست کوتاه کتاب‌هایم برای خواندن گذاشته‌ام، چون همین است... بله، شما به هر کتابی برنمی‌خورید، ولی دیگران خوانده‌اند. اساساً می‌توانید از خرد جمعی استفاده کنید،

Jonathan: ...مردم... بعد می‌توانیم از خرد جمعی استفاده کنیم، اساساً همان رشته‌ی گفت‌وگو، و مطمئنم طلای واقعی‌ای در آن هست که می‌توانیم استخراج کنیم. ولی یعنی، می‌دانید، این واقعاً عالی است Eric. فکر می‌کنم اگر یک توصیه‌ی دیگر هم دارید، خوشحال می‌شویم، ولی در غیر این صورت کم‌کم جمعش می‌کنیم. اما هر فکر یا نظر دیگری... بله، بیایید ادامه دهیم و به اشتراک بگذاریم.

Erik: mhm Ja, das kommt in das Video. نه، واقعاً نه. داشتم سعی می‌کردم یک توصیه‌ی سوم پیدا کنم.

Jonathan: و من واقعاً، همیشه سعی می‌کنم یک توصیه‌ی سوم پیدا کنم. در آن صورت هم زیادی است. ولی Eric، خیلی ممنون بابت این وقت. شنیدن داستان شما واقعاً جالب بود، اینکه چطور به دنیای فناوری راه پیدا کرد. مخصوصاً از شنیدن کمی درباره‌ی تاریخ واقعاً لذت بردم و شاید خوب باشد به آن فکر کنید و کمی بیشتر درباره‌ی اینکه تاریخ و کدنویسی و این چیزها در چه نقطه‌ای هم‌پوشانی دارند صحبت کنید. ولی خیلی ممنون. بودن شما در تیم عالی است و قطعاً چیزهای زیادی از شما یاد گرفته‌ام و باز هم یاد خواهم گرفت. یک تشکر بلند هم برایتان داریم، چون در وب‌سایت Exercism از ۱۰۰٬۰۰۰ امتیاز اعتبار گذشته‌اید. می‌دانم خواهید گفت که دلیلش این است که تقلب کرده‌اید، ولی با این حال، به هر حال آن را یک دستاورد چشمگیر می‌گیریم. پس خیلی ممنون. و بله، اگر دارید این را گوش می‌دهید و با Exercism آشنا نیستید، بروید Exercism را ببینید و مطمئنم جایی در آن فضا به Eric برمی‌خورید. ولی Eric، متشکرم. واقعاً قدردانی می‌کنم. الان ضبط را متوقف می‌کنم و می‌توانیم بعد از این با هم صحبت کنیم، ولی ممنون از وقتی که گذاشتید. و امیدوارم به‌قدر من لذت برده باشید. عالی بود.

Erik: با اجازه‌تان، حتماً. عالی. بله لذت بردم. لذت بردم. خیلی ممنون.

داستان‌های بیشتر از انجمن ما

گوش دهید، یاد بگیرید و از اعضای انجمن ما الهام بگیرید.