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

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

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

اول، آسیب نرسانید

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

حال یک برنامه نویس چه آسیبی می تواند به یک نرم افزار وارد آورد؟ یک برنامه نویسی می تواند از دو جهت آسیب وارد کند یکی به کارکرد برنامه و دیگری به ساختار برنامه. هر کدام را در ادامه شرح خواهیم داد و روش جلوگیری از آن را نیز ارائه خواهیم کرد.

آسیبهای کارکرد برنامه

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

اما چطور می توان یک برنامه بدون خطا تولید کرد؟ با استفاده از روشهای تست برنامه. بله شما باید برنامه خود را تست کنید، تست کنید و باز هم تست کنید.

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

اما در اینجا می توان گفت که کد شما باید تمامی تستهای تضمین کیفیت یا Automated QA را پاس کند. در این صورت شما می توانید در بالاترین حد ممکن از صحت کدهای خود اطمینان یابید.

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

آسیبهای ساختار برنامه

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

اگر شما ساختار را درست طراحی نکنید، آینده را به خطر انداخته اید.

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

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

من در سال گذشته مجبور شدم برنامه ای را که شاید بیش از ۱۰ سال قبل برای یک کارفرمایی نوشته ام را تغییراتی دهم و امکاناتی را با توجه به تغییرات بسیار در این سالها به آن اضافه کنم.

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

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

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

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

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

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

برای همین تصمیم گرفتم اولین مطلب تخصصی خودم رو در این جایگاه به این موضوع اختصاص دهم تا شاید بتواند یک تعریف ساده و ابتدایی را به علاقه مندان و همچنین کارفرمایان جویای برنامه نویس ارائه کند.

این مطلب را با استفاده از برداشتی آزاد از فصل اول کتاب The Clean Coder نوشته آقای Robert C. Martin معروف به Uncle Bob یا همان عمو باب، با عنوان Professionalism نوشته ام.

البته سعی کردم در مثالها به مواردی اشاره کنم که ما در جامعه خود بیشتر میبینیم که بر اساس تجربه ها ی خودم بوده است.

مراقب باشید که چه چیزی می خواهید


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

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

اگر برنامه ای که تحویل کارفرما می شود بدلیل یک مشکل در کد برنامه مثلا ۱۰ میلیون تومان به وی ضرر برساند، یک برنامه نویس غیر حرفه ای در مقابل شانه های خود را بالا می اندازد و می گوید: «خوب هیچ برنامه ای بدون باگ که نمی شود».

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

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

گرفتن مسئولیت


عمو باب در اینجا داستانی از اولین مسئولیتش بعنوان یک برنامه نویس می نویسد که بعد از تحویل دادن برنامه با امکانات جدید به مشتریان که در آن سالها می بایست برنامه را روی Tape بصورت حضوری می برد و برای هر یک نصب میکرد، یک مشکلی بوجود آمد که برنامه کار نکرد و این باعث شد صدای نارضایتی تمام مشتریان و متعاقبا کارفرما در آید. اما مشکل اینجا بود که عمو باب نمی دانست چرا این مشکل بوجود آمده است.

حالا شما فرض کنید بعنوان یک برنامه نویس در این موقعیت باشید، چه میکنید؟

من در سال ۷۶ در یک شرکت نرم افزاری در مشهد بصورت کارآموز مدتی مشغول بودم که با زبان برنامه نویسی پاسکال برنامه می نوشتند، این شرکت در آن سالها جزء برترین شرکتهای نرم افزاری مشهد و یا حتی ایران محسوب میشد.

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

یک روز وقتی در این مورد با او صحبت کردم گفت: «ما بیش از ۳۰۰ مشتری داریم اگر بعد از اینکه برنامه رو برای همه آنها فرستادیم و بعد به مشکل خورد من باید به شرکت پاسخ بدهم نه تو، پس ترجیح میدهم کدی را که خودم دیدم و تست کردم رو کمپایل کنم.»

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

البته وقتی من گفتم سورسی در کار نیست و من روی یک فایل com دیگر تنها با استفاده از HexEditor جدول ماتریسی فونتها رو طراحی کردم و تغییر دادم بازهم کار رو از من قبول نکرد و اون فایل حداقل تا وقتی که من اونجا بودم همراه برنامه منتشر نشد.

درک این موضوع در آن سالهای جوانی برای من کمی دشوار بود و من همه جا از این موضوع گلایه میکردم، ولی بعدها در مسئولیتهایی که داشتم دقیقا این موضوع را تجربه کردم که خیلی هم برایم گران تمام شد.

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

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

در بخشهای بعدی این مطلب نیز با من همراه باشید:

شروع وبلاگی دیگر از برنامه نویسی دیگر

از اینکه دوباره قصد شروع کردن یک وبلاگ جدید رو دارم خیلی هیجان زده ام.

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

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

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

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

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

من قصد دارم در در حد خودم تا جایی که ممکن است در پر کردن این خلاء اقدام کنم.

خوب برای پست اول فکر کنم زیاد طولانی ننویسم بهتر است.

امیدوارم که مطالب این وبلاگ برای شما مفید باشد و این سعی من بتواند گامی هر چند کوچک در جهت رشد و اعتلای این صنعت در کشورم بردارد.

شاد و سربلند باشید