به شما برچسب منفی «همهکاره» زدهاند؟ شاید این در واقع اتفاق خوبی باشد، بهویژه وقتی به افرادی با پیشینهها، تجربههای برنامهنویسی و فرهنگهای گوناگون منتورینگ میکنید! آیزاک که خودش را اهل تکنولوژی و همهکاره معرفی میکند... در کنار بسیاری ویژگیهای دیگر!
Jonathan: سلام به همه و به پادکست انجمن Exercism خوش آمدید. خوشحالم که Isaac همراه من است؛ او یکی از نگهدارندگان و مشارکتکنندگان ماست و بهتازگی تعداد زیادی دانشجو را در GoHortهای ما، همان گروههای یادگیری، منتورینگ کرده؛ گروههایی که ۳۰ روز برگزارشان کردیم، فکر میکنم تا حالا دو بار، بهویژه در Go و Elixir. و Isaac در مسیر Go کمک کرد، که فوقالعاده بود. پس Isaac، خیلی خوش آمدید. میشود کمی بگویید کجا زندگی میکنید، اهل کجا هستید و چطور وارد دنیای فناوری شدید؟
Isaac: بله، من در کالیفرنیا هستم. در سانخوزه، کالیفرنیا زندگی میکنم. راستش را بخواهید، من به خاطر برادر بزرگترم وارد دنیای فناوری شدم؛ او اهل فناوری بود و من هم هر کاری او میکرد، همان را میکردم. خواهر و برادرهای زیادی داشتم. دوست داشتیم با هم وقت بگذرانیم، یا بهتر بگویم بعضی از ما با بعضی دیگر بیشتر از بقیه وقت گذراندن را دوست داشتیم. یک برادر بزرگتر داشتم که خیلی دوست داشتم با او وقت بگذرانم. او لزوماً به همان اندازه از وقتگذرانی با من لذت نمیبرد، اما من کلی دنبالش میرفتم و میخواستم هر کاری او میکند، همان را بکنم. حدود ۱۵ سالش بود که کتاب C for Dummies را که گوشهای از خانه افتاده بود، برداشت، و اگر درست یادم باشد من ۹ ساله بودم. خلاصه او داشت C مینوشت و من هم گفتم اگر او این کار را میکند، من هم میکنم. برنامههایم آن سنوسال خیلی ساده و ابتدایی بودند. بیشتر از این جنس بودند که اسمت چیه، سلام باب. چندان پیچیده نبودند. از یک جایی باید شروع کرد. باید از همانجا شروع میکردم. با خودم گفتم اوه، میشود آن کاراکتر را چاپ کرد و صدایی درمیآورد. این خیلی باحال است. برنامهای نوشتم که واقعاً فقط یک \a چاپ میکرد. اما از ۹ سالگی شروع کرده بودم. برنامههای C مینوشتم. یک دستگاه قدیمی Windows 3.1 داشتیم که در DOS بالا میآمد و برادرم یک اسکریپت batch نوشته بود که وقتی کامپیوتر بالا میآمد، منویی نمایش میداد که میتوانستی از آن گزینه انتخاب کنی، مثل اجرای Windows یا اجرای بازیها؛ یک منوی بازی بود. میتوانستی مثلاً ۵ را بزنی برای Warcraft یا هر چیز دیگر. پس من اسکریپتهای batch مینوشتم، چون بازیهای دیگری هم نصب داشتیم و از این قبیل. و از آنجا به بعد دیگر همهچیز راه خودش را رفت. برادرم برای مهندسی کامپیوتر به دانشگاه رفت و باز هم گفتم اگر او این کار را میکند، من هم میکنم. خلاصه از ۹ سالگی شروع کردم به نوشتن C. در دبیرستان... Visual Basic 6 مینوشتم. یک POM pilot داشتم و در دبیرستان برنامههای مختلفی روی آن مینوشتم. معلم ریاضیام واقعاً باحال بود. من در یکی از همان مدارس قدیمی درس میخواندم...
Jonathan: منظورت همان چیزی بود که... یادت هست تلاش کردند چیزی شبیه نسخهی پیش از iPad را عرضه کنند و چند نفر به آن دست پیدا کردند و یک قلم کوچک هم داشت که با آن میشد خطخطی کرد. همه فکر میکردند فوقالعاده باحال است چون از انتهایش بیرون میآمد و مثل زوپ بود و بعد میشد رویش ضربه زد. کمی... نمیدانم، من همیشه آن را یادم میآید چون بعد از آن iPad آمد و همه گفتند آها، کمی زود بود. Palm Pilot فقط همانقدر، یککم جلوتر از زمان خودش بود، میدانید منظورم چیست؟
Isaac: حدود یک دهه عالی بود، اما بله، همان graffiti پالم را داشت که با آن ورودی میدادی. یک صفحهی ورودی کوچک بود و باید کاراکترها را مینوشتی، اما انگار بر پایهی الفبا بودند. مثلاً A فقط یک مثلث بود و F انگار یک زاویهی راست. بله، معلم ریاضی دبیرستانم میگفت هی، اگر خودت برنامه را نوشتهای، اشکالی ندارد که در امتحان از آن استفاده کنی. خلاصه در دبیرستان برنامههای POM pilot مینوشتم، که خیلی باحال بود. برای مهندسی کامپیوتر به دانشگاه رفتم. آنجا مردم داشتند از زبانهای اسکریپتی حرف میزدند. درست نمیدانستم آنها چه هستند، پس تصادفی Perl را برداشتم. و بعد از فارغالتحصیلی از دورهی تحصیلات تکمیلی، Google استخدامم کرد. در ۲۰۱۳ مرا از ساحل شرقی به کالیفرنیا منتقل کردند. آنجا بود که حدود یک دهه پیش Python را یاد گرفتم و Python در دههی گذشته زبان اصلی من بوده است. من در Google کار کردم، پس سبکم خیلی تحت تأثیر سبک Google است و به همین دلیل عمدتاً به همان سبک مینویسم. و بعد حدود... چهار سال پیش، فکر کنم ۲۰۱۸ یا همان حدود، Google شروع کرد به ترویج زبان Go در داخل شرکت و من آن موقع Go را یاد گرفتم.
Jonathan: عالی. Isaac، وقتی از سبک Google حرف میزنید، آیا یک حس قطعی وجود داشت که این روش درست انجام دادن است، یا...؟ کمی بیشتر توضیح بدهید، چون جالب است.
Isaac: سبک کدنویسی لزوماً روش درست انجام دادن کار نیست، بلکه بیشتر یک روش یکدست است که همه باید از آن پیروی کنند. میگویند توافق خوب یا معاملهی خوب، معاملهای است که هیچکس از آن راضی نباشد. هیچکس کاملاً از راهنمای سبک راضی نیست، اما تا وقتی همه از آن پیروی میکنند، کد یکدست به نظر میرسد. یعنی هر کسی میتواند هر تکه کد را در پایگاه کد Google بردارد و تغییرش دهد و تا وقتی از همان دستورالعملهای سبک پیروی کند، کد همهجا یکدست است؛ لازم نیست بگویید اوه، این پایگاه کد از تورفتگی چهار فاصلهای استفاده میکند و آن یکی از دو فاصلهای، یا نامگذاری این یکی اینطور است و آن یکی آنطور. همهچیز در سراسر پایگاه کد به یک شکل انجام میشود. هیچکس از همهی آن راضی نیست. هر کسی حوزههای خودش را دارد که دوست دارد جور دیگری انجام شده باشد، اما چون یک راهنمای سبک مستند و در دسترس عموم وجود دارد، فقط کافی است در Google عبارت Google Python style guide را جستوجو کنید و به شما میگوید ما در Google کد را اینطور مینویسیم. تا وقتی همه به آن راهنما پایبند باشند، کد یکدست به نظر میرسد؛ که واقعاً خوب است، بتوانید هر پایگاه کدی را باز کنید و هیچ غافلگیریای نبینید که اوه، اینها را جور دیگری مینویسند.
Jonathan: آیا به همین دلیل است که Go شاید خوب در آن بافت جا میافتد؟ چون قالببندی دارد و واقعاً همین است که هست. تأثیر Google کاملاً در آن دیده میشود.
Isaac: بله، نمیدانم Rob Pike چقدر از رویکرد Google تأثیر گرفته یا چقدر خودش بر رویکرد Google اثر گذاشته. مطمئن نیستم کدام باعث آن یکی شد، اما Go قطعاً این را به سطح دیگری میبرد؛ جایی که... حتی بیشتر هم... مثلاً در Python سبکهای مختلفی وجود دارد و مردم linterهایشان را تنظیم میکنند تا چیزهای مختلفی را بپذیرد. مثلاً Google در داخل از تورفتگی دو فاصلهای در Python استفاده میکند، چون کدهای زیادی هستند که عمیقاً تودرتو شدهاند و نمیخواهند دیوار عظیمی از فاصله داشته باشند. در بیرون، بیشتر مردم از چهار فاصله استفاده میکنند و این تقریباً در مستندات Python نوشته شده. اما بله، وقتی نوبت به Go میرسد، این را به سطح دیگری بردهاند و میگویند خود زبان قالببندی را در خود دارد. فقط یک راه برای قالببندی وجود دارد. بحث و جدلی دربارهی اینکه کدام راه درست است وجود ندارد. فقط یک راه هست.
Jonathan: کلی بحث رفتوبرگشت را ذخیره میکند. بگذاریمش همینطور. بله. پس خوب است.
Isaac: بله.
Jonathan: خب، باشه. حالا وقتی در Google شروع کردید، قبلاً هرگز Python کار نکرده بودید یا کمی وررفته بودید، یا پرش آسانی بود؟ چطور... چون طوری گفتید که انگار کار را در Google گرفتید و بعد شد که باشه، خوبه، Python یاد بگیر، بزن بریم.
Isaac: درست است. فکر میکنم پیش از پیوستن به Google هرگز Python ننوشته بودم. یکی دو سال Perl مینوشتم. حدس میزنم آن موقع چند سالی بود که Perl مینوشتم. اولین شغل تابستانیام. آن یک داستان کاملاً دیگر است. شش سال پیش از پیوستن به Google نوشتن Perl را شروع کردم، پس آن موقع مقدار قابلتوجهی Perl مینوشتم. کمی هم Bash مینوشتم، پس با زبانهای اسکریپتی آشنا بودم. اما هرگز Python ننوشته بودم. اما وقتی با بهاندازهی کافی زبان وربروی... شیب یادگیری برای برداشتن زبان دیگری کمی ملایمتر است، چون بیشتر ساختارها را قبلاً دیدهاید و فقط نحوهی نگارش کمی متفاوت و مجموعهابزار کمی متفاوت است. اما خیلی چیزها همان قبلی است، فقط کمی متفاوت، جور دیگری نوشته شده. ساختارها معمولاً خیلی شبیه هم هستند. پس وقتی چهار زبان یاد گرفته باشید، برداشتن زبان پنجم میشود که اوه، این فقط کمی متفاوت نوشته شده.
Jonathan: بله، بله. جالب است. حالا کمی دربارهی اولین شغلتان خندیدید، همان بعد از دبیرستان. خب، آیا همیشه اینطور بودید که میخواهم در مهندسی باشم، میخواهم کار کامپیوتر بکنم؟ آیا همیشه یک فکر آگاهانه بود یا همیشه اینطور بود که اینجا همانجایی است که بهطور طبیعی جا میافتم و از آن لذت میبرم و تمام؟ یعنی چطور...
Isaac: حدس میزنم. خیلی سعی میکردم جای پای برادرم بگذارم. او مهندسی کامپیوتر خواند. شروع کرد به نوشتن برنامه. وقتی من بچه بودم شروع کرد به برنامهنویسی. من هم همراهیاش کردم. از بچگی برنامه مینوشتم. او مهندسی کامپیوتر خواند و همین بود دیگر؛ میخواستم همان کاری را بکنم که او کرد و از طرفی هم نوشتن برنامه و این چیزها خیلی به من خوش میگذشت. پس از زمانی که به دبیرستان رفتم و برادرم از قبل به دانشگاه میرفت، میدانستم که آخرش میخواهم به همانجا برسم.
Jonathan: پس چند سال از شما بزرگتر است و به نظر میرسد تأثیر عظیمی روی شما بهعنوان یک آدم داشته. چند خواهر و برادر دیگر دارید؟ یا او در نظرتان بهترینِ بهترینها بود؟
Isaac: هشت خواهر و برادر دارم، اما او قطعاً کسی بود که خیلی خوب با او کنار میآمدم. یکی از همانهاست که... حدس میزنم با بعضیشان بهتر از بعضی دیگر کنار میآیم. وقتی هشت نفر باشید، همیشه یک طیفی وجود دارد. با او خیلی خوب کنار میآمدم. زیاد شبیه هم فکر میکنیم. علایق مشترکی داریم. همیشه دربارهی کامپیوتر ذوق میکردیم و حرف میزدیم. هنوز هم میکنیم. همسرش دوست ندارد وقتی این موضوع به گفتوگوی سر میز شام تبدیل میشود. میگوید سر میز شام، کار ممنوع. ما همیشه دربارهی برنامهنویسی ذوق میکنیم و مدام از آن حرف میزنیم. واقعاً سخت است بگویم چقدرش فقط خواستنِ من برای کپی کردن او بود و چقدرش صرفاً علایق مشترک ما. الان قطعاً علایق مشترکی داریم. نمیدانم چقدرش ذاتی است و چقدر اکتسابی. واقعاً نمیتوانم نظر بدهم که چقدرش کپی کردن من از اوست و چقدرش علایق مشترک ما. اما چون از سن کم جای پای او را میگذاشتم، من دنبال میکردم و او تا حدی مسیر را میساخت و من از آن پیروی میکردم.
Jonathan: بله، این خیلی باحال است. و او... الان کجاست؟ فقط از روی کنجکاوی، در ساحل شرقی است؟
Isaac: هنوز در ساحل شرقی است و در حوزهی فناوری کار میکند. مدتی کوتاه در یک شرکت کار کردیم.
Jonathan: بله، باشه، خوبه. پس همینطور است. باحال است. فقط کنجکاو بودم بپرسم. حالا، یکی از چیزها... شما در گروهی که همین حالا داشتیم خیلی درگیر بودید. یعنی آخرین گروه یادگیری، بهویژه با Go؛ ما یک برنامهی ۳۰ روزه با Go برگزار میکردیم. چطور... و درگیریتان با Exercism پیش از این بیشتر در زمینهی نگهداری بود، اما تا آنجا که میدانم منتورینگ هم زیاد انجام دادهاید. این تقسیم کار را چطور دیدهاید؟ یعنی چطور با Exercism آشنا شدید و چه جنبههای مختلفی هستند که از مشارکت در آنها لذت میبرید؟
Isaac: اولین بار با Exercism آشنا شدم چون میخواستم Haskell را از نو یاد بگیرم. در Google یک کلاس Haskell 101 گذراندم که خیلی سرگرمکننده بود. بعد گفتم اوه، باید وقت بیشتری صرف این کار کنم. و بعد کنارش گذاشتم. و بعد خواستم برگردم سرش.
Jonathan: و دفعهی بعد میبینمتان.
Isaac: دربارهی هر زبانی، سادهترین راه یادگیریاش را در این میبینم که واقعاً آن را بنویسید. سادهترین راه نوشتنش هم این است که هدفی برای نوشتنش داشته باشید. من هدف خوبی برای نوشتن Haskell پیدا نکردم، که یادگیریاش را واقعاً سخت کرد. اما Exercism را پیدا کردم و گفتم اوه، این شاید کمکم کند Haskell بیشتری بنویسم. پس اولین بار همینطور با Exercism آشنا شدم. وقتی آنجا بودم، گفتم اوه، یک مسیر Python و یک مسیر دیگر و کلی تمرین اینجا هست، پس... دیگر رفتم داخل سوراخ خرگوش و پایین رفتم؟
Jonathan: و داخل سوراخ خرگوش رفتید.
Isaac: بله. شروع کردم به حل تمرینها با Python. شروع کردم به حل تمرینها با Bash. چند تا از تمرینهای Go را هم انجام دادم. وقتی GoHort راه افتاد و داشتم بعضی از راهحلهای قبلیام را مرور میکردم، دیدم خیلی از آنها سه سال پیش ارسال شده بودند. پس بله، اولین بار در ۲۰۱۹ در مسیر Go ثبتنام کردم و آن موقع بخش قابلتوجهی از آن تمرینها را حل کردم. و در این مرحله یک دهه است که Python کار میکنم. پس نسبتاً راحت بود که بهعنوان منتور Python بپیوندم، و این روزها بیشتر وقتم را صرف تمرینها همانجا میکنم. بعد شروع کردم به ارسال PR، یعنی pull request، به مسیر Python، چون چیزهایی بودند که سر جایشان نبودند. و بعد درگیر مسیر Bash شدم. و دقیقاً مطمئن نیستم چطور شد، اما از ارسال اصلاحیه به مسیر Bash به نگهدارندهی Bash تبدیل شدم.
Jonathan: همینطوری؟ یعنی دقیقاً مثل این است که مواظب باشید برای چه چیزی ثبتنام میکنید، درست است؟
Isaac: بله، و بعد Glenn مسیر Ock را راه انداخت و گفتم اوه، من Ock را میشناسم، Ock را دوست دارم، بگذار من هم به این قطار سوار شوم. پس کمک کردم تمرینهای مسیر Ock را بسازیم. کاملاً مطمئن نیستم، اما فکر میکنم سه سال پیش که تمرینهای Go را دیدم، کل مسیر را تمام کردم و بعد یکی از منتورها گفت اوه، تو همهی تمرینها را تمام کردهای، شاید باید منتور شوی. من مناسب نیستم؛ آنقدر زیاد Go نمینویسم و بهقدر کافی منظم نمینویسم که برای منتور بودن در آن راحت باشم. پس واقعاً منتور Go نبودم. اما وقتی به GoHort پیوستم و یک عالمه آدم بودند که میخواستند منتورینگ بگیرند، گفتم اوه، حدس میزنم میتوانم ثبتنام کنم که یک ماه منتور باشم و آنجا کمک کنم. اما در واقع بهتازگی خودم بهعنوان دانشجو به GoHort پیوستم. و بعد ظاهراً از بخش دانشجوها به آن طرف سُر میخورم.
Jonathan: من هم همینطور؛ رفتم و از بخش دانشجوها سُر خوردم به آن طرف، حدس میزنم. مواظب باشید برای چه چیزی ثبتنام میکنید. به شما میگویم، به نظر میرسد الگویی در حال شکلگیری است: برای یک چیز ثبتنام میکنید و آخر سر بهعنوان چیز دیگری از آب درمیآیید. اما این واقعاً باحال است. خب، در مورد زمانی که در مسیر Go دانشجوها را منتورینگ میکردید، بعضی از رایجترین چیزهایی که میدیدید چه بودند؟ یعنی، مسیر Go احتمالاً پر از توسعهدهندههای باتجربه است، کسانی که سابقهی کاری در توسعه دارند. اما چیزهایی که متوجه شدید چه بودند؟ یعنی گفتید باشه، اینها چیزهای رایجی هستند که به نظر میرسد مردم رویشان گیر میکنند. الگویی یا چیزی دیدید که بگویید باشه، این رایج است، این نسبتاً... بهطور پیوسته ظاهر میشود، احتمالاً؟
Isaac: نمیدانم. بیشتر منتورینگیهایی که دیدهام روی کسانی بوده که راهحلشان را کامل کردهاند. مردم بیشتر اوقات تمرین را قبل از اینکه سراغ منتورینگ بروند حل کردهاند. پس در بیشتر تعاملهایی که من دارم، مردم عموماً گیر نکردهاند. اوه، پس بیشتر... میدانید، آنها یک تمرین را با موفقیت تمام کردهاند و بعد بخش زیادی از بازخورد این است که آیا راه کارآمدتری برای انجام این کار هست؟ الگوریتم بهتری هست؟ یکی از موارد رایجی که بیش از حد پیش میآید، ساخت رشته است. در زبانهایی مثل Go و Python که رشتهها تغییرناپذیرند، انجام کلی الحاق رشته کارآمد نیست. پس زیاد پیش میآید که بگوییم هی، میتوانید این را با یک آرایه بسازید و بعد رشتهها را به هم بچسبانید، یا میتوانید از یک string builder در Go استفاده کنید. پس زیاد پیش میآید که... میدانید، آنها را به سمت الگوهای بهتر، بهترین رویهها و الگوها سوق میدهیم. ممنون که تماشا کردید.
Jonathan: باشه، باحال است. جذاب است. حالا، در حال حاضر روزمرهی کاریتان چه شکلی است، از این نظر که توسعه کجا جا میگیرد؟ فرض کنید مدتی در حوزهی فناوری بودهاید؛ روزتان چه شکلی است؟ چالشها چیست؟ الان چه بخشهایی از کارتان را دوست دارید؟
Isaac: من نقش site reliability engineering دارم که تا حدی شبیه DevOps است. کمی هم کار sysadmin در آن هست. حدود یک دهه است که در نوبتهای on-call پیجر همراهم دارم. پس روزمرهام خیلی بستگی دارد به اینکه آن هفته نوبت on-call من باشد یا نه. وقتی on-call هستم، بیشتر تماشا کردن پیجر است؛ یک صف تیکت و یک صف پشتیبانی هست و باید مطمئن شوم که هر فرایند یا مشکل ناکارآمدی تشخیص داده و رفع میشود. این تقریباً یک هفته از هر شش هفته است، یا هر اندازه که تیم الان بزرگ است. و باقی وقت، on-call هستم.
Jonathan: هومهوم.
Isaac: وقت زیادی را صرف وررفتن با خودکارسازی میکنم، پس بیشتر شناسایی فرایندهای دستوپاگیری است و کمتر دستوپاگیر کردنشان. ممکن است اینطور باشد که... شاید دلیلی برای وقوعش باشد، اما عموماً اگر تا وقتی چیزی شروع نشود... میدانید، وقتی این مشکل پیش میآید، باید دستی با اجرای این دستور و آن دستور تعمیرش کنیم و بعد میپرسیم خب، چرا این دستورها را دستی اجرا میکنیم؟ میتوانیم یک اسکریپت Python بنویسیم که همهی اینها را برایتان انجام دهد؟ یا میتوانیم ابزار را بهبود دهیم تا از کار نیفتد و خودش آن مشکل را بگیرد؟ و بخش زیادی هم فقط تلاش برای بهبود روزمرهی اجرای سیستمهاست، طوری که انسانها کمتر درگیر شوند یا لازم نباشد اینقدر عمیق درگیر بمانند تا همهچیز روان پیش برود.
Jonathan: خب، آیا از تلاش برای پیدا کردن همان گوشههای کوچکی که میشود بهینهشان کرد لذت میبرید؟ چقدر از کارتان واکنش نشان دادن به چیزهاست و بعد از آن واکنش گفتن اوه باحال، این یک فرصت است، و چقدر فعالانه دنبال آن گوشههای کوچک گشتن؟ معمولاً تعادلش چطور است؟
Isaac: خودکارسازی را دوست دارم؛ احتمالاً بیشتر از هر چیز در شغلم همین را دوست دارم، اینکه بتوانم کارها را خودکار کنم. همیشه واکنشی نیست. یعنی واکنشی میتواند به این معنا باشد که چیزی خراب میشود، و میتواند هم اینطور باشد که اوه، میدانید، مردم این دستور را اجرا میکنند و من دیدهام دستوری داریم که مرتب کپیپیست میکنیم؛ میتوانم بهترش کنم؟ یا میبینم کسی جایی در یک run book تغییری داده یا دستوری را جایی بهبود داده، و با خودم میگویم اوه، آن دستور خیلی بههمریخته است، میتوانم از صفر بازنویسیاش کنم؟ و البته توجه زیاد هم کافی نیست؛ باید با جذابیت متعادل شود، باید کمتر واژههای بزرگ به کار برد، زبان بهتری داشت، از این قبیل چیزها. باید با تلاش کردن برای انجام آن کار از عهدهاش بربیایید. راستش را بخواهید، اگر فکر کنم، همهچیز در شغلم واقعاً سر جای خودش است. آدم خیلی باانگیزهای هستم؛ نه، شغلم حدس میزنم هر جا که باشد... اما در هر شغلی که دوستش دارم و برای خودم وقت میگذرانم، آنجا فقط برای این است که تلاش کنم و...
Jonathan: میشود گفت تولید، به نوعی.
Isaac: بازآرایی؛ یعنی بفهمید ابزارهایی هستند که میدانید، استفاده از آنها دستوپاگیر است و تصمیم بگیرید بازنویسیشان کنید یا دورشان یک پوسته بنویسید. بله، مثلاً میبینم کد یک برنامهی بزرگ و پیچیده تغییر کرده و میگویم اوه، آن برنامه بههمریخته است. میتوانم بروم بازنویسیاش کنم یا بازآراییاش کنم؟ یا ساختن چیزهای نو؛ یعنی همیشه بازآرایی نیست، بعضی وقتها فقط ساختن ابزارهای تازه است. مثل این است که اوه، یک فرایند داریم که ۲۰ مرحله دارد؛ بگذار همهاش را بریزم داخل یک برنامه. بخش زیادی از آن واقعاً... میدانید، باید اینها را یکجوری کشف کنم. بعضی وقتها چون به من مجموعهای از کارها واگذار میشود کشفشان میکنم و بعد میگویم نمیخواهم اینها را دستی اجرا کنم. بعضی وقتها هم فقط با توجه کردن کشفشان میکنم؛ مثلاً دارم جایی دنبال یک تکه کد میگردم و میگویم اوه، آن کد دیگر که تیم دیگری نگهداریاش میکند، کارها را ضعیف انجام میدهد؛ بگذار بازآراییاش کنم، یا مثلاً از کتابخانههای مدرن استفاده کنم یا هر چیزی، بله.
Jonathan: پس خیلی... فقط این توانایی را داشتن که ببینید. خب چقدر دستتان باز است؟ واقعاً دستتان آنقدر باز است که بگردید و مثل یک پرنده شیرجه بزنید و اینجا و آنجا تغییر بدهید؟ یعنی این باید خیلی باحال و لذتبخش باشد.
Isaac: مدیرم دست مرا خیلی باز میگذارد، که واقعاً خوب است. نمیدانم چقدرش از این میآید که الان در Google نیستم، اما نمیدانم چقدرش از پیشینهی من در Google میآید. در Google، مردم خیلی راحت شیرجه میزدند و میگفتند اوه، من متوجه شدم که... میدانید، تصادفاً از این کتابخانه استفاده کردم و میشود اینطور بهترش کرد؛ بگذار بروم درستش کنم. اوه، خیلی کوتاه در یک استارتاپ کار کردم که فرهنگش خیلی متفاوت و خیلی بستهتر بود. و در آن استارتاپ، مردم خیلی مراقب پایگاه کدشان بودند و اینکه کسی دیگر کدشان را تغییر دهد خیلی پذیرفته نبود. پس من میگفتم اوه، این پایگاه کد مشکلی دارد؛ یعنی واقعاً کسی برای آن پایگاه کد تغییری اعمال نمیکرد.
Jonathan: بله، دست نگه دارید. اما این جالب است چون... آدم فرض میکند که یک استارتاپ خیلی بیشتر اینطور باشد که خب، فقط کار را انجام بده و تا جای ممکن ارزان انجامش بده، میدانید؟ اما در واقع، شاید Google خیلی بیشتر میتوانست این را بهعنوان یک مفهوم بپذیرد. و این... ببخشید، همین حالا چراغها را روشن کردم چون ما... برای همهی شنوندگان بگویم، الان چراغی روشن نیست؛ در کیپتاون هر چند وقت یک بار برق قطع میشود. همین حالا دارم خودم را کور میکنم، اما اشکالی ندارد. اما این جالب است؛ برگردم به آن نکته دربارهی فرهنگ استارتاپ و اینکه بهطرز طنزآمیزی مردم بیشتر درگیر مالکیت داشتن روی چیزها میشوند و بعد شاید کمی کارها را لنگ میکنند، میدانید؟
Isaac: بله، نمیدانم که استارتاپ بودن لزوماً خوب با یک فرهنگ کاری باز... که بیشتر بازیگونه است جور دربیاید. در Google، بخش زیادی از کاری که مردم میکردند بازی بود؛ از کاری که میکردند لذت میبردند. به همین دلیل انجامش میدادند که از آن لذت میبردند. نسبت به آن خیلی خوشبرخورد یا خیلی باز بودند. بعضی فرهنگهای کاری دیگر کمتر بر این استوارند که کارها را لزوماً به این دلیل انجام دهید که از آنها لذت میبرید و بیشتر بر این استوارند که این یک شغل است، یا این کد من است و من میدانم چطور کار میکند، نمیخواهم دیگران به آن دست بزنند. کاملاً مطمئن نیستم چه چیزی در ایجاد این تغییرات فرهنگ کاری نقش دارد. اما Google خیلی حس اینکه همه به همهی کد دسترسی دارند را پرورش داد. همه اختیار دارید که در آن تغییر ایجاد کنید. بروید و هر کاری را که فکر میکنید درست است انجام دهید. و بعد در شغل کنونیام با مدیر کنونیام، او هم دست مرا خیلی باز گذاشته. میگوید حتماً، چیزی برای درست کردن پیدا کردهاید؛ بروید درستش کنید. جایی پیدا کردهاید که میشود بهترش کرد؛ من از سر راهتان کنار میروم. بگویید چه کاری میتوانم برای کمکتان انجام دهم. پس واقعاً میتوانم بخش زیادی از کارم را خودم هدایت کنم و همینطور، میدانید، اگر جایی را ببینم که بگویم اوه، میتوانم این را بهتر کنم، او میگوید بله، باحال است، بروید انجامش بدهید.
Jonathan: باشه، خوب است. و شرکت در ساحل شرقی است، درست میگویم که پس شما در واقع دورکاری میکنید؟ فکر میکنم یادم میآید گفتید که داشتید آمادهی نقل مکان میشدید و بعد COVID آمد و کلاً آن ماجرا به پایان رسید. دورکاری، فاصله، اختلاف زمانی و همهی این چیزها را چطور میبینید؟ روی شما اثر دارد یا...؟
Isaac: قطعاً دلم برای بودن در دفتر و تعامل حضوری با آدمها تنگ میشود. اوه، پس این هم هست. و اختلاف زمانی... تیم من نسبت به اختلاف زمانی خیلی همراهی کرده. من سه ساعت از بقیهی تیمم عقبترم. اوه، یک standup روزانهی کوتاه هست که از دستش میدهم. برای دو محصول مختلف دو جلسهی روزانهی جدا داریم. اوه، پس اولی را از دست میدهم و تیمم خیلی خوب همراهیام کرده و ما در داخل خیلی از Slack استفاده میکنیم. پس آنها خیلی خوب یک رشتهی روزانه در Slack با موضوع مشکلاتی که پیش آمده میسازند تا من هم بهروز باشم، و اگر چیزی لازم داشته باشند، به من پیام میدهند. اوه، من هم تمام تلاشم را میکنم که پاسخگو باشم و صبحها هر چه سریعتر همهی آن چیزها را مرور میکنم. پس اوه، کمی اینطور است که... اختلاف زمانی عالی نیست، اما در عین حال نیست... توانستهایم خیلی خوب از پسش بربیاییم. اوه، و برعکسش هم هست؛ آن طرف میدانند کسی در تیم دارند که کمی دیرتر بیدار است. پس بعضی همکارانم مثلاً ساعت ۶ بعدازظهر به وقت ساحل شرقی میگویند اوه، این خراب است. هی، Isaac در ساحل غربی است، Isaac میتواند در این مورد کمکم کند، چون آنجا هنوز فقط ۳ بعدازظهر است. اوه، پس از هر دو جهت کار میکند. اوه، بله، و...
Jonathan: بله.
Isaac: بله، خب من در ۲۰۱۹ از Google رفتم، ببخشید، ۲۰۲۰. مصاحبهام در ۲۰۱۹ بود. قرار بود در می ۲۰۲۰ به آنها بپیوندم. قصد داشتم اوت، آوریل ۲۰۲۰ اسبابکشی کنم، اما COVID شروع شد و همهی آن ماجرا و دفتر بسته شد و مدام این بود که اوه، دفتر هنوز باز نشده؛ بهمحض اینکه دفتر باز شود، او نقل مکان میکند. و بعد دو سال از پاندمی گذشته بود که دوباره شروع کردند به باز کردن دفتر. و من گفتم میدانید، مطمئن نیستم دیگر بخواهم نقل مکان کنم. نیویورک خیلی هیجانانگیز به نظر میرسید، چون همهی آن کسبوکارها باز بودند و میدانید، مکانها و این چیزها فعال بودند. اما حالا که پاندمی هست، بخش زیادی از آن دیگر آنقدر هیجانانگیز به نظر نمیرسد. پس بعد از دو سال دورکاری، به یک موقعیت دورکاری منتقل شدم.
Jonathan: و شما آدم شهری هستید یا روستایی یا چیزی بین این دو؟ یعنی چه؟ چون نیویورک شهر است. صددرصد شهر است. یعنی هیچ شکلی ندارد. میدانید منظورم چیست؟ پس حدس میزنم تغییر بزرگی میشد. بله. با این حال هیجانانگیز است.
Isaac: من در یک منطقهی کلانشهری بزرگ بزرگ شدم، پس با زندگی شهری غریبه نیستم. الان در حاشیهی شهر زندگی میکنم. از پیادهروی کوهستانی و دوچرخهسواری لذت میبرم و تلاش میکنم هر وقت میتوانم به بیرون بروم. پس از زندگی در حاشیهی شهر، نزدیک مسیرهای فوقالعادهی پیادهروی و دوچرخهسواری و این چیزها، لذت میبرم. نقل مکان به نیویورک تغییر بزرگی میشد. اما فکر میکنم تنوع دادن هر چند وقت یک بار چیز بدی نیست. و اگر از زندگیام در نیویورک بدم بیاید، همیشه میتوانم نقل مکان کنم.
Jonathan: انجام دادنش آنقدر هم سخت نیست. اما باحال است. حالا احتمالاً، اگر اشتباه میکنم تصحیحم کنید، کلی وقت را جلوی صفحه در یک دفتر، دفتر خانه یا هر جای دیگر میگذرانید. آیا هر روز بیرون میروید... چطور تعادل میان دنیای پشت صفحه و... را برقرار میکنید؟ یعنی وقت روزانهای دارید که بگویید باید بروم بیرون و کار دیگری بکنم؟
Isaac: ای کاش اینطور بود. بعضی روزها یا بعضی ماهها یا بعضی سالها بهتر از بقیه هستم. ۲۰۲۰ تقریباً هر روز دوچرخهسواری میکردم و در آن خوب بودم. بیشتر آخر هفتهها بیرون میروم. تلاش میکنم هفتهای یک بار پیادهروی کوهستانی بروم. در این کار خیلی خوب نبودهام، اما دارم میروم کوه. به فصل بستگی دارد. من در کالیفرنیا هستم. بعضی هفتهها فوقالعاده گرم هستند. همین حالا یک موج گرما داشتیم که حدود یک هفتهی پشتسرهم بالای ۴۰ درجهی سلسیوس بود. پس این بیرون رفتن را چالشبرانگیز میکند. ما در کالیفرنیا هستیم که آتشسوزی داریم، پس میدانید، بعضی وقتها یک یا دو هفته پیش میآید که کیفیت هوای بیرون کاملاً برای تنفس ایمن نیست. پس این بودن در فضای باز کالیفرنیا را در بعضی هفتهها چالشبرانگیز میکند. و بعد در پاندمی، ماندن در خانه هم چالشبرانگیز است. پس قطعاً هفتههایی هست که خیلی بیشتر از بقیه در خانه میمانم. اما بیرون رفتن را دوست دارم. میدانید، دورههایی داشتهام که شش ماه پشتسرهم پیادهروی کوهستانی رفتهام، حداقل یک هفته در میان.
Jonathan: و بعد.
Isaac: دورههایی داشتهام که ماهی یک بار کمپینگ رفتهام، میدانید، شش ماه پشتسرهم. پس بعضی دورهها بهتر از بقیه هستم و بعضی دورهها هم فقط دو هفتهی پشتسرهم در خانه میمانم.
Jonathan: بله، باحال است. و خب Isaac، بعدی... شاید، نمیدانم، شاید اینقدر دور را فکر نکرده باشید، اما پنج سال آینده برایتان چه شکلی است؟ ایدهای دارید یا بیشتر اینطور است که میخواهم کسبوکاری برای خودم راه بیندازم یا میخواهم فلان کار را بکنم، یا فقط اینطور است که آه، از زندگی لذت میبرم و از جایی که هستم راضیام؟
Isaac: من، پیش از نقل مکان به ساحل غربی، فکر میکردم درک بهتری از اینکه آیندهام چه شکلی میشود دارم. اما زیر و رو شدن همهی آن به من یاد داد که واقعاً سخت است پیشبینی کنید سال بعد چه میشود، چه برسد به پنج سال بعد. کاملاً خوشحالم. همین تازگی شغلم را عوض کردم. حدود دو، دو سال و نیم پیش شغلم را عوض کردم. از شغل کنونیام خیلی لذت میبرم، پس نمیبینم که به این زودی عوض شود. خوشحال میشوم دو، سه سال آینده، پنج سال بعد، در همان شغل بمانم. عاشق زندگی در کالیفرنیا هستم. عاشق این هستم که میتوانم بروم پیادهروی کوهستانی و دوچرخهسواری و کمپینگ و همهی اینها. پس نمیبینم به این زودی کالیفرنیا را ترک کنم. و نمیبینم به این زودی آن شغل را ترک کنم، چون واقعاً از کار کردن آنجا خیلی لذت میبرم. پس نسبتاً راضیام و تغییر عمده... تغییر عمدهای برنامهریزی نکردهام، اما واقعاً سخت است بگویم.
Jonathan: باحال است. باشه، چند سؤال دیگر دارم که دوست دارم نظرتان را دربارهشان بدانم. اولی احتمالاً همانی نیست که برایتان آماده کرده بودم، بلکه... پس اگر میخواستید... اگر همین حالا ۱۰ نفر به دفترتان میآمدند، ۱۰ غریبهی کاملاً ناشناس که هیچ چیز دربارهی کدنویسی نمیدانستند و مثلاً یکی نوازندهی چنگ بود و یکی باغبان و هر کس دیگری، سه توصیهی اصلی که برای شروع یادگیری کدنویسی به آنها میکردید چه بود؟ یعنی اگر بخواهید خلاصهاش کنید به اینکه این کار را به هر قیمتی بکنید، بعضی از آن توصیهها چه بودند؟
Isaac: خب، توصیهی شمارهی یک من این است که تلاش کنید مشکلی پیدا کنید که بتوانید با کدنویسی حلش کنید. یعنی یک پروژهی مشخص داشته باشید که انگیزهبخش باشد، تا بدون داشتن هدفی مشخص شما را به جلو ببرد. شروع کردن به کدنویسی و یادگیریاش فوقالعاده چالشی است؛ مثل هر مهارت دیگری، یادگیری کدنویسی مقدار قابلتوجهی پشتکار یا سرسختی میخواهد. فقط باید ادامه بدهید. اولش میتواند خیلی چالشی باشد. میتواند خیلی ناامیدکننده باشد. بدون چیزی که شما را به جلو ببرد، خیلی راحت میشود رهایش کرد. پس اگر به هر شکل ممکن است، داشتن چیزی که واقعاً بخواهید با کدنویسی انجامش دهید خیلی کمک میکند. اینها همه یکجور توصیهی بههمپیوستهاند. فقط باید... باید ادامه بدهید. اینکه با خودتان صبور باشید و بپذیرید که دارید یک مهارت تازه یاد میگیرید و زیاد شکست خواهید خورد، خیلی کمک میکند. آدمهایی داشتم که تلاش کردند کدنویسی یاد بگیرند و ناامید شدند. میگویند اوه، من معمولاً در کارها خوبم و این از همان اول کار نمیکند. من هم میگویم بله، شکست بخشی از فرایند یادگیری است. و اگر با شکست خوردن در چیزی راحت نباشید، یاد گرفتن مهارتهای تازه برایتان واقعاً سخت میشود. باید با خودتان و با این فرایند صبور باشید و فقط کلی ادامه بدهید.
Jonathan: مفید است. یعنی میخواهم بگویم، تازه فهمیدم متدها چطور کار میکنند. و این فقط از خلال گذشتن از... چون بخش زیادی از دانش... خب، وقتی مردم دربارهی چیزی حرف میزنند، کلی دانش فرضشده وجود دارد، مخصوصاً وقتی کسی آموزش میدهد. مثلاً ناگهان همه دارند این واژهی متد را میاندازند و من میگویم اصلاً متد چیست؟ یعنی چه خبر است؟ و فقط از طریق گروه Go بود که کم کم فهمیدم اوه، متدها اینطور کار میکنند. تقریباً مثل لحظهای بود که سکه افتاد، اما باید مدتها در این محیط و این اصطلاحات غرق میشدم تا کم کم به خوردم برود. میخواهم بگویم یکی از بزرگترین درسهایم این بود که تلاش نکنم همهاش را یاد بگیرم، بلکه فقط یک مفهوم ساده را کمی کمی جلو ببرم. چون همهچیز آنقدر به هم گره خورده که در نهایت میتوانید کم کم مدل ذهنی را کنار هم بچینید، که واقعاً مهم است. پس این ابزار کوچک خوبی است. به مردم خبر میدهم که توصیهی Isaac این است: صبور باشید، با خودتان مهربان باشید و کمی کمی جلو ببرید. این واقعاً باحال است. باشه. بعد، آخرین سؤالی که دارم، و پیش از آنکه بگذارم بقیهی روزتان را ادامه دهید: ما بهعنوان یک تیم دربارهی این مفهوم حرف زدیم که روی چه تپهای در فناوری میمیرید و جان میدهید. این خیلی دراماتیک به نظر میرسد و پر از نمایش است. و ایدهاش اساساً این است که آن یک چیزی که باور دارید کاملاً کلیدی است و فکر میکنید یک طرز فکر یا دیدگاه تزلزلناپذیر در فناوری است چیست. یک مثال خوب، نمیدانم، در سطحی خیلی جزئی، این است که من همیشه اول تابعهایم را مینویسم و بعد اگر front end کار کنم، CSS را کد میزنم. یعنی اول کارکرد، بعد منطق، بعد هر چیز دیگر. یا مثلاً، میدانید، یکی داشتیم، Rebecca، که مسیر Unison را میگرداند. حرفش این بود که داشتن یک نابغه که نظر خودش را دارد و کار کردن با او سخت است، در مقابل ۵۰ نفری که واقعاً از کار تیمی و حل مسئله با هم لذت میبرند، دومی را ترجیح میداد؛ یک نابغه که همهی پهنای باند را در مدیریت اشغال میکند، نه. پس این یکی از نظرهای او بود و من قشنگ بیانش کردم، اما تپهای که شما در فضای فناوری روی آن میمیرید و جان میدهید، یعنی چیز غیرقابل مذاکرهی شما، چیست؟
Isaac: این احتمالاً خیلی شدید تحت تأثیر این است که Google چطور کارها را انجام میدهد. در Google مفهومی به اسم خوانایی دارند که بر اساس آن کد باید خواندنش آسان باشد. و بخش زیادی از کاری که وقتی کد مینویسم انجام میدهم این است که میخواهم کدم ساده خوانده و فهمیده شود. و کد زیادی دیدهام، مخصوصاً در کد، تمرکز زیادی روی کارایی و بنچمارک کردن و سریعتر کردن کد وجود دارد. و اغلب میپذیرم که روش من لزوماً کارآمدترین نیست، اما اگر ببینم کد خواناتر میشود، کد ناکارآمد ولی خوانا را به کد فوقالعاده کارآمد ترجیح میدهم. مثلاً، میدانید، یک جملهی معروف هست، مطمئن نیستم دقیقاً به چه کسی نسبت داده میشود، که بهینهسازی زودهنگام ریشهی همهی بدیهاست. و هر وقت مردم میگویند اوه، چطور میشود این کارآمدتر باشد؟ میگویم آیا لازم است کارآمدتر باشد؟ میدانید، به مشکل خوردهاید؟ در محیط تولید اجرا میکنید و با مشکل کارایی مواجه شدهاید؟ این برای استفاده در محیط تولید خیلی کند است؟ اگر واقعاً در محیط تولید با مشکل کد مواجه نشدهاید که لازم باشد کارآمدتر شود، چرا کارآمدترش کنید؟ همینطور که هست خواناتر است. نگهداریاش آسانتر است. دیگران میتوانند بفهمند چه خبر است. چرا کد خوبنوشتهی راحتوکار و راحتنگهداری را رها کنید تا چند چرخهی پردازنده صرفهجویی کنید؟ آیا برق آنقدر ارزان است و پردازندهها آنقدر ارزان هستند که لازم نباشد کد را بهینه کنیم؟ فقط برای اینکه بهینهاش کرده باشیم؟
Jonathan: بله، همیشه خندهدار است چون یکی از آن چیزهایی است که... برنامهمان در ۳۰ میلیثانیه کامپایل و اجرا شد. و آنها میگویند اوه، اما ما کاری کردیم که به ۲۰ میلیثانیه برسد. من میگویم نمیتوانم به شما بگویم. نمیتوانستم بگویم کدام سریعتر بود، کدام کندتر. سریع به نظر میرسد. پس فکر میکنم نکتهی خوبی است. مطمئنم از خواندن کدتان لذت میبرم، اما این عالی است. Isaac، خیلی ممنون از وقتی که گذاشتید، برای اینکه زود بیدار شدید و قطعی برق در نیمکرهی جنوبی را تحمل کردید. و من که در تاریکی مطلق نشستهام؛ مطمئنم این برایتان احتمالاً نسبتاً خندهدار است. اما خیلی ممنون از وقتتان. و مشتاقم در گروههای یادگیری آینده و در جلسههای منتورینگ و همهی اینها ببینمتان. و ممنون برای همهی مشارکتی که برای Exercism و در همهی زمینهها میکنید. خیلی قدردانم. و بله، باز هم خیلی ممنون. و چند لحظهی دیگر میبینمتان. نه، باعث افتخار. مراقب خودتان باشید، Isaac. خداحافظ.
Isaac: باز هم خیلی ممنون. نه، لذتبخش بود. مراقب خودت باش، Isaac.
گوش دهید، یاد بگیرید و از اعضای انجمن ما الهام بگیرید.