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

برنامه نویسی چیست و چرا باید آن را یاد گرفت؟

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

تصور کنید یک ربات در آشپزخانه خود دارید. برای درست کردن یک فنجان چای، ممکن است به آن بگویید:

    1. کتری را با آب پر کن.
    1. آب را بجوشان.
    1. یک چای کیسه ای را در یک فنجان قرار بده.
    1. آب جوش را داخل فنجان بریز.
    1. ۳ دقیقه صبر کن.

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

چرا یادگیری کدنویسی؟

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

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

 مهندسی نرم‌افزار (Software Engineering) چیست؟

مهندسی نرم‌افزار (Software Engineering) عبارت است از به‌کارگیری اصول علمی و رویکردهای سیستماتیک برای طراحی و ساخت نرم‌افزار. در این رویکرد، ابتدا نیازمندی‌های کسب‌وکار (Business Requirements) جمع‌آوری و تحلیل می‌شوند تا بتوان نرم‌افزار را متناسب با این نیازمندی‌ها طراحی، پیاده‌سازی و آزمایش کرد.

با آغاز عصر رایانه در اواخر دهه ۱۹۵۰، مهندسی نرم‌افزار به‌شکل یک رشته‌ی تعریف‌نشده و تازه‌کار مطرح بود. اما به‌مرور زمان، با ظهور فناوری‌های جدید و شکل‌گیری شیوه‌های علمی در تولید نرم‌افزار، این حوزه تبدیل به یک رشته‌ی مهندسی مدرن شد. در دهه ۱۹۶۰، مهندسی نرم‌افزار رسمیت بیشتری پیدا کرد و روش‌های تولید نرم‌افزار نیز کم‌کم از حالت پراکنده و بدون ساختار به سوی روش‌های استانداردتر و علمی‌تر حرکت کرد.

بحران نرم‌افزار (Software Crisis)

در دهه‌های ۱۹۶۰ تا ۱۹۸۰، استفاده‌ی گسترده از رایانه باعث شد نرم‌افزار در بخش‌های مختلف زندگی انسان جایگاه مهمی پیدا کند. اما شیوه‌های سنتی و فاقد ساختار در تولید نرم‌افزار پاسخ‌گوی این رشد سریع نبود. پروژه‌ها اغلب فراتر از بودجه و زمان‌بندی تعیین‌شده پیش می‌رفتند و کدهای حجیم و پر از اشکال (Bug) باعث می‌شد نگهداری و تکمیل نرم‌افزار دشوار شود. این دوره به «بحران نرم‌افزار (Software Crisis)» مشهور شد.

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

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

نرم‌افزارهای یاری‌گر مهندسی (CASE – Computer-Aided Software Engineering)

از اواسط دهه ۱۹۸۰، رشد ابزارهای CASE (Computer-Aided Software Engineering) نیز یکی از عوامل کاهش بحران نرم‌افزار بود. این ابزارها در حوزه‌های گوناگونی مانند تحلیل و مدلسازی کسب‌وکار، توسعه‌ی نرم‌افزار (شامل ابزارهای اشکال‌زدایی)، راستی‌آزمایی و اعتبارسنجی، مدیریت پیکربندی (Configuration Management)، اندازه‌گیری و معیارها (Metrics and Measurement) و مدیریت پروژه به مهندسان نرم‌افزار کمک می‌کنند تا فرایند تولید نرم‌افزار را منسجم‌تر و کارآمدتر پیش ببرند.

 

تفاوت مهندس نرم‌افزار (Software Engineer) و توسعه‌دهنده‌ی نرم‌افزار (Software Developer)

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

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

مسئولیت‌های مهندس نرم‌افزار (Software Engineer)

یک مهندس نرم‌افزار وظایف گوناگونی بر عهده دارد که از جمله می‌توان به موارد زیر اشاره کرد:

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

  2. نوشتن و آزمایش کد (Code)
    اگرچه توسعه‌دهندگان نرم‌افزار بیشتر کدنویسی را برعهده دارند، اما مهندسان نرم‌افزار هم بخشی از زمان خود را صرف نوشتن کد و آزمایش عملکرد آن می‌کنند.

  3. مشاوره و همکاری با ذی‌نفعان (Stakeholders)
    یک مهندس نرم‌افزار با مشتریان، فروشندگان نرم‌افزار (Third Party Vendors)، متخصصان امنیت (Security Specialists) و اعضای دیگر تیم برای درک نیازمندی‌ها، یافتن راهکارهای مناسب و اطمینان از هماهنگی بخش‌های مختلف پروژه در ارتباط است.

چرخه‌ی عمر توسعه نرم‌افزار (SDLC – Software Development Lifecycle)

امروزه تولید نرم‌افزار عموماً با پیروی از چرخه‌ی عمر توسعه نرم‌افزار (SDLC – Software Development Lifecycle) انجام می‌شود. این چرخه شامل مراحل اصلی زیر است:

  1. جمع‌آوری و تحلیل نیازمندی‌ها
  2. طراحی (Design)
  3. پیاده‌سازی (Implementation)
  4. آزمایش (Testing)
  5. استقرار (Deployment)
  6. نگهداری و پشتیبانی (Maintenance)

با استفاده از یک رویکرد منظم و سیستماتیک، کیفیت نرم‌افزار بهبود می‌یابد و هزینه‌ها و زمان‌بندی پروژه بهتر مدیریت می‌شوند. در فصل‌های آینده، جزئیات بیشتری در مورد SDLC و ویژگی‌های نرم‌افزارهای باکیفیت بررسی خواهیم کرد. همچنین به نقش‌های رایج در تیم‌های توسعه (Development Teams) و جایگاه هر کدام در فرایند مهندسی نرم‌افزار نیز پرداخته می‌شود.