
یکی از مشکلاتی که همیشه در کار نرمافزار وجود داشته تعریف افراد از حرفه برنامهنویس/توسعهدهنده است. به عنوان مثال به سناریوهای زیر دقت کنید:
۱- فلانی خدای C است و همه برنامههایش را با C مینویسد حتی برنامههای تحت وبش را ---> هر کاری ابزار مخصوص به خودش را لازم دارد. هیچ لزومی ندارد برای کوبیدن یک میخ ۲ سانتی از یک پتک ۲۰ کیلویی استفاده شود.
۲- یک برنامه نوشته ۱۰ هزار خط ---> ملاک خوب بودن یک برنامه تعداد خطوط آن نیست بلکه چیزهایی مثل کاربردی بودن، بهینه بودن و قابل نگهداری بودن آن است.
۳- خودش رفته SQL Server نوشته ---> اولاً که اختراع مجدد چیزهایی که از قبل اختراع شدهاند یک دوبارهکاری و اشتباه بزرگ است. ثانیاً این که MS SQL Server در یک DVD جا میشود، میتوان آن را از بازار رضا به قیمت ۴ هزار تومان خرید و این که محصول شرکت فحشخوری مثل مایکروسافت است دلیل نمیشود که هر کسی که از گرد راه رسید بتواند SQL Server بنویسد. به قولی کار هر بز نیست خرمن کوفتن، گاو نر میخواهد و مرد کهن.
۴- چون خدای برنامهنویسی است از هیچ library و کتابخانهای استفاده نمیکند و خودش utilityهای مورد نیازش را مینویسد ---> بنا به تجربه چندین و چند باره این مورد معمولاً نشانه دو چیز بیشتر نیست: یا طرف سواد استفاده و config کردن libraryهای موجود را ندارد یا آنقدر در بیخبری به سر میبرد که نمیداند چنین چیزهایی هم وجود دارند.
۵- همه موضوعات و تکنولوژیهای برنامهنویسی را بلد است از php بگیر تا ASP.NET، از C# بگیر تا Java از Socket Programming بگیر تا jQuery ---> معمولاً همه کاره هیچ کاره است.
۶- فلانی خدای برنامهنویسی امنیت موبایل است ---> قدرت او در شناخت و کار با مفاهیم امنیت موبایل است نه مهندسی نرمافزار. در واقع او همچنان یک مهندس مثلا مخابرات است و کارش ربطی به نرمافزار ندارد.
۷- خدای C# است ---> ممکن است فقط C# بلد باشد و به هیچ یک از مفاهیم مهندسی نرمافزار آشنا نباشد. مهمتر این که C# و دیگر زبانهای برنامهنویسی ابزاری هستند جهت رسیدن به اهداف مهندسی نرمافزار و الا به تنهایی هیچ کاربردی ندارند.
۸- آنقدر همه چیزهای برنامهنویسی را خوب یاد گرفته که حالا دیگر اشباع شده و تغییر شغل داده ---> احتمالاً اشباع نشده بلکه آنقدر از شاخهای به شاخه دیگر پریده که تجربه و سوادش سطحی شده و حالا به خاطر فرار از شکست، فیلد کاریاش را عوض کرده است.
۹- فلانی برنامهنویس فلان اداره عریض و طویل دولتی است ---> ادارات دولتی معمولاً تیم برنامهنویسی درست و حسابی ندارند و کارشان را به شرکتهای خصوصی میسپارند. معمولاً هم کار شرکتهای دولتی در حد نگهداری و پشتیبانی است نه کارهای جدی برنامهنویسی.
۱۰- فلانی یک نرمافزار نوشته ۴۰ میلیون فروخته ---> موفقیتهای مالی لزوماً نشئت گرفته از کار برنامهنویسی خوب نیست. فروش خوب تابع فاکتورهای خیلی خیلی زیادی است.
۱۱- فلانی خدای FoxPro بوده---> یادش بخیر! الان به چه چیزی تسلط دارد؟ توی این ده پانزده سال فرصت نکرده خودش را به روز کند؟
۱۲- وقتی پای کامپیوتر مینشیند تا ساعتهای متمادی بلند نمیشود ---> زیاد کار کردن به معنای خوب کار کردن نیست.
۱۳- …
تعدادی از افرادی که این طور مشکلات را به وجود میآورند معمولاً برنامه نویس یک حوزه خاص مثل Autocad، سختافزارهای خاص منظوره، الگوریتمهای محاسبات خاص ریاضی و… هستند. در واقع این طور اشخاص خبره سیستمهای مالی اداری، پروتکلهای مخابراتی، داشتن اطلاعات عمومی از یک حوزه خاص مثل بازار مسکن و… هستند. بعضی از آنها هم مهارتشان در راهبری شبکههای کامپیوتری، مدیریت IIS، SQL Server و… است. بعضیها هم به خاطر مسائلی مثل زیر دچار این قبیل مشکلات میشوند:
۱- تحصیلات نامربوط، مثلاً طرف مهندسی شیمی خوانده ولی سر از برنامهنویسی درآورده.
۲- پرستیژ کاری عنوان برنامهنویس برای خیلیها
۳- یادگیری تکنولوژیها و تکنیکهای جدید از طریق پروژههای عملیاتی. بعضی از دوستان پروژههای عملیاتی را محلی برای تست چیزهایی میدانند که به تازگی یاد گرفتهاند.
۴- نا آگاهی و به روز نبودن نسبت به تکنولوژیها و روشهای جدید.
۵- خودنمایی با استفاده از روشهای پیچیده و غیر ضروری در تولید نرمافزار، تقریباً همان کاری که در فوتبال به آن شیرینکاری و حرکات نمایشی گفته میشود.
۶- …
واقعاً کدام یک از این افراد را میتوان یک برنامهنویس (توسعهدهنده) خوب حساب کرد؟ آن هم در حالی که بیشتر آنها فقط حوزه کوچکی از توسعه نرمافزار را پوشش میدهند؟ مثال این افراد در کار ساختمانسازی مثال کار افرادی است که استاد نقاشی یا مینیاتور هستند ولی نمیتوانند یک دیوار را نقاشی کنند. یا فردی که مهندس طراح الکترونیک است ولی مجبور شده برقکار ساختمان باشد. به نظر کاملاً شخصی اینجانب، برای این که این افراد بتوانند در کار نرمافزار موثرتر باشند لازم است به موارد زیر توجه بیشتری داشته باشند:
۱- به روز بودن نسبت به اخبار و تغییرات دنیای برنامهنویسی و نرمافزار
۲- مطالعه مداوم در زمینه برنامهنویسی
۳- آشنایی با مفاهیم مهندسی نرمافزار مثل اصول طراحی، software re-use، test، معماری نرمافزار و…
۴- آشنایی با متودولوژیهای تولید نرمافزار
۵- …