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

من خودم تا همین چندوقت پیش جزء آدم های بیش از حد کمال‌گرایی بودم که تو کارشون به شدت سخت میگیرن و این سخت گیری و کمالگرایی بیش از اندازه، تبدیل به مانعی دربرابر پیشروی پروژه هاشون میشه. یکی از خصلت های رایج برنامه نویس ها اینه که دوست دارن راه حل های نرم افزاری رو که برای حل مشکلات موجود در دنیای واقعی به ذهنشون میرسه پیاده سازی کنند. حالا این مشکل ممکنه مشکل خودشون باشه یا یه عده کثیری از مردم که نیاز به یه راه حل مناسب دارن.این خصلت در منم وجود داره و در نتیجه میشه گفت که من هم کلی فکر و ایده و پروژه داشتم که می خواستم تکمیل کنم و ارائه بدم اما مشکل اساسی اینجاست که بیش از 90% اون پروژه ها متوقف شد. نه به خاطر اینکه من توانایی فنی لازم رو برای انجامش نداشتم، بلکه به خاطر اینکه کمال‌گرایی بیش از اندازه ای که داشتم باعث می شد که از ادامه کار ناامید بشم و پروژه رو ناتمام رها کنم.پروژه های ناتمام:چند وقت پیش رفتم سراغ فولدر مربوط به پروژه هام و اینا رو دیدم:پروژه هایی که اکثرشون رها شدناین ها هم که کلهم اجمعین رها شده اندبا دیدن اینها خیلی حالم بد شد. چند لحظه فقط تو ذهنم تصور کردم که اگه این پروژه ها به ثمر می رسید، تا الان گوگل بهم پیشنهاد کار داده بود (نمیگم خیلی پروژه های شاخی تو ذهن داشتم ولی ممکن بود که recruiter های گوگل با دیدن کثرت پروژه هام از سخت کوشی من خوششون بیاد خخخ)البته شاید هم منجر به گرفتن پیشنهاد کار نمیشدن، اما حداقل می تونستن در رزومه من قرار داشته باشن ولی حالا چی؟؟ شده اند یه مشت فایل به درد نخور که فقط دارن جا اشغال می کنند. من فرصت طلایی برای توسعه شون رو از دست دادم. باید تو دوران راهنمایی یه حرکت هایی میزدم که نزدم. الان هم که تو دوره دبیرستان هستم، خیلی وقتم تنگه و سرم شلوغ. اون قدر که دیگه نمی تونم وقت زیادی روی side project هام بزارم.وقتی که دنبال علت این همه پروژه های شکست خورده و رها شده میگردم، فقط یک چیز می بینم. اون هم کمالگرایی بیش از حدی هست که من داشتم. شاید باورتون نشه اما من مثل آدم های احمق، فرانت یکی از سایت هایی که تابستون داشتم روش کار می کردم رو 3 بار از صفر و هربار با یک framework و library و معماری جدید و همچنین theme و design جدید نوشتم. این حرف هایی که زدم شاید به نظرتون مبالغه بیاد ولی کاملا عین حقیقته. دلم می خواست یه وب سایت با ظاهری بی نقص، معماری نرم افزاری بی نظیر و خاص بسازم و در رزومه ام قرارش بدم.اما حدس می زنید سر اون وبسایت چی اومد؟ اونقدر همه چی تو هم تو هم و پیچیده شده بود که حتی دیگه خودمم از کد هایی که خودم نوشته بودم و معماری که درنظر گرفته بودم برای پروژه سر در نمیاوردم. سر انجام از سر اعصاب خوردی، کل پروژه رو انداختم دور.چاره جوییدیدن اون همه پروژه ناتمام شوک بزرگی به من وارد کرد و من رو وادار کرد که به دنبال چاره ای برای این کمالگرایی بیش از حد خودم باشم. روش های مختلفی رو امتحان کردم اما درنهایت با وضع یه سری قوانین وضعم بهتر شد (اما هنوز اون وسواس ذهنی سر جاش هست). فاز بندی پروژههنگام توسعه پروژه ممکنه ایده های زیادی به ذهنتون برسه و به سرتون بزنه که حتما پیاده سازی شون کنید. اگه همینطوری هرچی به ذهنتون رسید رو بی حساب و کتاب پیاده سازی کنید هیچ وقت پروژه تون تموم نمیشه چون همش با ایده های جدیدتون کار رو سر خودتون خروار می کنید. برای حل این قضیه، پروژه رو حتما فاز بندی کنید و در هر فاز یه سری از ایده هاتون رو پیاده سازی کنید. تعداد feature های هر فاز باید مشخص باشه به طوری که در هر لحظه بتونید پیشروی تون رو درصدی اندازه بگیرید. هر ایده جدیدی رو به فاز های بعدی منتقل کنید. وقتی فاز فعلی تموم شد اون وقت تصمیم بگیرید که آیا واقعا ارزش پیاده سازی دارند یا نه.پیاده سازی ساده ترین راه حل های ممکنوقتی می خواهید یه feature ای رو پیاده سازی کنید، سراغ ساده ترین راه حلی برید که به ذهنتون میرسه و اون رو به ساده ترین شکل ممکن پیاده سازی کنید. اینطوری بعدا refactor کردنش هم ساده است. حتی اگه لازم شد می تونید بعدا از اول بنویسیدش اما در ابتدای کار شما فقط باید روی پیشروی کار ها متمرکز باشید. یادتون باشه اگه تلاشتون حاصلی نداشته باشه انگار هیچ کاری نکردید.انجام بهینه سازی راه حل ها در انتهای کارممکنه یه راه حلی رو پیاده سازی کنید و به خوبی هم کار کنه ولی یهو یه راه حل تمیز تر به ذهنتون برسه. در اینجا دو حالت پیش میاد. یا واقعا لازمه یا دارید کار الکی انجام میدید. در این مواقع اگر می بینید که ممکنه در آینده با راه حل فعلی به مشکل بخورید اون جدیده رو پیاده سازی کنید وگرنه بهتره بی خیالش بشید و بقیه کار ها رو پیش ببرید. وقتی تموم شد، اون وقت به این جور کار ها رسیدگی کنید.رها نکردن پروژه فعلیممکنه وسط پروژه حوصله تون سر بره و کلا یه پروژه بهتر به ذهنتون برسه که بخواهید اون رو پیاده سازی کنید. اینجا خیلی از افرادی که مثل من هستن وسوسه میشن و میرن سراغ پروژه بعدی در حالی که پروژه فعلی ناتمام مونده.راهکاری که من برای خودم استفاده می کنم اینه که لیست پروژه هامو روی یه کاغذ می نویسم و میزنمش دقیقا روی دیوار پشت مانیتور کامپیوتر. هر از گاهی چشمم بهشون می افته و یادم نمیره که چه پروژه هایی دارم. اینطوری می تونم پروژه هامو مدیریت کنم و حتی چند پروژه رو همزمان انجامشون بدم بدون اینکه یکی شون عقب بمونه، فراموش بشه و ...این راهکار رو رفتم چون من واقعا نمی تونم سر یه پروژه به مدت طولانی بمونم. کسالت آوره ...این روش برای خودم که تا الان خوب بوده شما رو نمی دونم.امیدوارم پستی که نوشتم به بقیه افراد کمک کنه که اشتباهات من رو تکرار نکنند. راستی اگه راهکار دیگه ای هم سراغ دارید که می تونه کمک کننده باشه، بگید که اضافه کنم. نوشته های دیگه من: https://virgool.io/@mohammadiashkan1384/what-non-technical-skills-does-a-programmer-need-unoqrgvfmo18 https://virgool.io/@mohammadiashkan1384/summery-of-getting-started-as-a-programmer-to-getting-my-first-project-as-a-freelancer-x2j0x0iqm441