برنامه‌نویسی

برنامه‌نویسی رایانه (به انگلیسی: Computer Programming) (یا به اختصار برنامه‌نویسی) به‌طور کلی به فرایند نوشتن و توسعه نرم‌افزار کامپیوتر گفته می‌شود. به بیان جزئی‌تر برنامه‌نویسی رایانه به معنای فرایند تبدیل و سوق دادن فرمول حل یک مسئله یا الگوریتم محاسباتی، به یک برنامه قابل اجرا (نرم‌افزار) می‌باشد.معنای برنامه‌نویسی رایانه در فرهنگ عامه می‌تواند به تمامی فرایند توسعه نرم‌افزار (به انگلیسی: Software Development) اطلاق گردد که شامل فعالیت‌های مختلفی همچون بررسی، توسعه، درک، طراحی الگوریتم؛ پیاده‌سازی، تست، اشکال زدایی و نگهداری نرم‌افزار‌های رایانه‌ای نیز می‌شود. همچنین برنامه‌نویس به شخصی اطلاق می‌گردد که عمل برنامه‌نویسی و توسعه نرم‌افزار را انجام می‌دهد.برنامه‌نویسی مستلزم فعالیت‌هایی همچون تحلیل و درک مسئله است و عموماً حل چنین مسایلی منجر به ایجاد یک الگوریتم می‌شود، بازبینی نیازمندی‌های الگوریتم که شامل صحت و میزان منابع مصرفی است، پیاده‌سازی (که معمولاً به عنوان کدینگ از آن یاد می‌شود) این الگوریتم در یک زبان برنامه‌نویسی مقصد، تست کردن، اشکال زدایی، نگهداری کد منبع، پیاده‌سازی سیستم ساخت (build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامه‌های کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده می‌شود. کد منبع به یک یا چند زبان برنامه‌نویسی، مانند ویژوال بیسیک، جاوااسکریپت، اسمال‌تاک، پایتون، جاوا، سی شارپ، سی پلاس‌پلاس و سی نوشته شده‌است.محتویات۱تاریخچه۲برنامه‌نویسی مدرن<br/>۲.۱نیازهای کیفیتی<br/>۲.۲خوانایی کد منبع<br/>۲.۳پیچیدگی الگوریتمی<br/>۲.۴کاربرد الگوریتم و روند‌نما در برنامه‌نویسی<br/>۲.۵روش‌ها<br/>۲.۶محبوب‌ترین زبان در برنامه‌نویسی<br/>۲.۷اشکال زدایی<br/>۳کاربرد زبان برنامه‌نویسی۴نمونه یک برنامه۵پارادایم‌ها۶زبان‌های برنامه‌نویسی۷برنامه‌نویس‌ها۸منابع۹جستارهای وابسته۱۰پیوند به بیرونتاریخچه[ویرایش]موضوع دستگاه‌هایی که به دنباله‌ای از دستورالعمل‌های از قبل تعریف شده عمل می‌کند برمی‌گردد به Greek Mythology.برنامه‌نویسی مدرن[ویرایش]نیازهای کیفیتی[ویرایش]هر روشی که برای برنامه‌نویسی به کار برود، برنامه نهایی باید دارای تعدادی مشخصات پایه باشد. مشخصات زیر تعدادی از مهم‌ترین آن‌ها هستند.قابلیت اطمینان: این که چقدر نتایج یک برنامه درست باشند، به صحت طراحی الگوریتم و به حداقل رساندن اشتباهات برنامه‌نویسی مربوط می‌شود. اشتباهات برنامه‌نویسی شامل اشکالاتی مثل اشکال در مدیریت منابع (مثل سرریز شدن بافر یا وضعیت رقابتی) و اشکالات منطقی (مثل تقسیم بر صفر یا خطاهای off-by-one).پایایی: این که یک برنامه چگونه اشکالاتی (نه باگ‌ها) را که ممکن است پیش بیایند، پیش‌بینی کرده‌است. این شامل حالتهایی مانند دریافت اطلاعات نادرست، نامناسب یا غلط می‌شود؛ همچنین کمبود منابعی مانند حافظه، سرویس‌های سیستم عامل یا اتصال به شبکه و سایر اشکالات مانند خطای کاربر یا اشکالات قطع برق نیز در این دسته قرار می‌گیرند.کاربرد پذیری: ارگونومی یک برنامه: آسانی استفاده از برنامه برای شخصی که می‌خواهد از آن برای کار در نظر گرفته شده‌استفاده کند یا گاهی برای کارهای پیش‌بینی نشده آن را به کار برد. این مورد می‌تواند به تنهایی و علی‌رغم تمام موارد دیگر باعث موفقیت یا شکست شود. طیف وسیعی از عناصر متنی، تصویری و گاهی سخت‌افزاری وجود دارند که می‌توانند باعث ارتقای وضوح، درک، پیوستگی، کامل بودن واسط کاربری برنامه شوند.قابلیت انتقال: طیف سخت‌افزارها و سیستم عاملهایی که کد منبع برنامه را بتوان روی آن‌ها با مترجم یا مفسر اجرا کرد. این قابلیت بستگی به تفاوت در تسهیلاتی دارد که سیستم‌های مختلف از نظر منابع سخت‌افزاری و سیستم عامل‌ها برای برنامه‌نویسی ارائه می‌کنند. همچنین رفتار پیش‌بینی شده سخت‌افزارها و سیستم‌های عامل، و در دسترس بودن مترجم‌ها (و منابع کتابخانه‌ای) اختصاصی در آن سیستم‌ها برای کد منبع موجود نیز مهم است.نگهداشت پذیری: این که سازندگان و ارتقا دهندگان فعلی برنامه یا افراد دیگری در آینده بتوانند به راحتی ارتقاها یا تغییراتی در برنامه انجام دهند تا خطاها و حفره‌های امنیتی را رفع کنند یا بتوانند آن را برای محیط جدیدی تطبیق دهند. در این مورد تلاش مناسب اولیه[۱] در ایجاد برنامه است که نقش عمده‌ای بازی می‌کند. این خاصیت ممکن است تأثیر خیلی زیادی روی کاربر نهایی برنامه نداشته باشد ولی در بلند مدت برای سرنوشت یک برنامه خیلی مهم است.کارایی / عملکرد :اندازه‌گیری منابع سیستمی مورد نیاز برای یک برنامه (زمان پردازنده، فضای حافظه، وسایل کند مثل دیسکها، پهنای باند شبکه و موارد دیگری مثل تعامل با کاربر): هر چقدر کمتر، بهتر. این خاصیت همچنین شامل مدیریت صحیح منابع مانند پاک کردن فایلهای موقت و از بین بردن نشتی‌های حافظه نیز می‌شود.خوانایی کد منبع[ویرایش]در برنامه‌ریزی رایانه، خوانایی عبارت است از این که خواننده متن کد منبع بتواند هدف، جریان برنامه و عملکرد کد منبع را متوجه شود. این موضوع در مجموعه نیازهای کیفیتی شامل موارد قابلیت انتقال، کاربرد پذیری و نگهداشت پذیری می‌شود.خوانایی خیلی مهم است به این علت که برنامه نویسان بیشترین وقتشان را به جای این که صرف نوشتن کد جدید بکنند، در زمینه درک و تغییر کد منبع موجود می‌کنند. کدهای ناخوانا معمولاً به خطا، نارسایی و کدهای تکراری ختم می‌شوند. یک تحقیق[۲] نشان داد که تغییرات جزئی و ساده‌ای برای خوانایی برنامه می‌تواند منجر به این شود که کد نهایی نوشته شده کوتاه‌تر شود و همچنین زمان فهم آن به‌طور قابل توجهی کاهش یابد.پیروی از یک سبک برنامه‌نویسی منسجم معمولاً به خوانایی کمک می‌کند؛ اگر چه خوانایی چیزی بیش از فقط سبک برنامه‌نویسی است. عوامل زیادی که معمولاً دخالتی در توانایی رایانه برای ترجمه مناسب و اجرای بهتر برنامه ندارند، به خوانایی کمک می‌کنند. بعضی از این عوامل این‌ها هستند:بلوک بندی متفاوت (فاصله سفید)یادآورهاتکه‌تکه کردن نوشته‌های طولانیقواعد نامگذاری برای اشیا (مثل متغیرها، کلاسها، روال‌ها و غیره)جنبه‌های دیداری برای این کار (مثل تورفتگی، شکستن خطوط، علامت‌گذاری رنگی و مانند اینها) معمولاً به وسیله ویرایشگر کد منبع فراهم می‌شود، اما جنبه‌های محتوایی بازتابی از استعداد و توانایی‌های برنامه‌نویس است.زبانهای برنامه‌نویسی دیداری متعددی با این منظور توسعه داده شده‌اند تا بتوانند از روش‌های غیر سنتی برای ارائه کد و تصویر استفاده کنند. محیطهای یکپارچه توسعه نرم‌افزار (IDEها) می‌خواهند تا تمام این گونه کمک‌ها را به شکل یکپارچه ارائه کنند. تکنیکهایی برای بازسازی کد می‌تواند خوانایی را افزایش دهد.پیچیدگی الگوریتمی[ویرایش]محیطهای دانشگاهی و همچنین مهندسین فعال در برنامه‌نویسی هر دو عمیقاً به دنبال کشف و تکمیل الگوریتم‌های کارآمد تر برای گروه مشکلات مشخص شده هستند. برای نیل به این هدف الگوریتم‌ها در ترتیب‌هایی طبقه‌بندی می‌شوند که به عنوان نماد O بزرگ خوانده می‌شوند. این طبقه‌بندی نشانگر استفاده الگوریتم از منابع، مثل زمان اجرا یا انباشت حافظه در ازای اندازه یک داده وارده است.برنامه نویسان حرفه‌ای با گستره‌ای از الگوریتم‌های خوب سازمان یافته آشنایی دارند و پیچیدگی‌های مخصوص آن‌ها را می‌دانند و در نتیجه از این دانسته‌ها برای انتخاب الگوریتم‌های مناسب برای شرایط مورد نظر خود، استفاده می‌کنند.کاربرد الگوریتم و روند‌نما در برنامه‌نویسی[ویرایش]یکی از مهم‌ترین پیش‌نیازهای برنامه‌نویسی اطلاع داشتن از نحوهٔ حل مسئله و الگوریتم‌های برنامه‌نویسی است، الگوریتم‌ها به صورت خاص نحوهٔ حل و منطق زبان برنامه‌نویسی را بیان می‌کنند، نمای تصویری الگوریتم را روندنما می‌نامند، پس از نوشتن یک الگوریتم کامل برنامه‌نویسی می‌توان اقدام به رسم روندنما کرد تا نمود بصری الگوریتم به خوبی نمایان گردد.[۳]روش‌ها[ویرایش]قدم اول در فرایند توسعه بیشتر نرم‌افزارها به شکل معمول شامل بررسی نیازمندی‌ها، سپس آزمایش برای تشخیص الگوی متغیرها، اجرا و سپس حذف خرابی‌ها (اشکال زدایی) است. راه‌های مختلفی برای رسیدن به هر کدام از این وظایف وجود دارند. یک راه پرطرفدار برای تحلیل نیازمندی‌ها تحلیل مورد کاربردی است. بسیاری از برنامه نویسان از شکل توسعه چابک نرم‌افزاری استفاده می‌کنند؛ در این روش مراحل مختلف توسعه نرم‌افزار به شکل چرخه‌های کوتاه با هم ترکیب می‌شوند به‌طوری‌که هر کدام از این چرخه‌ها فقط چند هفته طول بکشند. این در مقابل روش معمول است که ممکن است چند سال زمان ببرد. روش‌های خیلی زیادی برای روند توسعه برنامه‌ها وجود دارند.محبوب‌ترین زبان در برنامه‌نویسی[ویرایش]تعیین اینکه محبوب‌ترین زبان برنامه‌نویسی مدرن کدام است کار بسیار مشکلی است. بعضی از زبان‌ها در کاربردهای خاصی محبوب است و بعضی دیگر مرتباً در نوشتن کاربردهای گوناگون استفاده می‌شود. روش‌های اندازه‌گیری محبوبیت زبان شامل موارد زیر می‌باشد: شمردن تعداد آگهی‌های اشتغال و توجه به یک زبان، تعداد کتاب‌های آموزشی فروخته شده در مورد یک زبان، تخمین تعداد خطوط کد نوشته شده در یک زبان. که می‌توان با استفاده سوابق کاری ایجاد شده با نرم‌افزارهای برنامه‌نویسی، زبان برنامه ویژوال بیسیک را جز محبوب‌ترین زبان یاد کرد.اشکال زدایی[ویرایش]اشکال زدایی وظیفه بسیار مهمی در فرایند توسعه نرم‌افزار می‌باشد، زیرا یک برنامه غلط می‌تواند پیامدهای مهمی برای کاربر خود داشته باشد. بعضی از زبان‌ها بیشتر در معرض برخی اشتباهات می‌باشند، به خاطر خصوصیاتشان نیاز به بررسی بیشتر کامپایلر نسبت به زبان‌های دیگر ندارند.کاربرد زبان برنامه‌نویسی[ویرایش]اجرا و عملی ساختن الگوریتم‌های انتزاعی وابسته به هم به‌وسیله تولید یک برنامه رایانه‌ای مشخص با ابزار زبان برنامه‌نویسی ممکن است.نمونه یک برنامه[ویرایش]یک برنامهٔ ساده در زبان برنامه‌نویسی Basic که از ساده‌ترین زبان‌های برنامه‌نویسی است می‌تواند به شکل زیر باشد:REM MY FIRST TRY TO COMMAND THIS MACHINE TO DO WHAT I LIKE PRINT &quotHELLO NEW WORLD!&quot ENDسطر نخست که با واژه کلیدی "REM" آغاز شده و از سوی برنامهٔ واسط در نظر گرفته نمی‌شود و تنها برای نگاه داشتن یک توضیح یا مانند آن برای خود برنامه‌نویس است. سطر دوم با واژه کلیدی "PRINT" به دستگاه فرمان می‌دهد تا نوشته "HELLO NEW WORLD!" ("سلام دنیای نو!") را روی نمایشگر بنویسد (چاپ کند). سطر آخر پایان فرامین و برنامه را به ماشین اطلاع می‌دهد.پس از نوشتن یک برنامه مانند بالا، برنامهٔ مترجم (در اینجا Basic) دستورها را تبدیل به فرامینی می‌کند که لایه زیرین، که ممکن است همان سخت‌افزار باشد، می‌تواند آن‌ها را اجرا کند.برای راحت‌تر شدن کدنویسی (برنامه‌نویسی) از نرم‌افزارهای مختلفی وابسته به زبان ان استفاده می‌کنند به عنوان مثال برای کدنویسی به زبان c# از نرم‌افزار visual studio, sql server... استفاده می‌شود.پارادایم‌ها[ویرایش]مقاله اصلی: پارادایم برنامه‌نویسیزبان‌های برنامه‌نویسی گوناگون براساس قابلیت‌های در نظر گرفته شده از شیوهٔ خط‌های مختلف استفاده می‌کنند. موارد ریزتری مانند چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبان‌های مختلف متفاوت است. علاوه بر این‌ها، مفاهیمی متفاوت از (اجرای) یک برنامه تصور شده‌اند که پارادایم یا الگو نام دارند.زبان‌های برنامه‌نویسی[ویرایش]مقاله اصلی: زبان برنامه‌نویسیزبان‌های متعدد برنامه‌نویسی وجود دارند که هر کدام از آن‌ها سبک‌های خاصی را پشتیبانی می‌کنند . انتخاب زبان برنامه‌نویسی مورد نظر بر اساس ملاحظات متعددی صورت می‌گیرد: مانند سیاست شرکت، مناسب بودن برای وظیفه در نظر گرفته شده، موجود بودن بسته‌های برنامه از پیش آماده شده یا نظرات شخصی. به شکل ایده‌آل مناسب‌ترین زبان برنامه‌نویسی برای کاربرد مورد نظر که در دسترس باشد، انتخاب می‌شود. موضوعاتی که باعث می‌شوند از این وضعیت ایده‌آل فاصله گرفته شوند شامل موضوعاتی مانند یافتن تعداد کافی برنامه نویسان ماهر که بتوانند تیم کاری تشکیل دهند، در دسترس بودن کامپایلرهای مناسب برای زبان مورد نظر، کارایی برنامه‌های نوشته شده با زبان مورد نظر، است.زبان‌های برنامه‌نویسی در طیفی بین زبان‌های "سطح پائین " تا "زبان‌های سطح بالاً قرار می‌گیرند. زبان‌های سطح پائین معمولاً به زبان ماشین نزدیکتر هستند و سریعتر اجرا می‌شوند، در مقابل زبان‌های سطح بالا خلاصه تر و برای کاربرد آسان‌تر هستند ولی با سرعت کمتری اجرا می‌شوند. کد نویسی با زبان‌های سطح بالا معمولاً آسان‌تر از کد نویسی با زبان‌های سطح پائین هستند.آلن داونی در کتاب " چگونه به شکل یک استاد رایانه فکر کنیم " می‌نویسد:جزئیات در زبان‌های برنامه‌نویسی مختلف متفاوت به نظر می‌رسند ولی تعدادی از ساختارهای اساسی در همه زبان‌های برنامه‌نویسی یکسان هستند:ورودی: داده‌ها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم می‌کند.خروجی: اطلاعات را روی صفحه تصویر نشان می‌دهد، به یک فایل می‌فرستد یا به دستگاه‌های دیگری انتقال می‌دهد.محاسبات: اعمال محاسباتی اساسی مثل جمع و ضرب را انجام می‌دهد.حالت‌های شرطی: شرط‌های مشخصی را کنترل می‌کند و بر اساس آن رشته مناسبی از عبارات را اجرا می‌کند.حلقه: بعضی اعمال را به شکل تکراری انجام می‌دهد، معمولاً با استفاده از تعدادی از متغیرها این کار انجام می‌شود.بسیاری از زبان‌های برنامه‌نویسی مکانیسم‌هایی را برای استفاده از کتابخانه‌های مشترک فراهم می‌کنند. توابعی در این کتابخانه‌ها بر اساس الگوهای مناسب اجرایی ایجاد می‌شوند (مانند روش‌های انتقال آرگومان‌ها) و سپس می‌توان از این توابع در زبان‌های متعدد برنامه‌نویسی استفاده کرد.منبع: ویکیپدیا