ناگفته های دنیای برنامه نویسی و سربازان گم نام آن
با یک جستجو ساده میتوان به مفاهیم و تعاریف ابتدایی و پایه ای از برنامه نویسی رسید. برای مثال از شما دعوت میکنم این مورد را بخوانید: برنامه نویسی روش حل مسئله برای کامپیوتر به زبان ریاضیات است. زبانهای برنامه نویسی به دو سطح زبان سطح بالا و پایین تقسیم بندی میشوند هرچه زبان سطح پایینتر باشد به مغز کامپیوتر ما نزدیکتر است و هرچه دورتر میشویم از مغز کامپیوتر ما فاصله بیشتری میگیرد. به نحوی زبانهای سطح بالا همانند PHP ، جاوا ، C ، C# و … برای صحبت کردن با کامپیوتر نیازمند این هستند که به زبانهای سطح پایین مانند اسمبلی تبدیل شوند.
اما این توضیحات هیچ گاه نشان دهنده عمق ماجرا نیست. عده کمی از مردم اطلاعات مناسبی از این رشته دارند. برای مثال افراد تا حد مناسبی میدانند یک حسابدار چگونه شغلی دارد یا یک مهندس عمران با چه نوعی از زندگی دست و پنجه نرم میکند اما این اطلاعات عمومی در مورد برنامه نویسان و شغل برنامه نویسی تا حد زیادی کمتر است که قطعا اصلی ترین دلیل آن نوظهور بودن این رشته است.
حالا تصمیم دارم به عنوان یک عضو بسیار کوچک از جامعه برنامه نویسان تلاش کنم این حیطه را کمی روشن تر کنم. روزی را به یاد دارم که یک کارفرما در حیطه کاریابی درخواست پیاده سازی ویژگی های مالی جدیدی برای نرم افزار خود داشت. حدود ده دقیقه ای به طور خلاصه آنچه در ذهن داشت را توضیح داد و در نهایت گفت : شما این مورد رو نهایتا تا یک هفته به ما میدی انشالله؟! داخل پرانتز باید عرض کنم که در طول تمام آن ده دقیقه پردازنده مغز من به شدت درگیر بود و در حال فکر کردن به درخواست های ایشان بودم و این تازه خلاصه ماجرا بود و قطعا با ورود به جزئیات، توضیحات خیلی بیشتر از ده دقیقه وقت میگرفت. با هر جمله کارفرما در مورد این ویژگی جدید، به ساختار پایگاه داده، روابط بین موجودیت های نرم افزار، ابزار های موجود و محدودیت های این ابزار ها، رسیدن به ابزار های جدید برای پوشاندن این محدودیت ها و ... فکر میکردم و تاکید میکنم که این تازه اول کار بود و بعد از ورود به داستان حتما کارفرما خواسته های جدید تری هم پیدا میکرد چون حالا خروجی ها را میدید و ایده های جدید به ذهنش خطور میکرد.
صد البته که شخص کارفرما اصلا مقصر نیست زیرا او نمیداند نحوه پیاده سازی و توسعه یک نرم فزار چه مراحلی دارد و به چه شکل باید این فرایند طی شود. دلیل ندانستن هم قبلا گفته شد، اینکه حیطه برنامه نویسی نوظهور است بخصوص در ایران و افراد از حیطه های کاری دیگر کمتر اشنایی کافی با این رشته دارند.
در این مواقع احساس میکنم تصور کارفرما از توسعه نرم افزار این است که برنامه نویس پشت سیستم خود مینشیند، محیطی را باز میکند و اینطور تایپ میکند: please implement new financial features for me. Thanks! کلیدی را فشار میدهد و برنامه بدون هیچ خطایی اجرا میشود که باید گفت اینطور نیست. واقعیت ماجرا به این شکل است: برنامه نویس پس از جلسه با کارفرما یکی دو روزی به حرف ها و خواسته های کارفرما فکر میکند و دلیل این فکر کردن این است که باید یک سری ویژگی جدید به بستری که از قبل وجود دارد اضافه کند و این ویژگی ها باید به شکلی اضافه شوند که ساختار های پیشین دچار ایراد نشوند. از فکر کردن به ایجاد فیلد های جدید در جداول پایگاه داده گرفته تا یاد آوری اینکه فلان ابزار استفاده شده در برنامه برای این خواسته های جدید مناسب نیست پس من باید به سراغ فلان ابزار بروم و از آنجا که من خودم انسان هستم و نه یک ابر کامپیوتر، نمیتوانم کار کردن با همه ابزار ها را فرا بگیرم و تنها بسته به شرایط سراغ ابزار جدید میروم و کشف میکنم که چگونه میتوان از آن در پروژه استفاده کرد. پس از طی شدن همه این مراحل، برنامه نویس به سراغ پیاده سازی میرود و جهنم واقعی شروع میشود. پیاده سازی آغاز شده، ده ها هزار خط کد، صد ها کلاس و هزاران تابع و باز هم صد ها موجودیت و ... در حال رقص هستند و هر کدام به ساز خود. هنر برنامه نویس اینجاست که دقیقا میداند هر سازی چگونه در حال نواخته شدن است و به چه شکل باید با آن رفتار کرد تا خدای ناکرده ناکوک نشود. در این مسیر شلوغ و پر سر و صدا بسیار پیش می آید که یکی از ابزار های قدیمی یا جدید شروع به لجبازی میکند و برنامه نویس باید از این شرایط عبور کند. همه این ها نیاز به تمرکز بسیار شدیدی دارد اما از آنجا که کارفرما حال برنامه نویس را درک نمیکند، روزی دو بار با وی تماس میگیرد و جویای پیشرفت کار میشود و در نهایت پس از یک ماه انتظار دارد همه کار ها به بهترین شکل انجام شده باشد که معمولا اینطور نمیشود. کارفرما باید به این حس همدردی با برنامه نویس برسد که بگوید اوکی آقا جان شما خودت بگو چقدر زمان نیاز داری؟ برنامه نویس تخمینی میزند و یک زمانی میگوید اما اینجا کارفرما باز هم پس از پایان زمان اعلام شده توسط برنامه نویس، در صورتی که پروژه هنوز تکمیل نشده باشد، بهتر است باز هم با او کنار بیاید و آرامش لازم برای کار را به او تزریق کند تا در نهایت نتیجه کار خود هم بهتر باشد.
از طرف دیگر، برنامه نویس هم موظف است در هر زمان که نیاز بود فرایند توسعه را به اطلاع کارفرما برساند تا اگر اشتباهی در پیاده سازی وجود دارد، پیش از آنکه دیر شود این اشتباه اصلاح شود، همچنین این حق کارفرما است که به طور مناسب از جریان پیاده سازی و پیشرفت کار اطلاع داشته باشد.
همکاری کارفرما و برنامه نویس برای ساخت و یا توسعه یک نرم افزار دقیقا مانند عضویت این دو در یک تیم برای برنده شدن یا رسیدن به یک هدف خاص است. برنامه نویس ها معمولا اول از همه هدفشان کسب درآمد است و بسیار هم پیش می آید که نه فقط برای کسب درآمد بلکه در مراحل بعدی برای خود فرایند توسعه و کمک به پیشرفت این فرایند های نرم افزاری دست به توسعه میزنند. کارفرما هم به دنبال توسعه نرم افزار خود است تا به کمک آن بتواند فرایند های سازمانی خود را بهبود دهد که همین هم در نهایت برای رسیدن به درآمد بیشتر است. به شخصه احساس میکنم این حس هم تیمی بودن و اتحاد بین کارفرما و برنامه نویس یا تیم برنامه نویسان به اندازه کافی وجود ندارد و اگر هر دو طرف تلاش بیشتری برای رسیدن به این سطح از همکاری مناسب داشته باشند میتوانیم شاهد توسعه بیشتری در بستر فناوری اطلاعات کشور باشیم. مدیران سازمان ها به خصوص سازمان هایی که با برنامه نویسان و یا شرکت های برنامه نویسی و توسعه همکاری دارند، بهتر است در کنار دانش های مدیریتی خود تا حدودی هم به دانش هایی همچون اجایل (agile) و ارتباط بهینه کارفرما و برنامه نویس نیز تسلط داشته باشند.
نظرات