صالح فیضی
صالح فیضی
خواندن ۴ دقیقه·۱ سال پیش

سفر غیر حرفه‌ای در دنیای کدنویسی : قسمت اول - چگونه در یک پروژه حساس، با یک دست دور توپ تنیس و یک کیبورد خراب اقدام به توسعه دادیم!


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

سفر خودمون رو با این سوال آغاز می کنیم : کار کردن کردن یک سیستم مهم است یا کارایی و عملکرد آن سیستم ؟

+ پاسخ توسعه دهنده MR (فردی که ابتدا اقدام به توسعه و پیاده سازی سیستم کرده است ، که آن را MR صدا میکنیم )

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


عالیه بنظرم اینکه نسبت به تعهد زمانی پایند باشی یک اصل مهمیه تو هر پروژه ، ولی به چه قیمتی ؟

خب قبل اینکه به سوال بالا پاسخ بدیم همین سوال رو از ChatGPT با در نظر گرفتن پاسخ MR میپرسیم تا ببینم نظر اون چیه :)

سوال مطح شده
سوال مطح شده


خب این سوالی رو با توجه به ابعاد پروژه و پاسخ اولیه آقای MR از ChatGPT پرسیدیم

پاسخ ChatGTP
پاسخ ChatGTP

خب برگردیم سر سوال قبلی مون :

تعهد زمانی مهم تره یا توسعه درست سیستم ؟ کدومش بیشتر برامون هزینه داره ؟

باید بگم هر دو این موارد با توجه به شرایط مهم هستن ولی ! ولی ! ولییییی ! تو رفتی ولی فکر تو سر من موند آقای MR 😂

ولی !!!!!
ولی !!!!!

ولی بنظر من (شخصیت کمالگرای خودم) اولیت توسعه درست هستش در کنار تعهد زمانی

خب چرا اولیت من توسعه درست هستش ؟

پاسخ کلیشه ای :

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

پاسخ فنی با توجه تجربه خودم و افرادی که باهاشون در ارتباطم :

ببیند توسعه بد یک ویژگی باعث میشه شما یک بنا با پایه کج رو توسعه بدید.

هزینه زمانی اولیه شما برابر هستش با : ۱۰ ساعت با میانگین هزینه مالی ۲،۰۰۰،۰۰۰

 خب حالا سیستم بالاس و داره کارشو میکنه ( دقت کنید فقط کار میکنه با عملکرد کاری نداریم فعلا )

حالا میخواید سیستم رو توسعه بدید و یک متد با در نظر گرفتن مورد "پشته یا Stack " یکی از موارد ساختمان داده هست پیاده سازی کنید . به طوری که متد فعلی شما روی داده قبلی شما که توسط ویژگی قبلی ایجاد شده تاثیر میزاره.

خب حالا مورد چیه ؟ (مثال)

دیتاتایپ های ایجاد شده در دیتابیس هیچکدوم استاندارد متد جدید شما رو نداره. مثلا یک مقداری که کلا قرار ۱ تا ۱۰ رو نگهداری کنه با فرمت چیه ذخیره شده ؟


یک ضرب المثل قدیمی هست که میگه هیچوقت نزار قدم بعدیتو حدس بزنن 😂


باید بگم در وحشتناک ترین حالت این داده با مقدار varchar ذخیره میشه :|

که بنظرم استاندارد بود از tinyint استفاده بشه چون فضای ذخیره سازی کمتری میگیره و استاندارد عدد هستش . شاید بگید بابا ۱۰۰ تا رکورد این حرف ها رو نداره . آره ولی یه جدول با ۱۰ میلیون رکورد ندید که کلا ۴ تا سطر داشت ولی ۵۰ گیگ شده بود :|

حالا میخواید اصلاح کنید و فیچر جدیدم بنویسید.

برای MR عزیزی که ویژگی اول نوشته و میخواد حالا ویژگی جدید با در نظر گرفتن بروز رسانی دیتاتایپش میشه :

5 ساعت متد جدید + ۵ ساعت بروزرسانی دیتابیس و اصلاح بخش ها و مایگریت کردن (MR) هزینه زمانی با در نظر گرفتن افزایش حقوق احتمالی بعد از ۶ ماه ( ۳.۰۰۰.۰۰۰)

حالا یه فرد جدید که با سیستم تازه اشنا شده و سورسو رو گرفته و میخواد این موضوع رو اصلاح کنه
به دلیل آشنایی کمش و ضریب ریسکش

۱۰ ساعت متد جدید + ۲ ساعت سردرگمی در پروژه + ۱۰ ساعت پیدا کردن باگ و ریفکتور کردن ( با احتمال آسیب رساندن به بخش های دیگه )

مجموعا ۲۲ ساعت = هزینه تقریبی نیروی جدید (حداقل ۶.۰۰۰.۰۰۰) !!!

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

ببینید این موارد که گفتم صرفا هزینه زمانی و مالی ریفکتور کردنه ! ریفکتور کردن از توسعه فیچر جدید جلوگیری میکنه و افزودن ویژگی های جدید رو دشوار میکنه. و حتی گاهی اوقات بوده که پرژوه ی میکروسرویسی داشتیم که ۱۳ تا سرویس بوده و نگهداری بسیار دشواری داشته !! چرااااا ؟ چون تحویل مهم تر از کارایی بوده !!!

دوستان موقع کد زدن یا زمان دادن برای طراحی و توسعه سیستم دستتون رو کیبورد و موس قرار بدید و با ذهن باز و آگاه کار ببینید !

یه دستتون توپ تنیس نباشه دستت دیگه اتون رو کیبورد !

اشتباه کوچیک ما میتونه به قیمت جون چند میلیون آدم یا حتی از هم پاشیدن یک کسب و کار بشه !

تو پست بعد سعی میکنم حتما نمونه های واقعی از سورس کد ها قرار بدم :)



کد نویسیهارد کدکد نویسی تمیزبرنامه نویستوسعه
Technology Researcher And Developer
شاید از این پست‌ها خوشتان بیاید