پیش از این در مقالهای تحت عنوان «درسهایی که دولوپرها میتوانند از باشگاه بدنسازی بگیرند!» به یکسری نکات اشاره کردم که به نظرم میتونه به موفقیت دولوپرها کمک کنه که از طریق لینک زیر در دسترس هست:
https://sokanacademy.com/blog/6179/post
اما چند روز پیش در باشگاه تجربهای کسب کردم که برایم خیلی گرانبها بود و اون هم چیزی نیست جز اینکه اگر بخواهیم در حین ورزش حرکات رو درست و اصولی انجام بدیم، هم فشار بیشتری بهمون وارد میشه و هم مقدار وزنهٔ کمتری رو میتونیم بلند کنیم که بلافاصله به ذهنم رسید که این اصل در کدنویسی هم میتونه مصداق عینی پیدا کنه!
پشت بازو طناب
توی باشگاه داشتم ۵۰ کیلو پشت بازو طناب میزدم که وقتی مربی دید، بهم تذکر داد که حرکت اشتباهه و من رو زد کنار و درستش رو بهم نشون داد. ازش تشکر کردم و شروع کردم طبق گایدلاین مربی ادامهٔ سِت رو درست زدن اما در کمال ناباوری دیدم که وقتی حرکت درست رو میزنم، چنان فشار عجیبی بهم وارد میشه که تحت هیچ عنوان نمیتونم ۵۰ کیلو رو بلند کنم و مجبور شدم وزنهها رو تا ۳۵ کیلو کاهش بدم.
اینجا بود که به این نکته پی بردم که کار اصولی کردن سخته و سرعت پیشرفت آدم رو در کوتاهمدت به شدت پایین میاره (به واژهٔ کوتاهمدت خوب دقت کنید؛ در واقع، در بلندمدت کار اصولی عجیب جواب میده.) جالب اینجا است که از وقتی شروع کردم حرکت درست رو حتی با ورزنهٔ سبکتر زدن، پشت بازوم بزرگتر شد! تا اینجای داستان مقدمه بود و حال برسیم به اصل مطلب که در پروسهٔ توسعهٔ نرمافزار این قانون چهطور نمود عینی پیدا میکنه؟
کدنویسی اصولی کار هرکسی نیست!
به نظرم (که میتونه نظرم کاملاً اشتباه باشه) همچون ورزش (مثلاً بدنسازی) که اگر بخواهیم اصولی وزنه بزنیم هم به دردسر میافتیم و هم بهمون فشار مییاد، در کدنویسی هم کار درست و اصولی سخته و بعید به نظر میرسه که هرکسی از عهدهاش بربیاد. اجازه بدید برای روشنتر شدن این مطلب، یک مثال از دنیای واقعی بزنم.
فرض کنیم دو دولوپر به نامهای بهزاد و سهند قرار هست تا هر کدوم اپلیکیشنی که تاحدودی ماهیت یکسانی دارند رو توسعه بدن. بهزاد مبتدی، تازهکار و بیتجربه هست اما در مقابل سهند دولوپری کهنهکار و باتجربه است.
هر دو دولوپر اپلیکیشن مذکور رو مینویسن و خروجی در کل قابلقبول هست و End User از تجربهٔ کار با هر دو اپلیکیشن راضی هست؛ در واقع، ظاهر قضیه اصلاً نشون نمیده که پشتش چه خبره اما وقتی که به بررسی سورسکد نوشته شده توسط بهزاد و سهند میپردازیم، تازه پرده برداشته میشه!
نگاهی به فرایند توسعهٔ نرمافزار بهزاد
بهزاد بلده کد بزنه اما از اون بالا شروع میکنه به نوشتن الی آخر و تقریباً میشه گفت که چون چیزی از MVC ،OOP و Design Pattern نمیدونه، خیلی هم سریع کد میزنه و شاید در کل زمان کمتری نسبت به یک دولوپر باتجربه برای توسعهٔ اپلیکیشن اختصاص بده و در کل، همچون بدنسازی که حرکت اشتباه میزنه اما در عین حال میتونه وزنهٔ بیشتری بلند کنه، سختی کمتری میشه و کد بیشتری هم میتونه بزنه.
نگاهی به فرایند توسعهٔ نرمافزار سهند
در مقابل، سهند پس از تحلیل نرمافزار، وب اپلیکیشناش رو بر پایهٔ معماری سهلایهٔ مدل، ویو و کنترلر (MVC) میگذاره و به شکل دیوانهواری از شیئگرایی در کدنویسی استفاده میکنه به طوری که نسبت به قانون DRY یا Don`t Repeat Yourself معتاد شده. همچنین با آشنایی با دیزاین پترنهای مختلف، میدونه که کجا باید از کدوم الگوی طراحی استفاده کنه اما این کار سهند یک مشکل (البته در ظاهر) داره و اون هم اینکه رعایت تمامی این موارد سخته (دقیقاً مثل پشت بازو طناب) و مستلزم صرف زمان بیشتری نسبت به یک دولوپری است که از بالا شروع میکنه به کدنویسی الی آخر.
اگرچه نیازی به توضیح در مورد نتیجهٔ کار دو دولوپر فوقالذکر نیست، اما بد نیست به این نکته اشاره کنیم که Maintenance (توسعه و نگهداری سورسکد) پروژهٔ بهزاد باعث میشه آدم رَبِش رو یاد کنه به خصوص اگر دولوپری دیگری بخواد این کار رو بکنه اما در مقابل، درسته که سهند در حین کدنویسی از یکسو بیشتر سختی کشیده و از سوی دیگر سرعت پیشرفتش پایین آمده، اما در Long Term (بلندمدت) موفقیت از آنِ سهند هست و خواه خودش، خواه هر دولوپر دیگری که بخواد پروژه رو پیش ببره، تکلیفش با خودش روشن هست.
درس اخلاقی
برخی فرهنگها هستن که در اونها کمیت بیش از کیفیت حائز اهمیته. مثلاً یادمه وقتی که کلاس سوم ابتدایی بودم، یک معلم داشتیم به اسم خانم نباتی که به عنوان کاردستی گفت که همهمون از این چرخهایی که قدیمیها روی چاه میگذاشتن تا از داخل چاه آب بکشن بیرون درست کنیم.
من و پدرم از صبح تا شب یک روز جمعه نشستیم و یک چرخ چاه خیلی ظریف و کوچیک درست کردیم که الحق تر و تمیز بود. وقتی بردمشن سر کلاس، دیدم که خانم نباتی یکی از همکلاسیهایی که یک چرخ چاه به قول معروف خَرَکی درست کرده بود رو تشویق کرد و خیلی توی ذوقم خورد چون اون موقع نمیدونستم که در جایی زندگی میکنم که آدمها به کمیت علاقه دارن!
مثال در زمینهٔ کمیت و کیفیت کم نیست. مثلاً یادم هست از روزی که عقلبرس شدم، همیشه و همهجا میگفتن یک صلوات بلند بفرست و مثلاً اگر در مدرسه کوتاه صلوات میفرستادیم، مجبور به تکرار صلوات میشدیم و یک بار آرزو به دلم موند که یکی بیاد بگه زیرلب و حتی توی دلت صلوات بفرست، اما از تَه دل باشه!
مثال در این زمینه زیاد هست که از اون جمله میشه به دوران مدرسه اشاره کرد که هرکسی که گُندهتر بود، مبصر میشد غافل از اینکه شاید یک بچهٔ ریزهمیزه بود که مهارت لیدرشیپ داشت و بهتر میتونه دیگر بچهها رو با خودش همراه کنه یا اینکه وقتی انشاء مینوشتیم، مجبور بودیم که حداقل دو صفحه باشه (کمیت) در صورتی که شاید یک بچه میتونست یک پاراگراف یا حتی یک جمله (کیفیت) بنویسه که کار همون دو صفحه رو بکنه.
کلام آخر
اگر علاقمند به کدنویسی هستید، اصولی وارد بشید حتی اگر سرعت شما پایین آمد، مدتی بیکار موندید و سختتون بود چرا که در نهایت به مهارتهایی تجهیز خواهید شد که آرزوی هر شرکت نرمافزاری است که فردی همچون شما رو داخل تیمش داشته باشه.
ممنون که وقت گذاشتید. جای نظر، انتقاد و پیشنهاد شما در بخش کامنتینگ است.