چند سالی بود که خیلی جدی و مداوم برنامه نویسی نکرده بودم، رادمان، واحد تولید خاص خودش را داشت و در دانشگاه هم فقط برنامه های دانشجویان را بررسی می کردم.این بود که از دانش و تکنیک های جدید برنامه نویسی غافل بودم و اعتماد به نفسم را در اینکار از دست داده بودم. حتی وقتی به هر دلیلی مجبور می شدم در کد برنامه های قدیمی دفتر تغییر ایجاد کنم، دست و دلم می لرزید و تلاش می کردم این دستکاری کد توسط من آخرین راه حل برای رفع یک مشکل باشد. اما اخیرا پذیرفتم برای عزیزی در قالب غیر تجاری یک برنامه کوچک بنویسم، وقتی آن را شروع کردم، نوشتن ان گونه برنامه به دلم نچسبید و خودم در اقدامی داوطلبانه پروژه را بزرگ کردم… پروژه ای که هم اکنون در مراحل پایانی است و از محصول نهایی آن راضی هستم و هستند، اگر چه این پروژه برای من نان و آب نشد، اما اجرای آن حداقل یک حسن داشت: … قدیمی ها راست گفته اند که دود از کنده بلند می شود، هنوز هم می توانم خودم را یک برنامه نویس بدانم!
همین!
پی نوشت: یکبار دیگر هم چنین تجربه ای را داشتم، در ابتدای دوران حرفه ای کارم …بگذریم ماجرای مفصلی است که فرصتی دیگر می طلبد،خلاصه اش اینکه بعد از یک دوری موقت، بازگشت به دنیای برنامه نویسی تجاری برایم بسیار لذت بخش بود!
نوشته های مرتبط:
در پروژه ای قرار بود یکی از همکاران، بانک اطلاعاتی اختصاصی یک مشتری را طراحی کند و به یکی از برنامه نویسان شرکت بدهد تا کد مربوط به آن را سریعتر بزند. آن همکار عزیز هم بانک اطلاعاتی را به شکل کامل و با جزییات فرآوان و کامنت گذاری دقیق در MS SQL ساخته و script آن را برای برنامه نویس مان فرستاده، تا آخر هفته روی آن کار کند. آن برنامه نویس هم “لطف” کرده و اسم همه جداول و فیلدها را مطابق با سلیقه خودش عوض کرده بود!
آن همکار پیش من آمد که فلانی این کار را کرده، من این همه زحمت کشیدم و با این دقت و وسواس برایش بانک اطلاعاتی را ساخته ام و او اینچنین کرده! چه فرقی داشته است بین روش من و روش او!؟ لبخندی زدم و گفتم هر چند حق با تو است اما فکر می کنم تو برنامه نویس ها را به اندازه کافی نمی شناسی! شاید این کار از نظر تو عجیب باشد، اما به نظر منِ برنامه نویس هم، اگر چه انجام این تغییر بدون هماهنگی با تو کار درستی نبوده اما غیرطبیعی هم نیست، آن بنده خدا این شکلی راحت تر بوده چون به این نوع نامگذاری بیشتر عادت داشته است، به همین سادگی! زیاد دلخور نباش! به تدریج با کار با برنامه نویسها عادت می کنی! اگر قرار شد شبیه اینکار مجددا انجام شود، آنوقت حداقل یک “استاندارد” داری که بدانی چگونه فیلدهایت را نامگذاری کنی!
همین!
نوشته مرتبط: رقصنده با کامپیوتر!
روشی در برنامه نویسی هست که خیلی از برنامه نویسانی که ادعای برنامه نویسی دارند به آن مشغولند، cowboy Programming یا cowboy coding (اینجا یا اینجا را برای آشنایی بیشتر با این مدل مطالعه کنید.) به عبارت خودمانی، برنامه نویسی با منطق گاوچران ها، یعنی هیچ آدابی و ترتیبی مجوی،هر چه می خواهد دل تنگت بنویس!
این مدل به خودی خود بد نیست و کاربردهای خودش را هم دارد و بهانه ای بوده برای تدوین مدل های پیاده سازی پیشرفته تر Agile، بگذریم.

موضوع صحبتم اما برنامه نویسی گاوچرانی نیست، بلکه الگو برداری از یک مفهوم در برنامه نویسی است(گاوچران ها در فرهنگ غربی ها ، آدم های بی قید و بندی بودند که در ظاهر، رفتار و ادبیات متمایز از سایرین هستند.)حالا که سایرین از مفهوم های ملی و بومی خود در مدل سازی و برنامه سازی استفاده کرده اند، چرا ما نتوانیم مدل های برنامه نویسی وطنی داشته باشیم، نظیر:
- برنامه نویسی جواتی: به مدلی از برنامه سازی اطلاق می شود که در طراحی واسط کاربری از انواع و اقسام رنگ های تند و فسفری، فونت های بزرگ و غیر معمول و انواع و اقسام زلم زیمبو(املایش درست است!؟) استفاده می شود. در طراحی وب سایت یا وبلاگ، نتیجه در شکل ضفحات موزیکال با تصاویر متحرک فراوان است که از انواع و اقسام java script ها برای تبدیل نشانگر موس به جانوران متفاوت و یا افکت های تصویری استفاده شده است!
- برنامه نویسی تاسوعا عاشورایی: به مدلی از برنامه نویسی اطلاق می شود که خروجی کار در دو رنگ سیاه و سفید (ونهایتا خاکستری ویندوز) نمایش داده می شود.ظاهر فرمها کسالت آور و ناراحت کننده است و هیچگونه ابزار مناسب برای سهولت استفاده از برنامه و کاربرپسند کردن ان استفاده نشده است.
- برنامه نویسی عملگی: در این مدل از برنامه نویسی شما تنها عمله ای هستید که نهایتا پرت کردن آجر برای طبقه بالا را بلدید.اوستای بنای شما به شما می گوید چه کنید و شما همان می کنید، خلاقیت در این مدل برنامه نویسی در حد صفر است و تنها کامپوننت های استاندارد (آنهم کامپوننت های دو سه ابزار اول) استفاده می شوند.
- برنامه نویسی لاتی: در این مدل برنامه نویسی شما به هیچ عنوان تلاش در بهتر نوشتن کد را به خرج نمی دهید، خوش خط و خوانا نمی نویسید، کامنت نمی گذارید، مستند نمی کنید، به هیچ کس هم توضیح نمی دهید که چه کار کرده اید، چرا؟ چون زورتان می رسد! همینه که هست! مشکلی هست؟
- برنامه نویسی بچه مثبتی: در این مدل از برنامه نویسی شما همه قواعد برنامه نویسی را رعایت کرده اید، خوانا نوشته اید و تازه برای آن یک راهنمای دست نویس که با خط کش خطکشی شده است هم تهیه کرده اید، همه چیز برنامه در حد بیست است، فقط یک مشکل دارد، انکه کار نمی کند!
- برنامه نویسی گروه فشاری: در این مدل چون آمریکای جهان خوار مظهر همه بدی هاست، شما از هیچ کدام از ابزارهای مایکروسافت، اوراکل؛ سان، گوگل و … استفاده نمی کنید(یا حداقل در ظاهر شعارش را می دهید که استفاده نمی کنید و در خفا بدون آنها زندگی نمی کنید)، بعد ادعا می کنید که ابزاری ساخته اید که از همه ابزارهای دنیا بهتر است و همه دنیا صف کشیده اند که از ابزار شما استفاده کنند، ادعا می کنید که شرکتهای امریکایی برای آنکه کسی از ابزار شما استفاده نکند ، کد #C و Java را آلوده کرده اند، همچنین PHP چون چند برنامه نویس صهیونیست هم از آن استفاده کرده اند بد است، بعد پلاکارد می گیرد و به آنها اعتراض می کنید و هر جا برنامه ای خارجی روی کامپیوتری دیدید کل کامپیوتر را با چماق خورد می کنید، مشکل فقط آنجاست که شما اصلا هیچ ابزاری نساخته اید!
- برنامه نویسی شاطری: در این مدل شما فقط نون را به تنور می چسبانید! پروژه را بگیرد، بعد یک open source یا محصول کرک شده پیدا می کنید و به مشتری به اسم برنامه ای که خودتان نوشته اید قالب می کنید!
- برنامه نویسی دلالی: مثل آن دسته از معاملات ملکی که ها که سردر مغازه آنها نوشته است: طراحی و اجرای ساختمان، مشارکت در اجرا و … اما صاحبان آنها یک کلمه هم از ساختن یک ساختمان نمی دانند و اصلا بازنشسته امور بایگانی اداره آبیاری هستند، شما هم ادعای برنامه نویسی دارید در حد تیم ملی، اما وقتی پروژه را گرفتید فقط پورسانت خودتان را بر می دارید و آن را به کس دیگری می دهید تا انجام دهد.
- برنامه نویسی طلبگی: در این مدل شما آنقدر در زمینه نوشتن برنامه مباحثه می کنید تا بالاخره یکی پیدا می شود و آن را می نویسد، بعد از آن شما در زمینه نحوه استفاده از آن برنامه باز هم مباحثه و گعده می کنید.
- برنامه نویسی خطی: به شکل یک مسافر کش خطی، که یک پیکان جوانان ۵۶ دارد و آن را خوابانده و تنها با آن بلد است رانندگی کند، شما هم همه برنامه هایی که به شما پیشنهاد می شود را با استفاده از Turbo Pascal و btrieve می نویسید،اول همه برنامه هایتان هم یک صفحه می آید که با کاراکترهای اسکی، کلمه بسم ا… را نوشته اید.
- و…ادمه دارد!
همین!
یک توضیح ضروری: تکرار مکررات و توضیح واضحات است، خدای نکرده اسم بردنم از چند شغل بی احترامی نسبت به آنها نیست که هیچگاه در نوشته هایم چنین منظوری را نداشته و نخواهم داشت. اسم بردن از این نوع مشاغل به دلیل آن است که در فرهنگ کوچه بازار ما ایرانی ها و در لطیفه هایمان برخی مشاغل نماد برخی خصوصیات هستند، در این نوشته هم چون می خواستم مدلی که توضیح می دهم، یک نماد قابل لمس وطنی داشته باشد، مجبور به استفاده از آن نماد ها شدم، همین.
علی نعمتی شهاب در وبلاگ گزاره مطلب جدیدی منتشر کرده (اینجا) در مورد “۶ شغل در حال ناپدید شدن!” که اشاره دارد به ۶ فرصت شغلی که از دیدگاه یک شبکه خبری در آمریکا در حال نابودی است. کاری به پنج شغل دیگرش ندارم، اما یکی از این مشاغل “برنامه نویسی” است! به شکل خلاصه این مطالعه، دلایل از بین رفتن این فرصت شغلی را در افزایش قابلیت های کاربران عادی در تولید نرم افزار بدون نیاز به تخصص خاص در برنامه نویسی و برون سپاری پروژه های تولید به سایر کشورها نظیر هند دانسته است.
اگر ملاک را بر صحت این پیش بینی بگذاریم (که شاید چون توسط یک نهاد غیر تخصصی صورت گرفته، نیاز به بررسی شواهد دیگر دارد)، این برای من مهندس نرم افزار یک فرصت است یا تهدید؟ وآیا “ما” برنامه نویسان باید با خواندن این این خبر بترسیم یا خوشحال شویم؟
من فکر کنم این موضوع شاید برای یک برنامه نویس ساکن آمریکا؛ کمی ، بله کمی، نگران کننده باشد. چرا؟ وقتی بخوانیم میزان شاغلین کنونی را (۴۲۶۷۰۰ نفر) در مقایسه با حتی ۵ شغل دیگر و درآمد سالانه برنامه نویس را. پس حداقل در همان آمریکا هم حالا حالا وقت هست تا اینکه این شغل ناپدید شود. تازه یک مهندس نرم افزار می تواند مشاغل دیگر این رشته را انتخاب کند (که با ذکر رشد تقاضا ها به میزان ۳۲ درصد در دهه آینده به این رشته (مرجع: همان نوشته)). بنابراین اگر قرار است کدنویسانی که از سایر رشته ها به برنامه نویسی مهاجرت کنند فرصتهای خودشان را از دست بدهند که بهتر است و من نوعی مهندس نرم افزار باید از این مطلب خوشحال باشم که هر کسی با یادگرفتن یک زبان برنامه نویسی در یک دوره چند ماهه یک موسسه خصوصی نتواند کار من تحصیل کرده این رشته را زیرسوال ببرد.
اما در مورد “ما” در ایران، به نظر من این یک فرصت بسیار خوب است. چرا؟
وقتی از رشد تقاضا در مورد محصولات فنآوری مطمئنیم، طبیعی است با افزایش سطح برون سپاری پروژه ها، و با این حساب که شاید دیگر بازار هند هم آن کشش لازم را نداشته باشد و پروژه ها با آن قیمت و کیفیت فعلی تولید نشود، اینجاست که اگر دولتمردان ما به فکر باشند و روند پیوستن ما به سازمان تجارت جهانی را که چندسال پیش آغاز شده، تسریع نمایند یک فرصت مناسب برای اجرای این پروژه ها در داخل کشور است.
وقتی ما می خوانیم که دومین رشته پرطرفدار در دانشگاه های کشور کامپیوتر است (با ۹% کل ظرفیت دانشگاه ها : اینجا)، متوجه می شویم که نیروی آماده کار مناسبی در کشور تربیت می شوند که بدیهی است پروژه های داخلی برای همه آنها نمی تواند شغل ایجاد کند. پس فرصت اجرای پروژه های بزرگ در کشور، می تواند هم میزان درآمد های صادرات غیرنفتی را افزایش دهد و هم با اشتغال زایی نیروی متخصص، به جز تولید ارزش افزوده و افزایش سود ناخالص ملی، برخی زمینه های مهاجرت نیروی کار فعلی را که ناشی از نبودن پروژه های جدی ومناسب است از بین ببرد و اقتصاد و صنعت بیمار نرم افزار کشور را روحی تازه باشد.
این یک فرصت است، مگر آنکه همانطور که قبلا عمل کرده ایم، با فرصت سوزی آن را برای سایرین بگذاریم؛ همان اتفاقی که در زمینه تولید سخت افزار و انتقال آن به شرق آسیا و تولید نرم افزار و انتقال آن به هند و روسیه افتاد.
به نظر من این کار سختی نیست که تصمیم گیرندگان به آن فکر کنند که چگونه می توانند با این سرمایه انسانی مناسب، ظرف یک برنامه پنج ساله، یک آلترناتیو مناسب برای بازار تولید نرم افزار در کنار هند ساخت که گرفتن جای این کشور، با توجه به کاری که ما می کنیم و برنامه های جدی که آنها دارند شاید دشوار باشد. نمی دانم، آیا تصمیم گیرندگان مسؤول در سازمانهای مربوطه -که خدا را شکر کم هم نیستند از شوراهای عالی انفورماتیک و اطلاع رسانی گرفته تا وزارت فنآوری اطلاعات، وزارت ارشاد، وزارت صنایع، وزارت بازرگانی و …- به این قضیه ها هم فکر می کنند و یا فقط درگیر سیاسی کاری های داخلی هستند و مشغول به اینکه امروز کدام سایت را فیلتر و کدامیک را آزاد کنند!؟
همین!
در وبلاگ درخت گلابی، دست نوشته های پاس پارس عزیز خوانده بودم نوشته ای را با عنوان “پنج افسانه در باره برنامه نویسان پیر” (اینجا)، قصد پاسخگویی ندارم به این دلیل که کمابیش در کلیات با این پنج مورد مشکلی ندارم، اما چون فقط وجه منفی برنامه نویسانی که سن و سالی از آنها گذسته بود پرداخته است، پنج نکته مثبت را هم من می نویسم تا از هر دو جنبه به یک واقعیت پرداخته باشیم، آن پنج مورد چنین است:
۱- برنامه نویسان پیر آشنایی زیای با دامنه های مختلف تجاری (Business Domain) دارند بنابراین انتقال مدلهای تحلیل و طراحی به آنها ساده تر و از این نظر مدت زمان انجام پروژه نسبت به جوانتر ها برای آنها سریعتر است.
۲- برنامه نویسان پیر، ثبات و پایداری بیشتری نسبت به جوانها دارند و از این نظر قابل اطمینان تر هستند.برنامه نویسان پیر هوس یکشبه ارتقاء شغلی، شرکت زدن، خارج رفتن، یا …. را ندارند، پس راحت تر می توان روی آنها حساب کرد.
۳- برنامه نویسان پیر قابلیت ارتباط بهتری با سایرین دارند و در مواردی که یا به دلیل نوع فرآیند توسعه انتخاب شده و یا به لحاظ تحویل و استقرار نیاز به ارتباط با مشتری وجود باشد، برنامه نویسان پیر راحت تر با مشتری ارتباط برقرار کرده، مشتری بهتر حرف آنها را می پذیرد.
۴- برنامه نویسان پیر محیط توسعه یک شرکت را متوازن می کنند، بدین معنی که از شاد شدن بیش از حد و یا ناراحت شدن بیش ازحد تیم توسعه جلوگیری می کنند، جوانترها بیشتر احساسی هستند در حالیکه پا به سن گذاشته ها بیشتر منطقی.
۵- برنامه نویسان پیر، کمک خوبی برا مدیران شرکتها هستند، هم خودشان می توانند مدیر پروژه باشند و یا در غیراینصورت پشتیبان خوبی برای مدیرپروژه باشند،نیازی نیست مقدمات کار گروهی را به آنها آموزش دهی در عین حال اینکه به علت تفاوت سن می توانند نفوذ خوبی روی سایر تیم داشته باشند.
همین!
پی نوشت :پیشتر در سه گانه “پیربرنامه ساز″، “برنامه نویس پیر“! به موضوع سن در برنامه نویسی پرداخته بودم (اینجا : ۱ ، ۲ و ۳)