در شرکتتان برنامه‌ساز نیاز دارید، نه برنامه‌نویس

پیشتر در پستی درباره واژگان برنامه‌سازی و برنامه نویسی سخن گفتم.
اینک مقاله‌ای بسیار مفید برای کسانی‌که در فکر راه‌اندازی شرکتی نرم‌افزاری هستند به فارسی برگردانده‌ام. گرچه ازدید خودم ترجمه‌اش خوب در نیامد و نیاز به بازبینی و ویرایش دارد:

در شرکتتان برنامه‌ساز نیاز دارید، نه برنامه‌نویس

موقعیت بسیار مهم است. پند یک مدیر ممکن است بی‌ارزش یا بدتر باشند اگر مناسب وضعیت شما نباشد. تصمیمی درست برای شرکتی بزرگ ممکن است برای کوچک‌تر کشنده باشد. پیش از آنکه پیشنهاد‌های مدیریتی هرکسی از جمله من را بشنوید‍ ☺، مطمئن شوید که موقعیت خودتان را مدنظر دارید.
من یک شرکت نرم‌افزاری کوچک را می‌گردانم بدون هیچ کمک مالی بیرونی. شرکت ما (SourceGear) حدود ۶ سال سن و ۲۵ کارمند (در زمان نوشته شدن این مقاله: سال ۲۰۰۳) دارد.

در این مدت درس‌های بسیار جالبی فرا گرفته‌ام. یکی از چیزهایی که یادگرفته‌ام این است که شرکت‌های نرم‌افزاری کوچک نباید هیچ برنامه‌نویسی داشته باشند.

در این مقاله منظور از برنامه‌نویس (Programmer) فردی است که کاری جز نوشتن کُدهای نو و (اگر خوش‌شانس باشید) اشکال‌زدایی، نمی‌کند. او مشخصه‌ها(Specifications) را نمی‌نویسد. او تست‌کیس‌های خودکار را نمی‌نویسد. کمکی برای اینکه سیستم ساخت خودکار بروز باشد، نمی‌کند. به مشتریان کمک نمی‌کند تا مشکلات جدی‌شان را حل کنند. در نوشتن مستندات کمک نمی‌کند. او حتا کُد را هم نمی‌خواند. تنها کاری که او می‌کند نوشتن کد جدید است.

در شرکت‌های کوچک نرم‌افزاری شما یک چنین آدم‌هایی را نمی‌خواهید.

به‌جای برنامه‌نویسان (کسانی متخصص نوشتن کد هستند) آنچه شما نیاز دارید برنامه‌سازان (Developer) هستند (کسانیکه به روش‌های مختلف تلاش می‌کنند تا محصولی موفق ساخته شود).

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

~~~

حدود (وظایف و اختیارات) در برابر انعطاف‌پذیری

این تفاوت‌ به‌راستی مهم بین شرکت‌های کوچک و بزرگ است:

  • در شرکت کوچک بیشتر افراد نقش‌های مختلف دارند. امکان‌پذیر نیست که فردی داشته‌باشید که تنها روی یک زمینه تمرکز می‌کند. شرکت‌های کوچک افراد همه‌فن‌حریف‌ی را نیاز دارند که به شرکت اهمیت می‌دهند و برای هرکاری که به شرکت کمک کند، پیش‌قدم می شوند. حسابدار یا کتابدار هرکاری را سر-و-سامان می‌دهند. معمولا کسانی وجود دارند که همه کارها را انجام می‌دهند و سرشان همیشه شلوغ است و هیچ‌کس هم نمی‌داند که آنها چه می‌کنند. در اینجا مفهوم کلیدی انعطاف‌پذیری است.
  • شرکت شرکت‌های بزرگ متخصصان بیشتری دارند. دستمزدها با «حساب‌های دریافتنی» فرق‌ می‌کند که آن‌هم از «حساب‌های پرداختنی» جداست. معماران نرم‌افزار، طراحی می‌کنند. برنامه‌نویسان کُد می‌نویسند. مدیران فنی برنامه‌نویسان را مدیریت می‌کنند. مدیران پروژه (برنامه) ها مشخصه و زمانبندی را پیگیری می‌کنند. مدیران محصول جایگاه‌سازی و پیام‌رسانی می‌کنند. مبلغان، خوب، کسی به راستی نمی‌داند که آنها چه می‌کنند.☺ به هرحال هرکسی کاری مشخص و تعریف‌شده دارد. مفهوم کلیدی اینجا احترام به حدود (وظایف و اختیارات) است.

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

~~~

برنامه‌سازان

در شرکت کوچک نرم‌افزاری هر برنامه‌سازی پیش و بیش از هر چیز برنامه‌نویس است. بخش اصلی وقتش باید صرف نوشتن کُد و اشکال‌زدایی گردد. اما نیاز است که برنامه‌سازان در دیگر زمینه‌ها هم کمک کنند، زمینه‌هایی چون:

  • مستندات مشخصه‌ها
  • مدیریت پیکربندی
  • بازبینی کُد
  • تست کردن
  • تست‌های خودکار
  • مستندسازی
  • حل مشکلات جدی مشتریان

در واژگان من، این کارها برای برنامه‌ساز و برنامه‌نویس فرق می‌کنند. برنامه‌ساز بینش و چشم‌اندازی بزرگتر دارد و توانایی آنرا دارد که دیدی بزرگتر (از موضوع) داشته باشد. برنامه‌نویس کُد می‌نویسد، آنرا به تست‌کننده‌ها می‌سپارد و منتظر می‌ماند تا آنها اشکال‌ها را بیابند. برنامه‌ساز می‌داند که بهتر است هم‌اکنون اشکال‌زدایی کند، زیرا ممکن است او در آینده همان کسی باشد که با مشتری درباره آن محصول صحبت می‌کند.

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

~~~

پرسشهای پُربسامد (متداول)

می‌توانیم برنامه‌نویسانِ خود را فقط به کُدنویسی بگماریم و برای همه دیگر کارها گروهی دیگر را بکاربگیریم؟

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

برنامه‌نویسان ما نمی‌دانند که چگونه همه این کارهای دیگر را انجام‌دهند؟

راستی؟ مطمئن هستم که دانشکده‌های کامپیوتر ابزارهای مدیریت زنجیره تامین (SCM) و مهارت‌های پشتیبانی فنی را درس می‌دهند، درست؟☺

گرچه دانشکده من این چیزها را یاد نمی‌داد. روشن است که برنامه‌نویسان شما نمی‌دانند که چگونه جنبه‌های جز-کُدنویسی ساخت محصول را انجام‌ دهند. به آنها آموزش دهید.

آموزش رسمی ممکن است نقشی ایفا کند، اما بهترین یادگیری از تجربه می‌آید. برنامه‌سازان شما باید پند شرکت نایکی (Nike) «انجامش بده» را بکار بندید. مطمئن شوید که آنها فرصت اشتباه داده‌اید. به آنها اجازه دهید از اشتباهاتشان یادگیرند.

برنامه‌نویسان ما نمی‌خواهند همه این کارها را انجام دهند

بعضی آدمها نمی‌خواهند برنامه‌ساز باشند، آنها می‌‌خواهند برنامه‌نویس باشند. اشکالی ندارد. برنامه‌نویس می‌تواند کار خوبی پیدا کند. اما شما و آن برنامه‌نویس می‌توانید بنشینید و درباره اینکه آیا شرکت شما محیط مناسبی برای کار او هست یا نه، بی‌پرده سخن بگویید.

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

آیا یافتن برنامه‌سازی که مهارت‌هایی اینچنین گوناگون دارد، سخت نیست؟

بله هست. برنامه‌سازان واقعی و راستین ارزشمند هستند. احتمالا شما نمی‌توانید آنها را از بیرون بکارگیرید. مجبور هستید که به برنامه‌نویسان کمک کنید که برنامه‌ساز شوند.

زمانیکه شدند، باید بسیار تلاش کنید که آنها را نگه‌دارید. هنگامیکه برنامه‌نویسی از شرکت جدا می شود یا در شرکتی بزرگ شغل مدیریتی می‌گیرد یا شرکت خو را برپا می‌کند.

چگونه برنامه‌سازان کُد بنویسند در حالیکه پیوسته با کارهای دیگر در کارشان وقفه می‌اندازند؟

بله، این مساله‌ای است. از این فرصت بهره می‌جویم تا از اصل اریک (خودم) در مدیریت نرم‌افزار یاد کنم:

نمی‌توانید مسایل را حذف کنید،
اما می‌توانید بده-بستانی انجام‌دهید
مسایلی که هم‌اکنون دارید را بدهید
در برابر آنها مسایلی را که ترجیح می‌دهید، بستانید.

برنامه‌سازان وقت آزاد بیشتری نیاز دارند وگرنه هیچ کُدی نخواهند نوشت. خوب این مساله‌ای است که ترجیح دارد برمسایلی که برایتان پیش خواهد آمد هنگامی‌که با افرادی با چشم‌انداز باریکِ «تنها کُد» سروکار پیدا می‌کنید. تلاش کنید زمان خود را ساماندهی کنید. برای نمونه در یک روز همزمان کُدنویسی و پشتیبانی فنی را انجام‌ ندهید.

پس شما می‌گویید که برنامه‌سازان ما مجبورند همه دیگر کارها را انجم دهند؟

خیر. بهتر این است که برنامه‌سازان هنوز بیشتر(اما نه همه) وقتشان را صرف نوشتن کُد کنند. اگر بودجه شما اجازه می‌دهد دسته‌های گوناگونی از متخصصان هستند که می‌توانید بکار بگیرید:

پشتیبانی فنی «سطح یک»

بیشتر کار پشتیبانی فنی شامل پاسخگویی پیاپی به پرسشهای یکسان است.احتمالا اینکار بهترین کاربری از وقت یک برنامه‌ساز نیست. برنامه‌ساز را در پشتیبانی فنی «سطح دو» درگیر کنید؛ تشخیص و حل مشکلات سخت و پیچیده مشتریان. اما اینکه یک یا دو متخصص برای رسیدگی به کارهای ساده‌تر داشته باشید، ایده خوبی است. برای اینکار دنبال فردی بگردید که مهارت‌های ارتباطی خوبی دارد و پیش‌زمینه‌ای هم در مسایل فنی.

تستِ دستی، بازبینی اشکال‌زدایی و …

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

مستندسازی

برنامه‌سازانتان را مجبور کنید که مشخصه‌ها یا پیش‌نویس نخست محتوا را بنویسند، اما آماده‌سازی و ویرایش نهایی و ویرایش مستندات شما کاری است که برای کسیکه می‌تواند بنویسد مناسب است.

مدیر سیستم (System Administration)

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

این نوشته برگردانی است از:

Sink, Eric. “Small ISVs: You need Developers, not Programmers

اگر می خواهید بار دیگری که  مطلبی نوشته شد، آگاه گردید. عضو خوراک (feed) این بلاگ شوید.

Balatarinاین نوشته را به بالاترین بفرستید:

16 Responses to “در شرکتتان برنامه‌ساز نیاز دارید، نه برنامه‌نویس”

  1. mohsen

    با تشكر
    مطلب جالبي بود
    به نظرم دقيقا كاريه كه در اكثر شركتهاي نرم افزاري ايران داره اتفاق مي افته

  2. مقاله بسیار عالی ای بود . خدا کنه مدیران شرکت های ایرانی هم این قضیه رو متوجه باشند. چون خیلی بهشون کمک میکنه .

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

    عضو آر اس اس شمام شدیم . ایشالا مقالات بعدی بهتر باشه … موفق باشی

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

  4. عالی بود. خدا رو خوش نمیاد با این پستهای خوب مدتها ما رو توی خماری بروز شدن بگذارید؟

  5. Nasser Ghanemzadeh

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

  6. ali

    مطلب خوبی بود، پنج دقیقه بعد از خواندنش فکر کردم که خودم در این زمینه چه کرده ام، فرق بین Developer و Programmer در مواردی مانند فرق بین فیلم ساز و کارگردان است. اینکه کسی صرفا مجری یک کار باشد تا آنکه مسؤولیت کامل آن کار را بر عهده بگیرد متفاوت است.پیشتر در مورد برنامه نویس روز کار و برنامه نویس شب کار مطلبی نوشته بودم که فکر می کنم نزدیک نوشته شما بود، اما نه به این دقیقی که شما نوشته اید.
    اما نکته ای که به نظرم جا مانده است، تنوع کارها در شرکتهای نرم افزاری است. در شرکتهای کوچک نیز مانند شرکتهای بزرگ اتفاقی که می افتد آن است که کارها متنوع هستند و برای اجرای آنها آدم های متفاوتی نیاز هست. تجربه نشانم داده است که بعضی وقت ها به یک برنامه نویس هم نیاز داری. کسی که کارهای سطح پایین تر را انجام دهد. معمولا برنامه ساز ها کمتر رغبت می کنند خورده کاری انجام دهند و یا برخی مواقع نیاز پیش افتاده مشتری را بی اهمیت می دانند و اجرا نمی کنند در حالیکه شاید همان نیاز کلید جلب رضایت مشتری باشد.
    بنابراین برخی مواقع نیاز دارید به کسی که فقط برنامه بنویسد و آنکاری را که به وی می گویید بنویسد. اما در مورد تست و مستند سازی، نمی توانم از آن بگذرم که باید آنکار هم در یک شرکت کوچک توسط خود توسعه دهنده کد صورت گیرد و یا در آن مشارکت داشته باشد.
    به هر حال موفق باشید.
    همین!

  7. سلام
    مطلب خوبي را براي ترجمه انتخاب كرده ايد. لينك اين صفحه را در سايتم ميگذارم.
    با تشكر

  8. از اینکه این مطلب رو ترجمه کردی خیلی ازت ممنونم
    و یک خسته نباشی جانانه بهت می گم که خستگیت در بره !
    خسته نباشی

  9. سجاد موسوی

    سلام امید جان

    مشتریات زیاد شدن دیگه کامنت گذار قدیمیت رو تحویل نمی گیری

  10. امیر

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

  11. m.hamidreza

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

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>