زمانی که بچه بودم و داشتم برنامهنویسی یاد میگرفتم، نمیدانستم روی نگاه من به دنیا و شیوهٔ برخوردم با مشکلات در باقی زندگیام تاثیر خواهد گذاشت.
حالا که نگاه میکنم، میبینم که برنامهنویسی سه روش برای فکر کردن به من یاد داد – که همهٔ آنها من را برای چالشهای زندگی فرای برنامهنویسی آماده کرد.
پیدا کردن ریشهٔ مشکل: دیباگ کردن
موقع برنامهنویسی، بدون شک باگهایی پیدا میشود. گاهی از خطاهایی که در کد مرتکب شدهای، و گاهی کاربر نهایی از برنامهات به شکل نامنتظرهای استفاده میکند، که باعث میشود برنامه Exception یا استثنا تحویل بدهد.
مثلا یک برنامهٔ سادهٔ محاسبهٔ مالیات را تصور کنید. فرض کنید طوری برنامهنویسی کردهاید که کاربر باید مبلغ را به عدد وارد کند. ولی اگر بعد از مبلغ نوشت «ریال» چه؟ آن موقع دیگر مقدار وارد شده عدد نیست، و برنامه استثنا تحویل میدهد، و میگوید که چیزی که انتظارش را داشته (یعنی عدد) تحویل نگرفته.
زندگی همیشه استثنا تحویل ما میدهد و در برابرش ما دو کار میتوانیم بکنیم: میتوانیم خودِ استثنا را رفع کنیم، مثلا وقتی رشتهٔ متنی به جای عدد تحویل گرفتیم، سعی کنیم با تبدیل رشته به مقدار عددی مشکل را رفع کنیم – یا آنکه برویم سراغ ریشهٔ مشکل و آن را درست کنیم، تا کاربر از همان اول فقط بتواند مقادیر عددی وارد کند.
یک مثال شخصی بزنم: من دارم تلاش میکنم وزن کم کنم. اما تازگیها متوجه شدهام که رژیم و ورزشهایی که قبلا به آنها متکی بودم دیگر به خوبی قبل جواب نمیدهد. کمک میکند، اما به نتیجهای که میخواهم نمیرسم. زندگی دارد استثنا تحویلم میدهد.
ولی وقتی عمیقتر به مشکل نگاه کردم، و سعی کردم آن را «دیباگ» کنم، متوجه شدم ریشهٔ مشکل در این است که وقتی از سر کار به خانه برمیگردم اصلا نمیدانم چه بخورم. در نتیجه میروم بیرون یا سفارش غذا میدهم و مقدار زیادی چربی و کالری نامعلوم میخورم که با هدفم تضاد دارد. چطور این باگ را رفع کنم؟ اینطور که قبل از شروع روز بدانم که قرار است چه بخورم و مواد لازم برای آن را آماده داشته باشم.
من صرفا «رفع باگ» نکردم. فهمیدم که ریشهٔ مشکل عمیقتر از چیزی است که فکر میکردم، و مشکل اصلی را با آمادگی بهتر رفع کردم.
همکاری: برقراری ارتباط
پروژههای برنامهنویسی بزرگ و پر پیچ و خم است. قطعههای متغیر زیادی در کار است. وقتی یک تیم توسعهدهنده با هم روی یک کد منبع کار میکنند، همه دایما دارند کار دیگری را تغییر میدهند، و ممکن است اوضاع واقعا به هم ریخته شود. همه دارند روی یک هدف واحد کار میکنند، اما چارهای نیست که بخشی از پروژه را برای خودت بگیری، تصاحبش کنی و رویش کار کنی، و با باقی تیم در ارتباط باشی. سامانههایی هستند که به این کار کمک میکنند، مثل گیتهاب، که در آن میشود گفت: «هی بچهها! من الان مشغول کار روی این قطعه هستم. فقط خواستم به شما خبر بدهم که تغییری در آن ندهید. آها، و اگر کار شما وابسته به بخشی است که مشغول آن هستم، وقتی کارم تمام شد به شما خبر میدهم تا چیزهای خودتان را بهروز کنید.»
حالا نوسازی یک خانه را تصور کنید. پیمانکار، معمار، مهندس، طراح… آدمهای مختلفی قرار است پروژهای را انجام بدهند که ممکن است خیلی طول بکشد. و کار همهٔ آنها به یکدیگر بستگی دارد.
کلید کار این است که درست مثل کد، همهٔ قطعات کار را بدانیم و بخشی از پروژه را بگیریم، تصاحبش کنم و رویش کار کنیم، و با باقی گروه در ارتباط باشیم. آیا معمار خانه مشغول درآوردن طرحی برای آشپزخانه است؟ پس به پیمانکار و طراح دکور خبر بدهید تا بتوانند تا وقتی کار معمار تمام میشود مشغول بخش دیگری شوند.
تا به حال چند پروژه شروع کردهاید ولی دیدهاید که آدمهایی که برای انجام کارتان وابسته به آنها هستید مشغول چیزهای کاملا متفاوتی هستند؟ من شمار از دستم در رفته. باید بخش خودت را بشناسی و به بقیه انتقالش بدهی.
اندازهٔ کارها: تخمین زدن
وقتی دولوپرها پروژهٔ جدیدی شروع میکنند، وارد جزئیاتش میشوند. خواست و نیازشان این است که تمام انتظارات مهم از چیزی که قرار است ساخته شود و اینکه چطور ساخته شود را بدانند. اینکه همینطوری «بزنند به دل کار» و در حین انجامش بفهمند چه کار باید بکنند، روشی ناکارآمد است که نتیجهاش سرخوردگی و هدر رفتن وقت و زحمت است.
درست مثل توسعهدهندهها، ما هم باید بدانیم کدام جنبهٔ پروژه حساستر است، و قرار نیست در آخر کنار گذاشته شود. پس اگر دارید وبسایت میسازید، باید بدانید چند صفحه دارد، و آیا قابلیت مبادله مالی هم خواهد داشت، آیا باید روی گوشیهای همراه هم واکنشگرا باشد، آیا برای اجرا به پایگاهدادههای فعلی متکی خواهد بود، و از این قبیل. این سوالات پایهای است که باید جواب داد تا همه بتوانند از همان اول بارآوری و کار مفید داشته باشند.
حالا مثلا شام عید را در نظر بگیرید. خب ما میدانیم که یک شام سنتی چه چیزهایی دارد و میشود همین طور زد به دل ماجرا و شروع به پختن کرد. ولی صبر کن… عمه گوشت نمیخورد؟ برادرم دو بچهٔ شکمویش را هم میآورد؟ مادر وقت نمیکند دسر درست کند؟ ای وای!
درست همانطور که آشپز باید خرید و آمادهسازی و زمانبندی و ارائهٔ این شام حماسی را هماهنگ و منظم پیش ببرد تا همه راضی باشند، توسعهدهنده هم باید دقیقا بداند که کاربر چه انتظاراتی دارد. توانایی تخمین اندازهٔ کار و درک جزئیات کاری که انجام میدهیم قبل از شروع همه چیز را راحتتر خواهد کرد. و البته، اینطوری میدانید که بعد از تمام شدن شام، دسر خوشمزهای در انتظارتان است.
البته برای من زیاد دسر نریزید. رژیم دارم.
منبع:Lynda