ویرگول
ورودثبت نام
mahan veisi
mahan veisi
mahan veisi
mahan veisi
خواندن ۱۲ دقیقه·۶ ماه پیش

وقتی بزرگترین باگ پروژه، کد شما نیست: داستان رشد من در میانه پروژه کارشناسی

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

این داستانِ پروژه کارشناسی من است؛ یک پروژه پیچیده در حوزه هوش مصنوعی و بازسازی تصاویر پزشکی (MRI) که قرار بود نقطه اوج ده ماه پژوهش من باشد. اما در بزنگاه‌های حساس، فهمیدم که بزرگترین چالش من نه کمبود دانش فنی، که ضعف در مهارت‌هایی بود که در هیچ کتاب درسی مهندسی به ما یاد نمی‌دهند: مهارت‌های نرم.

این گزارش، سفر ۴۰ روزه من برای نجات پروژه‌ام است؛ سفری که در آن تصمیم گرفتم با مهارت‌های نرم، همان‌طور مواجه شوم که با یک مسئله مهندسی مواجه می‌شوم: با تحلیل، برنامه‌ریزی، اجرا و ارزیابی.

فصل صفر: نقطه‌ی بحران - تشخیص یک باگِ پنهان

همه چیز با یک هدف بزرگ شروع شد: پروژه کارشناسی من پس از ده ماه تحقیق، قرار بود در حوزه بازسازی تصاویر MRI قلب، یک گام کوچک اما مهم بردارد. می‌خواستم با یک شبکه عصبی هوشمند، کاری کنم که زمان تصویربرداری برای بیماران کاهش پیدا کند، بدون آنکه دقت حیاتی تصاویر پزشکی فدا شود و حتی دقت آن از راهکارهای ارائه شده در سال‌های اخیر بیشتر باشد. با نزدیک شدن به ددلاین نهایی در ۳۰ تیرماه، هیجان و استرس در هم آمیخته بود.

اما پروژه من به یک تنگنای فنی وحشتناک رسیده بود. مدل من برای یادگیری کامل و رسیدن به نتایج قابل انتشار، به یک دوره آموزش بی‌وقفه 15 روزه روی یک پردازنده گرافیکی (GPU) بسیار قدرتمند نیاز داشت. منابع دانشکده اما به‌شدت محدود بود. تنها GPU موجود، یک دستگاه اشتراکی بود که همیشه صفی طولانی از دانشجویان ارشد و دکتری برایش وجود داشت. من بعد از یک انتظار دو ماهه، بالاخره توانستم به آن دسترسی پیدا کنم، اما فقط برای دو روز!

این یک شوخی تلخ بود. مثل این بود که بخواهید اقیانوس را با یک فنجان خالی کنید. تنها راه نجات، قانع کردن اساتید راهنما و رئیس دانشکده، دکتر نبوی و دکتر ابراهیمی مقدم، برای تخصیص یک GPU اختصاصی بود؛ مأموریتی که همه می‌گفتند تقریباً غیرممکن است.

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

آن شکست، جرقه‌ای بود که مرا به فکر فرو برد. هم‌زمان، درگیر پروژه نهایی درس «مهارت‌های نرم» بودم. ناگهان به یک نتیجه تکان‌دهنده رسیدم: شاید مشکل اصلی پروژه من فنی نبود. شاید باید به‌جای دیباگ کردن کدهایم، خودم را دیباگ می‌کردم. تصمیم گرفتم یک کالبدشکافی (Post-mortem Analysis) روی تمام شکست‌های دو ماه گذشته‌ام انجام دهم. نتایج، مجموعه‌ای از «باگ‌های سیستمی» در روش کار و زندگی من را آشکار کرد:


باگ شماره ۱: اهداف مبهم (Error: Null Pointer Exception in Goals)

هدف‌گذاری من برای دو ماه گذشته یک خطای کلاسیک بود: «اتمام کارهای پروژه و کسب بهترین نتیجه». این جمله آن‌قدر کلی بود که رسماً به هیچ‌جا اشاره نمی‌کرد.

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

اگر این هدف را بر اساس اصول SMART مرور کنیم:

  • Specific: فاقد وضوح: «اتمام کارهای پروژه» شامل چه فعالیت‌هایی است؟ فاقد تعیین معیار واضح: «بهترین نتیجه» چه کمّیاتی دارد؟

  • Measurable: هیچ شاخص عددی (مثلاً PSNR، SSIM که در بیان کیفیت بازسازی به کار میرود) مشخص نشده است.

  • Achievable: پاسخ به این بخش نا معلوم است چون شاید به راحتی ادعا کنیم طبق این منابع، بهترین نتیجه x بوده است و در نتیجه قابل دسترسی است. یا برعکس نتیجه y را بخواهیم که طبق منابع قابل دسترسی نیست. 

  • Relevant: هدف مشخص شده تا حد خوبی به هدف نهایی مرتبط است.

  • Time-bound: با توجه به اینکه این هدف برای دو ماه مشخص شده بود، مشکلی از این جهت ندارد. هرچند بهتر بود sprint بندی میشد و طبق هر بخش مشخص میشد که هدف آن چیست. 

باگ شماره ۲: سرریز منابع سیستم (Error: System Overload & Burnout)

لیست کارهای روزانه من شبیه یک کابوس بود: پاک‌سازی داده، کدنویسی مدل، نگارش مقاله، هماهنگی با تیم، تمرین‌های سنگین دانشگاه، مطالعه برای میان‌ترم‌ها، کلاس زبان، فوتبال جمعه‌ها، استخر دوشنبه‌ها، سه جلسه باشگاه در هفته... این حجم از کار بدون اولویت‌بندی، سیستم جسمی و ذهنی من را به مرز فرسودگی رسانده بود. دو بار بیماری جدی، هفته‌ها مرا از کار عقب انداخت. سردردهای مداوم و سندروم بینایی کامپیوتر (CVS) تمرکزم را گرفته بود. بعدها فهمیدم که راه‌حل‌های ساده‌ای مثل دویدن صبحگاهی یا تکنیک ۲۰-۲۰-۲۰ می‌توانست جلوی این فرسودگی را بگیرد. همچنین در کلاس درس مهارت‌های نرم بودم که با مفهوم ماتریس آیزنهاور آشنا شدم؛ ابزاری که می‌توانست این آشوب کارهایم را مدیریت کند، اما من از آن بی‌خبر بودم. ماتریسی برای جداسازی وظایف فوری و مهم، مهم ولی غیر فوری، فوری ولی کم‌اهمیت و غیر مهم غیر فوری آن‌ها.


باگ شماره ۳: اجرای مداوم پروسه فرار -
(!Critical Error: Escape.exe is running)

این ریشه‌ای‌ترین و خطرناک‌ترین باگ من بود. صادقانه بگویم، حداقل در یک سال گذشته، هر زمان که یک «عامل انسانی» سد راه من و هدفم می‌شد، به‌جای رویارویی، مذاکره و حل مسئله، ساده‌ترین راه را انتخاب می‌کردم: فرار. این الگوی مخرب، خود را بارها و بارها در سناریوهای مختلف تکرار کرده بود:

  • پرونده اول: همکار پروژه. همکارم فردی توانمند بود، اما برنامه زمانی‌اش (۳ تا ۶ بعدازظهر) دقیقاً متضاد من (۸ صبح تا ۱۲) بود. او علاقه‌ای به پیام‌رسان‌ها نداشت. واکنش من چه بود؟ همین تفاوت زمان‌بندی و سختی های ارتباط با او، باعث شد تصمیم بگیرم به‌جای نشستن و تنظیم یک برنامه ارتباطی مشترک و تقسیم وظایف شفاف، مستقل کار کنم و تنها در پایان هر ماه گزارشی برای او و باقی اعضای تیم تهیه کنم. نتیجه؟ ساعت‌ها اتلاف وقت روی باگ‌هایی که تجربه او می‌توانست در چند دقیقه حلشان کند. من از «تعامل سخت» فرار کردم و هزینه آن را با «کار سخت» بیهوده پرداختم.

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

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

این سه پرونده، به همراه شکست در ارائه به استاد، یک حقیقت تلخ را پیش روی من گذاشتند: موفقیت پروژه کارشناسی من، بیش از آنکه به بهینه‌سازی الگوریتم‌ها گره خورده باشد، به دیباگ کردن و بهینه‌سازی خودم وابسته است.

فصل دوم: نقشه راه - OKRها و اسپرینت‌ها برای نجات پروژه

با الهام از درس مهارت‌های نرم، یک برنامه ۴۰ روزه طراحی کردم که به چهار «اسپرینت» ده‌روزه تقسیم می‌شد. این برنامه دو هدف موازی را دنبال می‌کرد:

  1. اهداف فنی (Technical OKRs): پیشبرد مراحل فنی پروژه از آموزش مدل‌های اولیه تا رسیدن به نتیجه نهایی و نگارش مقاله.

  2. اهداف نرم (Soft-Skills OKRs): تمرین و تقویت پنج مهارت کلیدی که در آن‌ها ضعف داشتم.

پنج محور اصلی مهارت‌های نرم من این‌ها بودند:

  • ۱. تعامل و متقاعدسازی مؤثر: هدف‌گذاری برای انجام حداقل ۵ مذاکره موفق با ذی‌نفعان پروژه (از استاد راهنما تا هم‌اتاقی) و ثبت نتایج، چه موفق چه ناموفق.

  • ۲. برنامه‌ریزی SMART و ماتریس آیزنهاور: تعریف اهداف مشخص، قابل‌اندازه‌گیری و زمان‌بندی‌شده در ابتدای هر اسپرینت و دسته‌بندی وظایف برای کاهش استرس.

  • ۳. مراقبت از سلامت جسمی (چشم و بدن): رعایت قانون ۲۰-۲۰-۲۰ برای جلوگیری از خستگی چشم و انجام روزانه ۱۵ دقیقه دویدن و ۱۵ حرکت شنا برای حفظ انرژی و جلوگیری از فرسودگی.

  • ۴. تغذیه و آب‌رسانی مناسب: نوشیدن روزانه ۱۰ لیوان آب و خوردن ۲ واحد میوه برای حفظ تمرکز و جلوگیری از سردردهای ناشی از کم‌آبی.

  • ۵. خودرهبری و تاب‌آوری: تقویت توانایی مدیریت استرس و حفظ تمرکز در شرایط پرفشار.

حالا دیگر فقط یک پروژه فنی در دست نداشتم، بلکه خودم به یک پروژه تبدیل شده بودم.

گزارش پیشرفت اسپرینت اول (۵ تا ۱۵ مه): اولین پیروزی و اولین لغزش‌ها

ده روز اول، ترکیبی از امید و چالش بود.

از نظر فنی، توانستم با استفاده از ابزار Weights & Biases تمام آزمایش‌هایم را به‌دقت ثبت کنم و پس از ۱۰ بار اجرای مدل، بالاخره به نسخه‌ای (v5_9) رسیدم که دقت آن از مدل پایه فراتر رفت. این یک موفقیت بزرگ بود.

اما پیروزی اصلی در جای دیگری رقم خورد. یک شب ساعت ۱۰، درحالی‌که مهلت ۲ روزه استفاده‌ام از GPU در حال اتمام بود و کدم باگ داشت، مامور حراست وارد دانشکده شد و با جدیت دستور تخلیه داد. دانشجوی دیگری با او وارد درگیری لفظی شد و اوضاع متشنج شد. در گذشته، من بلافاصله وسایلم را جمع می‌کردم و می‌رفتم (راه فرار). اما این بار، به یاد هدفم افتادم.

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

آن شب، من نه تنها یک باگ نرم‌افزاری، که یک باگ ذهنی را هم برطرف کردم. این اولین مذاکره موفق من بود.

البته همه چیز عالی پیش نرفت. در پیگیری عادت‌های روزانه مثل ورزش و نوشیدن آب، در روزهای پایانی اسپرینت دچار لغزش شدم. دفترچه یادداشت برای ثبت این موارد همیشه در دسترسم نبود و این بی‌نظمی روی انرژی‌ام تاثیر گذاشت. همچنین فراموش کردم که در ابتدای اسپرینت، ماتریس آیزنهاور را برای کارهایم تشکیل دهم.

گزارش پیشرفت اسپرینت دوم (۱۶ تا ۲۵ مه): چالش‌های غیرمنتظره و خودکارسازی عادت‌ها

اسپرینت دوم با چالش‌های فنی غیرمنتظره‌ای شروع شد: قطعی برق! در شرایطی که هر بار اجرای مدل روی کل دیتاست ۷۰ ساعت زمان می‌برد، یک ساعت قطعی برق می‌توانست تمام زحماتم را به باد دهد. این یعنی استرس بیشتر و نیاز به تاب‌آوری بالاتر.

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

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

جمع‌بندی مرحله فعلی: کجا ایستاده‌ام؟

در حال حاضر که این گزارش را می‌نویسم، در میانه راه پروژه ۴۰ روزه هستم.

  • از نظر فنی: با چالش قطعی برق دست‌وپنجه نرم می‌کنم و خودم را برای یک ارائه بسیار مهم به اساتید در اسپرینت سوم آماده می‌کنم تا این بار بتوانم آن‌ها را برای گرفتن GPU قانع کنم.

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

مهم‌ترین یادگیری من تا کنون

اگر بخواهم مهم‌ترین درسی که در این ۲۰ روز گرفته‌ام را در یک جمله خلاصه کنم، این است:

هزینه فرار از یک تعامل سخت، همیشه بسیار بیشتر از هزینه انجام آن است.

خوابیدن در نمازخانه، عوض کردن جای مطالعه، و کار کردنِ تک‌نفره، در کوتاه‌مدت ساده‌تر به نظر می‌رسیدند، اما در بلندمدت بهره‌وری و آرامش من را نابود کردند. یاد گرفتم که رویارویی محترمانه و مذاکره، یک مهارت است و مانند هر مهارت دیگری، با تمرین، شکست و تحلیل، بهتر می‌شود.

ادامه مسیر و نگاه به آینده

این سفر هنوز تمام نشده است. اسپرینت‌های بعدی، چالش‌های جدیدی را به همراه خواهند داشت: از ارائه سرنوشت‌ساز به اساتید تا مدیریت زمان برای نگارش مقاله نهایی و البته، ادامه دادن به این عادت‌های جدید.

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

مهارت‌های نرمپیشرفت شخصیبرنامه ریزیافزایش کاراییهدف گذاری
۳
۲
mahan veisi
mahan veisi
شاید از این پست‌ها خوشتان بیاید