پرهیز از کمال‌گرایی غیر ضروری در توسعه نرم‌افزار

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

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

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

به عنوان مثالی که اخیراً به آن برخورد کردم باید به ذخیره و خواندن تنظیمات سیستم از app.config اشاره کرد. مورد استفاده من نگهداری چندین value به ازای یک key یکسان بود. هر چند که دات‌نت اجازه چنین کاری را می‌دهد و خطا اعلام نمی‌کند. اما استفاده معمولی از ConfigurationManager.AppSetting فقط آخرین value را بر می‌گرداند. راه اصولی برای حل این مشکل استفاده از Config Sectionهای سفارشی بود. حتی می‌شد از راه‌حل‌های پیچیده‌تر مبتنی بر reflection برای حل مسئله استفاده کرد. اما یک راه فوق‌العاده ساده‌تر و کم هزینه‌تر هم وجود داشت. اضافه کردن یک عدد چند رقمی (بی‌استفاده) به انتهای keyها (تا از یکسان بودن در بیایند) و استفاده از یک foreach و عملیات استرینگی ساده برای به دست آوردن valueها! راه حل آخر را از یک برنامه‌نویس VB.NET یاد گرفتم.

‫ابزارهای دات‌نتی یا PHP؟

به عنوان یک کاربر دنیای وب هر چند از گاهی که نیاز به راه اندازی یک سایت، وبلاگ، انجمن، فروشگاه اینترنتی و غیره می‌شود نیاز به تصمیم‌گیری درباره انتخاب ابزار مورد استفاده هم می‌شود. برای هر دسته از نیازمندی‌ها ابزارهای متفاوتی وجود دارد. مثلاً برای راه اندازی وب سایت می‌توان از ابزارهای WordPress، Joomla، Drupal، Orchard یا Umbraco استفاده کرد. فارغ از امکانات و جزییات هر کدام از آنها، اگر سر و کاری با برنامه‌نویسی و توسعه نرم‌افزار داشته باشید، اول بایستی بین سکوی توسعه آنها یا همان زبان برنامه‌نویسی آنها تصمیم‌گیری کنید. در این زمینه دو سکوی اصلی وجود دارند، یکی PHP که لینوکسی است و دیگر .Net که ویندوزی است.

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

اما اگر دستی بر آتش دارید، فعالیت‌تان در زمینه دات‌نت است، سرور ویندوزی دم دست دارید، علاقه کمی به کار با لینوکس و PHP دارید و یا نیاز احتمالی به توسعه و یکپارچگی ابزارها دارید، قضیه فرق می‌کند. در این صورت باید وزن امکانات و مزایای ابزارهای PHP را کمی کمتر کرده و به ابزارهای دات‌نتی نگاه دقیق‌تری داشته باشید. اجازه دهید یک Case Study داشته باشیم راجع به CMSها.

گفته می‌شود که بین CMSهای PHP سه ابزار WordPress، Joomla و Drupal بسیار رایج‌تر هستند. WordPress پر استفاده‌ترین و ساده‌ترین است. Drupal برای نیازهای پیچیده‌تر ساخته شده و استفاده از آن به راحتی WordPress نیست. Joomla حالت وسط این دو است. یعنی از WordPress پیچیده‌تر و کم استفاده‌تر ولی از Drupal ساده‌تر و پر استفاده‌تر است. وردپرس و جوملا به تنهایی ۷۸ درصد سهم بازار را در اختیار دارند. ابزارهای دات‌نتی هم طی سال‌های اخیر رشد خیلی زیادی داشته‌اند. سه ابزار مطرح دات‌نتی عبارت هستند از Umbraco، Orchard و DotNetNuke. از بین این سه Orchard از همه جدیدتر است. گفته می‌شود Orchard معادل Drupal است. DotNetNuke یا همان DNN از همه قدیمی‌تر و رایج‌تر است. بر اساس نظرات برخی کاربران Orchard چیزی از یک CMS کامل کم ندارد. اگر این گفته را صحیح بدانیم باز هم جامعه کاربری خیلی کوچک (نسبت به WordPress) و متخصصین کم تعداد آن را نباید فراموش کرد. باید توجه کرد که جامعه کاربری کوچک به معنای ابزارهای جانبی، Themeها و امکانات فارسی کمتر نیز می‌باشد.

تجربه شخصی که از نرم‌افزارهای وبلاگ نویسی دارم من را نسبت به نرم‌افزارهای دات‌نتی به شک انداخته است. من مدت‌ها از ابزار blogger برای وبلاگ‌نویسی استفاده کرده‌ام. مدتی هم هست که از BlogEngine.Net به عنوان یک ابزار دات‌نتی استفاده می‌کنم. هر چند که خیلی با ریزه‌کاری‌های وبلاگ‌ها کار نکرده‌ام، اما به طور تجربی حس می‌کنم وبلاگ WordPress خیلی راحت‌تر و روان‌تر از BlogEninge.Net به عنوان بهترین وبلاگ دات‌نتی کار می‌کند. رسیدن به یقین در مورد این موضوع نیاز به بررسی دقیق‌تر WordPress و خود BlogEngine.Net هم دارد.

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

منابع
•    http://www.rackspace.com/knowledge_center/article/cms-comparison-drupal-joomla-and-wordpress
•    http://webmasterformat.com/blog/top-asp-net-cmss
•    http://www.garethelms.org/2011/01/my-take-on-net-cmss-orchard/
•    http://www.techrepublic.com/blog/programming-and-development/pass-on-orchard-cms-until-the-feature-set-matures/4127
•    http://w3techs.com/technologies/comparison/cm-artiphp,cm-drupal,cm-orchard
•    http://orchard.codeplex.com/discussions/304259
•    http://www.opensourcecms.com/general/cms-marketshare.php
•    http://www.mindfly.com/blog/2012/02/13/wordpress-vs-umbraco-how-do-you-choose/

‫دریافت پروژه از سایت‌های Freelancing

در مشاهدات روزانه از سایت‌های Freelancing در یک ماه گذشته و تلاش برای دریافت پروژه از آنها به نکات زیر برخوردم:

۱- معتبرترین سایت‌های Freelancing عبارتند از odesk.com و elance.com. این دو سایت آنقدر مهم هستند که با مشتری‌های به دست آمده از آنها می‌توان کار Outsource را به طور جدی ادامه داد. قیمت‌های هر دو سایت هم نسبتاً مناسب هستند.

۲- هر دو سایت آمریکایی هستند و بنابراین مطابق تحریم‌ها امکان سرویس دهی به ایران را ندارند. سایت odeks.com با اولین باری که با IP ایران از آن بازدید کنید اکانت شما را متوقف کرده و تا زمانی که کپی پاسپورت یا مدارک این چنینی ارائه ندهید مشکل برطرف نمی‌شود.

۳- سایت Freelancer.com سایت پر ترافیکی برای Freelancing است. این سایت استرالیایی است و تا اینجا هیچ مشکلی با ایران نداشته است. شما می‌توانید با خیال راحت با پرچم ایران فعالیت داشته باشید.

۴- قیمت‌های سایت Freelancer.com خیلی پایین است. گاهی اوقات به ساعتی ۴ دلار هم می‌رسد. حتی اگر قیمت دلار را ۳۰۰۰ تومان بگیریم، بعد از کسر کمیسیون سایت و هزینه‌های انتقال پول و تبدیل به ریال به مبلغ حدود ساعتی ۹ هزار تومان می‌رسیم. این رقم از تصور بسیاری از افراد از درآمد دلاری خیلی پایین‌تر است.

۵- تشخیص کشور محل اقامت در هر سه سایت معرفی شده بر حسب تشخیص خودکار بر اساس IP آن هم در روز ثبت نام است. عوض کردن کشور بعد از ثبت نام معمولاً کار سختی است.

۶- رقابت در دریافت پروژه خصوصاً در Freelancer.com بسیار سنگین است. بیشتر اوقات کارهایی که در ایران بابت آنها یک میلیون تومان خواسته می‌شود در آنجا با قیمت‌هایی در حد ۱۰۰ دلار انجام می‌شود.

۷- افراد بسیار زیادی از کشورهای شرق اروپا مثل اوکراین، روسیه، لهستان، لیتوانی و کشورهای آسیایی مثل هند، پاکستان، چین و بنگلادش بر سر پروژه های ۱۰۰ دلاری با هم در رقابت هستند. اما فقط کشورهای در حال توسعه نیستند که آنجا فعال هستند، در پروژه‌های با قیمت مناسب‌تر سر و کله آمریکایی‌ها، انگلیسی‌ها و بقیه اروپا هم پیدا می‌شود.

۸- در سایت Freelancer.com دو دسته کلی از پروژه‌ها وجود دارند. اولی پروژه‌هایی که که در واقع پروژه نیستند. بلکه کارهای دم دستی یکی دو روزه هستند. مثل استخراج اطلاعات از یک سایت خاص، تبدیل فلان فایل به یک فرمت دیگر، رفع اشکال یک سایت، نرم‌افزارهای کوچک مثل نگهداری اطلاعات فروش کتاب و… شانس دریافت چنین پروژه‌هایی خیلی پایین است. چون این طور پروژه‌های جز کارهای خیلی روتین هستند و مطمئناً افراد بسیاری وجود دارند که تکرار مداوم چنین کارهایی باعث شده که سرعت انجام کارشان خیلی بالا برود و در نتیجه بتوانند چنین کاری را در یکی دو ساعت انجام دهند. بنابراین یک قیمت ۷۰ دلاری چندان هم بد نباشد. دسته دوم پروژه‌های کوچک ولی صفر تا صدی هستند که آنقدر روتین نیستند که نمونه‌های قبلی آنها وجود داشته باشد. از طرفی هر چقدر هم که مهارت و سرعت داشته باشید اما باز هم نیاز هست که مراحل تحلیل، طراحی، برنامه‌نویسی و تست را برای آن انجام دهید. به همین خاطر این طور پروژه‌ها را می‌توان با قیمت‌هایی در حد ۷۰۰ دلار هم گرفت. اما فراموش نکنید درست در چنین پروژه‌هایی است که رقبای آمریکایی و اروپایی که اتفاقاً در پروپوزال نویسی مهارت بسیار بالایی دارند پیدا می‌شود.

۹- در سایت Freelancer.com دو دسته کلی از کارفرمایان هم وجود دارد. یک دسته کارفرمایان دائمی که همیشه کارهایشان را از طریق این سایت انجام می‌دهند و دسته دیگر کارفرمایانی که به دنبال یک نیازمندی خاص و برای اولین بار مراجعه می‌کنند. دسته اول با قیمت‌ها آشنایی کامل دارند و تا آنجا که می‌توانند از قیمت‌های خیلی پایین استفاده می‌کنند. دسته دوم کارفرمایان امتحان پس نداده‌اند، معلوم نیست نیازمندی‌هایشان به اندازه کافی واضح است یا نه و حتی معلوم نیست تا آخر پروژه ادامه می‌دهند یا نه.

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

‫افراد و شرکت‌ها موقع Outsource کردن به چه چیزی فکر می‌کنند؟

آنها قبل از هر چیز به Outsourcing بد بین هستند. اما بعضی از آنها که تجارب موفقی داشته‌اند توصیه‌هایی برای انجام موفق Outsourcing دارند:

۱- مشخص و مستند کردن تمام جزییات پروژه بدون استثنا.
۲- داشتن مدیر پروژه یا مدیر فنی در سمت خودشان نه در تیم Outsource.
۳- عدم توقع بابت قیمت‌های خیلی پایین‌تر.
۴- سپردن کارهای خلاقانه‌تر به تیم‌های غیر Outsource.
۵- کار با شرکت‌های معروف‌تر و پرهیز از کار با اشخاص منفرد. بسیاری از شرکت‌های موفق دارای دفاتری در ایالات متحده هم هستند.
۶- در صورتی که می‌خواهید درگیری کمتری داشته باشید از سایت‌های شناخته شده odesk و elance استفاده کنید.
۷- بعد از مدیریت پروژه، داشتن مهارت‌های ارتباطی بالا را خیلی لازم و مفید می‌دانند.
۸- شروع کردن با پروژه کوچک‌تر سپس پروژه‌های بزرگتر.
۹- تفاوت‌های فرهنگی بین کشورهای مختلف از نظر آنها هم بسیار مهم است.
۱۰- بیشتر Outsource از آمریکا به کشورهای دیگر اتفاق می‌افتد.

دو نکته تکمیلی:
۱- معمولا بیشتر startupها هستند که علاقمند به کار با تیم‌های Outsource هستند.
۲- کشورهای شناخته شده در Outsource شامل روسیه، بلاروس و کلاً اروپای شرقی به عنوان تیم‌های درجه یک و کشورهای هند و چین به عنوان کشورهای درجه دوم. هستند.