برنامهنویسی رایانه (به انگلیسی: Computer Programming) (یا به اختصار برنامهنویسی) بهطور کلی به فرایند نوشتن و توسعه نرمافزار کامپیوتر گفته میشود. به بیان جزئیتر برنامهنویسی رایانه به معنای فرایند تبدیل و سوق دادن فرمول حل یک مسئله یا الگوریتم محاسباتی، به یک برنامه قابل اجرا (نرمافزار) میباشد.
معنای برنامهنویسی رایانه در فرهنگ عامه میتواند به تمامی فرایند توسعه نرمافزار (به انگلیسی: Software Development) اطلاق گردد که شامل فعالیتهای مختلفی همچون بررسی، توسعه، درک، طراحی الگوریتم؛ پیادهسازی، تست، اشکال زدایی و نگهداری نرمافزارهای رایانهای نیز میشود. همچنین برنامهنویس به شخصی اطلاق میگردد که عمل برنامهنویسی و توسعه نرمافزار را انجام میدهد.
برنامهنویسی مستلزم فعالیتهایی همچون تحلیل و درک مسئله است و عموماً حل چنین مسایلی منجر به ایجاد یک الگوریتم میشود، بازبینی نیازمندیهای الگوریتم که شامل صحت و میزان منابع مصرفی است، پیادهسازی (که معمولاً به عنوان کدینگ از آن یاد میشود) این الگوریتم در یک زبان برنامهنویسی مقصد، تست کردن، اشکال زدایی، نگهداری کد منبع، پیادهسازی سیستم ساخت (build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامههای کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده میشود. کد منبع به یک یا چند زبان برنامهنویسی، مانند ویژوال بیسیک، جاوااسکریپت، اسمالتاک، پایتون، جاوا، سی شارپ، سی پلاسپلاس و سی نوشته شدهاست.
موضوع دستگاههایی که به دنبالهای از دستورالعملهای از قبل تعریف شده عمل میکند برمیگردد به Greek Mythology.
هر روشی که برای برنامهنویسی به کار برود، برنامه نهایی باید دارای تعدادی مشخصات پایه باشد. مشخصات زیر تعدادی از مهمترین آنها هستند.
در برنامهریزی رایانه، خوانایی عبارت است از این که خواننده متن کد منبع بتواند هدف، جریان برنامه و عملکرد کد منبع را متوجه شود. این موضوع در مجموعه نیازهای کیفیتی شامل موارد قابلیت انتقال، کاربرد پذیری و نگهداشت پذیری میشود.
خوانایی خیلی مهم است به این علت که برنامه نویسان بیشترین وقتشان را به جای این که صرف نوشتن کد جدید بکنند، در زمینه درک و تغییر کد منبع موجود میکنند. کدهای ناخوانا معمولاً به خطا، نارسایی و کدهای تکراری ختم میشوند. یک تحقیق[۲] نشان داد که تغییرات جزئی و سادهای برای خوانایی برنامه میتواند منجر به این شود که کد نهایی نوشته شده کوتاهتر شود و همچنین زمان فهم آن بهطور قابل توجهی کاهش یابد.
پیروی از یک سبک برنامهنویسی منسجم معمولاً به خوانایی کمک میکند؛ اگر چه خوانایی چیزی بیش از فقط سبک برنامهنویسی است. عوامل زیادی که معمولاً دخالتی در توانایی رایانه برای ترجمه مناسب و اجرای بهتر برنامه ندارند، به خوانایی کمک میکنند. بعضی از این عوامل اینها هستند:
جنبههای دیداری برای این کار (مثل تورفتگی، شکستن خطوط، علامتگذاری رنگی و مانند اینها) معمولاً به وسیله ویرایشگر کد منبع فراهم میشود، اما جنبههای محتوایی بازتابی از استعداد و تواناییهای برنامهنویس است.
زبانهای برنامهنویسی دیداری متعددی با این منظور توسعه داده شدهاند تا بتوانند از روشهای غیر سنتی برای ارائه کد و تصویر استفاده کنند. محیطهای یکپارچه توسعه نرمافزار (IDEها) میخواهند تا تمام این گونه کمکها را به شکل یکپارچه ارائه کنند. تکنیکهایی برای بازسازی کد میتواند خوانایی را افزایش دهد.
محیطهای دانشگاهی و همچنین مهندسین فعال در برنامهنویسی هر دو عمیقاً به دنبال کشف و تکمیل الگوریتمهای کارآمد تر برای گروه مشکلات مشخص شده هستند. برای نیل به این هدف الگوریتمها در ترتیبهایی طبقهبندی میشوند که به عنوان نماد O بزرگ خوانده میشوند. این طبقهبندی نشانگر استفاده الگوریتم از منابع، مثل زمان اجرا یا انباشت حافظه در ازای اندازه یک داده وارده است.
برنامه نویسان حرفهای با گسترهای از الگوریتمهای خوب سازمان یافته آشنایی دارند و پیچیدگیهای مخصوص آنها را میدانند و در نتیجه از این دانستهها برای انتخاب الگوریتمهای مناسب برای شرایط مورد نظر خود، استفاده میکنند.
یکی از مهمترین پیشنیازهای برنامهنویسی اطلاع داشتن از نحوهٔ حل مسئله و الگوریتمهای برنامهنویسی است، الگوریتمها به صورت خاص نحوهٔ حل و منطق زبان برنامهنویسی را بیان میکنند، نمای تصویری الگوریتم را روندنما مینامند، پس از نوشتن یک الگوریتم کامل برنامهنویسی میتوان اقدام به رسم روندنما کرد تا نمود بصری الگوریتم به خوبی نمایان گردد.[۳]
قدم اول در فرایند توسعه بیشتر نرمافزارها به شکل معمول شامل بررسی نیازمندیها، سپس آزمایش برای تشخیص الگوی متغیرها، اجرا و سپس حذف خرابیها (اشکال زدایی) است. راههای مختلفی برای رسیدن به هر کدام از این وظایف وجود دارند. یک راه پرطرفدار برای تحلیل نیازمندیها تحلیل مورد کاربردی است. بسیاری از برنامه نویسان از شکل توسعه چابک نرمافزاری استفاده میکنند؛ در این روش مراحل مختلف توسعه نرمافزار به شکل چرخههای کوتاه با هم ترکیب میشوند بهطوریکه هر کدام از این چرخهها فقط چند هفته طول بکشند. این در مقابل روش معمول است که ممکن است چند سال زمان ببرد. روشهای خیلی زیادی برای روند توسعه برنامهها وجود دارند.
تعیین اینکه محبوبترین زبان برنامهنویسی مدرن کدام است کار بسیار مشکلی است. بعضی از زبانها در کاربردهای خاصی محبوب است و بعضی دیگر مرتباً در نوشتن کاربردهای گوناگون استفاده میشود. روشهای اندازهگیری محبوبیت زبان شامل موارد زیر میباشد: شمردن تعداد آگهیهای اشتغال و توجه به یک زبان، تعداد کتابهای آموزشی فروخته شده در مورد یک زبان، تخمین تعداد خطوط کد نوشته شده در یک زبان. که میتوان با استفاده سوابق کاری ایجاد شده با نرمافزارهای برنامهنویسی، زبان برنامه ویژوال بیسیک را جز محبوبترین زبان یاد کرد.
اشکال زدایی وظیفه بسیار مهمی در فرایند توسعه نرمافزار میباشد، زیرا یک برنامه غلط میتواند پیامدهای مهمی برای کاربر خود داشته باشد. بعضی از زبانها بیشتر در معرض برخی اشتباهات میباشند، به خاطر خصوصیاتشان نیاز به بررسی بیشتر کامپایلر نسبت به زبانهای دیگر ندارند.
اجرا و عملی ساختن الگوریتمهای انتزاعی وابسته به هم بهوسیله تولید یک برنامه رایانهای مشخص با ابزار زبان برنامهنویسی ممکن است.
یک برنامهٔ ساده در زبان برنامهنویسی Basic که از سادهترین زبانهای برنامهنویسی است میتواند به شکل زیر باشد:
REM MY FIRST TRY TO COMMAND THIS MACHINE TO DO WHAT I LIKE PRINT "HELLO NEW WORLD!" END
سطر نخست که با واژه کلیدی "REM" آغاز شده و از سوی برنامهٔ واسط در نظر گرفته نمیشود و تنها برای نگاه داشتن یک توضیح یا مانند آن برای خود برنامهنویس است. سطر دوم با واژه کلیدی "PRINT" به دستگاه فرمان میدهد تا نوشته "HELLO NEW WORLD!" ("سلام دنیای نو!") را روی نمایشگر بنویسد (چاپ کند). سطر آخر پایان فرامین و برنامه را به ماشین اطلاع میدهد.
پس از نوشتن یک برنامه مانند بالا، برنامهٔ مترجم (در اینجا Basic) دستورها را تبدیل به فرامینی میکند که لایه زیرین، که ممکن است همان سختافزار باشد، میتواند آنها را اجرا کند.
برای راحتتر شدن کدنویسی (برنامهنویسی) از نرمافزارهای مختلفی وابسته به زبان ان استفاده میکنند به عنوان مثال برای کدنویسی به زبان c# از نرمافزار visual studio, sql server... استفاده میشود.
مقاله اصلی: پارادایم برنامهنویسی
زبانهای برنامهنویسی گوناگون براساس قابلیتهای در نظر گرفته شده از شیوهٔ خطهای مختلف استفاده میکنند. موارد ریزتری مانند چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبانهای مختلف متفاوت است. علاوه بر اینها، مفاهیمی متفاوت از (اجرای) یک برنامه تصور شدهاند که پارادایم یا الگو نام دارند.
مقاله اصلی: زبان برنامهنویسی
زبانهای متعدد برنامهنویسی وجود دارند که هر کدام از آنها سبکهای خاصی را پشتیبانی میکنند . انتخاب زبان برنامهنویسی مورد نظر بر اساس ملاحظات متعددی صورت میگیرد: مانند سیاست شرکت، مناسب بودن برای وظیفه در نظر گرفته شده، موجود بودن بستههای برنامه از پیش آماده شده یا نظرات شخصی. به شکل ایدهآل مناسبترین زبان برنامهنویسی برای کاربرد مورد نظر که در دسترس باشد، انتخاب میشود. موضوعاتی که باعث میشوند از این وضعیت ایدهآل فاصله گرفته شوند شامل موضوعاتی مانند یافتن تعداد کافی برنامه نویسان ماهر که بتوانند تیم کاری تشکیل دهند، در دسترس بودن کامپایلرهای مناسب برای زبان مورد نظر، کارایی برنامههای نوشته شده با زبان مورد نظر، است.
زبانهای برنامهنویسی در طیفی بین زبانهای "سطح پائین " تا "زبانهای سطح بالاً قرار میگیرند. زبانهای سطح پائین معمولاً به زبان ماشین نزدیکتر هستند و سریعتر اجرا میشوند، در مقابل زبانهای سطح بالا خلاصه تر و برای کاربرد آسانتر هستند ولی با سرعت کمتری اجرا میشوند. کد نویسی با زبانهای سطح بالا معمولاً آسانتر از کد نویسی با زبانهای سطح پائین هستند.
آلن داونی در کتاب " چگونه به شکل یک استاد رایانه فکر کنیم " مینویسد:
جزئیات در زبانهای برنامهنویسی مختلف متفاوت به نظر میرسند ولی تعدادی از ساختارهای اساسی در همه زبانهای برنامهنویسی یکسان هستند:
بسیاری از زبانهای برنامهنویسی مکانیسمهایی را برای استفاده از کتابخانههای مشترک فراهم میکنند. توابعی در این کتابخانهها بر اساس الگوهای مناسب اجرایی ایجاد میشوند (مانند روشهای انتقال آرگومانها) و سپس میتوان از این توابع در زبانهای متعدد برنامهنویسی استفاده کرد.
منبع: ویکیپدیا