Gabriel Nelle در جنوب آلمان، نزدیک Baden-Baden زندگی میکند. او در آپارتمانی مشترک با دوستدختر و دو گربهاش زندگی میکند. او در دانشگاه Siegen در رشتهی معلمی ریاضی و آلمانی تحصیل کرد و در سال ۲۰۰۸ فارغالتحصیل شد
Jonathan: خب، سلام به همه. اسم من Jonathan است. خوشحالم که امشب میزبان شما هستم. مهمانی دارم که حضورش در برنامهی امشب برای من افتخار بزرگی است. میخواهم شما را با Gabriel Nelle آشنا کنم. Gabriel یکی از مشارکتکنندگان اصلی Exercism است. او بهطور خاص در مسیر Go نقش پررنگی داشته، اما اجازه میدهم خودش کمی بعد کاملتر معرفی کند. اما فقط بگویم، Gabriel، خیلی خوش آمدی. ممنون که به ما پیوستی و امیدواریم تو هم بهاندازهی همهی شنوندگان برنامهی امشب لذت ببری. خب Gabriel، چرا خودت شروع نمیکنی؟ کمی بگو اهل کجایی و چطور شد که به جایی رسیدی که الان هستی؟
Gabriel: بله. سلام. من Gabriel هستم. ممنون که دعوتم کردید. اهل جنوب آلمان هستم، همانجا بزرگ شدم و الان هم همانجا هستم، نه دقیقاً همان مکان، اما همچنان جنوب آلمان. بله، در... بگذارید اینطور شروع کنم که من متولد دههی شصت... متولد ۸۱ هستم، پس آن موقع بزرگ شدم. و فکر میکنم داستان از اواخر دههی هشتاد شروع میشود، وقتی پدرم اولین کامپیوترش را به خانه آورد. فکر میکنم داستان از همانجا شروع میشود. حداقل بخش مربوط به متنها.
Jonathan: بله.
Gabriel: روی آن MS-DOS نصب بود؛ مطمئن نیستم دقیقاً چه نسخهای بود. فکر میکنم نسخهی قدیمیتری بود، چون اگر درست یادم باشد، پدرم آن را به خانه آورد چون در آن شرکت داشتند دورش میانداختند و کامپیوترهای جدید گرفته بودند؛ پس توانست آن یکی را به خانه بیاورد و بله، آن اولین برخورد من با کامپیوتر بود. جالب و عجیب است.
Jonathan: منظورت آن خطها، آن خطهای رنگی روی صفحهی سیاه است؟ خیلی...
Gabriel: بله، فقط سفید روی سیاه بود. تقریباً همین. و عملاً بیشترش فقط خط فرمان بود که اول با آن آشنا شدم. و بعدها همراه پدرم، حدود سال ۱۹۹۱ بود، پدرم اولین حلقههای Forمان را در QBasic به ما یاد داد. آن موقع حدوداً ۱۰ ساله بودم. و بعد یادگیری لغت هم بود. پدرم برنامهای برای یادگیری لغتها خریده بود که بر پایهی DOS بود و فکر میکنم ماوس داشتید که کلیک میکردید، اما صد درصد مطمئن نیستم. شاید بعدها بود. پس قطعاً آن روزها بود که اولینبار کار با کامپیوتر را شروع کردم و چند بار هم خرابش کردم. پدرم چند بار مجبور شد درستش کند. پس قطعاً علاقه داشتم که دربارهی این چیزها یاد بگیرم. نه واقعاً به این شکل که بنشینم و به خودم بگویم باید این را یاد بگیرم. واقعاً علاقهمند بودم و اینکه بفهمم با آن چه میتوان کرد برایم جذاب بود.
Jonathan: و پدرت... آیا او مشخصاً در حوزهی کامپیوتر کار میکرد، یا فقط در کارش بود که بهطور تصادفی یک کامپیوتر به خانه آورد؟ دلیل خاصی داشت که آن را به خانه بیاورد؟ دلایل کامپیوتری یا دلایل فنی؟
Gabriel: بله، او در اصل برقکار است، چیزی که یاد گرفته. اما آن موقع در Bosch کار میکرد و در بخش الکترونیک بود، جایی که چیپهای جدید یا چیزهای جدید برای خودروها توسعه میدادند. و آنجا طبعاً کامپیوتر داشتند و او خیلی زود مسئول همهچیز پیرامون کامپیوترها، پرینترهای شبکه و از این قبیل شد. پس عملاً از همین راه واردش شد. او کسی بود که همهی کارها را انجام میداد تا آنجا کارها راه بیفتد. و چون مثل بیشتر همکاران بخشش دکترا نداشت، عملاً اینجور کارها را او انجام میداد و چیزهای زیادی دربارهی کامپیوترها یاد گرفت. بله.
Jonathan: بله. خب، ببخشید، همینجا پریدم وسط حرفت. داشتی میگفتی آن موقع با کامپیوتر بازی میکردی و چند بار خرابش کردی؛ این شروع آشنایی تو با کامپیوتر و سختافزار و همهی اینها بود. بعدش چه شد؟ از آن نقطه به بعد چه اتفاقی افتاد؟ روند چطور پیش رفت؟
Gabriel: فکر میکنم قدم بزرگ بعدی این بود که کامپیوتر خودم را گرفتم؛ میگویم شاید پنج-شش سال بعد بود، آن موقع جوان بودم. بزرگترها... و من بیشتر به کامپیوتر علاقه داشتم و در مدرسه هم بخشی از درسها را داشتیم. شروع کردم تکالیفم را روی کامپیوتر بنویسم و از این قبیل کارها. و همان دورهی Word و MS Word و آن روزها بود. و میگویم یک روز شروع شد؛ کامپیوتر من... پدرم همیشه برای کلیسایمان کارهای مربوط به متون دینی انجام میداد. ما در یک کلیسای خیلی کوچک بزرگ شدیم و این متون را داشتیم که عملاً استفاده میکردیم، و پدرم داشت دیجیتالیشان میکرد یا کمک میکرد دیجیتالی شوند. اولش یک پروژهی جانبی بود و دادههایش... بعد در واقع اولین شغل تماموقت من شد، کار برای... بگذارید، میتوانم نگاهی بیندازم؟ کار برای ناشر در آمریکا که مسئول آن متون بود.
Jonathan: آهان.
Gabriel: عملاً پدرم از من پرسید: بله، من همهی این ماکروها را دارم. آنها را در یک Euroscript نوشتهام که بر پایهی یک نسخه از Word بود، میتوان گفت پیش از Word، و حالا میخواهم به Word مهاجرت کنم و همهی ماکروهایم را در Word میخواهم. و من گفتم، باشه. باشه. و اینطوری شروع کردم به برنامهنویسی در Word. یعنی Visual Basic for Applications؛ اول میتوانستید ماکروها را ضبط کنید، بعد کد را ببینید و بفهمید چه کار میکند و بهترش کنید، و عملاً ماکرو را آنقدر بهبود بدهید که... قبلش اینجوری بود که مکاننما را اینجا میگذاشتید و یک کلید میزدید و بعد کاری در چند سطر بعدی انجام میشد. و در نهایت اینطور شد که کل سند Word را از بالا تا پایین، کاملاً خودکار پردازش میکرد. و عملاً این شروع نوشتن ماکروهای زیادی بود که برای آن هدف نوشتم. موج بزرگی ایجاد کرد و کسانی که این کار را به پدرم سپرده بودند گفتند: چه عالی! بیایید بیشتر انجام دهیم و این را هرچه بیشتر خودکار کنیم. بله. پس اینطوری واردش شدم.
Jonathan: پس کلی وقت پدرت را آزاد کردی.
Gabriel: بله.
Jonathan: از آن نظر... در سن کم.
Gabriel: میتوانم همین را بگویم. و بعد نوشتن ماکرو در Word و بعد در Excel. یک سیستم مبتنی بر Excel نوشتم برای فروشگاه... چه بگویم، برای یک فروشگاه کوچک. یک فروشگاه کوچک مواد غذایی ارگانیک و از این قبیل بود، و عملاً همهی قیمتها را یادداشت میکردند و بعد در ذهن یا روی کاغذ حسابشان میکردند. اولش اینطوری کار میکرد. و من برایشان سیستمی نوشتم با بارکدخوان و با ترازو، که چیزی را وزن میکردید و رسید میگرفتید و بعد موقع پرداخت آن را اسکن میکردید و از این قبیل. پس عملاً همهاش بر پایهی Excel بود. بله، ولی قطعاً امروز جور دیگری انجامش میدادم. Excel همزمان هم پایگاه داده بود هم ماشین چاپ. یعنی همهچیز را در Excel قالببندی میکردم، در یک شیت Excel، و بعد روی پرینتر رسید چاپ میشد، و از این قبیل. البته بله، فکر میکنم همان آغاز حرفهی من بود، تا بگوییم.
Jonathan: آن موقع که همهی این کارها را میکردی چند سالت بود؟ و بعد از آن چه شد؟ پیش از دانشگاه بود، در دورهی دبیرستان، و بعد تا چه حد مسیر شغلیات را شکل داد؟
Gabriel: بله، همهاش پیش از دانشگاه بود. سیستم آن فروشگاه وقتی حدود ۲۰ یا ۲۱ ساله بودم... من دور همان زمان خدمات مدنیام را انجام دادم.
Jonathan: ها؟
Gabriel: نوشتن ماکروها وقتی بود که حدود ۱۶ ساله بودم. در این فاصله سیستمی مبتنی بر Access هم نوشتم برای چاپ برچسب نامهها تا بتوانند ارسال شوند. یعنی آدرسها و از این قبیل. و بعد نوبت تحصیل رسید و غافلگیری: من رشتهی انفورماتیک نخواندم.
Jonathan: خب.
Gabriel: در واقع برای معلمی ریاضی و آلمانی خواندم، برای سنهای ۱۰ تا ۲۰ و ۱۹. یعنی همین سنها. پس از پایهی پنجم...
Jonathan: پس تو...
Gabriel: تا پایهی سیزدهم.
Jonathan: پس مسیر شغلیات داشت به سمتی میرفت و آن تصمیم بر چه اساسی بود؟
Gabriel: در واقع احتمالاً مسیر برنامهنویسی را ادامه میدادم. اما در دورهی خدمات مدنی چیزهای خیلی بیشتری جز مسائل فنی یاد گرفتم. در یک تیم کوچک بودم که مسئول یک خانهی سالمندان بودیم. حدود ۵، ۵، ۶ اتاق آنجا بود. آدمهای مختلفی بودند و من بیشتر مسئول یکی از آنها بودم. شاید ۵۵، ۶۰ ساله بود و آلزایمر داشت. و این تأثیر بزرگی روی من گذاشت، چون وقتی در آن سن با چنین چیزی روبهرو میشوی... بله، او ۶۰ ساله بود و برای یک آدم ۲۰ ساله پیر به نظر میرسید، اما برایم روشن بود که این میتواند برای هرکسی رخ بدهد و میتواند برای خود من هم رخ بدهد. و همین باعث شد به حوزههای اجتماعی زندگی علاقهمندتر شوم.
Jonathan: جالب است.
Gabriel: و مسیرهای شغلی اجتماعی. و در واقع همین دلیل بود که آن موقع معلمی را انتخاب کردم. هم میخواستم کد بزنم، هم در تدریس یا کمک به همدانشگاهیهایم خیلی خوب بودم، مخصوصاً در مدرسه. ریاضی قویترین حوزهی من بود و همیشه دوستش داشتم. بله، همیشه دوست داشتم به دیگران کمک کنم مهارتهایشان را بهتر کنند و همیشه لذت میبردم وقتی یکدفعه میفهمیدند. وقتی میدیدم یکباره جرقه میزد و میگرفتندش. بله. و من در واقع معلم شدم.
Jonathan: چه جالب. فقط بگو، تو به خدمات مدنی اشاره کردی. در آلمان اجباری است که هر دانشجو یا هر بچهای باید پیش از رفتن به دانشگاه انجام دهد؟ این چطور در فرهنگ آلمان جا میگیرد؟
Gabriel: آن موقع جایگزین خدمت سربازی بود. یعنی یا ۹ ماه خدمت سربازی میکردی، یا ۱۱ ماه خدمات مدنی. این الزام بود.
Jonathan: خب.
Gabriel: برای مردها، نه برای زنها.
Jonathan: آیا در آلمان هنوز هم همینطور است؟
Gabriel: نه، دیگر اینطور نیست. نه. نه.
Jonathan: خب. میدانم که در سوئیس، که همسرم اهل آنجاست، همینطور است. پس فقط... این ساختار هنوز رایج است. خب، حالا تو ریاضی خواندی و برای معلمی تحصیل کردی، و طبعاً برنامهنویسی نقش پررنگی در زندگیات داشت. کِی... یعنی لحظهای داشتی که بگویی، در واقع من معلمم، از این کار لذت میبرم، اما آن بخش برنامهنویسی هم هنوز فعال و درگیر است؟ این دو، تدریس و برنامهنویسی، چطور با هم کنار آمدند؟
Gabriel: چطور به برنامهنویسی برگشتم؟ بله.
Jonathan: بله.
Gabriel: در دورهای که درس میخواندم، عملاً دو کار جانبی داشتم. یکی تدریس بود. در یک آژانس تدریس خصوصی تدریس میکردم. در دانشگاه هم تدریس میکردم، برای سالپایینترها، بیشتر ریاضی، عمدتاً در ترمهای اول و دوم. و همزمان در یک شرکت فناوری کار میکردم. کارشان بیشتر مبتنی بر Access بود.
Jonathan: آهان.
Gabriel: شرکتی بود که سختافزار و نرمافزار برای اشتراک خودرو میساخت، و برای شرکتهایی که خودروهای زیادی داشتند و به کارمندانشان اجاره میدادند. و آنجا اول بهعنوان مستندساز شروع کردم، و بعد فهمیدند که من برنامهنویسی هم بلدم. پس خیلی زود به حوزهی برنامهنویسی رفتم. بله. و بعد میگویم اوضاع بیشتر وقتی تغییر کرد که... در بخشهای آخر تحصیل که باید شش هفته در مدرسه میگذراندی و بعد چهار هفته و از این قبیل. و فکر میکنم برایم روشن و عزیز شد، همچنین از طریق گفتوگو با معلمهای بسیار باتجربه و بسیار بسیار فداکار، معلمهای واقعاً وقفکار، که عملاً زمانه خیلی تغییر کرده. دانشآموزها خیلی تغییر کردهاند. یک معلم بود، همیشه پایهی پنجم و ششم درس میداد، و به من میگفت پنج سال پیش در کلاسم یک دانشآموز بود که از آن بچههای مسئلهدار بود، به این معنا که خانهی سالمی نداشت، طلاق بود یا مشکلاتی در خانه و از این قبیل. و حالا بیش از ۵۰٪ کلاسش اینطورند.
Jonathan: حتماً.
Gabriel: و این مربوط به ۱۰ یا ۱۵ سال پیش است. ۲۰۰۶ یا ۲۰۰۷ باید بوده باشد، پس ۱۵ سال پیش. و این نشان میداد چقدر اوضاع عوض شده. و برایم روشن بود که خیلی از دانشآموزان امروز دیگر اصلاً نمیخواهند یاد بگیرند. و معلم همیشه آخرین است، عملاً معلم همیشه آخرین... دنبالهی همهچیز. والدین و مدیر مدرسه و دانشآموزها؛ همهشان ارباب معلماند. بله. معلم همیشه یکی از آخرین نیهاست، میشود گفت، یا مطمئن نیستم به انگلیسی چطور بیانش کنم. او همیشه کسی است که باید همهی مسئولیت را بپذیرد اما عملاً هیچ اختیاری ندارد.
Jonathan: اختیار برای... برای عمل کردن. بله.
Gabriel: بله.
Jonathan: پس تصمیم تو... ببخشید، دارم حرفت را قطع میکنم. ادامه بده، ادامه بده.
Gabriel: همین چیزها، حداقل باعث شد خیلی فکر کنم. و بعد از اینکه دانشگاه تمام شد، دوباره سر از برنامهنویسی درآوردم، چون یکی از دوستانم که همان کسی بود که کار متون را به پدرم سپرده بود، از من پرسید آیا میتوانم در یک پروژه کمکش کنم. و آن پروژه که اول قرار بود پروژهای چهار یا شش هفتهای باشد، به پروژهای دو سال و نیم یا سه سال و نیم تبدیل شد. یا سه سال و نیم.
Jonathan: دامنهی پروژه مدام بزرگتر شد. گسترش دامنه واقعی بود!
Gabriel: بله. اول از من خواست در کاری کمکش کنم. و بعد همیشه با کسی از آن ناشر در آمریکا در تماس بود. و ناشر همیشه میگفت من یک صفحهی عمومی برای این میخواهم با متون؛ میخواهم مردم کل کتابها را آنلاین بخوانند.
Jonathan: وای.
Gabriel: یک جا به دوستم گفتم، داشت تلفنی با او حرف میزد و گفت میتوانم تصور کنم این کار را انجام دهم. الان واقعاً کار دیگری ندارم. و او گفت، آه، Gabriel انجامش میدهد. و اینطوری شروع شد. پس یک پروژه داشتم، و بعد سه سال و نیم روی آن پروژه کار کردم. هزاران کتاب را آنلاین کردیم، کل کتابخانهی محتوا، فهرست... زبانهای مختلف به هم وصل میشدند. بله، آن وبسایت هنوز آنلاین است. آدرسش egwwritings.org است. اگر کسی علاقه دارد نگاهی بیندازد، طراحی جدیدی دارد. حدود دسامبر سال گذشته دیدم که به آن طراحی سوییچ کردند، اما کد زیرش...
Jonathan: همان است.
Gabriel: بیشترش مال من است، چون میبینم... چون بیشترش بر پایهی JavaScript بود.
Jonathan: بله.
Gabriel: کد خیلی شبیه است، فایلها جور دیگری سازماندهی شدهاند و استایلهای مختلف همانها هستند.
Jonathan: لینکش را بفرست تا در زمان مناسب در یادداشتهای برنامه منتشرش کنیم. خب، تو سه سال و نیم، سه سال روی این پروژه کار کردی. همهی اینها را فهرستبندی کردی. آن موقع JavaScript زبان اصلیات بود؟ چه بود... میشود گفت ساختار فنیات چه بود؟ روی چه چیزی تمرکز داشتی؟
Gabriel: آن عملاً قدم بزرگ فاصله گرفتن از نرمافزار ویندوزی بود، که قبلاً Visual Basic و Visual Basic .NET بود. و حالا فقط jQuery و JavaScript و در پشتصحنه PHP.
Jonathan: خب.
Gabriel: قرارمان این هم بود که هر وقت تحقیق میکردم، نرخ ساعتیام کمتر باشد، یکسوم زمانی که واقعاً برنامهنویسی میکردم. و بله، همین به من این آزادی را داد که عملاً در حین کار یاد بگیرم. بله.
Jonathan: عالی. بعد... Exercism. و الان کارهای زیادی انجام میدهی. درست است که بگویم Go عملاً ویژگی اصلی کارت است؟ خیلی منتورینگ میکنی و... خوب، در Exercism و در Go درگیر بودی و به این سمت کمک کردی. چه زمانی وارد ماجرا شد و چرا برایت جالب بود؟ بفرما.
Gabriel: بله، سال ۲۰۱۶ بود، اولین شغلم بعد از آن پروژهی بزرگ. در واقع نزدیک پایان آن پروژه، کمکم به Go روی آوردم. در آن شغل بیشتر PHP و Python کار کردم. و خیلی زود زبان محبوبم شد، چون آن سادگی را دارد. عملاً تلاش میکند از آن دنیای دیوانهی ویژگیهای بیشتر و بیشتر و زبانهای پیچیدهتر و پیچیدهتر و سربار بیشتری برای توسعهدهنده بیاید؛ چون او باید انتخاب کند کدام راه را برود. و باید همهی راههای دیگران را هم بفهمد. اینهمه سربار، و بعد Go یکدفعه این سکوت و این سادگی را برگرداند. و خیلی زود تبدیل به چیز شمارهیک من شد؛ طوری که در آن شرکت نیم سال قبل از رفتنم یک نمونهی اولیه با آن ساختم، چون میخواستند به Go سوییچ کنند. و اولش طبعاً همان چیزهای اولیه بود که به چیزهایی میخوری که در زبان نمیشود انجام داد، و بعد میفهمی چرا آنطور انجام دادنش بیمعنی است، یا چرا بهتر است جور دیگری انجامش دهی. واقعاً علاقهمند بودم که یاد بگیرم اینها را چطور انجام دهم. و اینطوری بود که شروع کردم به گوش دادن به پادکست Go Time. از Changelog است.
Jonathan: خب.
Gabriel: و Katrina Owen فکر میکنم دو بار در آن پادکست بود. حداقل دو بار از او شنیدم، فکر کنم. بله. و اینطوری بود که به آن نگاه کردم. فکر میکنم سال ۲۰۱۷ در Exercism ثبتنام کردم. مطمئن نیستم، باید نگاه کنم.
Jonathan: تصور میکنم. درست است؟
Gabriel: بله، فکر میکنم حتی شاید نسخهی یک بود، چون اولش هیچ... واقعاً بازخوردی نمیگرفتم. چند تمرین انجام دادم اما هرگز بازخورد نگرفتم و میتوانستم به دیگران بازخورد بدهم و دادم. اما هرگز بازخورد نگرفتم. پس فرایندی برای گرفتن بازخورد وجود نداشت. و اگر میخواستی، خوب؛ اگر نه، رهایش میکردی. بله. فکر میکنم آن نسخهی یک بود، درست است؟
Jonathan: تصور میکنم بله. فکر میکنم از نسخهی یک تا نسخهی سه تغییرات زیادی بوده.
Gabriel: بله. بله.
Jonathan: در نسخهی یک بازخورد کم بود. نسخهی دو بازخورد خیلی زیادی میخواست، و بعد نسخهی سه یکجایی در میانه نشست، شاید کمی کمتر. اما نه. و آیا در ساختن نسخهی سه درگیر بودی و چطور... بله. مشارکتت آنجا چه بود؟ کاملاً برایم روشن نیست اما دوست دارم بفهمم.
Gabriel: شاید یک قدم عقب بروم، اگر اجازه بدهید. عملاً بعد از آن مصاحبهی دوم برگشتم. از Katrina در Exercism شنیدم.
Jonathan: خب.
Gabriel: آن موقع نسخهی دو وجود داشت. و کلی کار بود و اینهمه بازخورد لازم بود. پریدم وسط و واقعاً از دادن آن بازخورد لذت میبردم. و عملاً شروع کردم به فکر کردن به اینکه چطور میتوانم این را سریعتر کنم. بله. چون زود فهمیدم که، مخصوصاً در تمرینهای اول، معلوم بود که همان پاسخ را بارها و بارها و بارها میدهم.
Jonathan: بله.
Gabriel: و از طرف دیگر، طبعاً بعضی وقتها... این دو مسئله، و بعضی وقتها این مسئله و یکی دیگر. پس عملاً شروع کردم به بهینهسازیاش. شروع کردم به نوشتن یک برنامهی Go که از تحلیل ایستا استفاده میکند، چون میخواستم وارد حوزهی تحلیل شوم. قبلاً انجامش نداده بودم. میخواستم با آن آشنا شوم. پس در هر صورت علاقهمند بودم امتحانش کنم و ایدهی خوبی به نظر میرسید. چون هنوز کدی بود که همیشه خیلی رایج یا خیلی مشابه بود. راهحلهای یک تمرین، مخصوصاً اولینها، خیلی شبیه هم هستند. و اینطوری وارد تحلیل ایستا شدم و فقط الگوهای مختلف را در کد میگشتم و بعد خودکار بلوکهای پاسخ یا بلوکهای از پیش تعریفشده به پاسخ اضافه میکردم. و عملاً این را بهصورت محلی شروع کردم و اینطوری توانستم حدود ۱۰۰ تا در هفته، ۱۰۲ تا در هفته انجام دهم. و حتی تماموقت هم کار نمیکردم. کنار شغلم بود. و بله. و بعد کمکم شروع شد... فکر میکنم Pitfield اولین نفر بود. John Arun فکر میکنم اسم واقعیاش باشد. او اولین کسی بود که گفت وای، این عالی است. این فوقالعاده است. و اینطوری کارهایی که میکردم کمکم شناخته شد، با آن تحلیل ایستا. و فکر میکنم بخش بزرگی از نسخهی سه بود، چون شروع کردیم به فکر کردن به اینکه چطور میتوانیم کار یک منتور را با این ابزارها کم کنیم، با این خودکارسازی، با تحلیل ایستا یا ابزارهایی که خودکار کد را بررسی میکنند و خودکار بازخورد میدهند. حتی کاملاً خودکار، بدون اینکه منتوری درگیر شود یا لازم باشد درگیر شود. و چون دربارهی منتورها، روشن بود که ما منتور داریم و برای آن حجم کار کافی نیستند. ابزار وارونگی هم داشتیم و همچنین دیدیم که خیلی از منتورها در حال خسته و فرسوده شدن بودند، ناپدید میشدند و بله، برای خیلی از منتورها زیادی بود. کار سنگین بود؛ آنها ۵۰۰ راهحل یا بیشتر برای منتورینگ داشتند، و بعضی وقتها زمان انتظار یک ماه یا بیشتر بود. و طبعاً در چنین شرایطی دانشآموزان هم یکجایی رهایش میکردند. بله.
Jonathan: هوم. جالب است چون فکر میکنم Jeremy آن روز میگفت از میان همهی راهحلهایی که ارسال میشود، حدود ۷۵٪ کاملاً یکتا هستند، که به نظر من هم خیلی جالب است. یعنی میروی سراغ یک تمرین Hello World، طبعاً خیلی ساده است. حتماً باید یک الگوی استاندارد باشد که مرتب تکرار میشود. و او گفت مردم چیزهای خیلی متفاوتی را امتحان میکنند. و جالب است که آن نقطهی تلاقی را میدانی، چون هرچه کدنویسی محبوبتر میشود و افراد بیشتری سراغ توسعه و برنامهنویسی میآیند، به این فکر میکنی که این خودکارسازی از کجا شروع میکند به بیاثر کردن نقش توسعهدهنده؟ نمیدانم آیا این اتفاق میافتد. فکر میکنم هنوز خیلی چیزها لازم است. اما در مورد Exercism، نمیدانم نظرت چیست، اما حس میکنم اخیراً فشار زیادی روی منتورینگ هست که خیلی جالب است، چون همانطور که گفتی، همهی آن درسهای تکراری را که مدام باید بدهی برمیدارد و به شکلی میگذارد که برای آدمها قابل مدیریت باشد. در همان حال، آیا به جایی نمیرسد که واقعاً به تعامل انسانی، به یک انسان برای محتوا نیاز داشته باشی؟ نمیدانم نظری داری یا نه، اما فکر میکنم این حوزهی جالبی است.
Gabriel: بله، فکر نمیکنم توسعهدهندهها بهزودی جایگزین شوند. هنوز خیلی وقت لازم است. در توسعه، در اپلیکیشنها بهطور کلی، در منتورینگ فکر میکنم تحلیل ایستا و منتورینگ خودکار و منتورینگ خودکار بهطور کلی در Exercism میتواند کمک بزرگی باشد. اما برای منتورینگ واقعی، به منتور نیاز است، به نظر من. بله. مثلاً من کسی را دارم که هر دو-سه ماه یک تماس داریم، بعضی وقتها بیشتر. و دارم در مسیر شغلیاش منتورینگش میکنم. بله. و همچنین از نظر فنی هم خیلی عمیقاً فنی، اما روش کاملاً متفاوتی از منتورینگ است تا اینکه فقط به راهحل نگاه کنی و بگویی چه چیزی را میتوانی بهتر کنی. و فکر میکنم منتورهای موجود همچنان برای همین لازم هستند و قطعاً همچنان لازم خواهند بود. و فکر میکنم همین چیزی است که میتوانیم رویش تمرکز کنیم. از طرف دیگر فکر میکنم نمیتوانیم منتورها را کاملاً در مورد راهحلها جایگزین کنیم و فکر نمیکنم باید این کار را بکنیم. میتوانیم خیلی چیزها را خودکار کنیم، اما منتور کسی است که میتواند جهت را نشان بدهد. او میتواند مشکلاتی را ببیند که با آنها دستوپنجه نرم میکنی و بگوید این و این را بفهم، نه فقط اینکه کدت را اینطوری بهتر کن.
Jonathan: بله. بله.
Gabriel: و صادقانه بگویم، دوست دارم منتورینگ بیشتری به Exercism برگردد. پس دارم فکر میکنم آیا باید...
Jonathan: منظورت تعامل چهرهبهچهره است؟
Gabriel: بله. دارم فکر میکنم آیا باید... قبلاً این مسیر را داشتیم، ۱۰ تمرین، حداقل ۱۰ تمرین. که باید از آن عبور میکردی و فقط وقتی میتوانستی ادامه دهی که منتور شده باشد.
Jonathan: بله.
Gabriel: و فکر میکنم با خودکارسازیای که حالا داریم، واقعاً میتوانیم آن را دوباره روشن کنیم. یا شاید نه الان، اما در آینده. و فکر میکنم دوستش دارم.
Jonathan: قطعاً میتوانیم، باید در یک تماس اجتماعی مطرحش کنیم، چون فکر میکنم جالب میشود که این را دوباره به کانون توجه برگردانیم. خب Gabriel، یکی از سؤالهایی که زیاد میپرسیم، و این همان چیزی نیست که قبلاً با تو حرف زدم، اما یکی از سؤالهایی که پرسیدنش را دوست دارم چون همیشه جالب و متفاوت است این است که آیا برنامهنویسی برایت یکدفعه جا افتاد؟ بعضیها میگویند تجربهای داشتهاند که یکدفعه همهچیز معنا پیدا کرد. من اغلب از داستان خودم استفاده میکنم. مثالی از مدرسه میزنم، وقتی شیمی میخواندم و در بریتانیا، جایی که مدرسه میرفتم، این امتحانها را داری. همهچیز به آن امتحانها میرسد، سه سال قبل از آن امتحانها. یعنی سه سال درس میخوانی و در امتحان نهایی به اوج میرسد. و این در همهی درسها. و یکی از موضوعها طبعاً شیمی بود. حدود سه سال را بیآنکه از شیمی سر در بیاورم گذراندم. نمیتوانستم، نمیشد، نمیتوانستم بفهممش. بعد یک هفته قبل از امتحان، مثل اینکه سکه افتاد؛ آن تعبیر که یکدفعه معنا پیدا کرد. و گفتم، خدای من. میتوانم همهچیز را از جدول تناوبی دربیاورم. اگر اعداد جدول تناوبی را بدانم، میتوانم این و آن و آن را بفهمم. و چیزها واقعاً ساده شدند. آیا تو هم لحظهای اینطوری برای برنامهنویسی داشتی یا چیزی بود که طبیعی برایت معنا پیدا میکرد؟ و آن لحظه کِی بود، اگر موضوعیت دارد؟
Gabriel: مطمئن نیستم چنان لحظهی مشخصی داشته باشم. فکر میکنم خیلی کمک کرد که آن ضبط ماکرو را خیلی زود داشتم و با Visual Basic for Applications کد را نگاه میکردم. مطمئن نیستم آیا هنوز چنین چیزی وجود دارد. فکر میکنم هنوز میتوانید در Word این کار را بکنید. اما اغلب چنین چیزی پیدا نمیشود که ضبط کنی و بعد کد را ببینی و اینطوری یاد بگیری. فکر میکنم این برایم خیلی راحتترش کرد، چون اولش خیلی دستوپنجه نرم میکردم. فکر میکنم یک لحظهای که میتوانم بگویم، نه اینکه چیزی را فهمیدم، بلکه فهمیدم اصلاً کارهایی که میکنم درست است یا غلط، وقتی بود که به آن شرکت پیوستم، وقتی دانشجو بودم؛ اولینبار بود که با توسعهدهندههای دیگر کار میکردم. قبلش همیشه تنها بودم و باید عملاً همهکار خودم میکردم. و همیشه یک سؤال بزرگ بود: آیا معمولاً اینطور انجامش میدهند؟ عجیب به نظر میرسد. پیچیده به نظر میرسد. به نظر میرسد کار میکند، اما آیا درست است؟ و این سؤال یکجورهایی وقتی جواب گرفت که به آن شرکت پیوستم و کار با Go را شروع کردم. و قطعاً چیزهای زیادی بود که باید یاد میگرفتم و خیلی چیزها یاد گرفتم. مثلاً رکوردستهای Access. قبلاً واقعاً نمیفهمیدمشان. با آنها کار کرده بودم اما...
Jonathan: آهان.
Gabriel: بله، کار میکرد.
Jonathan: بله. چیزی...
Gabriel: بعد واقعاً فهمیدم، کمکم فهمیدمشان. شاید آن چیزی بود که برایم جا افتاد چون همکاری داشتم و او توضیحش داد و واقعاً جا افتاد؛ یک روز فهمیدم چطور کار میکنند و قرار است چطور کار کنند و چطور درست استفاده شوند و از این قبیل. پس بله، شاید یکی از آن نقطهها بود. اما فکر میکنم این نقطهها خیلی زیاد در کارمان پیش میآیند. فکر نمیکنم فقط یک نقطه باشد، شاید یک نقطهی اولیه باشد. برای Go هم جاهای زیادی هست که ممکن است برایم جا بیفتد، جاهایی که میفهمم چرا چیزی اینطور است و چطور باید استفاده شود.
برای مثال context. بله، مثلاً context. بله. مثلاً context در نسخهی... که اضافه شد، مطمئن نیستم، ۱.۶ یا ۱.۷ باشد. در آن زمان نگاهشان نکردم. صادقانه بگویم اولش واقعاً لازمشان نداشتم. بعد یکبهیک... یک ملاقات بود و کسی دربارهی context ارائه داد، اینکه چطور استفاده میکنید، چطور... و آن فکر باعث شد که باید نگاهی بیندازم. اما هنوز چند ماه طول کشید تا واقعاً نگاهشان کنم و بفهمم چرا وجود دارند. و مثلاً بستن کانال؛ مطمئن نیستم از آن آدمهایی باشی که هنوز در اینترنت پیشنهاد میدهند یک goroutine را با بستن کانال ببندی و نباید این کار را بکنی. context برای همین است. بله، شما از یک context استفاده میکنید، context را کنسل میکنید و بعد میتوانید goroutine را با آن ببندید. اگر از کانال بسته استفاده کنی، عملاً داری کاری را دستی انجام میدهی که context در درون خودش انجام میدهد، و آنقدر دام وجود دارد، آنقدر مشکل که معمولاً آدمها اشتباه انجامش میدهند.
Jonathan: مطمئنم یک لایو استریم داشتی و دربارهی این حرف زدی. فکر میکنم یادم میآید که گفتی فقط از context استفاده کنید چون...
Gabriel: بله.
Jonathan: خیلی منطقی است.
Gabriel: یادم است آن بخش را گفتم.
Jonathan: بله. اما خب، پس در مورد منتورینگی که در گذشته انجام دادی، بعضی از... میتوانی مشخص کنی چه کارها، رفتارها یا ویژگیهایی هست که باعث میشود آدمها مطالب را سریع بگیرند؟ میتوانی بگویی چه میکنند که خودشان را در موقعیتی قرار میدهند که سریعتر یا مؤثرتر یاد بگیرند؟ یا بیشتر منتورها، یا آدمهایی که منتورینگشان کردی، طبیعتاً اینطور درگیرند؟ یا آدمهایی هستند که بگویی وای، اینها چیزهایی میکنند که شتابشان میدهد؟
Gabriel: مطمئن نیستم بتوانم این را دربارهی دیگران بگویم. قطعاً دربارهی خودم میتوانم بگویم. فکر میکنم از پدر و مادرم یاد گرفتم. آنها خودشان کلی چیز یاد گرفته بودند و من هم از آنها یاد گرفتم که خودم چیزها را یاد بگیرم. یعنی برنامهنویسی را کاملاً خودم یاد گرفتم. اولش پدرم بود. چند چیز هم در مدرسه بود. بیشتر وقتها، در پایههای بالاتر مدرسه، راستش من، یا بهتر بگویم ما، تقریباً همهمان از معلم بهتر بودیم، پس خیلی یادگیریای نبود. بیشتر یکجور یادگیری از همدیگر بود. اما در کل همهچیز را خودم یاد گرفتم. و این چیزی است که فکر میکنم در برنامهنویسی لازم داری. چون مدام باید در چیزهایی کندوکاو کنی که قبلاً ندیدهای. از آنها نمیدانی، باید دربارهشان مطالعه کنی. پس چه کلمهای؟ این توانایی. بله. این توانایی که بتوانی در چیزی کندوکاو کنی و خودت یادش بگیری، فکر میکنم کلید یادگیری در برنامهنویسی است. و طبعاً میتوانی خیلی سریعتر یاد بگیری اگر کسی را پیدا کنی که دربارهاش به تو بگوید. پس نمیخواهم بگویم دنبال منتور نگرد، سراغ Exercism نرو و از این قبیل. آن به رشد سریعترت کمک میکند، اما با این حال همین است. این چیزی است که میگویم.
Jonathan: برای من اینطور به نظر میرسد که یادگیری تو از مسیر عملی حل مسئله آمده. یعنی چه نوشتن ماکرو برای اینکه کارها را کارآمدتر کنی، یا هر چیز دیگر؛ به نظرم این یک مضمون اصلی بود که در زندگیات تکرار شده، از نظر یادگیری، که فکر میکنم خیلی با آنچه Exercism هم بهطور کلی میخواهد بکند همراستاست: کمک به مردم برای عملاً انجام دادن کارها.
Gabriel: بله. همین سفرش است.
Jonathan: پس بله. خیلی عالی است. خب Gabriel، وقت زیادی نمانده، اما دو سؤال آخر دارم... خوب، نه سؤال، یکی سؤال است و از تو میخواهم نظری بدهی، و بعدی هم نوعی نظر است. از تو میخواهم به جامعه توصیهای بدهی برای کاری که این هفته باید امتحان کنند. اما اول اینکه ما با خیلی از مهمانهای قبلی که مصاحبه کردهایم حرف زدهایم و اگر این پادکست یا لایو استریم را مدتی گوش داده باشی، میدانی که معمولاً نزدیک پایان یک سؤال بزرگ میپرسیم. و آن سؤال این است: آن تپهای که حاضرید رویش بمیرید در فناوری چیست؟ یعنی آن نظری که بهشدت به آن پایبندی و میخواهی از آن دفاع کنی. در نظر داشته باش که باید دلیل خوبی برایش بیاوری. نمیشود فقط بگویی این نظر من است و تمام. باید بتوانی از خودت دفاع کنی. اما آن نظر چه خواهد بود؟ هرچقدر هم جدی یا شدید یا پیشپاافتاده که دوست داری. خب چه خواهد بود؟
Gabriel: میگویم یک ضربالمثل است. ما در جامعهی Go یک ضربالمثل داریم یا کسی گفته، و آن این است: کد کسلکننده بهتر از کد زیرکانه است.
Jonathan: از این خوشم آمد. یعنی چه؟
Gabriel: یعنی چه؟ بله، عملاً خلاصهی بخش بزرگی از فلسفهی Go دربارهی سادگی و خوانایی است. یعنی اگر در کد Go ببینی و بگویی وای، این زیرکانه است، در واقع کد بدی است. حتی اگر نویسندهاش خیلی باهوش بوده و خیلی زیرکانه انجامش داده. و بعضی وقتها حس میکنم اگر واقعاً سادگی و اصطلاحات Go را رعایت کنی، در کل کدت حتی کدی نداری که بخواهی به آن اشاره کنی یا بتوانی بگویی ببین این کد چقدر خوب است، چون همهی کدت عملاً کسلکننده و خیلی ساده است و هرکسی به کدت نگاه کند میگوید چه چیزی این وسط خاص است؟ بله، اما نکته این است که تو به آن سادگی رسیدهای چون برنامهنویس خوبی هستی و یک فرایند تکراری است؛ و نوشتن کد پیچیده خیلی راحت است. نوشتن کد ساده سخت است. چون اول باید مسئله را در ذهنت ساده کنی، بعد باید کد را درست بنویسی، بعد باید آن را تکرار کنی و سادهاش کنی. و این فرایند خیلی طولانیتری است و توسعهدهندههای خیلی بهتری میخواهد تا فقط نوشتن کد پیچیده، که وقتی نگاهش میکنی فهمیدنش سخت است، خواندنش سخت است، نگهداریاش سخت است و تغییرش سخت است.
Jonathan: این همان چیز همیشگی بدهوبستان است، نه؟ من در فضای فناوری نسبتاً جوانم، سه سال، و از دید توسعهدهنده نیامدهام. از سمت محصول آمدهام، بیشتر سمت محصول. دیدگاه کسبوکار. و یکی از چیزهایی که واقعاً جالب بود این بود که هرچه جلوتر رفتم بیشتر روشن شد که همهاش بدهوبستان است. یعنی میگویی بدهوبستانش کد ساده در برابر کد پیچیده است، در حالی که کد پیچیده ممکن است بعدها دستوپاگیرتر و سختتر شود. کد ساده ممکن است بیشتر طول بکشد و در ابتدا انرژی و تلاش بیشتری بخواهد. و این همان بدهوبستانی است که مدام انجام میشود. یکی از آن چیزها... نمیدانم نظرت چیست، اما به نظرم واقعاً آن سمت سادگی مهم است، چون یادم میآید دوستی در دانشگاه داشتم که همیشه برای تکالیفش مقالهی دو صفحهای مینوشت، چون میتوانست همهچیز را در دو صفحه خلاصه کند و نمرهی عالی میگرفت. پس فکر میکنم با کل مفهوم سادگی جور در میآید، که فکر میکنم نوشتن کد ساده واقعاً سخت است چون تفکر روشن میخواهد، نه فقط کدنویسی. پس فکر میکنم آن تپهی ارزشمندی است و فکر میکنم خوب بیانش کردی. عالی. خب Gabriel، سؤال آخر این هفته. و حالا میتوانی کمی توصیه به جامعهی Exercism بکنی. هر چیزی میتواند باشد. توصیهی سلامتی، توصیهی غذایی. این فرصت توست که یک توصیه با جامعه در میان بگذاری و هرچه بخواهی میتواند باشد. خب توصیهات به جامعهی Exercism این هفته چیست؟ آن یک کاری که باید امتحان کنند یا انجام دهند، به نظر تو؟
Gabriel: اوه، این یکی سخت است. خب، حالا که گفتی هر چیزی میشود، میتوانم دو چیز بگویم؟
Jonathan: اجازه میدهم، اجازه میدهم دو تا بگویی.
Gabriel: خب. یک توصیه: من در واقع گیاهخوارم. گیاهخوار بزرگ شدم. هرگز گوشت نخوردهام و در واقع بیشتر کودکی و جوانیام وگان بودم. پس یک هفته بدون هیچ فرآوردهی لبنی را امتحان کنید. این یکی. و توصیهی دیگر، مطمئن نیستم در یک هفته بشود، اما اگر توسعهدهندهی خوبی هستید، خیلی جالب و ارزشمند است که حافظهی اشتراکی را بین چند سرویس امتحان کنی؛ همان سرویس، حافظهی اشتراکی. سعی کن یک حافظهی اشتراکی با پروتکل Raft پیاده کنی. میتوانی از یک کتابخانه استفاده کنی. لازم نیست خود Raft را پیاده کنی، اما...
Jonathan: Raft. باید لینکش را برایم بفرستی تا آن را بگذارم. پس این چالش Gabriel است... خوب، شاید بهتر باشد اسمش را بگذاریم چالش Gabriel برای این هفته. شاید بیشتر توصیه نباشد.
Gabriel: بله. بیشتر چیزی است که امتحانش کنی.
Jonathan: یک چالش اعلام میکنی. میتواند سرگرمکننده باشد. خب. پس یک هفته بدون هیچ فرآوردهی گوشتی. ببین چطور پیش میرود و یک سرور حافظهی اشتراکی بساز. چه میگویی؟ سرویس، حافظهی اشتراکی؟
Gabriel: بله، میتوانی اسمش را بگذاری پایگاه دادهی کلید-مقدار درونحافظه.
Jonathan: خب.
Gabriel: یعنی چند سرویس، یک پایگاه داده یا یک سرویس. بله.
Jonathan: عالی. همین.
Gabriel: چون چیزهای زیادی دربارهی نحوهی کار پایگاههای داده به تو یاد میدهد. زیر پوستهشان. مخصوصاً مدلهای اشتراکی مثل... بله، مطمئن نیستم. Cassandra یا Scylla، نمیدانم Scylla را داری یا نه. یکجور Cassandra است اما در C++ و حالا به پروتکل Raft سوییچ میکنند. یا... یک پایگاه دادهی کلید-مقدار است. یک نسخهی اشتراکیاش... دِیس، نه، پایگاه داده نیست. مدیریت بازگشت است. بله، Be Degraff از Degraf Beja. آن یکی هم فکر میکنم از Raft در زیر پوستهاش استفاده میکند تا دادهها را توزیع کند. نمیتوانم قطعی بگویم، باید دوباره نگاهش کنم. اما پایگاههای دادهی زیادی هستند که از آن استفاده میکنیم. سیستم توزیعشده. و سیستم توزیعشده عملاً یک چالش بزرگ زمانهی مدرن ماست، به نظر من. داریم حلش میکنیم، اما هنوز چالشهای زیادی برای غلبه کردن هست. و بله، همیشه خوب است که بتوانی اینطور فکر کنی، چون اگر بتوانی، درهای زیادی باز میشود.
Jonathan: هوم.
Gabriel: اگر چیزی لازم داشتی... در شرکت آخرم واقعاً در همان مسیر بودم، داشتن حافظهی اشتراکی بین چند سرویس بهطور همزمان. بله.
Jonathan: شاید لازم باشد این را بهعنوان یک کلاس پیشرفته بگذاریم. چند هفته به مردم وقت میدهیم امتحانش کنند. بعد Gabriel...
Gabriel: بله، همان کلاس پیشرفته است... وقتی تمرینها را تمام کردهای و همهی تمرینها را انجام دادهای.
Jonathan: همان است. همان بزرگش. همهچیز را به هم وصل میکند. Gabriel، خیلی ممنونم از وقتی که گذاشتی. واقعاً از گپ امشب با تو لذت بردم. اگر بخواهی بعد از پایان ضبط کمی بمانی، فقط سریع. اما فقط میخواستم خیلی تشکر کنم و واقعاً از هر آنچه در Exercism میگذاری قدردانی کنم، و نه فقط برای ما، بلکه برای همهی منتورینگی که دورتر انجام میدهی و کمکی که به مردم میکنی تا کد بهتری بنویسند. مطمئنم همهجا از آن خیلی قدردانی میشود. پس ممنون از وقتی که گذاشتی و... به Gabriel پیام بده. اگر در Exercism هستی، برایش پیام بگذار، منتورینگ بخواه و مطمئنم با Gabriel وقت خوبی خواهی داشت. عالی.
Gabriel: خیلی ممنون.
Jonathan: ضبط را تمام کنیم. بله، نه، ممنون که به ما پیوستی و بهزودی در فلان پلتفرم جایی میبینمت.
Gabriel: ممنون.
گوش دهید، یاد بگیرید و از اعضای انجمن ما الهام بگیرید.