مهندسی نرم افزار – بخش سوم (مدل آبشاری، فازها)

30 06 2009

  درود بسیار بر دوستان. اگر به یاد داشته باشید در بخشهای پیشین گفتیم که ملت برنامه بنویس پس از مدتی متوجه شدند که این روش «کد بزن و درستش کن» پاسخگوی نرم افزارهای در حال رشد نیست و باید یک روش درست و درمون‌تری برای ساخت نرم افزار دست و پا کرد. درسته که اون زمان مهندسی نرم افزار تازه داشت راه رفتن یاد می گرفت اما شاخه های دیگر مهندسی (از جمله صنایع خودرو سازی، ساخت قطعات خانگی و …) نوه کوچیکشون داشت کنکور هنر می داد و خیلی رشد کرده بودن و داشتند دوره‌ی بلغشون رو پشت سر می‌گذاشتند. مهندسین نرم‌افزار هم که همراه به کون‌گشاری پرآوازه بودند اومدن بجای اینکه از صفر آغاز کنند یه حرکت مهندسی-گشادی زدن و گفتن بیایم ببینیم این شاخه‌های دیگر مهندسی چه می‌کنند که ایقدر کارشون گرفته، ما هم همون کار رو بکنیم! و اینچنین بود که روش آبشاری که در دیگر شاخه‌های مهنسی رایج بود به نرم‌افزار هم راه ‍‍‍پیدا کرد.

 چی هست این روش آبشاری؟

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

۱ – فاز «تحلیل» : در این فاز مهندس نرم‌افزار تلاش میکنه تا مشخصات و کارکردهای نرم‌افزار محصول رو تعریف و مشخص کنه. در این فاز حرف حرف مشتریه و در حقیقت می‌خواهیم بفهمیم مشتری دقیقا از ما چی‌میخواد و دوست داره نرم‌افزاری که می‌سازیم دقیقا چی کار کنه و خلاصه نکاتی از این دست رو بهشون توجه می‌کنیم. در این فاز برامون مهم نیست که برای رسیدن به اون کارکردهای لازم چه طرحی خوبه یا چه جوری پیاده سازی میشه. تنها چیزی که برامون مهمه اینه که مشخصات نرم‌افزار بدست بیاد.

۲- فاز «طراحی» : در این فاز مهندس نرم‌افزار دیگه میدونه چی باید بسازه (چون نیازمندیها در فاز تحلیل بدست اومده) بنابراین میشینه یه طرحی میده تا با اجرای اون طرح، نرم افزار مشخص شده در فاز تحلیل در بیاد. فاز طراحی اصلا به راهکارهای فاز پیاده سازی و تحلیل کار نداره و براش هیچ مهم نیست که برنامه نویس‌ها از چه فن‌‌اوری‌هایی برای اجرای طرح بهره ‌میبرند یا تحلیلگرها چه جوری با این گوسفندها (=مشتری) سر و کله میزنن. تنها چیزی که مهمه اینه که طرح با نیازمندیها هماهنگ باشه. به همچین طرحی میگن طرح درست. یعنی طرحی که اگر خوب اجرا بشه منجر به ساخت نرم‌افزاری میشه که با نیازمندیها هماهنگ باشه. حالا اینکه این طرح چی هست و چی نیست رو باز بهش میرسیم.

۳- فاز «پیاده سازی»: اینجا دیگه آخر خطّه اخوی (یا هم شیره). چرا؟ آها! چون مشخصات محصول پایانی بدست اومده و طرحش هم ریخته شده و زمانی که اجرا شد نتیجه‌اش میشه همون چیزی که می‌خوایم و تنها چیزی که مونده اینه که یه سری برنامه نویس و پایگاه داده بساز و گرافیست و … بیان و طرح رو اجرا کنند. اجرای طرح نرم‌افزار یعنی همون برنامه نویسی و کدنویسی. برنامه نویس باید طرح رو بخونه و کدش رو بنویسه.

 

این سه فاز و این دنباله رو قشنگ یاد بگیرین و به یاد بسپرین چون کلید درک فرآیندهای نرم‌افزاریست:

تحلیل – طراحی –  پیاده سازی

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

نقشها:

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

تحلیلگر : کسی که نقش کلیدی رو در فاز تحلیل بازی میکنه. تحلیلگر وظیفه داره فاز تحلیل رو آغازکنه و به پایان برسونه. تحلیل گر باید مهارتهای انسانی و منطقی زیادی داشته باشه و مدلسازی هم بلد باشه. تا اندازه‌ای هم از دامنه کاری مشتری سر در بیاره.

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

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

این ارتباطات رو بیاد داشته باشید:

فاز تحلیل -> تحلیلگر

فاز طراحی -> طرّاح

فاز پیاده‌سازی -> برنامه نویس

 

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

 

فازها و نقشهای افزونه‌ای

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

فاز آزمون:

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

فاز برپایی (نصب):

همیشه هم به این سادگی نیست که نرم‌افزار رو رایت کنین رو سی‌دی و بدین به خورد مشتری. برخی اوقات محیط کارکرد نرم‌افزار به گونه‌ایست که نصب کردن و راه‌اندازیش روی ماشین‌های مقصد خودش داستانی داره. اگر ماهیت کار اینجوری باشه که برپاکردن نرم‌افزار روی محیط پایانی نیاز به کارهای خاص خودش داشته باشه، در اینصورت یک فاز نو داریم به نام «برپایی».

فاز پشتیبانی:

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

فاز گردآوری نیاز (جمع آوری نیاز):

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

فاز تحلیل دامنه:

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

 

خوبُ شر و ور زیاد گفتیم. بخونید که در نوشته‌ی بعد میزنیم به قلب ماجرا.

 

  • فاز:Phase
  • تحلیل:Analysis
  • پیاده سازی:Implementation
  • برپایی:Deployment
  • دامنه:Domain
  • تحلیل دامنه:Domain Analysis
  • تحلیلگر:Analyst
  • تحلیلگر دامنه:Domain Analyst
  • مهنسی دامنه:Domain Engineering
  • نقش:Role
  • نقش کلیدی:Key Role
  • نقش اصلی:Main Rolepan
  • نقش جنبی:Subsidiary Role
  • مدل آبشاری:Waterfall Model

کارها

Information

11 responses

2 07 2009
JJohnny

سلام و درود بسيار…
دستت درد نكنه،خيلي باهال بود…
قلبش رو زود بزار تا قلب ما رو نتركوندي…
در مورد Oracle اگر تونستيد هم مطلب بزاريد،در باره كشيدن دياگرام ها و ساخت جدول و…
Mer30.

2 07 2009
لوگوس

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

4 07 2009
JJohnny

ممنون،
يك سوال؟!
ميخواهيم در يك مجموعه كارهاي افراد رو تو يك پروژه به نمودار بكشيم،طوري كه اشخاصي كه كار ميكنند با ديگر افراد در اين نمودار مشخص بشه و همين طور روند انجام پروژه…
آيا در مهندسي نرم افزار همچين چيزي هست؟

5 07 2009
لوگوس

خواهش
مطمئن نیستم پرسشت رو درست گرفته باشم اما اگر منظور اینه که نقشهای افراد و وظایفشون با ریز کار مشخص بشه و اندازه پیشرفت کار روی نمودار مشخص باشه، بله چنین چیزی داریم و ویژه‌ی نرم‌افزار هم نیست و بیشتر به مدیریت پروژه مربوط میشه تا به یک شاخه‌ی خاص از مهندسی. نرم‌افزارهای بسیاری هم داریم که این کارها رو خودکار سازی می‌کنند و خودشون نمودار پیشرفت پرژوه رو می‌کشند. از همه شناخته شده‌ترشون همون نرم‌افزار مدیریت پروژه‌ی مایکروسافت هستش.

اگر منظورت این نبود خواهش میکنم بیشتر توضیح بده تا من اگر می‌دونستم پاسخ بدم.

5 07 2009
JJohnny

آره،منظورم همين است.
حق با شماست ، اين مربوط به مديريت پروژه ميشه ولي يكمي مسئله رو باز ميكنم…
ما در شركتمون بعد از كلي Teamwork، به اين نتيجه رسيديم كه واقعا تو ايران كار تيمي خيلي سخته و اصلا امكان پذير نيست(يا حداقل مدير پروژه خيلي قوي ميخواد)… واسه همين تصميم گرفتيم كه هر شخص يك پروژه واحد رو انتخاب و روش كار كنه…
اما چون سر هركي تو لاك خودشه،نه گزارشي از انجام كار و نه هيچ چيز ديگه،بازدهي بعد جوري بايين اومده… حال ميخواهم از نمودار استفاده كنم و اين نمودار هر روز توسط خود شخص برنامه نويس Update بشه تا من هر وقت خواستم ببينم كه كي در هر روز چقدر كار كرده و چقد مونده، و در حالت كلي هز زمان كه خواستم با اين نمودار روند اجراي برنامه رو ببينم…
(شرمنده خيلي حرف زدم…)

5 07 2009
لوگوس

نه خواهش می‌کنم.
این تنهامشکل شما نیست و همه‌ی ما تو ایران با این مشکل روبرو هستیم. من به هیچ وجه پیشنهاد نمیدم که هر کسی یک پروژه رو برداره چون اینجوری بازده خیلی میاد پایین و هر کسی وادار میشه کار ده نفر رو یاد بگیره. از سوی دیگر مدیر فنی اشکش در میاد چون باید ده تا پروژه رو با هم هماهنگ کنه و نیازی به توضیح نداره که هر پروژه زمان بیشتری به درازا میکشه.
در هر حال به گمانم نرم‌افزار dotProject کار شما رو راه بندازه. یک نرم‌افزار رایگان تحت وب هستش که هر کسی میاد کار خودش رو بروز میکنه و مدیر هم میتونه ببینه. به جز اون هر نرم‌افزار مدیریت پروژه‌ی دیگری که تحت وب یا شبکه باشه هم پاسخگو خواهد بود.

6 07 2009
Ali

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

مرسی . نمی دونم چرا این روزا اینقدر احمق میزنم .

7 07 2009
لوگوس

درود فراوان بر یگانه یار دیرینه، داش علی

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

7 07 2009
Ali

چرک پشت گوشتیم آقا اشکان .
خوب اگه قرار توضیح بدی من دیگه نمی پرسم . ولی من هنوز نمی دونم کاره این طراح در عمل با چیه ؟ یعنی اینکه میشینه تمام روش ها یی رو که بهتره انتخاب می کنه روی کاغذ بصورت الگوریتم پیادش می کنه بعد میده دست بنویس تا اون به زبان ماشین تبدیلش کنه ؟
یا اینکه نه فقط از لحاظ نظری کمک دست برنامه نویسه و مسئله رو حالا به هر شیوه ای که می تونه به بنویسمون توجیح می کنه و اونوقت دیگه باقیش دست پیاده سازه .
یا اینکه من کلا دارم اشتباه فکر می کنم و قضیه اصلا به اینا هیچ ربطی نداره .
یه جای دیگه هم گفتی که برنامه توسط گرافیست ها و مدل کارها نمی دونم چی چی میشه . اینجا این سوال پیش میاد که پس این بیچاره عمله رو میگم ( برنامه نویس ) چی کار می کنه دقیقا . فقط میاد یسری چرت و پرت تایپ می کنه که اونم طراح بهش گفته ؟ یا اینکه باز هم من برداشت بدی دارم .
البته ببخشیدا تازه ترم 4 ام اونم با این استاد های زحمت کش ما که از 12 جلسه 7 تاش رو نمیان و اصلا نفهمیدیم برنامه نویسی چیه ؟!! این کد های جمع و تفریقی رو که می نویسیم یا 4 تا خونه حافظه اشغال می کنیم به چه دردی می خوره ؟ دیگه بماند که حالا بیایم بفهمیم طراح با پیاده ساز چه فرقی داره یا اینکه نقش مدلینگ یا گرافیست تو برنامه نویسی کجاست و اصلا اینا چجوری بهم ربط پیدا می کنن.
متاسفانه هیچ منبعی بهتر از شما هم پیدا نمی کنیم بیایم فرق اینا بفهمیم و حالا شروع کنیم به مرحله به مرحله یاد گیری . در واقع اینجوری بهت بگم که اصولی یاد گرفتن رو بهمون یاد ندادن . خودمون هم که می خوایم اصولی یاد بگیریم نمی دونیم با C شروع کنیم یا با #C . اگه یکم تو این زمینه ها بتونی کمک کنی ممنون میشم .
بابت همه چیز مرسی .

7 07 2009
لوگوس

اختیار دارین

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

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

1 10 2010
aina

خیلی خیلی خیلی خوب توضیح دادید مردم ازبس تو نت دنبال مدل ابشاری گشتم که ببینم چیه ؟
خدا دلتونو شاد کنه زیاد که دلمو شاد کردید زیاد

بیان دیدگاه