0
09120368440

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

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

مراحل آموزش کاربردی برنامه نویسی بر اساس مراحل تولید نرم افزار

  • تحلیل نرم افزار
  • ارتباط با بانک اطلاعاتی
  • استفاده از زبان برنامه نویسی
  • افزودن قابلیت Search در برنامه برای کاربر
  • طراحی رابط کاربری
  • شی گرایی
  • شناخت بانک اطلاعاتی
  • معماری نرم افزار
  • مهندسی نرم افزار
  • تست نرم افزار

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

نظرت چیست فرآیند ساخت نرم افزار را به یک سفر به دنیای برنامه نویسی تشبیه کنیم؟ و شاید خوب باشد که یک بار با هم به این سفر برویم

 .

ایده های نرم افزاری در دل نیازهای عمومی در دنیای واقعی

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

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

اینجاست که ایده ساخت نرم افزار به ذهنت می رسد. در این لحظه است که یک نیاز مطرح شده و تو وارد پیاده سازی یک ایده نرم افزاری می شوی. حالا وارد اجرای یک پروژه برنامه نویسی شده ای.

 

مکانیزم طبیعی ذهن، ابزاری برای شناخت نیاز های کاربر

“نرم ازفزار چیزی نیست به جز شبیه سازی جهان هستی”

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

احتمالا اگر از اطرافیانت بپرسی چطوری بهترین دکتر را پیدا می کنی به تو می گویند :

  • دکترهای با تجربه را انتخاب می کنم
  • رزومه کاری دکتر را چک می کنم
  • از بقیه سوال می پرسم یا جست و جو کردن
  • تعداد مراجعه کننده های یک پزشک خوب زیاد است    

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

با دیدن این پروفایل کاربر می تواند اطلاعات دکتر را مطالعه کند و آن رانتخاب کند.

برای اینکه مردم بتوانند در مورد آن پزشک پرس و جو کنند و نظر دیگران را بدانند یک بخش برای کامنت گذاشتن در نظر می گیریم.

در واقع بخش کامنت ها و نظرات در دنیای واقعی شبیه سازی پرس و جو از دیگران در دنیای واقعی است.

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

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

بیشتر فکر می کنم، به این نتیجه می رسم که “تعداد مراجعه کننده ها” ملاک انتخاب بهترین پزشک نیست.

ولی در نظر می گیرم که پس از مدتی برای توسعه نرم افزار، “تعداد مراجعه کننده ها” را بررسی کنم.

خب تا اینجا چه گامی از آموزش کاربردی برنامه نویسی را برداشته ای؟

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

اسنپ، مثال دیگری از دنیای واقعی

احتمالا کسی که ایده اسنپ را  داشته به برنامه نویسی که روبروی خودش بوده است گفته:

می خواهم مردم بتوانند از طریق موبایل های خود، هرجا که هستند، در هر زمانی، تاکسی بگیرند. برنامه نویس برای اینکه این برنامه را تحلیل کند تصویر زیر را در ذهن خود مجسم می کند.

یک نفر در نقطه ای روی کره زمین ایستاده و می خواهد به نقطه دیگری بر روی کره زمین برود.

کره زمین را توسط یک نقشه که گوگل از قبل در مورد آن فکر کرده است را به نرم افزار اضافه می کند.

مسافر باید بداند در موقعیتی که ایستاده اصلا تاکسی هست یا نه ؟

بنابراین از طریق جی پی اس راننده ها آن ها را بر روی نقشه نشان می دهد.

کرایه بر اساس مسافت باید محاسبه شود.

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

یک سری راننده باید وجود داشته باشد تا مسافران را جا به جا کند. پس هر راننده با ثبت اطلاعات، وارد سیستم اسنپ می شود.

برای امنیت بیشتر اسنپ نام راننده، رنگ ماشین و شماره پلاک را به مسافر نشان می دهد.

باید راهی باشد که راننده ها خدمات بهتری بدهند تا اسنپ سرپا بماند، بنابراین سیستم امتیاز دهی به راننده لازم است.

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

 

پیاده سازی بانک اطلاعاتی روش کد فرست (code first)

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

  • کد فرست (Code First)
  • دیتابیس فرست (Database First)
  • مدل فرست (Model First)

 هر یک از این روش ها هرکدام مزایا و معایب خود را دارند. در این آموزش کاربردی برنامه نویسی مثال پزشک ها را با استفاده از روش کد فرست پیاده سازی می کنیم. این روش توسط انتیتی فریمورک معرفی شد و انقلابی در ساخت بانک اطلاعاتی به شمار می رود.  در روش code first، از طراحی کردن پایگاه داده در SQL خبری نیست. دیتابیس بر اساس کلاس هایی که با کد نویسی پیاده سازی می کنید ساخته می شود. مثل مثال زیر:

و

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

ساخت بانک اطلاعاتی به روش کدفرست با استفاده از Entity Framework کاملا با استفاده از کدنویسی انجام می شود. تغیراتی که لازم باشد بر روی دیتابیس انجام شود با استفاده از Code First Migration انجام می شود. طراحی بانک اطلاعاتی، یک مرحله حذف نشدنی از آموزش برنامه نویسی و تولید نرم افزار است

.

پیاده سازی تحلیل نرم افزاری با استفاده از کدها یعنی برنامه نویسی

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

 وب سایت های زیادی مانند stackoverflow وجود دارد که سوال های بسیاری از سی شارپ کارها را جواب داده است. بنابراین برای پیاده سازی تحلیل نرم افزاری best Doctor از زبان برنامه نویسی سی شارپ استفاده می کنم.

مثلا برای اینکه دکتر بتواند اطلاعاتش را در بانک ثبت کند اینطور کد می نویسیم:

البته ماهیت پروژه best doctor به گونه ای است که باید تحت وب یا موبایل پیاده سازی شود. اما فعلا برای درک برنامه نویسی آن را با استفاده از ویندوز فرم برای تو توضیح می دهم.

 

قابلیت Search در برنامه نویسی با استفاده از Linq

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

اما چه کدی بنویسم تا کاربرها بتوانند نام، عدد مورد نظر خود را جست و جو کنند. در برنامه نویسی برای انجام جست و جو، از کوئری ها استفاده می کنیم. تکنولوژی Linq یکی از روش های کوئری نوشتن در زبان C# است. با استفاده از Linq می توان داده ها را از بانک اطلاعاتی بازیابی کرد. در پروژه Best Doctor خودمان هم برای جست و جو بهترین پزشک در یک تخصص از این کوئری استفاده می شود.

 

طراحی رابط کاربری نرم افزار

رابط کاربری نرم افزار می تواند توسط یک گرافیست با استفاده از نرم افزارهای گرافیکی، طراحی شود. سپس هنگامی که نوبت به پیاده سازی آن می رسد به پلتفرم توجه می کنیم . اگر مثل پروژه Best doctor پلتفرم پیاده سازی با ویندوز فرم باشد، کنترل ها آماده هستند و برای ساخت کنترل ها نیازی به کدنویسی نیست. کافی است طرح UI که توسط گرافیست آماده شده است را با drag & drop پیاده سازی کنی. مانند فیلم زیر:

 

اما در پلتفرم موبایل و وب برای ساخت کنترل ها و پیاده سازی User Interface نیاز به کدنویسی دارید. کد نویسی رابط گرافیکی در پلتفرم موبایل و وب با استفاده از HTML, CSS, Bootstrap, Jquery, Ajax انجام می شود. اگر یک برنامه نویس نحوه طراحی UI را بداند، می تواند مسئولیت طراحی آن را نیز برعهده بگیرد. اما به نمایش درآوردن واسط گرافیکی به وسیله کدها برعهده برنامه نویس است.

 

شی گرایی چیست ؟ (OOP)

اگر قبول داشته باشید هر چیزی در دنیای واقعی یک شی است، مفهوم شی گرایی یا Object Oriented را متوجه شده اید. انسان، لیوان، اسب، دلفین، صندلی. هرکدام یک شی در دنیای واقعی هستند که برای خود ویژگی و رفتارهای دارند. برای وارد کردن یک شی از دنیای واقعی به دنیای برنامه نویسی، یک کلاس تعریف می کنیم.

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

اما در مثال Best Doctor چه اشیا یا Object هایی وجود دارد؟

چطور اشیاء یک پروژه برنامه نویسی را پیدا کنیم ؟ در مصاحبه با مشتری و بررسی سیستم کاری مشتری می تواند اشیاء کسب و کار او را پیدا کنیم. مثلا در مثال Best Doctor  چه اشیائی وجود دارد؟

بنابراین با توجه با صحبت هایی که با مشتری داشتم، ظاهر اولیه نرم افزار (پروتوتایپ) را طراحی کردم. بر اساس پروتوتایپ توانستم اشیاء (object) های پروژه را پیدا کنم.

سایر مفاهیم شی گرایی عبارتند از:

  • چندریختی (Polymorphism)
  • ارث بری (Inheritance)
  • کپسوله سازی (Encapsulation)

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

 

طراحی بانک اطلاعاتی نرم افزار  با استفاده از SQL

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

مثلا می توان پرس و جوهایی که با لینکیو نوشتیم را با استفاده از کوری های اس کیو ال را بازنویسی کنیم. مانند شکل زیر:

گرچه من برای ساخت بانک اطلاعاتی از روش Code First استفاده کردم اما دانش کار کردن با دیتابیس و یادگیری مفاهیم مرتبط با آن بسیار مهم است. مفاهیمی مانند ارتباطات، کوئری های SQL.

 

معماری نرم افزار  ، گره گشایی برای برنامه نویس ها

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

اما معماری نرم افزار چطور قرار است ریسک های توسعه نرم افزار را انجام دهد؟ با دسته بندی کدها.

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

 

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

به همکاری من و تو بعنوان برنامه نویس، برای تولید نرم افزار  best doctor ، مهندسی نرم افزار می گویند.

به مدت زمانی که طول می کشد تا فازهای یک نرم افزار تکمیل شود چرخه حیات نرم افزار می گویند. در پروژه Best Doctor فازهایی مانند تحلیل یا آنالیز ، طراحی رابط کاربری و پیاده سازی کدها را با هم گذرانده ایم. توسعه نرم افزار یک مرحله دیگر نیز دارد که به آن تست نرم افزار می گویند و در بخش آخر به آن اشاره می کنیم. نکته مهم این است که Analyze ، Design، Implantation و Test تنها یک قسمت از مهندسی نرم افزار را تشکیل می دهد. این بخش “فرآیند تولید” نام دارد.

اجزای مهندسی نرم افزار عبارتند از:

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

Software Engineering

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

 

تست نرم افزار، آخرین مرحله برای پیروزی در برنامه نویسی

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

یا مثلا قانون گذاشته ای که کاربر نتواند در Textbox مربوط به سن، متن وارد کند. پس textbox مربوط به سن هم نیاز به تست دارد. تست هایی که در حین پیاده سازی کدها انجام می شوند را تست دستی می گویند.

اما تست های دستی به تنهایی برای اطمینان از صحیح بودن عملکرد نرم افزار کافی نیست. بنابراین نیاز است از ابزارهای ماشینی استفاده کنیم.

دیدگاه کاربران
  • z.n ۲۷ مهر ۱۳۹۸

    جالب بود

  • مصطفی بابا ۳۰ مهر ۱۳۹۸

    سلام. بسیار عالی

    • محسن مدحج ۱ آبان ۱۳۹۸

      درود بر شما

  • محمد ۳۰ مهر ۱۳۹۸

    عالی عالی خیلی ممنون.

  • روح اله زاکانی ۱ آبان ۱۳۹۸

    بسیار عالی
    ممنون

  • mohammad ۲ آبان ۱۳۹۸

    ممنون آقای مدحج.اطلاعات کاربردی وجدید بود.

  • نازمحمد گری ۲ آبان ۱۳۹۸

    با سلام
    جالب و مفید بود/
    ممنون./

  • آرمان ۴ آبان ۱۳۹۸

    خوب بود. فقط توی کلاس ها بعضی جاها اسامی فارسی بود ، بعضی جاها انگلیسی. Zooze و Eat
    Running هم اشتباه بود.
    بازم ممنون.

  • حسین ۵ آبان ۱۳۹۸

    سلام عالی بود فقط دو تا در خواست:
    ۱٫شی گرایی را در مثال best doctor بیشتر توضیح دهید
    ۲٫متد اسکرام و استفاده از ابزارهای ماشینی را اگر امکانش هس توضیح دهید

  • مفاخر ۵ آبان ۱۳۹۸

    بسیار عالی و مفید
    ممنونم

  • علی ۱۸ آبان ۱۳۹۸

    بسیار مفید👌👌🙏

    • محسن مدحج ۲۳ آبان ۱۳۹۸

      درود بر شما علی عزیز
      خوشحالم که برای شما مفید بوده

  • سمیه ۲۲ آبان ۱۳۹۸

    عالی بود سپاس

  • شاهین ۲۶ آذر ۱۳۹۸

    بسیار عالی و کامل بود با تشکر از شما

  • عسل ۷ اسفند ۱۳۹۸

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

    • مریم عمرانی ۱۱ اسفند ۱۳۹۸

      درود بر شما عسل عزیز
      خوشحالم که مطالب مفید و موثر بوده
      ممنونم از انرژی مثبتت

  • هلیا ۱۱ تیر ۱۳۹۹

    عالیییی هستین استاد

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

برنامه نویسی یا کد بازی ؟

بیش از 10000 نفر در خانواده آکادمی برنامه نویسی مدحج عضو شده اند و بجای کدبازی، میخواهند ماهیانه سفارش پروژه بگیرند و درآمد داشته باشند.
دوست داری وارد خانواده ما شوی ؟

.