حرفه ای گری در برنامه نویسی

در بخش اول این مطلب در مورد قبول مسئولیت و پاسخگو بودن یک برنامه نویس حرفه ای صحبت کردیم. و در قسمتی دیگر در مورد آسیب نرساندن به کار صحبت کردیم.

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

این بخش بدلیل اینکه مفصل تر می باشد من آنرا در ۳ قسمت آورده ام که این نوشته قسمت اول آنست.

اخلاق کاری

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

شما اگر می خواهید بعنوان یک حرفه ای وارد کار برنامه نویسی شوید و بعنوان یک حرفه ای هم بمانید، باید بدانید که هیچ راهی بجز سخت کوشی و کار زیاد مداوم ندارید.

اگر یک راننده تاکسی مثلا با چند سال تمرین مبدل به یک راننده حرفه ای می شود شاید دیگر چندان نیازی به تمرین بیشتر نداشته باشد چرا که تمامی فوت و فن کار را آموخته است، و یا در دیگر شغلها نیز به همین ترتیب. اما در برنامه نویسی تفاوت مهمی وجود دارد و آن اینکه اگر فقط چند روز از یادگیری دست بردارید چیزهایی را از دست خواهید داد و اگر این مدت به چند هفته برسد دیگر حتما در انجام کارتان به زحمت می افتید و اگر به چند ماه برسد دیگر نمی توان شما را برنامه نویس حرفه ای نامید.

در کتاب The Clean Coder عمو باب می گوید که مثلا اگر شما قرار است در هفته ۴۰ ساعت برای کارفرما خود کار کنید باید ۶۰ ساعت زمان برای کار کردن بگذارید. که ۴۰ ساعت برای کارفرما و ۲۰ ساعت دیگر برای خودتان است تا مطالعه کنید، تمرین کنید، کدهای جدید بنویسید و کدهایی را ببینید و در کل سطح مهارت خود را بالا ببرید و یا بهتر بگویم بالا نگه دارید.

ممکن است گاهی لازم باشد بیشتر هم وقت بگذارید. این زمان برای خودتان است و نه کارفرما.

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

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

البته که شما نباید از وقتی که برای کارفرما اختصاص داده اید (همان ۴۰ ساعت) برای اینکار استفاده کنید. کارفرما نباید هزینه اینکه شما ممکن است چیزی را برای انجام پروژه وی ندانید، را بدهد؛ چرا که یک برنامه نویس حرفه ای استخدام کرده است و دستمزد برنامه نویس حرفه ای را هم پرداخت میکند.

یکی از تفاوتهای عمده برنامه نویس حرفه ای و آماتور در اینست که از برنامه نویس حرفه ای انتطار نمی رود از زمانی که برای انجام کار در اختیار دارد برای یادگیری نحوه انجام آن کار استفاده نماید.

یک مثالی در این مورد بزنیم. اگر شما بعنوان یک برنامه نویسی حرفه ای قراردادی را به صورت ساعت/نفری با کارفرما منعقد کردید، محاسبه ساعت انجام کار نباید شامل مدت زمانی شود که شما برای انجام کار، در حال تحقیق و یا سعی و خطا بوده اید. یا به زبان ساده تر شما نمی توانید بابت زمانی که در حال یادگیری و تحقیق بوده اید هزینه ای از کارفرما دریافت کنید.

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

واقعا جای شگفتی و یا شاید تاسف دارد که این روزها بسیاری از افرادی که مثلا تازه فارغ التحصیل شده اند و یا تازه وارد بازار کار شده اند در هنگام استخدام همیشه حقوق و مزایا بیشتر برایشان اهمیت دارد.

خودم در سالهای ۷۶ و ۷۷ با اینکه بیش از ۵ سال کار برنامه نویسی برای خودم انجام داده بودم دنبال شرکتهای نرم افزاری میگشتم که من را بصورت رایگان بپذیرند تا در کنار آنها آموزش ببینم و شاید مدت ۲ سال بصورت رایگان در چند شرکت بزرگ، برنامه نویسی کردم که گاهی اوقات متوجه میشدم سواد برنامه نویسی من از برخی از کارکنان و برنامه نویسان رسمی آنها نیز بالاتر است ولی هیچ وقت این باعث نشد که از یادگیری از آنها دست بردارم.

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

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

حوزه کاری خود را بشناسید

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

در کتاب، عمو باب هم می گوید در این ۵۰ سال تاریخ برنامه نویسی ممکن است بسیاری از اتفاقاتی که افتاده دیگر اکنون نیازی نباشد که یک برنامه نویس بداند ولی بسیاری از آنها مواردی هستند که همچنان در برنامه نویسی کاربرد دارند و دانستن آنها برای یک فرد حرفه ای ضروریست.

همچنین بطور خیلی خلاصه لیستی از چیزهایی که یک برنامه نویس حرفه ای باید در این مورد بداند را لیست کرده است:

  • الگوهای طراحی Design Patterns: شما باید بتوانید هر ۲۴ الگو طراحی برنامه نویسی که در کتاب Gang of Four آمده است را شرح دهید.

  • اصول طراحی Design Principles: شما باید اصول SOLID در طراحی شیء گرا را بشناسید. (که اشاره می کند به ۵ اصل طراحی شیء گرا که برای اولین بار همین آقای عمو باب در سال ۲۰۰۰ مطرح نمود و مخفف Single responsibility, Open-closed, Liskov substitution, Interface segregation Dependency inversion می باشد).

  • متدهای پیاده سازی: شما باید با روشهای XP، SCRUM، Lean، Kanban، Waterfall و همچنین طراحی و آنالیز ساخت یافته نیز آشنایی داشته باشید.(Structured Analysis , Structured Design)

  • دیسیپلین: شما باید در زمینه های TDD و طراحی شیء گرا، برنامه نویسی ساخت یافته، یکپارچه سازی مداوم (Continuous Integration) و همینطور برنامه نویسی دوتایی (یا جفتی) (Pair Programming) تمرین های کافی را داشته باشید.

  • ابزارهای اصلی طراحی: شما باید روش استفاده از این ابزارها را بدانید: UML ،DFDs، نمودارهای ساختار (Structured ChartsPetri Nets ، State Transition Diagrams and Tables، فلوچارت و جداول تصمیم.

یادگیری مداوم

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

باز هم عمو باب در کتاب آورده است، کدام پزشک موفقی را میشناسید که آخرین ژورنالهای پزشکی را نداشته باشد؟ چه کسی وکیلی را استخدام میکند که از آخرین تغییرات قانون خبر نداشته باشد؟ یک برنامه نویسی را استخدام میکند که به روز نباشد؟

کتاب، بلاگ، مقاله و … بخوانید. در گروه ها و انجمنها و خبرنامه های مختلف عضو شوید. همیشه چیزهایی را خارج از حوزه تخصصی خود هم یاد بگیرید.

اگر برنامه نویس .NET هستید حتما زبان Java را هم یاد بگیرید، همینطور اگر برنامه نویس Java هستید با Ruby هم کار کنید. اگر با C برنامه نویسی میکنید زبان Lisp را هم یاد بگیرید. و اگر دوست دارید مغزتان حسابی به چالش کشیده شود زبانهایی مانند Prolog و Forth را کار کنید.

موضوع اخلاق کاری هنوز ادامه دارد و چند مورد دیگر آنرا در قسمت دوم این موضوع آورده ام.