بایگانی ماهیانه: تیر ۱۳۹۲

فرق شرکت مهندسی نرم افزار با سبزی فروشی و یا چطور یاد بگیریم سفارش نرم افزار بدهیم (سخنی دوستانه با مشتریان حوزه نرم افزار ایران)

چند روز پیش بود که تلفنم زنگ خورد،

من : الو

شخص نامعلوم : سلام، شما برنامه اندروید مینویسید؟

من : بله، بفرمایید

ش.ن : به من گفتن که شما کارت خوبه برای همین به شما زنگ زدم.

من : لطف داشته هرکی اینو گفته بفرمایید چه کمکی از دستم برمیاد؟

ش.م : یه نرم افزار برای وب سایت شارژ … چقدر درمیاد؟

من : در وحله اول به این شکل دراومدم ۰٫o انگاری با آجر زده باشن توی سرم و برق سه فاز از کله م پریده بود بعد از چند ثانیه مکث به خودم اومدم پرسیدم، خب این نرم افزار چه ویژگیهایی میخواهید داشته باشه؟

ش.ن : خب مثل همه نرم افزارهای دیگه باشه که کار میکنن.

من : یعنی شما هیچ مشخصاتی یا تعریفی تو ذهنتون نیست؟

ش.ن : چرا ما مشخصات کامل رو داریم.

من : راستی شما جناب آقای؟

ش.ن : یک آقایی شما رو به من معرفی کرده.

من : خب اون آقا کیه؟

ش.ن : شماره تلفنش هست …..

من : خب اسم شریف خودتون چی بود؟

ش.ن : من “رحیم خالقی” هستم!(اسم این نبودش ولی …)

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

و پایان مکالمه!

 

کد زدن برای غذا

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

اما صنعت نرم افزار در کل جهان کلاً کمتر از ۵۰ ساله که پا گرفته تو کشورمون خیلی خوشبینانه میتوان گفت که ۲۰ سال هست که به این صورت امروزی در اومده پس به ما خادمان خودتون این فرصت رو بدین تا بفهمیم شما دقیقاً چه چیزی مد نظر دارید.

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

برای اینکه یک کارگردان بتونه برروی ساخت یک اثر هنری کار کنه نیاز به یک دستمایه(زیاد بحث رو فنی نمیکنیم) داره، دستمایه دقیقاً همون چیزی هست که بعنوان مشخصات کلی تهیه کننده باید تهیه بکنه و بده دست کارگردان!

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

اینکه ما یه شب پنجشنبه میریم بیرون و خودمون و خانوادمون رو در یکی از رستورانهای شهرمون مهمان یک شام لذیذ میکنیم با فرض چهار نفره بودن خانواده چیزی نزدیک به ۲۰۰هزار تومن برامون درمیاد اما از طرفی وقتی یک برنامه نویس برای نوشتن یک اثر هنری که باید رو اون فکر و ذهنش رو متمرکز کنه اگر از ما مبلغی کمتر از ۱ میلیون تومان درخواست کنه برای یک ماه کارکرد خودش و ما اون رو به حساب گران فروشی اون شخص بذاریم و بگیم که میدم یکی دیگه بنویسه با قیمت پایینتر از اینها، به نظرم کمی بی انصافیه.

در مورد اینکه پروژه های نرم افزاری رو بشه به اشخاص مختلف واگذار کرد تا انجام بدهند، بله کاملاً حق مشتری هست که بتونه انتخاب بکنه، اما کیفیت و نوع کار نرم افزارهای تجاری یک عرف خاص خودش رو داره مثل همه صنوف که براساس خدمتی که ارائه میدهند براساس عرف خودشون با مشتری حساب میکنند، اما اینکه برفرض یک بچه ۱۶ ساله میگه من میتونم یه نرم افزار حسابداری بنویسم که مثل فلان برنامه حسابداری کار کنه و آخ هم نگه و با قیمتی فوق العاده پایینتر از قیمت فلان برنامه، اینجاست که من یاد مثلی میفتم با این مضمون “روی سرکچل کسی کار یادگرفتن”.

کلام آخر

اگر واقعاً وقتتون و پولتون براتون ارزش داره به نظرم قبل از رفتن به اصل مطلب یعنی ساخت نرم افزار به دنبال یک مشاور بگردید حدالامکان کسی که ۷-۸ سالی در زمینه تولید نرم افزار فعالیت کرده و پروژه های موفقی هم ارائه داده و یا در مراکز شناخته شده کار کرده و رزومه قابل توجهی در این زمینه داره.

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

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

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

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

فرهنگ به اشتراک نگذاشتن و سوالاتی بی جواب

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

من از اواسط دهه هفتاد شمسی بطور آماتور وارد دنیای نرم افزار شدم و تا اوایل دهه هشتاد تو همون جایگاه آماتوری خودم بودم، یادم میاد تو همون دوران با پروژه های کوچکی هم که انجام میدادم و اگر مشکلی پیدا میشد هیچ جمع فارسی برای حل کردن مشکلاتم پیدا نمیکردم و مجبور میشدم به فرومهایی مثل vbcode، vbchat و یا expertexchange مراجعه کنم و البته با زبان شکسته و بسته اون زمانم خیلی هم پیشرفت نمیکردم، این بود که در حین دوران دبیرستان و بعد هم توی سربازی زبانم رو به شدت جدی گرفتم تا جایگاه خودم رو از یک برنامه نویس آماتور تغییر بدم، همین وضع رو توی دنیای حرفه ایی های ایرون هم بعد از اون همه سال بازهم  میتونم احساس کنم برای مثال با نگاهی به نحوه توسعه نرم افزار در زمینه هایی مثل حسابداری یا زمینه هایی مثل صنایع زیرساخت کشور میتوان به شرکتهایی رسید که از شالوده خوبی برای محیط توسعه خودشون استفاده میکنند، برای مثال دغدغه داشتن یک فریمورک رو دارند و …

اما خروجی نیروهای حرفه ایی این شرکتها فقط و فقط محدود به شرکتی هست که در آن کار میکنند، و درصد خیلی پایینی از اون بچه ها بطور داوطلبانه در جمعهای مجازی و یا حقیقی حاضرند شرکت کنند و از تجربیاتشون(نه بصورت مصداقی بلکه بصورت کلی) صحبت کنند، برای نمونه اگر بتوان از سایتهای نگهداری کدهای اپن سورس مثل گیت هاب یا بیت باکت یا کدپلکس و یا سورس فورج یک گزارش براساس ملیت گرفت فکر نمکنم درصد بالایی از ایرانها در فعالیتهای اپن سورس و یا سایتهای اجتماعی حرفه ایی تبادل نظر در زمینه مهندسی نرم افزار فعالیت داشته باشند، شاید بگید دلایلی مثل مشغله کاری و یا فشار اقتصادی و یا عدم تضمین شغلی جزو مواردی هست که باعث میشه حرفه ایی ها کمتر در مورد اینگونه مسائل بحث کنند، راستش اینجور دلایل تا وقتی قانع کننده بودند برام  که محیطها و جمعهایی با فرهنگهای متفاوت رو ندیده بودم اما بعد از دیدن گروهها و شرکتهای بین المللی الان میتونم این نظر رو به شدت رد کنم چراکه اینجور مسائل رو فقط بعنوان یک چترنجاتی از عذر و بهانه میبینم برای سرپوش گذاشتن برای کم کاریها و رخوت و خسّت در فرهنگ کاری ایرانیها!(البته من خودم هم تو این مجموعه هستم شاید نه بعنوان یک حرفه ایی بلکه بعنوان یک ایرانی)

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

جواب اون عزیز برای من قانع کننده بود اون رو اینجا مینویسم شاید کس دیگری هم قانع شد! جواب این بود که، ما ایرانیها به دلیل حس تنبلی که در خود داریم دوست نداریم وقتی کاری رو یادگرفتیم اون رو به کسی یاد بدیم و دوست داریم از همون طریق برای مدت مدیدی مثلاً ۳۰سال ارتزاق کنیم و چون دیگه دوست نداریم پیشرفتی توی کارمون داشته باشیم(از نظر فنی) و فکر میکنیم که اگر همون کار رو به کس دیگه یاد بدیم پس خودمون باید بیش از پیش تلاش کنیم برای عقب نمودن از قافله و در واقع برای خودمون رقیب درست نمیکنیم.

شاید درست نکردن رقیب دلیل قانع کننده ایی به نظر برسه در نگاه اول ولی تجربه دنیای آی تی به سمت و سویی دیگری با سرعتی پرشتاب داره سوق پیدا میکنه، قبل از اینکه مثال خودم رو کامل کنم اول از همه تاکید میکنم که هستند شرکتهای بزرگی که خود آنها هنوز که هنوزه براساس فرهنگ به اشتراک نگذاشتن در حال فعالیت هستند مثل مایکروسافت اما همین شرکت شاید تا ۵-۶ سال پیش فکر نمیکرد رقبای جدی مثل گوگل کروم(اپن سورس) فایرفاکس(اپن سورس) برای محصول اینترنت اکسپلورر مایکروسافت، گوگل اندروید(اپن سورس) برای محصول ویندوز فون و… بتوانند سهم مایکروسافت را از بازار نرم افزارهای شخصی و موبایل کم کنند! اما این اتفاق هرروز در حال حادث شدن هست و چیزی نیست که بتوان آن را کتمان کرد و یا آن را نادیده گرفت.

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

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

به نظرتون همین افراد آیا نمیتونستن پروژه های خودشون رو از همه مخفی کنند و اونها رو پشت درهای بسته یک شرکت نگه دارند؟

چه عاملی باعث میشه این افراد و این کمپانیها به این تفکر روی بیاورند؟

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

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

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

کمدی به نام اسکرام در صنعت نرم افزار ایران

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

راغب میشم بیشتر بدونم که دقیقاً چطور اسکرام رو پیاده کردن ازشون میپرسم آیا اسکرام مستر دارین؟

میگن آره آقا/خانم فلانی اسکرام مسترمون هست. ،خب ایشون دقیقاً چکار میکنن؟

جوابها اکثراً با جملاتی اینچنینی به پایان میرسه که اسکرام مستر خودشون مدیرعامل شرکت هستند یا یکی از اعضای هیئت مدیره هستند که البته سرشون خیلی شلوغه و بیشتر کارهای مدیریتی رو انجام میدن!

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

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

این نوع برخوردها عموماً محدود به وسعت جغرافیایی ایران نمیشه و میشه از این دست مدیریتهای سلیقه ایی ولی با اسم جدید را در تمام دنیا مشاهده کرد، این نوع برخورد در اسکرام معروف است به  scrum-but بدین معنا که ما در حال اجرا اسکرام هستیم اما کار خودمون رو میکنیم. لزوماً اینکه گروهی یا شرکتی کارخود را میکند و شیوه مدیریت خود را دارد بد نیست ولی اینکه بخواهیم کارهای قدیمی و بعضاً و غلط خود را به متدلوژیهای جدید نسبت بدهیم و بعد انتظار داشته باشیم با پیاده سازی روشهای قدیم ولی با اسم جدید به نتایج جدیدتر و مطلوبتری برسیم کمی دور از منطق و انصاف هست!

در کنار این نکته اکثر تیمهایی که در ایران دیدم تعداد آنها کمتر از ۷ یا ۸ نفر بوده و بعضاً محدود به ۴یا ۵ نفر میشدند در بعد از جویا شدن دلیل اکثراً به دلیل شرایط اقتصادی ترجیح میدهند که تیمهای کوچک تشکیل بدهند، با توجه به اینکه در روش چابک هرکس میتواند چندین نقش را برعهده داشت باشد و این مسئله در تیمهای کوچک میتواند کاملاً مشهود باشد اما جایگاههایی مانند اسکرام مستر و یا صاحب محصول میبایست اشخاصی جداگانه داشته باشند که بتوانند دیدگاهی متمایز از دیدگاه توسعه گر و یا پیشتیبان محصول را بر مسئله پیاده کنند تا ابعاد نادیده و یا جا انداخته شده مسئله توسط آنها پیدا شود.

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

اسکرام به دلیل نگاه سطح بالایی و نسبتاً ناقصی که به مدیریت پروژه داره نمیتونه بعنوان یک متدلوژی کامل و در سطح کاربردی مطرح بشه و بیشتر میتونه در حد یکسری اصول و قرارداد اولیه در یک شرکت و یا گروه بر اون حساب بازکرد.

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

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

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

!!! کتاب مهندسی معکوس من و یا ترجمه و تالیفهای کج و معوج من در یک پکیج

این کتاب رو من سال ۲۰۰۶ براساس یکسری مقاله که خودم ترجمه کرده بودم نوشتم بصورت تالیف و ترجمه

البته این نسخه از این کتاب ویراست نشده امیدوارم به درد بخوره

حجم نزدیک ۳مگابایت

دانلود