2010/06/27

‫ کتاب Scrum and XP from the Trenches

اگر می‌خواهید اسکرام یاد بگیرید و پروژه‌هایتان را با روش اسکرام مدیریت کنید، اگر می‌خواهید در تولید نرم‌افزار از روش‌های جذاب XP استفاده کنید و اگر نمی‌خواهید درگیر مسائل تئوری شوید و می‌خواهید مستقیماً از روش اسکرام استفاده کنید، یک منبع خوب وجود دارد: خواندن و به کار بردن کتاب Scrum and XP from the Trenches. این کتاب به کار بردن اسکرام و XP را با زبانی بسیار ساده به شما توضیح می‌دهد. کتاب حجم بسیار کمی دارد. این موضوع برای کسانی که کمبود دائمی وقت دارند و کسانی که حوصله خواندن کتاب‌های حجیم را ندارند خیلی مفید است. علاوه بر این، کتاب انگلیسی بسیار ساده و روانی دارد و اصلاً خواننده غیر انگلیسی زبان را اذیت نمی‌کند.

کتاب تمامی جزییات اسکرام را از جمله جلسات، جزییات آنها، تقسیم کار، نقش‌ها، نمودارها، نحوه تست و روش ترکیب XP با اسکرام را به خوبی پوشش می‌دهد. کتاب حتی موضوعات ریزی مثل چگونگی انتخاب Backlog Itemها برای یک اسپرینت نوعی را هم تشریح می‌کند. خواندن کتاب علاوه بر Scrum Masterها نکات خوبی را به دیگر اعضای تیم نیز یاد می‌دهد.

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

سورپرایز آخر این که نویسنده کتاب یعنی «هنریک نیبرگ» علی‌الظاهر اواخر سال میلادی جاری (۲۰۱۰) برای برگزاری یک سری دوره Scrum Mastering به ایران خواهد آمد.




2010/06/18

ضد برنامه‌نویس

یکی از مشکلاتی که همیشه در کار نرم‌افزار وجود داشته تعریف افراد از حرفه برنامه‌نویس/توسعه‌دهنده است. به عنوان مثال به سناریوهای زیر دقت کنید:


۱- فلانی خدای C است و همه برنامه‌هایش را با C می‌نویسد حتی برنامه‌های تحت وبش را ---> هر کاری ابزار مخصوص به خودش را لازم دارد. هیچ لزومی ندارد برای کوبیدن یک میخ ۲ سانتی از یک پتک ۲۰ کیلویی استفاده شود.

۲- یک برنامه نوشته ۱۰ هزار خط ---> ملاک خوب بودن یک برنامه تعداد خطوط آن نیست بلکه چیزهایی مثل کاربردی بودن، بهینه بودن و قابل نگهداری بودن آن است.

۳- خودش رفته SQL Server نوشته ---> اولاً که اختراع مجدد چیزهایی که از قبل اختراع شده‌اند یک دوباره‌کاری و اشتباه بزرگ است. ثانیاً این که MS SQL Server در یک DVD جا می‌شود، می‌توان آن را از بازار رضا به قیمت ۴ هزار تومان خرید و این که محصول شرکت فحش‌خوری مثل مایکروسافت است دلیل نمی‌شود که هر کسی که از گرد راه رسید بتواند SQL Server بنویسد. به قولی کار هر بز نیست خرمن کوفتن، گاو نر می‌خواهد و مرد کهن.

۴-  چون خدای برنامه‌نویسی است از هیچ library و کتابخانه‌ای استفاده نمی‌کند و خودش utilityهای مورد نیازش را می‌نویسد ---> بنا به تجربه چندین و چند باره این مورد معمولاً نشانه دو چیز بیشتر نیست: یا طرف سواد استفاده و config کردن libraryهای موجود را ندارد یا آنقدر در بی‌خبری به سر می‌برد که نمی‌داند چنین چیزهایی هم وجود دارند.

۵- همه موضوعات و تکنولوژی‌های برنامه‌نویسی را بلد است از php بگیر تا ASP.NET، از C#‎ بگیر تا Java از Socket Programming بگیر تا jQuery ---> معمولاً همه کاره هیچ کاره است.

۶- فلانی خدای برنامه‌نویسی امنیت موبایل است ---> قدرت او در شناخت و کار با مفاهیم امنیت موبایل است نه مهندسی نرم‌افزار. در واقع او همچنان یک مهندس مثلا مخابرات است و کارش ربطی به نرم‌افزار ندارد.

۷- خدای C#‎ است ---> ممکن است فقط C#‎ بلد باشد و به هیچ یک از مفاهیم مهندسی نرم‌افزار آشنا نباشد. مهم‌تر این که C#‎ و دیگر زبان‌های برنامه‌نویسی ابزاری هستند جهت رسیدن به اهداف مهندسی نرم‌افزار و الا به تنهایی هیچ کاربردی ندارند.

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

۹- فلانی برنامه‌نویس فلان اداره عریض و طویل دولتی است ---> ادارات دولتی معمولاً تیم برنامه‌نویسی درست و حسابی ندارند و کارشان را به شرکت‌های خصوصی می‌سپارند. معمولاً هم کار شرکت‌های دولتی در حد نگهداری و پشتیبانی است نه کارهای جدی برنامه‌نویسی.

۱۰- فلانی یک نرم‌افزار نوشته ۴۰ میلیون فروخته ---> موفقیت‌های مالی لزوماً نشئت گرفته از کار برنامه‌نویسی خوب نیست. فروش خوب تابع فاکتورهای خیلی خیلی زیادی است.

۱۱- فلانی خدای FoxPro بوده---> یادش بخیر! الان به چه چیزی تسلط دارد؟ توی این ده پانزده سال فرصت نکرده خودش را به روز کند؟

۱۲- وقتی پای کامپیوتر می‌نشیند تا ساعت‌های متمادی بلند نمی‌شود ---> زیاد کار کردن به معنای خوب کار کردن نیست.

۱۳-



تعدادی از افرادی که این طور مشکلات را به وجود می‌آورند معمولاً برنامه نویس یک حوزه خاص مثل Autocad، سخت‌افزارهای خاص منظوره، الگوریتم‌های محاسبات خاص ریاضی و… هستند. در واقع این طور اشخاص خبره سیستم‌های مالی اداری، پروتکل‌های مخابراتی، داشتن اطلاعات عمومی از یک حوزه خاص مثل بازار مسکن و… هستند. بعضی از آنها هم مهارتشان در راهبری شبکه‌های کامپیوتری، مدیریت IIS، SQL Server و… است. بعضی‌ها هم به خاطر مسائلی مثل زیر دچار این قبیل مشکلات می‌شوند:

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


واقعاً کدام یک از این افراد را می‌توان یک برنامه‌نویس (توسعه‌دهنده) خوب حساب کرد؟ آن هم در حالی که بیشتر آنها فقط حوزه کوچکی از توسعه نرم‌افزار را پوشش می‌دهند؟ مثال این افراد در کار ساختمان‌سازی مثال کار افرادی است که استاد نقاشی یا مینیاتور هستند ولی نمی‌توانند یک دیوار را نقاشی کنند. یا فردی که مهندس طراح الکترونیک است ولی مجبور شده برقکار ساختمان باشد. به نظر کاملاً شخصی اینجانب، برای این که این افراد بتوانند در کار نرم‌افزار موثرتر باشند لازم است به موارد زیر توجه بیشتری داشته باشند:

۱- به روز بودن نسبت به اخبار و تغییرات دنیای برنامه‌نویسی و نرم‌افزار
۲- مطالعه مداوم در زمینه برنامه‌نویسی
۳- آشنایی با مفاهیم مهندسی نرم‌افزار مثل اصول طراحی، software re-use، test، معماری نرم‌افزار و…
۴- آشنایی با متودولوژی‌های تولید نرم‌افزار
۵-




2010/06/16

خداحافظ فراکنش

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

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

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

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

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