کمالگرایی یا مشکل آفرینی؟ در برنامه نویسی

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

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

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

کمالگرایی در یادگیری برنامه نویسی

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

1- برای یادگیری برنامه نویسی چه پیشنیازهایی لازم است؟، خب این سوال راحت‌ترین سوال در این زمینه هست، اما ممکن است در مقالات و سایتهای مختلف این پیشنیازها را به سبک‌های گوناگون توضیح دهند که این باعث سردرگمی شما شود، اما جواب این سوال در حقیقت خیلی ساده است: شما باید مقدمات کامپیوتر رو یاد بگیرید، نحوه کدینگ اطلاعات، انواع کدها در کامپیوتر و کار با مبناهای عددی مختلف و نحوه تبدیل به آنها را یاد بگیرید، حتماً اصول ابتدایی الگوریتم نویسی و فلوچارت رو یاد بگیرید(غیر از نیازهای اولیه یادگیری، در خیلی از مقالات و مطالب متوسط و پیشرفته علوم داده از شبه‌کدها و اشکال فلوچارت برای توضیح استفاده می‌شود)، سعی کنید یاد بگیرید برای مسائل مختلف روزمره و ریاضی الگوریتم بنویسید.

2- با کدام زبان شروع کنم، این سوال سخت‌ترین، پیچیده ترین و بی‌پاسخترین سوالات است، حتی خیلی از کسانی که تجربه سالها برنامه‌نویسی دارند نیز واقعاً مطمئن نیستند کدام زبان بهترین هست، خیلی از برنامه نویسان هستند که بعد از مثلاً 10 سال کار کردن با یک زبان، به زبان دیگری مهاجرت می‌کنند، متأسفانه اکثراً افراد به همان دلیل میل به کمال که دارند خیلی در این سوال معطل شده و متاسفانه زمان بسیار زیادی از دست می‌دهند، یک پیشنهاد این است که بجای این همه سوال و گشت و گذار توی صفحات مختلف، با کمک گرفتن از یکی از افراد و دوستان برنامه‌نویسی که بهش دسترسی دارید شروع به یادگیری همان زبانی بکنید که اون شخص با آن کار می‌کند، باور کنید اگر مفاهیم پایه برنامه‌نویس رو خوب یاد بگیرید براحتی می‌توانید به زبان دیگری کوچ کنید، اینطور حداقل صرفه‌جویی زیادی از لحاظ زمانی می‌شود و بجای درگیری با پاسخهای بیشمار و معمولاً بیفایده‌ای که برای تشریح انتخاب زبان در اینترنت وجود دارد، شما یک زبان را یاد گرفتید و حتی می‌توانید با آن زبان به کسب درآمد هم برسید. (شما خواننده گرانقدر هم اگر هر پیشنهادی دارید خواهشمندم اون رو کامنت کنید)

3- کدام پلتفرم، کدام حیطه و زمینه؟ خب این رو چرا از دیگران می‌پرسید، در اینجا بیشتر علاقه(شما بخونید فانتزی‌های ذهنی) هرکس هست که باعث انتخاب یک زمینه کاری خاصی می‌کند، خودتون فکر بکنید ببینید به چی علاقه‌مندید، چه توانایی‌هایی دارید و حوصلتون در چه حدی هست! لطفا، کمالگرا نباشید همه این زمینه‌ها آنقدر درآمدزا هستند که بتواند راضیتان کند، ویژگیهای ذهنی و خلقی خودتون رو در نظر بگیرید مثلاً بنده حوصله درگیری با محاسبات ریاضی برای تولید سایه ندارم، پس کمتر به سمت برنامه‌نویسی گرافیک و سه بعدی می‌رم، به بانک اطلاعاتی و کار با داده‌ها علاقمند هستم، پس به سمت برنامه‌نویسی بانکهای اطلاعاتی می‌روم، اگر عمیقاً دچار این سوال شوید کار شما خیلی سخت خواهد شد، حتی سخت‌تر از یافتن پاسخ به سوال دوم، تعداد زمینه‌ها و تکنولوژیهای موجود در برنامه نویسی آنقدر زیاد هست که فقط مطالعه کردنشون ممکن است تا پایان عمر یک نفر هم زمان نیاز داشته باشه، حالا خودتون فکر کنید کمالگرایی در اینجا چقدر ممکنه گرفتارتون کنه، باز پیشنهاد اینه که با همین یک دوتا زمینه عمومی و دردسترس شروع کنید، مطمئن باشید در ادامه با اشخاص، پروژه‌ها و موقعیتهایی روبرو خواهید شد که شما رو به سمتی که بسیار از کار کردن در اون زمینه لذت می‌برید سوق خواهد داد.

کمالگرایی در زمان نوشتن برنامه

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