« 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 میلیون تومان! اگر خواستید بخرید. من نه تنها قول می دهم سورس را با مستندات و با آموزش به صورت کامل به شما عرضه کنم بلکه قول می دهم آن را از روی کامپیوترهای خودمان هم پاک کنیم! اصلا قول می دهیم دیگر هیچ نوع نرم ا?زاری تولید نکنیم و از این بازار خارج شویم!!
همین!