مفاهیم پایه و اصطلاحات برنامه نویسی

  • May 20, 2022 6:26 pm

۱. تعریف بیت و بایت

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

        بایت چیست؟ خب برای ارسال اطلاعاتی بیشتر از خاموش و روشن می بایست در هر بازه زمانی تعداد معینی بیت ارسال کنیم تا منظور خود را با پالسهای الکتریکی بیان کنیم درست مثل علائم مورس. اینجاست که بایت ( Byte ) تعریف می شود. 

هر بایت از ۸ بیت تشکیل شده است:

bit byte

      مثلاً یک کامپیوتر اگر بخواهد عدد ۵۲ را به کامپیوتر دیگر ارسال کند ابتدا می بایست آن را از مبنای دسیمال به باینری تبدیل کند که می شود ۱۱۰۱۰۰ سپس با پالسهای الکتریکی به کامپیوتر مقصد ارسال می شود. کامپیوتر مقصد ۱۱۰۱۰۰ را دریافت کرده آن را به مبنای دهدهی یا دسیمال تبدیل کرده و عدد ۵۲ را نمایش می دهد.

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

۲. متغیر چیست؟

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

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

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

      int : مخفف Integer است و برای متغیرهای حاوی عدد صحیح استفاده می شود.

     char: نوع داده کارکتری تمامی حروفی است که در زبانهای نوشتاری وجود دارد. به عنوان مثال برای انجام محاسبات ریاضی می بایست اعداد را در متغیرهای با نوع عددی مثل int ذخیره نمایید تا بتوانید دو متغیر را با هم جمع نمایید. و اگر شما اعداد ۵ و ۴ را در متغیر char ذخیره نمایید آنها به صورت کاراکتر یا حروف در نظر گرفته شده و با هم ریاضی نمی شوند و با هم جمع حروفی می شوند:

char a=5
char b=4
=>
a+b=54
int a=5
int b=4
=>
a+b=9

      Double , Float و Decimal: این سه نوع داده تمام اعداد از جمله اعداد دسیمال و کسری را شامل می شوند و تفاوت آنها در محدوده مقادیر آنها می باشد به عنوان مثال Double دو برابر Float است و ارقام بیشتری را در خود جای می دهد.

      Null: نوع داده نال یا int nullable محدوده ای از int است اما می تواند علاوه بر اعداد صحیح مقدار null یا تهی را نیز ذخیره کند.

      Bool: بولین یک نوع داده است که می تواند فقط ۰ و ۱ یا true و false را در خود ذخیره کند.

۳. آرایه چیست؟

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

array x=[4,2,8,18,6,47,6,87,12,3]
int a=4
int b=2
int c=8
int d=18
int e=6
int f=47
int g=6
int h=87
int i=12
int j=3
int k=5

۴. تابع چیست؟

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

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

مثال:

      تابعی بنویسید که طول و عرض مستطیل را گرفته و محیط آن را چاپ نماید.

int a=3
int b=6
function area ( a,b ) {
    return (a+b)*2
}
flesh

18

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

      به عنوان مثالهایی دیگر:

تابعی بنویسید که یک عدد را دریافت کند و جذر آن را محاسبه کند.

تابعی بنویسید که سه ضلع یک مثلث را بگیرد و مساحت آن را محاسبه کند.

      به عنوان یک نمونه کاربردی می توان از توابع ریاضی مورد استفاده در کتابخانه زبانهای برنامه نویسی نام برد. مثلا زمانی که ما در زبان PHP می خواهیم جذر یک عدد را به دست آوریم از تابع ()sqrt استفاده می کنیم.

۵. متد چیست؟

      متد یا method در واقع همان تابع است و در برنامه نویسی شیء گرا به تابع ها متد می گوییم. به عبارت دیگر تابع ها در برنامه نویسی شیء گرا درون یک کلاس تعریف می شوند و نام آن متد است. هر زمان که ما یک نمونه از کلاس می سازیم می توانیم تابع های آن کلاس را که متد نام دارند فراخوانی کنیم. در ادامه به تعریف برنامه نویسی شیء گرا می پردازیم.

۶. برنامه نویسی شیء گرا چیست؟

    از ویکی‌پدیا، دانشنامهٔ آزاد

      برنامه‌نویسی شیءگرا به انگلیسی: Object-Oriented Programming  به‌اختصار: OOP یک شیوه برنامه‌نویسی است، که ساختار یا بلوک اصلی اجزای آن، شی‌ها می‌باشند. در این شیوه برنامه‌نویسی، برنامه به شی گرایش پیدا می‌کند، به این معنا که داده‌ها و توابعی که بر روی این داده‌ها عمل می‌کنند، تا حد امکان در قالبی به نام شیء و در کنار یکدیگر قرار گرفته، جمع‌بندی شده و یک واحد (یا یک شیء) را تشکیل می‌دهند و نسبت به محیط بیرونِ خود، کپسوله می‌شوند. از این طریق، توابع خارج از آن شیء، امکان ایجاد تغییر در داده‌های درون شیء را نخواهند داشت.

شکل‌گیری

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

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

مقایسه

      لازم است ذکر شود که تکنیک برنامه‌نویسی شی‌گرا به مراتب کارا و پیچیده‌تر از سبک برنامه‌نویسی مبتنی بر تابع است. دلایل برتری برنامه‌نویسی شی‌گرا:

  •    قابلیت سازمان دهی بهینه‌تر کدها
  •  قابلیت تقسیم برنامه به برنامه‌های کوچک‌تر اما مستقل. برنامهٔ اصلی به صورت یک exe در می‌آید که دیگر قسمت‌های مستقل برنامه را فراخوانی می‌کند.
  •   عدم نیاز به نوشتن کدهای تکراری و قابلیت‌هایی که قبلاً پیاده‌سازی شده‌اند و صرف جویی در استفاده از منابع.
  •  با این وجود، بسیاری از توسعه دهندگان سعی می‌کنند در پروژه‌های کوچک و ساده خود از سبک برنامه‌نویسی مبتنی بر تابع بهره بگیرند.

کلاس

      کلاس نوع خاصی از آرایه است که امکان ذخیره و جمع‌بندی تعداد زیادی المان را که شامل داده‌ها و توابع هستند برای یک شیء جدید فراهم آورده و تحت یک نام مشترک ذخیره می‌کند. اما بر خلاف آرایه که تنها قادر به ذخیرهٔ داده‌هایی هم جنس است، کلاس می‌تواند داده‌هایی از جنس‌های مختلف را ذخیره نماید. به طور مثال در نظر بگیرید که می‌خواهیم تاریخ ۱۳ نوامبر ۲۰۰۶ را که تشکیل شده از روز، ماه و سال است مورد استفاده قرار دهیم. برای این منظور سه نوع متغیر متفاوت مورد نیاز است:

int day;
String month;
int year;

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

      اینجاست که کلاس‌ها به خوبی وارد عمل می‌شوند. با استفاده از کلاس‌ها می‌توان متغیرهای متعدد را زیر عنوان یک جنسیت مشترک جدید به طور مثال هر سه را در یک کلاس با نام  Date، تعریف و جمع‌بندی نمود؛ و بعد از آن، بدون نیاز به تعریف مجدد روز، ماه و سال، از کلاس Date به میزان مورد نیاز استفاده کرد:

class Date{
int day;
String month;
int year;
}

وراثت

      وراثت یا ارث بری (Inheritance) از مفاهیم اساسی برنامه‌نویسی شی گرا است. هر شیء یک نمونه از یک کلاس است و هر کلاس می‌تواند از کلاس یا کلاسهای دیگری مشتق شده باشد (خواص متدها یا رویدادهای کلاس‌های دیگر را به ارث ببرد). در یک مثال ساده می‌توان اتومبیلی را در نظر گرفت که برای جلوگیری از بازنویسی خواص عمومی اتومبیل شامل: چهار چرخ، متدهای حرکت چرخ، متد چرخاندن فرمان، فرمان، بدنه، در و غیره، می‌توان یک کلاس پایه از اتومبیل ایجاد کرد سپس مثلاً برای اتومبیل سیتروئن مدل C۵ یک کلاس جدید ایجاد کرده که خواص، متدها و رویدادهای عمومی اتومبیل را داشته باشد و فقط برای خواص، متدها و رویدادهای جدید این اتومبیل کد نوشته شود. این ویژگی باعث صرفه‌جویی در نوشتن کد و تا حدودی تضمین صحت کد موجود می‌شود. به عنوان مثال اگر کلاس پایه مشکلی داشته باشد فقط کافی است کلاس پایه تغییر داده شود و در تمامی کلاس‌هایی که از این کلاس پایه ویژگی‌ای را به ارث برده‌اند این تغییر اعمال خواهد شد.

مخفی‌سازی

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

انتزاع

      انتزاع داده یا پنهان کردن اطلاعات، Abstraction نامیده می‌شود. به عبارت دیگر فرآیندی برای انتزاع یا پنهان‌سازی عملکردها می‌باشد و فقط امکان استفاده از آن‌ها را برای کاربران یا برنامه نویسان فراهم می‌کند. برای مثال متد Console.WriteLine. هیچ کس نمی‌داند چه عملیاتی در تابع اتفاق می‌افتد و ما فقط با صدا زدن و ارسال پارامتر از آن استفاده می‌کنیم.

۷. عملگر چیست؟

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

      در ادامه پنج نوع عملگر رایج در برنامه نویسی را بررسی می کنیم.

  1.  عملگر انتساب
  2.  عملگرهای ریاضی
  3.  عملگرهای رابطه ای 
  4.  عملگرهای منطقی
  5. عملگرهای بیتی

     

a. عملگر انتساب: عملگر انتساب مقدار عملوند سمت راست خودش را در عملوند سمت چپ قرار می دهد و با علامت = نشان داده می شود.

مثال: 

a=5
b=a*4
c=b*a/2

      در عبارت اول مقدار ۵ در متغیر a قرار می گیرد.

      در عبارت دوم مقدار ۴*۵ در متغیر b قرار می گیرد.

      در عبارت سوم مقدار ۵۰ در متغیر c قرار می گیرد.

     

b. عملگرهای ریاضی: عملگرهای جمع ، تفریق ، توان و . . . عملگرهای ریاضی هستند و در برنامه نویسی تعاریفی مشابه به تعاریف ریاضی شان دارند. برای دو متغیر A=20 و B=10 عملگرهای ریاضی را به کار می بریم:

عملگر توضیحات مثال
+دو مقدار را با هم جمع می کند.A + B = 30
مقدار عملوند راست را از مقدار عملوند چپ کم می کند.A – B = 10
*برای ضرب دو مقدار استفاده می شود.A * B = 200
/مقدار عملوند راست را بر مقدار عملوند چپ تقسیم می کند.A / B = 2
%مقدار عملوند راست را بر مقدار عملوند
چپ تقسیم کرده و باقیمانده را بر می گرداند
A % B = 0
++یک واحد به مقدار قبلی اضافه می کند.A++ = 21
– –یک واحد از مقدار قبلی کم می کند.A– = 19

     

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

عملگر توضیحات
== بررسی تصاویر دو مقدار
!= بررسی عدم تساوی دو مقدار
> بررسی بزرگ‌تری مقدار سمت چپ
< بررسی کوچک‌تری مقدار سمت چپ
>= مقایسه بزرگ‌تر مساوی
<= مقایسه کوچک‌تر مساوی

      d. عملگرهای منطقی: عملگرهای منطقی یا logical operators بر روی عبارات منطقی عمل می کنند. این عملگرها Or ، And و Not هستند:

&& And
|| Or
! Not

      عبارات منطقی دارای ارزش درستی یا نادرستی False یا True هستند.

به مثال زیر توجه کنید:

operators

      در عبارت منطقی بالا عملگر AND یا && نشان داده شده است. برای اینکه این عبارت ارزش درست داشته باشد ، باید هر دو عملوند آن دارای ارزش درست باشد یعنی a عددی بین ۱ و ۱۰ باشد.

      برای اینکه یک عبارت منطقی دارای عملگر OR یا || دارای ارزش درست باشند می بایست حداقل یکی از عملوندها دارای ارزش درست باشند. در غیر اینصورت کل عبارت دارای ارزش نادرست خواهد شد.

      در جدول زیر درستی عملگرهای منطقی روی داده ها نشان داده شده است.

NOT A A OR B A AND B B A
True False False False False
True True False True False
False True False False True
False True True True True

      e. عملگرهای بیتی: در بعضی زبانهای برنامه نویسی مانند زبان عملگرهایی برای انجام عملیات روی بیت ها در نظر گرفته شده است. از عملگرهای بیتی برای تست کردن ، مقدار دهی ، شیفت دادن یا سایر اعمالی که بر روی بیت های یک بایت Int یا Char ذخیره شده اند استفاده می شود.

۸. مفسر و کامپایلر

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

      وقتی می گوییم زبان سطح پایین یا زبان سطح بالا منظور چیست؟

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

منظور از زبان سطح بالا زبانهای برنامه نویسی هستند که به زبان محاوره ای نزدیک بوده و توسط انسان قابل فهم می باشند. مانند زبانهای C++ ، جاوا ، PHP و پایتون.

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

 print "S";

در صورتی که با یک زبان سطح پایین مانند اسمبلی آن را چاپ کنیم باید مقار زیادی صفر و یک و کاراکتر های نافهوم به کامپیوتر منتقل کنیم.

language layers

      مقایسه مفسر و کامپایلر: 

  • در زبانهای کامپایلری مانند C و جاوا ابتدا کدها به صورت کامل ترجمه شده سپس فایل کامپایل شده اجرا می شود ولی در زبانهای مفسری مانند PHP و پایتون کدها خط به خط تفسیر و سپس اجرا می شوند.
  • در زبانهای کامپایلری تنها یک بار کامپایل انجام می شود و بعد از آن فایل کامپایل شده در هر سیستم عاملی اجرا می شود ولی در زبانهای مفسری یک نرم افزار مفسری مخصوص سیستم عامل نصب شده و کدها را خط به خط تفسیر می کند.
  • تفسیر خط به خط کدها در برنامه های مفسری موجب استفاده بیشتر Ram و CPU می شود سرعت پایینتری نسبت به برنامه های کامپایلری دارند. البته با پیشرفت برنامه ها و همینطور وجود سخت افزارهای قوی این تفاوت سرعت در حال ناچیز شدن است.
  • در مفسر به دلیل خط به خط اجرا شدن اگر مشکلی وجود داشته باشد قابل شناسایی و رفع اشکال می باشد ولی در کامپایلر می بایست تمام فایل کامپایل شده را برای ارورها بررسی کرد که نسبت به زبان های مفسری بسیار دشوارتر است.

۹. اشکال زدایی یا Debugging

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

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

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

      ۱. خطاهای نوشتاری یا Syntax Errors : این خطاها متداول ترین نوع خطا در نوشتن برنامه ها می باشند. خطاهای نوشتاری یا نحوی موقعی به وجود می آیند که ما اشتباه تایپی یا دستوری داشته باشیم. مثلا بجای دستور Print بنویسیم Primt یا اینکه از علامت کوتیشن یا سمی کالن در جای مناسب استفاده نکنیم و غیره.

      ۲. خطاهای معنایی یا Semantics Errors : زمانی رخ می دهند که معنا و مفهوم درستی از کد ما استنباط نمی شود. مثلا زمانی که ما دستور تقسیم یک عدد بر صفر را می دهیم کد ما از نظر Syntax درست است ولی از نظر ریاضی این عملیات امکان پذیر نمی باشد و برنامه خطای Semantic یا معنایی می دهد.

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

۱۰. فرانت اند و بک اند

      تعریف فرانت اند : به هر چیزی که کاربر در یک صفحه وب می بیند مانند عکس ها متن ها منوها و غیره فرانت اند Front End یا جلوی سایت می گویند. این قسمتها با زبانهای HTML ، CSS و جاوا اسکریپت توسط یک برنامه نویس فرانت اند نوشته می شود.

      تعریف بک اند : در طرف دیگر بک اند Back End یا پشت سایت را داریم که شامل یک سرور ، یک اپلیکیشن و یک پایگاه داده می شود. کاربران سایت هیچگونه دسترسی مستقیم به این قسمتها ندارند. کنترل و مدیریت بک اند به دست برنامه نویسان و مدیران سایت می باشد.

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

front back
      فرانت اند و بک اند را می توان ظاهر و باطن یک اپلیکیشن در نظر گرفت.

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

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

  • توسعه دهنده بک اند مسئول نوشتن کدهای سمت سرور سایت یا اپلیکیشن می باشد. پیاده سازی بخش های مختلف سایت ، نحوه کارکرد آنها و ارتباط با پایگاه داده از وظایف او می باشد.
  • توسعه دهنده بک اند می بایست دانش کافی از زبانهای برنامه نویسی بک اند مانند PHP ، Python یا Ruby و همچنین فریمورک های بک اند مانند Django ، Laravel یا ASP.NET Core داشته باشد.
  • توسعه دهنده بک اند مسئول اقدامات حفاظتی و ایمنی جهت جلوگیری از هک شدن سایت و ازبین رفتن دیتابیس می باشد.
  • توسعه دهنده بک اند می بایست دانش کافی در خصوص فناوری های وب سرورها داشته باشد و بتواند گزارشات و لاگهای سیستم را بررسی نموده و نسبت به رفع مشکلات و ارورهای احتمالی  اقدام نماید.
  • توسعه دهنده بک اند می بایست توانایی حل مسئله داشته باشد و به تجزیه و تحلیل راهکارها بپردازد.

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

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

۱۱. فریمورک چیست؟

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

بگذارید با یک مثال مطلب را باز کنیم:

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

      برای این منظور لازم است کدهایتان را بارها و بارها تست و بازبینی نمایید تا از جهات مختلف از جمله :

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

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

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

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

      سناریوی شماره ۳ : فرض کنید جایی وجود دارد که بهترین برنامه نویسان جهان کدهای آماده ای به صورت رایگان برای کارهای مختلف در اختیار همگان قرار داده اند که این کدها سالیان سال بازبینی و تست شده اند و خصوصیات زیر را دارند:

  1.  عاری از خطا و اشکال هستند.
  2. خروجی مناسب و درست تولید می کنند.
  3. امن هستند.
  4. بهینه و سریع هستند.
  5. خوانا و زیبا هستند.

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

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

تمام توجه خود را معطوف به منطق تجاری برنامه خود می کنید.

framework

     

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

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

      لازم به ذکر است قبل از شروع کار با فریمورک های هر زبان باید تسلط کافی به زبان مورد نظر داشته باشید.

۱۲. IDE چیست؟

    از ویکی‌پدیا، دانشنامهٔ آزاد

      IDE یا محیط توسعهٔ یکپارچه Integrated Development Environment   نرم‌افزاری است که امکانات کاملی را برای برنامه‌نویسان رایانه جهت توسعهٔ نرم‌افزار فراهم می‌کند.  IDE معمولاً از :

  • ویرایشگر کد
  • ساخت ابزارهای اتوماسیون
  • دیباگر

تشکیل شده‌است. برخی از IDE ها، مانند NetBeans و Eclipse، حاوی کامپایلر، مترجم یا هر دو مورد لازم هستند. بعضی دیگر ، مانند SharpDevel و Lazarus ، چنین کاری نمی‌کنند.

      مرز بین IDE و سایر قسمت‌های وسیع‌تر از توسعهٔ نرم‌افزار کاملاً مشخص نیست. گاهی اوقات یک سیستم کنترل نسخه یا ابزارهای مختلف برای ساده‌سازی یک رابط کاربری گرافیکی (GUI) یکپارچه شده‌است. بسیاری از IDEهای مدرن همچنین دارای یک مرورگر کلاس، یک مرورگر شیء و یک نمودار سلسله مراتبی کلاس برای استفاده در توسعهٔ نرم‌افزار شی‌گرا هستند.

بررسی اجمالی

      محیط‌های توسعه یکپارچه به منظور به حداکثر رساندن بهره‌وری برنامه‌نویس با ارائه مؤلفه‌های گره‌دار با رابط‌های کاربری مشابه طراحی شده‌اند. IDEها یک برنامه واحد ارائه می‌دهند که در آن تمام توسعه‌ها انجام می‌شود. این برنامه به‌طور معمول ویژگی‌های بسیاری را برای نویسندگی، اصلاح، کامپایل، راه‌اندازی و اشکال‌زدایی نرم‌افزار ارائه می‌دهد. 

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

۱۳. گیت و گیت هاب

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

      از آنجا که پیدا کردن زمانی که برنامه بدون خطا کار می کرده و برگشت به کدهای آن زمان به صورت دستی بسیار دشوار است ، برنامه نویسان برای پیگیری و ثبت تغییرات کدها از سیستم های کنترل نسخه یا Version Control System به اختصار VCS استفاده می کنند.

      این سیستم ها هر گونه تغییرات در کدهای برنامه را ردگیری و ثبت می کنند و برنامه نویسان با استفاده از آنها می توانند به آخرین نسخه پایدار برنامه برگردند. 

      گیت چیست؟ گیت رایج ترین سیستم کنترل نسخه متن باز است که توسط لینوس توروالدز خالق لینوکس در سال ۲۰۰۵ ساخته شده و توسعه یافته است. با استفاده از Git می توانید تغییرات اعمال شده در فایل ها و پوشه ها را ساده تر پیگیری کنید. گیت به شما می گوید چه چیزی تغییر کرده است ، چه کسی فایل را تغییر داده و دلیل این تغییر چه بوده است. با ثبت تغییرات می توانید نسخه ای خاص از تغییرات را که در زمان معین ثبت گردیده Checkout یا بازیابی کنید.

      گیت هاب چیست؟ گیت هاب بزرگترین هاست برای میزبانی پروژه هایی است که از سیستم کنترل نسخه گیت استفاده می کنند. برای اینکه پروژه خود را با دیگران به اشتراک بگذارید یا اینکه به صورت تیمی روی یک پروژه کار کنید ، لازم است پروژه مبتنی بر گیت خود را روی Github منتشر نمایید.

۱۴. Open Source یا متن باز چیست؟

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

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

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

۱۵. لینوکس چیست؟

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

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

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

      از سیستم عامل های رایج کامپیوتر می توان ویندوز ، لینوکس و MAC OS را نام برد. از سیستم عامل های موبایل نیز می توان اندروید و ios را نام برد.

      لینوکس چیست؟ لینوکس یک سیستم عامل رایگان و متن باز مبتنی بر یونیکس است که اولین بار در سال ۱۹۹۱ توسط لینوس توروالدز انتشار یافت. این سیستم عامل شامل توزیع یا Distribution هایی است که از هسته لینوکس استفاده کرده و هر کدام با یک نام اختصاصی شناخته می شوند.

      Ubuntu ، Fedora و Debian از توزیع های محبوب لینوکس هستند که هر کدام نیز نسخه های مختلفی دارند. از آنجایی که لینوکس آزادانه قابلیت توزیع مجدد دارد ، هر کس می تواند برای هر هدفی یک توزیع جدید بسازد.

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

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

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

      این سیستم عامل مورد علاقه برنامه نویسان بوده و با ارائه خط فرمان قدرتمند می توانید دستورات را در محیط متنی ترمینال اجرا نمایید.