« October 2004 | صفحه اصلی | December 2004 »

نگاهي به شيوه هاي مختلف كار كردن در زمينه نرم افزار

November 22, 2004 04:41 PM

چند روز پيش دو نفر از دانشجويان درس مهندسي نرم افزار به من مراجعه كردند. گويا در يكي از مراكز بزرگ بر اساس آشنايي هاي قبلي يك پروژه بزرگ به آنها پيشنهاد شده بود.وقتي در مورد پروژه صحبت مي كردند چشمانشان برق مي زد. با وجوديكه نگران بودند اما مي شد فهميد كه از اين قضيه خيلي خوشحال بودند و فكر مي كردند كه درهاي خوشبختي به رويشان باز شده است و حتما پولدار خواهند شد. اما نمي دانستند كه حالا چكار بايد بكنند!! شركتهاي ديگر براي اين پروژه مراجعه كرده بودند و قيمتهاي بالايي داده بودند و اين بچه ها نمي دانستند كه چگونه بايد قيمت و زمان و هزينه را براي اين پروژه حساب كنند. در مورد موضوع پروژه هم كه صحبت شد مشخص شد كه ضمن اينكه موضوع في نفسه موضوع سخت و جالبي است حتي خود كارفرما هم شناخت دقيقي ندارد و اين كار را مشكل مي كند.


پروژه گرفتن در زمان دانشجويي بيشتر يك خيال و سراب فريبنده است. معمولا ارقام پروژه به شكلي است كه دانشجويان و يا افراد كم تجربه ذوق زده مي شوند و پيش خودشان فكر مي كنند بابا اين پروژه كه كاري نداره! سريع انجامش مي دهيم و تمام. كلي پول در مي آوريم! فارغ از اينكه اگر چنين بود چرا سايرين ارقام بالاتري را براي آن پيشنهاد داده اند. حتما حكمتي در اين كار بوده است و گرنه با توجه به رقابت هاي موجود در جامعه شركتهاي نرم افزاري شركتها معمولا سعي مي كنند كه قيمت ها را مينيموم ارائه كنند.


درحاليكه واقعيت چيز ديگري است. قراردادهاي پروژه ها در زمان شروع معمولا به نظر خيلي خوب و سودآور  به نظر مي رسد در حاليكه پروژه ها معمولا هزينه هاي مختلفي دارند كه محاسبه ‌آنها و در نظر گرفتن آنها نياز به تجربه دارد. پيشتر در زمينه شيوه تخمين زمان و هزينه در اين وبلاگ مطلب نوشته بودم.


خوب يك دانشجو يا فرد بي تجربه در اين زمان چه بايد بكند. آيا بايد پروژه را به هر قيمتي قبول بكند و يا شيوه كار را تغيير دهد؟
‌ براي پاسخگويي به اين سوال بگذاريد نگاه دقيق تري به شيوه هاي مختلف كار كردن در زمينه نرم افزار داشته باشيم. به طور كلي هر فرد در يك كار نرم افزاري به سه شكل مي تواند فعاليت داشته باشد :
1- پروژه اي : در اين شيوه كار شما به عنوان پيمانكار با يك فرد ديگر به عنوان كارفرما قرارداد امضا مي كنيد و براي كل پروژه زمان و هزينه را اعلام مي كنيد. بدين ترتيب كليه هزينه ها و مسائل ديگر به عهده شما است و كارفرما فارغ از همه چيز از شما انتظار دارد در ازاي دريافت مبلغ پروژه در زمان مقرر و با كيفيت معين شده محصول نهايي را آماده كنيد و آن را راه اندازي نماييد.
2- قرارداد ساعتي : شما در اين شكل از كار يا مستقيما با مشتري و يا با يك گروه توليد كننده قراردادي را امضا مي كنيد كه بر اساس آن شما به ميزان نفر ساعتي كه روي پروژه كار مي كنيد حقوق خواهيد گرفت. در اين روش معمولا قبل از اجراي كار يك زمان كلي بين طرفين توافق مي گردد و كار انجام مي شود. زودتر دادن و يا جنبه هاي حقوقي كار و يا ريسك هاي پروژه در اين شكل كار كمتر به شما مرتبط مي شود و در اين زمينه مسوليت كمتري به عهده داريد.
3- قرارداد رسمي و يا قرارداد هاي تمام وقت و يا پاره وقت مدت دار: كار كردن در اين نوع بسته به ساعات كاري شما نيست شما به عنوان كارمند استخدام مي شويد و موظفيد كه در ساعاتي از هفته (به صورت تمام وقت 44 ساعت در هفته و به صورت پاره وقت در ساعت مقرر شده) در محل شركت حاضر باشيد و كار انجام دهيد. در اين شيوه شما مشمول مواردي نظير اضافه كار و كسري كار و يا مرخصي ها مي شويد.


هر روش مزايا و معايب خاص خود را دارد. براي مثال در روش پروژه اي معمولا ارقام بالاتر است اما ريسك ها نيز بالاتر مي رود. در حاليكه در روش سوم ارقام پايين تر است اما ريسك كمتر است و گاهي شما براي ساعتي كه كار نمي كنيد (مرخصي استحقاقي ماهانه = 20 ساعت) حقوق هم مي گيريد!!
انتخاب هر كدام از اين روشها بسته به شرايط مختلفي است. براي مثال در زمانيكه پروژه به خوبي تعريف نشده است و خود كارفرما هم شناخت مناسبي از حدود پروژه ندارد كاركردن به شيوه پروژه اي اشتباه بزرگي است. اگر چه شما با شيوه هاي تخمين زدن سعي كرده ايد كه تخمين خوبي براي زمان و هزينه داشته باشيد اما احتمال ريسك هم بالا است. به عبارت ديگر هر چند ممكن است مشكل خاصي پيش نيايد و شما حتي بتوانيد پروژه را با رقم هزينه پايين تري به انجام برسانيد اما به همين ميزان و حتي بيشتر از آن هم ممكن است اوضاع مطابق انتظار شما پيش نرود و مشتري مدام با مطرح كردن نياز هاي جديد و يا تغيير خواسته هاي قبلي خود در پروژه مشكل ساز گردد.
براي بر طرف كردن اين ريسك ها معمولا بند هايي در قرارداد ها قيد مي شود كه براي مثال احتمال افزايش 20% مبلغ و زمان قرارداد وجود دارد و يا راه را براي قراردادهاي بعدي باز مي گذارند اما به دليل عدم تجربه دانشجويان و يا كساني كه تازه فارغ التحصيل شده اند اصولا اين راه پيشنهاد نمي گردد.
در حاليكه شما در روشهاي دوم و سوم آزادي عمل بيشتري داريد و مي توانيد زمان را با توجه به حجم كار طولاني تر كنيد و توافق در مورد اين مساله بين كارفرما و پيمانكار ساده تر است.
از طرف ديگر روحيات افراد و شرايط فرهنگي و محيطي هم در انتخاب روش كار مهم مي باشد. براي مثال براي افرادي كه بيشتر محتاط هستند و يا شخصيت آرامي دارند و يا ريسك پذير نيستند بهتر است استخدام رسمي و يا قرارداري جايي باشند تا اينكه پروژه بگيرند. چون پروژه گرفتن معمولا استرس بالايي دارد و فرد بايد مديريت خوبي روي ريسك ها داشته باشد.
وضعيت معيشتي افراد هم در نوع كار مهم است. زمانيكه يك فرد از پشتوانه مالي خوبي برخوردار باشد مي تواند بيشتر ريسك كند. اما زمانيكه مسوليت يك زندگي را به عهده داشته باشد بايد به اين فكر كند كه بايد به طور متوسط ماهانه درآمدي كسب كند. پروژه ها معمولا با وجوديكه ارقام بالاتري دارند اما نرخ يكنواختي در گرفتن پروژه، انجام آن و گرفتن پول آن وجود ندارد و پارامترهاي خيلي زياد و خارج از كنترل فرد در آنها موثر است.


به هر حال به عنوان يك توصيه پيشنهاد مي كنم كه دانشجويان و يا افراد كم تجربه در ابتداي شروع به كارشان دقت بيشتري به خرج دهند و بهتر است با عقد قراردادهاي ساعتي و يا سالانه كاركردن را آغاز كنند و زمانيكه  يك حد مقبولي از تجربه را كسب كردند و شرايط مالي مناسبي هم پيدا كردند اقدام به گرفتن پروژه بنمايند. تازه در همين زمان هم بايد به ياد داشته باشند كه هزينه هاي آشكار و نهان زيادي است كه بايد در محاسبه زمان و هزينه يك پروژه در نظر بگيرند و شرط احتياط را رعايت كنند.
باز هم در اين مورد خواهم نوشت.....


همين!



 

Ali Vahed | 04:41 PM | Comment(s)(0)

فروش نرم افزار از نرم افزارهاي سفارشي تا بسته هاي عمومي نرم افزاري

November 9, 2004 12:58 PM

 چند روز پيش جلسه نصب و راه اندازي سيستم تلفن گوياي يکي از سازمانها بود. در حين آموزش سيستم به کاربر مربوطه، يکي از مديران مجموعه براي مشاهده سيستم وارد شد. پس از اينکه مشخصات سيستم را برايشان توضيح دادم با قيافه حق به جانبي گفت: "پس سورس برنامه کو؟" گفتم منظور شما از سورس چيست؟ اگر منظورتان CD است که از روي آن بتوانيد نرم افزار را نصب کنيد بفرماييد اين هم CD. به اپراتور هم آموزش داده شده است تا بتواند به سادگي سيستم را نصب کند و اصولا براي اينکار نياز به تخصص خاصي نيست. اما اگر از سورس منظورتان کد برنامه است متاسفانه اين کد نمي تواند در اختيار شما قرار گيرد. با ناراحتي پاسخ داد: "يعني چي؟ مگر مي شود نرم افزار را بدون سورس آن خريد؟ نرم افزار بدون کد آن هيچ ارزشي ندارد."
آيا اين حرف درست است؟ .....

نرم افزار ها را بسته به شيوه توليد مي توان به دو گروه تقسيم نمود: نرم افزارهاي سفارشي و بسته هاي نرم افزاري
1- نرم افزارهاي سفارشي
2- بسته هاي نرم افزاري (Package)

در نرم افزارهاي سفارشي تمام عمليات تحليل، طراحي و پیاده سازی به شیوه مرسوم آن اجرا می شود و سیستم بر اساس شرایط موجود و نیازهای مشتری استفاده کننده ساخته می شود. در حالیکه در بسته های نرم افزاری ، تولید کننده با نیاز سنجی عمومی از کل بازار و در نظر گرفتن نیازهای مشتریان متفاوت اقدام به توسعه سیستمی می نماید که بتواند نه الزاما همه بلکه اکثر نیازهای مشتریان را پوشش دهد. در نرم افزارهای سفارشی، سیستم تولیدی منطبق بر نیازهای یک مشتری است در حالیکه در بسته های نرم افزاری این مشتری است که باید نیازهای خود را با سیستم جدید منطبق نماید. با این وجود یک بسته نرم افزاری خوش ساخت این امکان را برای مشتری فراهم می کند که بتواند تا حدودی نیازهای خود را در سیستم اعمال نماید. به عبارت دیگر با به کار گیری ابزارهای عمومی و ساخت قسمت های پویا در بسته های نرم افزاری این امکان فراهم می شود که هر مشتری با نیاز خود سیستم مورد نیاز خود را یا خود شخصا تنظیم نماید و یا این کار توسط فروشنده صورت می گیرد.
اما چه زمانی تولید کننده موظف به ارائه سورس برنامه به مشتری است؟ در هیچ زمانی مگر آنکه در قرارداد فروش مشخص شده باشد. به عبارت دیگر در حالت فروش سیستم به صورت یک بسته نرم افزاری عمومی طبیعتا سورس همراه آن نست چون اگر چنین باشد یعنی شما عملا به خریدار این امکان را داده اید که نرم افزار شما را در جای دیگری هم به فروش برساند. حتی در حالتی که نرم افزار به شکل سفارشی هم تولید می گردد، تولید کننده الزامی به تحویل سورس ندارد. تولید کننده صرفا موظف است که سیستم را مطابق نیازهای فنی و اطلاعاتی مشتری تولید کند. اما با این وجود در زمانی که در قرارداد صریحا مشخص شده باشد که سورس برنامه نیز بایستی به خریدار تحویل گردد فروشنده و یا تولید کننده می تواند با دریافت مبلغ بیشتری نسبت به فروش فقط سیستم این کار را انجام دهد. اما این مبلغ آنقدر زیاد است که عملا خریدار رغبت چندانی به خرید سیستم ندارد!
نکته حائز اهمیت دیگر آنکه معمولا سورس یک برنامه را نمی توان به صورت کامل به مشتری تحویل داد. با توجه به روشهای رایج تولید نرم افزار اکثر تولید کنندگان از کتابخانه ها (Library) و یا مولفه ها (Component) هایی استفاده می کنند که یا توسط خودشان تولید نشده است و از تولید کننده دیگری خریداری کرده اند که طبیعتا طبق قانون رعایت حق مولف (Copyright) صرفا در موارد مشخصی مجاز به ارائه آن به سایرین می باشند و یا توسط خودشان ساخته شده است که محصولی به جز محصول نهایی فروش رفته محسوب می شود و مشتری باید به صورت جداگانه آنها را خریداری نماید.
از طرف دیگر حتی اگر سورس کد برنامه به صورت کامل در اختیار مشتری قرار بگیرید این کد بدون مستندات آن عملا به یک چیز بی ارزش تبدیل می شود. معمولا سیستمهای نرم افزاری از تعداد خطوط برنامه زیاد و یا شیوه های پیچیده برنامه نویسی تشکیل شده اند و پر هستند از تکنیک ها، ساختمان داده ها و الگوریتم های متنوع. و این در حالی است که مستند سازی در اکثر پروژه های نرم افزاری به ندرت صورت می گیرد و حتی اگر چنین شود مستندا معمولا بی فایده و صرفا برای خالی نبودن عریضه تولید شده اند.
تنها در پروژه هایی که با یک متدولوژی خوب استاندارد و توسط Case Tools های مناسب تولید شده باشند حاوی مستنداتی هستند که برنامه را برای اشخاص دیگری به جز تولید کنندگان و حتی برای خود آنها در مراجعات بعد خوانا می کند.
حتی اگر سورس پروژه به صورت کامل و همراه مستند سازی به خریدار عرضه شود تجربه نشان داده است که هزینه تغییر سیستم تولید شده توسط شخصی دیگر کمتر از تولید مجدد یک سیستم جدید نیست!
بنابراین با جمع کردن همه این موارد می توان به چنین نتیجه گیری رسید که در هنگام خرید نرم افزار حتی اگر فروشنده حاظر به فروش سورس کد خود

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

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

همین!


Ali Vahed | 12:58 PM | Comment(s)(12)