مستندات نیازمندی ها و نقش آن در موفقیت یک پروژه نرم افزاری

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

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

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

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

نیازمندی ها در سیستم های نرم افزاری به دو دسته نیازهای عملکری (Functional) و نیازهای غیر عملکردی (Non-Funcitonal) تقسیم می شوند. نیازهای عملکردی همان نیازهایی هستند که سیستم نرم افزاری برای برآورده کردن آن ها بوجود می آید. نیازهای غیر عملکردی آن هایی هستند که برای تضمین کیفیت نرم افزار بوجود می آیند. به نیازهای غیر عملکردی، نیازمندی های کیفیت نیز گفته می شود. مثالی از نیازمندی های غیر عملکردی می تواند ظاهر زیبای رابط کاربری، سرعت بالا، امنیت و استفاده آسان باشد.

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

چطور مستندات نیازمندی های یک نرم افزار را تهیه کنیم؟

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

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

مشکلات پیش روی جمع آوری نیازمندی های یک پروژه نرم افزاری

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

و مشکلاتی که شما می توانید در قسمت نظرت با ما به اشتراک بگذارید!

farasun.wordpress.com

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

یافتن کار نیمه وقت و کسب تجربه در زمینه نرم افزار-قسمت پنجم

پیشنهاد می کنم ابتدا قسمت های قبلی این سری نوشته ها را بخوانید و سپس ادامه ی این مطلب را دنبال کنید.

قسمت پنجم : همکاری در پروژه های اوپن سورس

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

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

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

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

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

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

نظر سنجی

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

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

یافتن کار نیمه وقت و کسب تجربه در زمینه نرم افزار-قسمت چهارم

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

قسمت چهارم : خودتان دست به کار شوید!

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

در هر صورت سعی کنید از یک جایی شروع کنید. بر اساس سطح دانش و تخصص خود یک موضوع را انتخاب کنید و روی آن کار کنید تا نتیجه بدهد. این سعی و تلاش ها نتایج بسیار خوبی خواهند داشت. حتی اگر درآمدی کسب نکنید، تجربه هایی که بدست خواهید آورد بسیار با ارزش هستند. این تجربه ها در ارائه ی پروژه ی پایان تحصیلات و پیدا کردن کار خیلی به شما کمک خواهند کرد.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

یافتن کار نیمه وقت و کسب تجربه در زمینه نرم افزار – قسمت سوم

قسمت سوم : انجام پروژه های نرم افزاری برای کسب تجربه و احیاناً درآمد در زمینه نرم افزار برای دانشجویان این رشته

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

انجام پروژه های نرم افزاری در دوران دانشجویی

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

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

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

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

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

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

به نظرم بهتر است دانشجویانی مثل خودم که پشتیبانی مالی به خصوصی ندارند و کم تجربه هستند از پروژه های بسیار کوچک شروع کنند و همان ها را به بهترین نحو انجام دهند تا بعداً به عنوان رزومه و نمونه کار ارائه کنند.

برای تکمیل بحث پیشنهاد می کنم این مطلب از وبلاگ یادداشت های نرم افزاری رادمان را حتماً مطالعه کنید.

پ.ن : در مطالبی که با عنوان «یافتن کار نیمه وقت و کسب تجربه در زمینه نرم افزار» ارسال می شوند، با دیدی متفاوت به مسئله کار کردن در دوران دانشجویی و نحوه کسب تجربه در زمینه نرم افزار برای دانشجویان این رشته خواهیم پرداخت. کامنت هایی که دوستان لطف می کنند و در زیر هر مطلب ارسال می کنند، تکمیل کننده بحث های ما خواهد بود. اگر شما هم اطلاعات سودمندی در زمینه مباحث ما دارید از من و خوانندگان وبلاگ دریغ نفرمایید و زیر پست نظر خودتان را بیان کنید.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

یافتن کار نیمه وقت و کسب تجربه در زمینه نرم افزار – قسمت دوم

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

قسمت دوم : راه های جایگزین (کار نیمه وقت در شرکت های نرم افزاری) برای کسب تجربه و در آمد در زمینه نرم افزار

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

  • انجام پروژه های نرم افزاری : شما به صورت یک پیمانکار نرم افزاری مستقل برای اشخاص، سازمان ها و شرکت های مختلف پروژه های نرم افزاری انجام می دهید. در اینجا شما نرم افزاری کاملاً سفارشی بر اساس سلایق کارفرما می سازید. که البته به همین راحتی ها هم نیست. صرف نظر از بحث تکنیکی قضیه، مسائلی وجود دارد که ما دانشجوها از آن بی خبریم! (در مطلب بعدی به این موضوع خواهیم پرداخت)
  • تولید نرم افزار : شما به صورت مستقل بسته نرم افزاری تولید می کنید و آن را به فروش می رسانید. در این روش شما هم سفارش دهنده هستید و هم تولید کننده. باید به مسائل زیادی توجه کنید اما ریسک و فشار کمتری نسبت به روش «انجام پروژه» به شما وارد خواهد شد. فقط بحث بازاریابی در این روش بسیار مهم و حیاتی است.
  • همکاری در پروژه های نرم افزاری اوپن سورس : شما یکی از نرم افزارهای اوپن سورس را انتخاب کرده و با تیم سازنده آن همکاری می کنید. این همکاری می تواند به صورت بومی سازی و یا سفارشی سازی نرم افزار مربوطه برای کاربردهای خاص باشد. حتی می توانید فراتر از این ها عضو اصلی تیم توسعه یک پروژه نرم افزاری اوپن سورس شوید. در این روش تجربه های خوبی بدست خواهید آورد، البته که می توانید از این راه کسب درآمد هم بکنید.

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

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

یافتن کار نیمه وقت و کسب تجربه در زمینه نرم افزار – قسمت اول

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

قسمت اول : مقدمه و یافتن کار نیمه وقت در شرکت های نرم افزاری

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

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

یافتن کار نیمه وقت در شرکت های نرم افزاری (ایرانی)

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

سناریوی دوم : با خوشرویی دانشجو را دعوت به نشستن می کنند. از او سئوال می کنند کجا درس می خواند، چه مهارت هایی دارد و … تا اینجای کار دانشجوی خوش خیال فکر می کند دیگر به خواسته خودش رسیده اما به زودی متوجه اشتباهش می شود. فرد مربوطه از او ضمانت می خواهد، نه یک میلیون نه دو میلیون بلکه 25 میلیون وثیقه می خواهد!! و با خودش فکر نمی کند که چه سئوال احمقانه ای پرسیده است، دانشجو که از این پشتوانه ها ندارد.

طرف وقتی جواب منفی دانشجو را می شنود، به علت اینکه دانشجو مهارت های خوبی دارد و به دردشان می خورد قیمت را پایئن می آورد. طرف تا 10 میلیون هم پائین می آید و علت را دانشجو بودن او اعلام می کند. دانشجو که احساس می کند هم شرکت و هم فرد مقابل درست حسابی نیستند، جواب منفی خود را طوری بیان می کند که طرف بیخیال شود.

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

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

دانشجو وارد آن شرکت می شود. همان دم در از او می خواهند تا بنشیند. رئیس آن شرکت پس از احوال پرسی با دانشجو یک نگاهی از سر تا پا به او می کند و می گوید : «به سن و قیافه شما نمی خورد این مهارت ها را داشته باشید»!! سپس با یک داد بلند (انگار که سر زمین کشاورزی باشد) یکی از برنامه نویسان شرکت را صدا می کند تا سئوالات تخصصی از دانشجو بپرسد و به قول خودش سطح او را محک بزند. طرف که می آید یک نگاه تحقیرآمیزی به دانشجو می کند که یعنی «این همونه که گفته این مهارت ها رو داره». آخه دانشجو یادش رفته بود در آن سایت نیازمندی سنش رو ذکر کنه!

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

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

دانشجو قید پیدا کردن کار نیمه وقت در شرکت های نرم افزاری را می زند! و به فکر راه های دیگری برای کسب درآمد و تجربه در رشته نرم افزار می افتد.

ادامه دارد… (به علت اینکه مطلب طولانی نشود)

پ.ن : سناریوهای بالا کاملاً واقعیست و دانشجوی ذکر شده کسی نیست جز نویسنده این وبلاگ یعنی من. پس شک نکنید که این مسائل وجود دارند و  کاملاً واقعیست.

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

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :

کمی (درد دل) در مورد رشته نرم افزار

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

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

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

بزرگترین مشکلی که رشته نرم افزار در محیط های آکادمیک کشور ما با آن روبرو است، سیستم آموزشی بسیار نا مناسب و نا کارآمد ماست. همان طور که می دانید رشته نرم افزار نسبت به رشته های علمی دیگر پیشرفت های سریع تر و بیش تری دارد. هر روز یک فناوری جدید معرفی می شود و نیاز به آموزش به روز در این رشته بسیار حیاتی است. این در حالی است که در کشور ما واحدهای درسی را بر اساس 10 سال قبل تنظیم کرده اند و دروس تخصصی ما با الگوهای 20 سال قبل تدریس می شوند. دانش اساتید این رشته همانی است که مثلاً در 7-8 سال قبل مدرک خود را گرفته اند و در این مدت هیچ چیز جدیدی به آن اضافه نکرده اند. البته حق هم دارند، به قول یکی از همین اساتید، بعد از گرفتن مدرک دو سال سربازی و پس از آن هم که گرفتار مشکلات ازدواج و مسئولیت زندگی شدند که اصلاً وقت به روز کردن دانش خود را نداشته و نخواهند داشت! این وضعیت وقتی وخیم تر می شود که بدانید مدیران رده بالا، سازمان های آموزش عالی و آموزش و پرورش نیز در همان 10-20 سال گذشته سیر می کنند و اقدامات نامناسبی انجام می دهند تا هر روز وضع این رشته تحصیلی مهم از دیروز بدتر شود. یکی از کارهای مهمی که در این زمینه انجام دادند، حذف پاسکال در دوره هنرستان و جایگزین نمودن آن با ویژوال بیسیک بوده است!!

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

پ.ن : معذرت میخوام که این مطلب موضوعات پراکنده ای دارد، این را در حد یک درد دل کوچک قبول کنید.

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

farasun.wordpress.com

مطالب مرتبط :