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

به طور کلی از یک توسعهدهنده نرمافزار انتظار میرود که:
- علاوه بر اینکه میتواند کد خوب بنویسد، بتواند این کار را در یک زمان از پیش تعیین شده (که نامحدود هم نیست) انجام بدهد. در واقع ارائه محصول نرمافزار خوب در زمان منطقی و مناسب. در این مورد لازم است توسعهدهنده با توجه به deadline ها بهترین راه حل را پیدا کند. ممکن است اگر زمان بیشتری به کار اختصاص داده شود، راه حل بهتری امکان پذیر باشد اما مهم انجام بهترین کار در زمان معین شده است.
- به طور مداوم در جستجو راههایی باشد تا با انجام کار کمتر، خروجی بیشتری را ایجاد کند. این کار از طریق یادگیری روشهای جدید در برنامهنویسی، تولید یا استفاده از کتابخانههای برنامهنویسی مختلف، بهبود عملکرد یا پردازش بخشهای مختلف نرمافزار و ... امکان پذیر است.
- بتواند کدهای موجود را مرتبسازی، اشکال زدایی و استفاده کند به جای اینکه هر دفعه همه چیز را از نو بسازد. این مهارت هم مربوط به توانایی خواندن کد دیگران و هم توانایی تغییر ساختار آن به گونهای که بعداً نیز قابل توسعه باشد هست.
- توانایی تخمین مناسب زمان انجام کارها را داشته باشد. کاری که با محاسبه زمان انجام وظایف پیشین و ترکیب آن با تجربه بدست میآید.
- با استفاده از ابزارها یا نرمافزارهای مناسب، سرعت تولید نرمافزار را بیشتر کند و با این کار منافع بیشتری برای خود، تیم نرمافزاری یا شرکت ایجاد کند.
- توانایی ایجاد مستندات استاندارد را داشته باشد.
- بتواند تستهای مناسب را برای یک نرمافزار تولید کند (تست اتوماتیک) و همچنین مراحل تست کیسهای نرمافزار را برای تست دستی تعریف نماید.
- تشنه کسب دانش در حوزه تخصصی خودش باشد، سکون مهمترین آفت توسعهدهندههای نرمافزار است و عامل مهم از رده خارج شدنشان.
- برای کسب دانش و همچنین به اشتراک گذاری آن وقت بگذارد. از طریق وبلاگ یا فعالیت در شبکههای اجتماعی و ...
- بتواند از طریق ایجاد یک نرمافزار یا خدمت الکترونیکی، ارزش آفرینی کند.
- همکاران و برنامهنویسهای تازه کار را در راه تبدیل شدن به یک توسعهدهنده راهنمایی کند. همانطور که از راهنمایی افراد با تجربه برای ارتقاء تجربیات خودش استفاده کرده است.