« February 2006 | صفحه اصلی | April 2006 »

برنامه ريزي استراتژيک براي شرکت هاي نرم افزاري 1

"March 7, 2006"

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

شرکت هاي نرم افزاري از نظر نوع کسب در آمد در گروه هاي متفاوتي قرار مي گيرند:
- درآمد برخي شرکتها بر اساس انجام پروژه مي باشد. بدين معني که يک شرکت نرم افزاري با جمع شدن افراد متخصصي که توانايي کار گروهي با يکديگر را دارند تشکيل شده و اين افراد در اولين گام اقدام به گرفتن يک يا چند پروژه مي نمايند. هر پروژه روند پرداخت مشخصي دارد که به صورت قسط بندي شده و با توجه به پيشرفت پروژه پرداخت مي شود. راز حيات و سود دهي اين شرکتها در آن است که بتوانند به صورت مداوم پروژه هاي جديدي را شروع کنند و بتوانند با جلوگيري از رشد نامعقول نيروي انساني خود و با اجراي دقيق فرآيند مهندسي همزمان هزينه هاي خود را ثابت نگهداشته و يا نرخ رشد آن را در يک شکل منطقي نگه دارند. اينگونه شرکتها در صورتي موفق مي شوند که بتوانند يا پروژه هاي بزرگ بگيرند و يا به شکل مداوم پروژه هاي کوچک و يا متوسط را انجام دهند.
- نوع ديگري از شرکتهاي نرم افزاري بر اساس فروش بسته هاي نرم افزاري (Package) عمل مي کنند. بدين شکل که يا در شروع و با بکاربردن سرمايه هاي مالي قبلي، اقدام به تشکيل يک تيم مي نمايند و يک بسته نرم افزاري را با توجه به پيش بيني نياز آتي بازار توليد مي کنند و يا با گرفتن اولين پروژه و پس از توليد آن، آن را از قالب يک پروژه خارج ساخته و به شکل يک بسته نرم افزاري عمومي تبديل مي کنند (روش اخير در بين شرکتهاي ايراني محبوب تر است). پس از توليد محصول، با ايجاد بخش فروش و بازاريابي روي محصول خود تبليغات انجام داده و آن را به فروش مي رسانند. راز موفقيت اين شرکت ها در آن است که محصولشان به هر دليلي (براي مثال تبليغات زياد و موثر، کيفيت محصول و يا نياز شديد بازار به محصولي اين چنين) با فروش زيادي مواجه شود. اين شرکتها زماني شکست مي خورند که نياز بازار تغيير کرده و يا با ورود محصولات مشابه بهتر، استقبال از محصول توليدي اين شرکت کاهش يابد. يکي از مواردي که اين شرکت ها بايستي به آن توجه کنند آن است که ضمن جذب نيروهاي متخصص و حرفه اي در بخش فروش و پشتيباني، مواظب رشد نامتوازن شرکت خود باشند (بدنه بزرگ با دانش فني کم)
- برخي شرکتها، ماهيت خدماتي دارند، به شکلي که با وارد کردن و اخذ نمايندگي يک محصول از يک شرکت داخلي و يا خارجي، اقدام به نصب و راه اندازي آن براي مشتريان مي کنند و درآمد خود را از طريق ارائه خدمات پشتيباني و آموزشي روي آن محصول خاص کسب مي نمايند. دسته ديگري از اين شرکتها به عنوان يک سرويس دهنده اينترنت (ISP:Internet Servise Provider) ويا يک سرويس دهنده برنامه هاي کاربردي (ASP:Application Service Provider) اقدام به ارائه خدمات و جذب مشتري مي نمايند.
- برخي شرکتها را نمي توان ماهيت صرفا نرم افزاري ندارند. اين شرکت ها (شرکت هاي کامپيوتري) با ترکيب بخش هاي نرم افزار و سخت افزار سعي مي کنند ضمن کاهش هزينه ها، دامنه ارائه خدمات را گسترش داده و با ارائه خدمات سخت افزاري و يا خدمات ديگر، هزينه هاي نرم افزار را کاهش دهند. مدیریت این شرکتها و بازاریابی برای محصولات متعددشان به دلیل تنوع فعالیتها و محصولات سخت است اما معمولا به دلیل تنوع ذکر شده در هنگامی که بازار یک محصول و یا زمینه کاری آن عوض شد (که در نرم افزار فرآیند تغییر نیازها بسیار سریع است) می توانند از محل فروش و یا خدمات سخت افزار روزگار بگذرانند!
- برخی شرکتها به صورت کامل و یا در کنار سایر فعالیت های خود، آموزش را به عنوان محل اصلی کسب درآمد خود قرارداده اند. بدین معنی که بیشتر از آنکه به عنوان یک شرکت مطرح باشند به عنوان یک موسسه آموزشی فعالیت می کنند. به نظر من این شرکتها بایستی سریعا تکلیف خود را روشن کنند، یک بام و دو هوا اصلا سیاست درستی نیست. دلیل آن که بحث آموزش کاملا متفاوت از سایر فعالیت های اقتصادی است و نیاز به تربیت نیروی متخصص خود و نیز صرف زمان و هزینه ویژه ای دارند (برای مثال یک برنامه نویس خوب لزوما یک مدرس برنامه نویسی خوبی نیست و بالعکس). طبیعتا روشن کردن جهت اصلی در این شرکتها مهم است و موفقیت در صورتی حاصل می شود که یا بتوانند خود را به عنوان موسسه آموزشی معتبر و یا خاص (چون متاسفانه اکنون جامعه پر از انواع موسسات است که بیشتر با کیفیت خدمات فوق العاده بد و صرفا به هدف کسب درآمد مقطعی ایجاد شده اند) معرفی کنند و یا بتوانند با به روز کردن مداوم آموزش ها و ارائه آموزش های کاربردی، به همراه تبلیغات و بازارسازی مناسب، حیات خود را تضمین کنند.

به دليل ريسک بالا در گرفتن پروژه و تغييرات مداوم فن آوري و نيازهاي بازار، هيچ کدام از اين روش ها را نمي توان به تنهايي موثر دانست. بلکه شرکتها بايستي به شکل ترکيبي و با يک برنامه ريزي مشخص عمل نمايند. این شرکتها را از این پس شرکتهای ترکیبی (Hybrid Company) می نامم. واژه ای خود ساخته!!
در شرکتهای ترکیبی بایستی سعی شود در چند زمینه فوق به صورت همزمان عمل کرد. مدیریت و برنامه ریزی این شرکت ها فوق العاده می تواند مشکل باشد و به یک تیم هم فکر و منسجم در بخش های مدیریت عالی (هیئت مدیره و مدیرعامل) و مدیران و مسؤولان بخش های فنی نیاز مند است.
به عنوان یک فعال کوچک در بازار نرم افزاری کشور توصیه می کنم با توجه به دانش فنی موجود و مهارت های نیروی انسانی خود به همراه سرمایه مالی و ارتباطی ، انتخابی معقول از مکانیسم های زیر انتخاب شده و با تدوین یک برنامه راهبردی معین، مسیر و اهداف هر کدام از فعالیت ها مشخص شده و اولویت بندی ها تعیین گردد.
یکی دیگر از مواردی که حتما در این راستا باید انجام گردد، گسترش شبکه شرکای تجاری هر شرکت (Bussiness Partners) می باشد، شرکای تجاری معمولا دارای تخصص های مختلفی هستند و بدین ترتیب لازم نیست هر کدام از آن بخش ها توسط خود شرکت ایجاد شود بلکه با عقد تفاهم نامه های همکاری تجاری کوتاه مدت و یا بلند مدت، تخصصها و زمینه های کاری در قالب شرکتهای مختلف ایجاد شده و در هنگام مواجه با مشتریانی که سیستمهای جامع مورد نیاز دارند، این ترکیب نه در داخل شرکت، بلکه با به اشتراک گذاری داشته های هر شریک تجاری ایجاد شود. بدین معنی که همه، همه کار نکنند بلکه هرکس یک کار را خوب انجام دهد و در شبکه تجاری با گرد هم آمدن تخصص ها، همه کار ایجاد شود (شرکتها همه کاره، هیچ کاره نشوند!)
به عقیده من، راز موفقیت های شرکت های نرم افزاری در آن است که ضمن کنترل دقیق حجم نیروی انسانی، بتوانند دانش فنی نیروهای خود را به روز نگه دارند و تجربیات آنها را افزایش داده، با توسعه بازار از طریق تبلیغات مرسوم و یا گسترش شبکه شرکای تجاری، محصولات متنوع اما با یک رویکرد کلی و تخصصی و در یک زمینه معین ایجاد کنند، تا بتوانند در دراز مدت، مشتریان خود را حفظ و یک نام تجاری (Brand) ایجاد کنند.
بازهم در مورد برنامه ریزی در شرکتهای نرم افزاری خواهم نوشت...
همین!

Ali Vahed | 12:12 PM

پروژه کارشناسي مهندسي نرم افزار

"March 6, 2006"

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

اولين نکته در انتخاب پروژه کارشناسي، انتخاب استاد راهنماي آن است! چرا؟ چون قبل از هر چيز بايد تکليف خودتان را با پروژه روشن کنيد، مي خواهيد واقعا کار کنيد،يا فقط مي خواهيد آن را پاس کنيد!
اگر مي خواهيد پس از اتمام تحصيل در محلي مشغول به کار شويد و در زمينه نرم افزار فعاليت کنيد، پيشنهاد مي کنم پروژه را به قصد ياد گرفتن بگيريد. به عنوان يک مدير نرم افزاري، شخصا در هنگام استخدام نيروهاي جديد، يکي از مواردي که به آن دقت مي کنم موضوع و کاري است که در اين زمينه انجام داده اند. اما اگر مي خواهيد بعد از تمام شدن تحصيل قيد نرم افزار را بزنيد و يا به صورت حرفه اي کار نکنيد (يکجا کارمند شويد، در مغازه پدرتان کارکنيد و يا شوهر کرده و خانه دار شويد)، به دنبال پروژه اي باشيد که با کمترين دردسر فقط يک موضوع داشته باشد و يک نوشته! حتي مي توانيد به روش معمول دانشجويان آن را از کسي بگيريد، بدزديد و يا حتي ديده ام که برخي مي خرند! (در انتخاب روش مختاريد!) به هر حال هر قصدي که داريد، انتخاب استاد مرتبط با آن قصد قبل از تعيين موضوع مهم است.
گام بعدي انتخاب موضوع است. توصيه موکد مي کنم، موضوع را به انتخاب استاد راهنماي خود واگذار کنيد. بدين معني که اگر وي موضوعي را پيشنهاد داد، قبول کنيد (بين چند انتخاب پيشنهادي وي مي توانيد از مشورت سايرين و يا علاقه شخصي خود پيروي کنيد) و اگر وي موضوع خاصي را پيشنهاد نداد، سعي کنيد موضوعي انتخاب کنيد که به زمينه کاري وي نزديک باشد. دليل اين تاکيد زياد بر آن است که در حين انجام پروژه بتوانيد از راهنمايي استاد راهنما استفاده کنيد. اگر استاد راهنمايتان با موضوع بيگانه باشد نه تنها در هنگام کار روي پروژه نمي تواند به شما کمکي بکند، بلکه در هنگام تحويل نيز مشکل خواهد داشت (و خواهيد داشت!)
حال اگر استاد راهنما موضوعي پيشنهاد نداد چه؟
به صورت عمومي مي توانيد دو شاخه کلي را براي اجراي پروژه کارشناسي انتخاب کنيد:
- موضوعات نظري و تحقيقاتي: در اين زمينه در يکي از موضوعات رشته خود را انتخاب کنيد، سعي کنيد اين موضوع از موضوعات جديد و داغ باشد تا بتوانيد در مورد آن منابع خوب جديد را به راحتي بدست آوريد. سپس با مطالعه و جمع بندي مطالب خوانده شده مي توانيد يک بررسي (Survey) در آن زمينه تهيه نماييد. بعد از آن اگر ايده جديدي در يکي از شاخه هاي آن موضوع به ذهنتان رسيد و يا توانسيتيد الگو برداري کنيد بانوشتن برنامه هاي شبيه سازي و يا انجام پروژه هاي آزمايشي، صحت ايده خود را نشان داده و پروژه را جمع بندي کنيد.
- موضوعات کاربردي و عملي: دراين دسته، شما مي خواهيد يک سيستم جديد (و يا از بين سيستمهاي موجود) يکي را پياده سازي نماييد و با جنبه هاي مختلف آن آشنا شويد، براي مثال ساخت يک سيستم پردازش تراکنش (TPS) براي يک کاربرد و يا يک شرکت خاص و يا نوشتن يک برنامه تحت وب براي کاربردي معين. در اين روش با جمع بندي و مرور سريع مطالب تئوري مرتبط و يا با طي فرآيند تجزيه و تحليل مي توانيد چارچوب کلي سيستم خود را استخراج نموده و آن را طراحي نماييد، سپس تحت معماري معين و با يک زبان برنامه نويسي آن را توسعه دهيد.
نکته 1: اگر پيش از انجام پروژه با يکي از دو مطلب به خوبي آشنايي داريد و مي خواهيد در پروژه چيز جديدي يادبگيريد، سعي کنيد موضوع ناآشنا تر را انتخاب کنيد تا در پايان با هر دو شيوه کار آشناشويد.
نکته 2: چنانچه قصدداريد بلافاصله پس از پايان تحصيل کار کنيد، انتخاب موضوعات کاربردي و عملي به نفعتان است، چون در هنگام استخدام به عنوان نمونه کار قابل طرح مي باشد.
نکته 3: چنانچه قصد ادامه تحصيل داريد (در داخل و يا خارج از کشور) انتخاب موضوعات نظري و تحقيقاتي بهتر است، زيرا اگر موفق شويد در پايان آن يک مقاله علمي (Academc Paper) ارائه نمايد (در کنفرانس ها و يا نشريات معتبر داخلي و يا خارجي) ، در ادامه تحصيل شما و شانس شما براي موفقيت در مصاحبه هاي علمي نقش موثري دارد.
نکته 4: فراموش نکنيد در هر دو زمينه شما در نهايت نياز به انجام يک کار عملي داريد اما حجم و ف آن متفاوت است. در يک کار تئوري معمولا برنامه ها جنبه شبيه سازي و آزمايش را دارند و حجم کمتري از کل کار را شامل مي شوند در حاليکه در پروژه هاي عملي، اصل همان برنامه است و پرداختن به آن و تهيه يک برنامه صحيح اولويت دارد.

اما چه موضوعاتي را مي توان انتخاب کرد؟ پاسخ کمي مشکل است، نرم افزار آنقدر سريع پيش مي رود که برخي از موضوعات در مدت زمان اندکي قديمي شده و به حدي تجاري مي شوند که ارزش کار دانشگاهي را در آن زمينه ندارند. اما به هر حال امروزه (اسفند 84) شايد کار روي زمينه هاي شبکه و امنيت ، هوش مصنوعي و عاملهاي هوشمند، برنامه سازي تحت وب، داده کاوي و مفاهيم پيشرفته در زمينه پايگاه داده ها، مهندسي نرم افزار و متدولوژي هاي توسعه نرم افزار و ... از زمينه هاي کلي باشند که بتوانيد در آنها فعاليت کنيد. همانگونه که گفتم موضوع جزيي تر بستگي به خودتان، دانشگاه و استاد راهنمايتان دارد.

در پايان توصيه مي کنم، سعي کنيد پروژه کارشناسي خودتان را جدي بگيرد و آن را سرهم بندي نکنيد! اجراي يک پروژه خوب صرف نظر از موضوع و زمينه آن، ضمن آشنا کردن شما با مفاهيم اجراي پروژه هاي نرم افزاري، شانستان را در مقاطع بعدي زندگي بالاتر مي برد (کار يا تحصيلات تکميلي)
همين!

Ali Vahed | 5:21 PM