چرا هزینه های برنامه نویسی بالاست؟

تاریخ: 6 سال قبل
چرا هزینه های برنامه نویسی بالاست؟

اولین باری که این مطلب عالی رو خوندم برمیگرده به حدود دو یا سه سال پیش در یک وبسایت عالی با نام 9px؛ و امروز باز هم با یک این چنین قضیه ای روبرو شدم که مشتری از قیمتی که برای انجام یک پروژه دادم ناراضی بود و در نهایت کار کنسل شد، ولی ارزش کار حفظ شد. در اینجا به موارد واقعی که هر برنامه نویس با آن دست و پنجه نرم میکند و کاربر عادی از آن آگاه نیست را بازگو میکنیم.

1- برنامه نویسی، زمان‌بر است.

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

2- شما مو می‌بینید و برنامه‌نویس پیچش مو!

گاهی اوقات بیان یک مسأله به کوتاهی یک جمله است، اما پیاده‌سازی آن از نگاه برنامه‌نویس، یک عمر تجربه و کلی تحقیق و ساعت‌ها زمان برای برنامه‌نویسی و پیاده‌سازی لازم دارد!

مثلاً یکی از افراد ایمیل زده بود و نوشته بود: من یک ماژول ساده برای واریز اینترنتی شهریه در نمرا می‌خواهم. همین!

کلمه «ساده» در این جمله برایم  جالب بود! ایشان اگر می‌دانستند پیاده‌سازی سیستم شهریه در نمرا چقدر پیچیده است، هرگز چنین کلمه‌ای را در آن جمله به کار نمی‌بردند. در سایت sharja.ir ما یک ماه درگیر اتصال آن درگاه به بانک و پیاده‌سازی پرداخت آنلاین بودیم! یک بانک پورت سرورهای خارجی را بسته، یکی برای زبان PHP برنامه ندارد، یکی مستنداتش کامل نیست، یکی ۶۰ صفحه مستندات نوشته و فکر کرده برنامه‌نویس بیچاره بیکار است که بخواهد مستندات را مطالعه کند. خلاصه چهار بانک را آزمون و خطا کردیم تا نهایتاً به یک بانک رسیدیم! 


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

یا مثلاً یکی گفته بود: من می‌خواهم دو تا فیلد به فرم ثبت نام تستا اضافه کنید. همین!

کلمه «همین» هم نشان می‌دهد این دوستمان تصور کرده اضافه کردن فیلد به فرم ثبت نام یعنی کشیدن دو تا فیلد روی فرم، همین! او نمی‌داند که باید دیتابیس، بخش ثبت نام در طرف مدیریت، بخش ثبت نام در طرف کاربری، ویرایش پروفایل در هر دو طرف کاربری و مدیریت، لیست اعضا و خلاصه تقریباً همه جای سیستم باید تغییر کند تا همین جمله تحقق یابد!

3- کار هر بز نیست خرمن کوفتن! از هر ۱۰۰۰ نفر یک نفر برنامه‌نویس می‌شود!

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

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

4- یک برنامه نویس، برای همیشه برنامه نویس نیست!

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

5- پروژه‌های برنامه‌نویسی برای برنامه‌نویس، مثل فرزندان یک مادر هستند

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


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

به هر حال، گاهی اوقات هزینه‌های پشتیبانی‌های احتمالی هم محاسبه می‌شود و روی قیمت گفته می‌شود...

6- برنامه‌نویس به جای کار روی پروژه شما می‌توانست روی یک پروژه عمومی کار کند!

اگر همه دلایل بالا را در زیاد بودن هزینه‌های برنامه‌نویسی کنار بگذاریم، این یکی مهم‌ترین دلیلی است که هزینه‌ها را گاهی سرسام آور می‌کند. دقت کنید: فرض کنید شما به من می‌گویید یک ماژول اختصاصی برای ما به نمرا اضافه کن. خوب، من قبول می‌کنم و مثلاً یک هفته یا یک ماه درگیر آن می‌شوم. می‌دانید من می‌توانستم در این یک ماه چه کار کنم؟ می‌توانستم مثلاً روی تستا ۳ کار کنم و آن‌را به صدها نفر بفروشم. پس حالا که وقتم را برای شما صرف کرده‌ام، شما باید هزینه آن صدها نفر را بدهید. (البته نه تمام آن هزینه را اما به هر حال به آن نسبت، هزینه بالا می‌رود)

یعنی مثلاً اگر من ۵۰۰ هزار تومان از شما گرفتم و یک هفته درگیر کار شما شدم، می‌توانستم همین یک هفته‌ها را روی تستا۳ وقت بگذارم و تا عمر دارم و تستا عمر دارد، از درآمد آن سودمند شوم.

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

7- خطرات جسمی و روحی برنامه‌نویسی:

به نظر من یک برنامه‌نویس از جان خودش برای نوشتن برنامه مایه می‌گذارد. برخی از مشکلات را دقت کنید:
- معمولاً چشمان برنامه‌نویسان به دلیل ریز بودن کدها و زوم کردن روی آن‌ها خیلی سریع ضعیف می‌شود. (مثل طراحی گرافیکی نیست که با اشیای بزرگ طرف باشید)

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


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


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

8- برخی نکات که ممکن است مشتری فکر کند برنامه‌نویسی ارزان است:

-- نظرهای غیرکارشناسانه:

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

یک بار به یکی از مشتریان که سفارش طراحی سایت داشت، یک قیمت نسبتاً بالا گفتم. دیدم چقدر راحت قبول کرد! بعداً گفت: من پیش از شما به یک نفر گفتم، گفت من با ۵۰ هزار تومان این کار را برای شما طی چند روز انجام می‌دهم. از آن تاریخ یک ماه می‌گذرد، من هر روز تماس می‌گیرم و SMS می‌فرستم، هر روز می‌گوید: همین روزها آماده است! حاضرم الان ۵۰ هزار تومان دیگر به او بدهم که فقط خیالم را راحت کند و بگوید من نمی‌توانم انجام دهم، به شخص دیگری بگویید!!

-- قیمت پایین نرم افزارهای عمومی:

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

-- نگاه به زمان صرف شده:

خیلی‌ها اینطور قیمت را محاسبه می‌کنند: برنامه‌نویس، یک ماه درگیر کار من شد، خوب، دستمزد یک کارگر طی یک ماه نهایتاً چقدر می‌شود؟ مثلاً ۷۰۰ هزار تومان! پس چرا از من ۴ میلیون تومان گرفت؟ که در بالا جواب چنین طرز فکری را داده‌ام... فقط در یک جمله: اگر همین قیمت را به یک کارگر که پشت دستگاه می‌ایستد یا بسته‌بندی انجام می‌دهد دادید و آن برنامه را برایتان نوشت، مشکلی نیست همان‌قدر به برنامه‌نویس بدهید!

-- نگاه به ساعات کدنویسی:

در یکی از پروژه‌ها مدیر پروژه متوجه شده بود که من فرضاً گفته‌ام چهار ماه زمان می‌برد اما یک ماهه آخر کدنویسی را انجام داده‌ام. گلایه‌مند شده بود که: شما گفتید چهار ماه اما یک ماه بیشتر کار نکردید!

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

امیدوارم متوجه حساسیت کار برنامه‌نویسی و اینکه هزینه‌های بیان شده، چرا بالا و واقعاً ناچیزتر از واقعیت هستند شده باشید.

اگر برنامه‌نویسان دیگر نظر یا تجربه‌ای دارند، خوشحال می‌شویم در بخش نظرات شاهد باشیم.

موفق باشید.

منبع: aftab.cc/article/1077