نوشته‌ها

Visual studio

برنامه نویسی را از کجا شروع کنیم؟ (قسمت دوم)

(قسمت دوم: دسکتاپ)

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

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

برنامه نویسی دسکتاپ

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

برنامه نویسی تحت ویندوز

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

calculator

در گذشته نوشتن این برنامه ها با استفاده از vb یا visual basic  خیلی شایع بود اما امروزه این زبان تقریبا منسوخ شده است. دو زبان بسیار شایع امروزه سی شارپ (#C) و جاوا (Java) هستند.

توسعه برنامه ویندوزی با C#

یکی از ابزارهای معروف و پر کاربرد برای برنامه نویسی با سی شارپ Visual studio است. با استفاده از کتابخانه پیش فرض ویژوال سی شارپ شما می توانید ظرف چند دقیقه ابزار های زیادی مثل دکمه ها، منوها، لیست، دکمه های انتخابی و … روی یک پنجره ایجاد کنید.
سپس از با استفاده از کامپایلر آن، برنامه ای به فرمت exe ایجاد می شود که می توانید آن را روی هر سیستم دلخواهی اجرا کنید.
این تازه شروع ماجرا است. به جرات میشود گفت چندین گیگ کتابخانه آماده قابل دانلود در اینترنت وجود دارد که به راحتی قابل دانلود و استفاده میباشد.
یک مزیت خوب برای سی شارپ میتوان به فراوان بودن کتابخانه ها لازم و سهولت برنامه نویسی با آن نام برد. به همین دلیل طرفداران زیادی دارد. انشا الله در پستی جداگانه در مورد نحوه برنامه نویسی با سی شارپ به صورت گام به گام توضیح خواهم داد.
توجه به این نکته هم ضروری است که غیر از برنامه های پنجره ای، برنامه های کنسولی هم وجود دارند. برنامه های کنسولی دارای هیچ پنجره خاصی نیستند بلکه توسط محیط دستوری ویندوز اجرا میشوند و میتوانیم توسط آن پیام های متنی از کاربر دریافت و نمایش دهیم.  مثلا دستور cmd را وقتی اجرا میکنید پنجره سیاهی باز میشود که میتوانید توسط آن دستور هایی مثل حذف و کپی فایل را اجرا نمایید. نمونه یه برنامه کنسولی مشابه تصویر زیر می باشد:
cmd

cmd

برای مثال فوق،‌ برنامه PING.EXE که در پوشه C:\Windows\System32 وجود دارد به صورت دستوری اجرا می شود و خروجی آن نیز به صورت متنی است که هدف آن سنجش سرعت اتصال یا فعال بودن یک سرور خاص است.
برنامه های هم وجود دارند که به صورت پیوسته و پشت صحنه همواره در حال اجرا هستند که به آنها سرویس (Windows Service) گفته میشود. سرویس ها هیچ پنجره و کنسولی ندارند که با کاربر ارتباط برقرار کنند، بلکه فقط برای انجام کارهای پیوسته و پشت صحنه ای طراحی میشوند. مثل انتی ویروس ها، یا سرویس های بروز رسانی یک برنامه. تصویر زیر چند نمونه از سرویس های نصب شده روی کامپیوتر شخصی من را نشان می دهد:
services

services

مثلا در تصویر بالا برنامه Google Update Service سرویسی است که هر وقت سیستم روشن می شود شروع به کار میکند و در صورت متصل بودن به اینترنت نرم افزارهای Google شما مثل مرورگر کروم را بروز رسانی میکند.
البته توجه کنید که خیلی از برنامه های حرفه ای هم دارای سرویس هستند و هم پنجره گرافیکی برای ارتباط با کاربر دارند. مثلا وقتی شماره پنجره انتی ویروس خود را باز میکنید و تنظیمات لازم را انجام میدهید و برنامه توسط سرویس های پشت صحنه شروع به اسکن پوشه دلخواه شما میکند. ( هم رابط کاربری پنجره ای دارد و هم سرویس) مثل Eset Service در تصویر بالا که سرویس آنتی ویروس Smart Security است.
پس ما با توجه به نیاز مان اول مشخص کنیم برنامه ما از چه نوعی است؟ پنجره ای، کنسولی یا سرویس؟ ممکن هم هست برنامه از چند بخش تشکیل شده باشد که باید برای هر کدام یک پروژه از نوع خودش تعریف کنیم و بین آنها ارتباط برقرار کنیم.
مفهوم کتابخانه را هم اینجا توضیح میدهم. فرض کنید که شما بخواهید کد هایی بنویسید که در برنامه های مختلف از آن استفاده نمایید. در این صورت برنامه تان را به فرمت کتابخانه ایجاد میکنید که با پسوند dll ایجاد میشود. شما میتوانید این کتابخانه را در برنامه های مختلف خود استفاده کنید، یا با دیگران به اشتراک بگذارید یا حتی خرید و فروش کنید.
همان طور که قبلا گفتم، مشهور ترین و کاربردی ترین زبان برنامه نویسی ویندوزی C# است. هر چند بر اساس نیاز نرم افزار شما می توانید از زبان های سطح پایین تر دیگر نظیر C++ نیز استفاده کنید. برای مثال یکی از نرم افزارهایی ما که طی یک پروژه ۲ ساله نوشتیم به این صورت هست:
gpns

gpns

کار این نرم افزار ایجاد قابلیت برای ترسیم شبکه گاز و اتصال ادوات و شبیه سازی دینامیکی خطوط هست. از آنجایی که محاسبات عددی در نرم افزار خیلی اهمیت دارد، تیم برنامه نویس از زبان C++ استفاده کرده اند.
حالا فرض کنید که شما بخواهید یک برنامه دسکتاپ بنویسید. باید چه زبانی را انتخاب کنید؟ از چه کتابخانه هایی استفاده کنید؟ سطح پایین مثل C++ بهتر است یا C#؟ از چه پایگاه داده ای استفاده کنید؟
پاسخ به این سوالات در ابتدای انجام هر پروژه مهمترین عامل است. چون در صورتی که تصمیم اشتباه بگیرید پروژه ای که میتواند ۳ ماهه مثلا تولید بشود، ممکن است ۲ سال طول بکشد. یا کیفیت لازم را نداشته باشد. پاسخ به این سوالات هم کار خیلی ساده ای نیست بلکه نیاز به تجربه دارد. این که افراد چقدر تجربه برنامه نویسی دارند، یا با چه زبان هایی کد نوشته اند، با چه کتابخانه هایی کار کرده اند و خیلی فاکتور های دیگر. من در نوشته های بعدی  ان شاء الله توضیح خواهم داد که چه فاکتورهایی را برای تولید یک برنامه ویندوزی باید در نظر بگیریم.
برای مشاهده قسمت سوم اینجا کلیک کنید
برنامه نویسی

برنامه نویسی را از کجا شروع کنیم؟

(قسمت اول: وب)

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

برنامه نویسی برای حل مسائل ریاضی و شبیه سازی

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

برنامه نویسی تحت وب

برنامه نویسی تحت وب اصطلاحی است که به برنامه هایی گفته می شود که از دو بخش کلاینت و سرور تشکیل شده اند و توسط پروتکل های وب (مثل HTTP) با هم ارتباط دارند. نمونه بارز آن کلیه وب سایت هایی هستند که شما در سراسر دنیا مشاهده می کنید. مثلا زمانی که شما آدرس وب سایت zatkhahi.ir را در مرورگر خود می زنید، مرور گر به سرور مربوطه طبق پروتکل های مشخصی دستورات لازم را ارسال می کند، و برنامه ای روی سرور اجرا می شود و یک یا چند خروجی متنی تولید می کند. مرورگر همه این خروجی های متنی را دریافت کرده و پس از اجرای برنامه هایی روی سیستم شما در قالب نمایشی مناسب به شما نشان می دهد. در این فرایند ۲ برنامه اجرا می شود. اول برنامه ای است که روی سرور قرار دارد و دوم برنامه هایی هستند که پس از دانلود توسط مرورگر روی سیستم خود شما توسط مرورگر اجرا می شوند. سرور که معنایش مشخص است یعنی کامپیوتری که برنامه وب سایت روی آن قرار دارد و شما از طریق اینترنت به آن وصل می شوید و کلاینت هم یعنی سیستم خود شما که برنامه های دریافت شده را اجرا می کنید.
طبق همین مفهوم برنامه نویسی تحت وب هم عموما به دو بخش کلی تقسیم میشود: برنامه نویسی تحت سرور (back-end) یا برنامه نویسی سمت کلاینت که به آن front-end می گویند.
برنامه هایی که تحت سرور هستند می تواند هر زبان برنامه نویسی باشد، ولی معروف ترین زبان های برنامه نویسی دنیا که مخصوص این کار طراحی شده اند PHP،  #C ، Python و Java هستند. البته هر کدام از این ها کتابخانه های (Framework) متعدد و طرفداران خاص خود را دارند. که توضیح راجع به انواع کتابخانه های موجود را ان شاء الله در نوشته دیگری توضیح خواهم داد.
کسی که برنامه تحت سرور می نویسد عموما باید با پایگاه داده هم آشنا باشد. امروزه ساده ترین برنامه های تحت وب (مثل همین وب سایت) هم نیاز به ذخیره سازی و مدیریت اطلاعات دارند. برای مثال در همین وب سایت، تصور کنید بخواهید پست های ایجاد شده، دیدگاه های هر پست، اطلاعات کاربرهای وب سایت، منوها و … را در جایی ذخیره کنید. پایگاه داده مبحث خیلی گسترده ای است ولی در حد یک تعریف ساده برای حل نیاز ما، برنامه ای است که کلیه اطلاعات روی سرور را در قالب جداول مختلف و ارتباطلات بین آن ها مدیریت می کند. معروف ترین پایگاه داده دنیا که رایگان هم هست MYSQL است. برنامه نویس تحت سرور باید با زبان SQL  آشنا باشد تا بتواند اطلاعات را توسط این دستورات ذخیره و دریافت کند.
برنامه تحت سرور باید خروجی های صحیح به فرمت HTML و CSS تولید کند که قابل فهم برای مرورگر ها می باشد. پس برنامه نویس تحت سرور باید با دستورات HTML، CSS آشنا باشد.
برنامه نویسی تحت کلاینت عموما هدفش طراحی ظاهر وب سایت مثل قالب، رنگ بندی، فونت ها، منوها، نمایش اسلاید و … است. همه کدهایی که برنامه نویس کلاینت می نویسد روی سیستم کاربر توسط مرورگر اجرا می شود. این کدها عموما شامل HTML، CSS و JavaScript هستند. در نتیجه ذوق و سلیقه هنری هم در طراحی سمت کلاینت خیلی حائز اهمیت است. و برنامه نویس کلاینت باید با انواع کتابخانه های جاوا اسکریپت و CSS مثل JQuery و Angular JS  و Bootstrap آشنا باشد.
پس اگر شما بخواهید برنامه نویس تحت سرور باشید کار شما سخت تر است. چون علاوه بر زبان برنامه نویسی (PHP یا C# مثلا) و SQL باید با کتابخانه های کلاینت هم آشنا باشید. معمولا back-end کار ها افراد با سابقه کار بیشتری هستند.
پس اگر کسی بخواهد یک وب سایت ساده مشابه همین وب سایت راه اندازی کند، باید حداقل این چند زبان برنامه نویسی و کتابخانه های مرتبط را یاد بگیرد. البته برای راه اندازی یک وب سایت راه ساده تری نیز وجود دارد. می توانید از برنامه های آماده (سامانه مدیریت محتوی) استفاده کنیم. برنامه هایی مثل Joomla و WordPress یا Drupal. با استفاده از نصب این برنامه ها بدون نیاز به هیچ برنامه نویسی می توان یک وب سایت را راه اندازی نمود. برای مثال همین وب سایت با استفاده از مدیریت محتوی Drupal راه اندازی شده است. که با استفاده از آن همه برنامه های کلاینت و سرور قبلا نوشته شده است و فقط توسط کاربر تنظیم می شود. باید توجه داشته باشید که این برنامه های مدیریت محتوی یا CMS هم کلیه این کتابخانه ها را شامل می شوند. برای مثال در راه اندازی دروپال از موارد زیر استفاده شده است:
  • هسته برنامه سرور با استفاده از Php
  • پایگاه داده Mysql
  • Javascript  و JQuery
  • CSS
  • HTML

در صورتی که شما بخواهید که قابلیت های جدید به وب سایت اضافه کنید یا تغییری در سامانه وب سایت ایجاد کنید، مثلا رنگ و وفونت قالب را تغییر دهید، باید فهم درستی از HTML و CSS داشته باشید. یا مثلا بخواهید برنامه بنویسید که از کاربرهای سایت یک نظرسنجی خاص را انجام دهد،‌ باید با استفاده از Php و Mysql این کار را انجام دهد.

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

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

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

هم چنین توصیه می کنم به افراد مبتدی که قصد دارند برنامه نویسی وب را به صورت حرفه ای یاد بگیرند از برنامه نویسی front-end یا سمت کلاینت شروع کنند. ان شاءالله در نوشته های بعدی مطالبی در مورد منابع و نحوه مطالعه این موضوعات خدمت عزیزان ارایه خواهم کرد و درباره مدل برنامه نویسی های دیگر مثل دسکتاپ و موبایل توضیحاتی خواهم داد.

قسمت دوم: برنامه نویسی دسکتاپ (برای مشاهده روی لینک کلیک کنید)