برنامه‌نویسی رایانه‌ای
برنامه‌سازی رایانه‌ای یا برنامه‌نویسی رایانه‌ای همان فرایند طراحی و ساخت یک برنامه رایانه‌ای اجراپذیر برای به‌دست‌آوردن یک نتیجه رایانشی خاص، یا انجام یک عمل خاص است. برنامه‌نویسی شامل عمل‌هایی مثل: تحلیل، ایجاد الگوریتم‌ها، رخ‌نمانگاری دقت الگوریتم‌ها و مصرف منابع، و پیاده‌سازی آن الگوریتم‌ها به یک زبان برنامه‌نویسی انتخاب شده‌است (که معمولاً به آن کدگذاری (کدینگ) گفته می‌شود). کد منبع یک برنامه به یک یا بیشتر زبان نوشته می‌شود که این زبان برای «برنامه‌نویس» قابل فهم است (به جای کد ماشین که به صورت مستقیم توسط واحد پردازش مرکزی اجرا می‌شود). هدف از برنامه‌نویسی، پیداکردن ترتیبی از دستورالعمل‌ها است که انجام یک عمل را در یک رایانه، معمولاً برای حل‌کردن یک برنامه داده شده، خودکارسازی می‌کند (که می‌تواند تا حد یک سیستم‌عامل پیچیده باشد). بنابراین، یک برنامه‌نویسی حرفه‌ای نیاز به مهارت در چندین موضوع متفاوت دارد، که شامل دانش ، الگوریتم‌های خاص، و منطق صوری است.
برنامه‌نویسی به‌طور خلاصه یعنی تعیین یک سری دستور برای اجرا شدن توسط کامپیوتر به منظور رسیدن به هدف دلخواه.
دستگاه‌های قابل برنامه‌ریزی قرن هاست که وجود دارند. در اوایل قرن نهم میلادی، یک ترتیب سنج موسیقی قابل برنامه‌ریزی توسط برادران فارسی بانو موسی اختراع شد که یک دستگاه پخش خودکار فلوت را در کتاب دستگاه‌های مبتکر توصیف کرد. در سال ۱۲۰۶میلادی، مهندس کوردالجزاری یک دستگاه درام قابل برنامه‌ریزی را اختراع کرد که در آن می‌توان از اتوماتیک مکانیکی موسیقی برای پخش ریتم‌های مختلف و الگوهای طبل، از طریق میخ‌ها و کامپ‌ها استفاده کرد. در سال ۱۸۰۱، با تغییر دادن برنامه «ژاکارد»، بافندگی ژاکارد می‌تواند بافتهای کاملاً متفاوتی تولید کند - مجموعه ای از کارتهای کارتن با سوراخهایی که در آنها وجود دارد.
الگوریتم‌های رمزگشایی و تحلیل رمز کد نیز قرن‌ها وجود داشته‌است. در قرن نهم میلادی، ریاضیدان عرب آل کندی، الگوریتم رمزنگاری را برای رمزگشایی کد رمزگذاری شده، در «دستنوشته در رمزگشایی پیام‌های رمزنگاری» شرح داد. او اولین توصیف رمزپزشکی را با استفاده از آنالیز فراوانی، اولین الگوریتم رمزگشایی کد ارائه داد.
اولین برنامه رایانه ای به‌طور کلی به سال ۱۸۴۳ مربوط می‌شود، هنگامی که Ada Lovelace، ریاضیدان، الگوریتمی را برای محاسبه دنباله ای از اعداد Bernoulli منتشر کرد، که قرار است توسط موتور تحلیلی چارلز بابیج انجام شود.
در دهه ۱۸۸۰ هرمان هالریت مفهوم ذخیره داده‌ها را به صورت قابل خواندن با دستگاه اختراع کرد. بعداً یک کنترل پنل (افزونه) به Tabulator Type 190 خود که به آن اضافه شده بود اجازه داد که برای مشاغل مختلف برنامه‌ریزی شود و تا اواخر دهه ۱۹۴۰ تجهیزات ضبط واحدی مانند IBM 602 و IBM 604 توسط پنل‌های کنترل به روش مشابهی برنامه‌ریزی شدند. اولین کامپیوترهای الکترونیکی با این حال، با مفهوم رایانه‌های برنامه ذخیره شده معرفی شده در سال ۱۹۴۹، هر دو برنامه و داده‌ها به همان شیوه در حافظه کامپیوتر ذخیره و دستکاری شدند.
کد ماشین زبان برنامه‌های اولیه بود که در مجموعه دستورالعمل‌های دستگاه خاص، غالباً به صورت دودویی نوشته شده‌است. به زودی زبانهای مونتاژ ایجاد شد که به برنامه‌نویس اجازه می‌دهد تا دستورالعمل‌ها را در قالب متن مشخص کند (به عنوان مثال، ADD X، TOTAL)، با اختصار برای هر کد عملیات و نام‌های معنی دار برای مشخص کردن آدرس‌ها. اما، از آنجا که یک زبان مونتاژ چیزی بیش از یک نشان دیگر برای یک زبان ماشین نیست، هر دو ماشین با مجموعه‌های مختلف دستورالعمل نیز دارای زبان‌های مونتاژ متفاوت هستند.
زبانهای سطح بالا روند تهیه یک برنامه را ساده‌تر و قابل فهم تر و محدودتر به سخت‌افزار زیرین می‌کردند. FORTRAN، اولین زبان سطح پرکاربرد برای اجرای عملی، در سال ۱۹۵۷ منتشر شد [۱۰] و بسیاری از زبان‌های دیگر به زودی توسعه یافتند - به ویژه، COBOL با هدف پردازش داده‌های تجاری و لیپ برای تحقیقات رایانه.
برنامه‌ها بیشتر با استفاده از کارتهای پانچ شده یا نوار کاغذی وارد می‌شدند. برنامه عصر رایانه را در عصر کارت پانچ ببینید. در اواخر دهه ۱۹۶۰، دستگاه‌های ذخیره‌سازی داده و پایانه‌های رایانه به اندازه کافی ارزان شدند که می‌توان برنامه‌ها را با تایپ کردن مستقیم به رایانه‌ها ایجاد کرد. ویرایشگرهای متن (خود برنامه‌ها) ساخته شده‌اند که اجازه می‌دهد تغییرات و اصلاحات بسیار آسانتر از کارتهای سوراخ شده انجام شود.
هر روشی که برای چگونگی اشکالاتی (نه باگ‌ها) را که ممکن است پیش بیایند، پیش‌بینی کرده‌است. این شامل حالت‌هایی مانند دریافت اطلاعات نادرست، نامناسب یا غلط می‌شود؛ همچنین کمبود منابعی مانند حافظه، سرویس‌های سیستم عامل یا اتصال به شبکه و سایر اشکالات مانند خطای کاربر یا اشکالات قطع برق نیز در این دسته قرار می‌گیرند.
در برنامه‌ریزی رایانه، خوانایی عبارت است از این که خواننده متن کد منبع بتواند هدف، جریان برنامه و عملکرد کد منبع را متوجه شود. این موضوع در مجموعه نیازهای کیفیتی شامل موارد قابلیت انتقال، کاربرد پذیری و نگهداشت پذیری می‌شود.
خوانایی خیلی مهم است به این علت که برنامه نویسان بیشترین وقتشان را به جای این که صرف نوشتن کد جدید بکنند، در زمینه درک و تغییر کد منبع موجود می‌کنند. کدهای ناخوانا معمولاً به خطا، نارسایی و کدهای تکراری ختم می‌شوند. یک تحقیق نشان داد که تغییرات جزئی و ساده‌ای برای خوانایی برنامه می‌تواند منجر به این شود که کد نهایی نوشته شده کوتاه‌تر شود و همچنین زمان فهم آن به‌طور قابل توجهی کاهش یابد.
پیروی از یک سبک برنامه‌نویسی منسجم معمولاً به خوانایی کمک می‌کند؛ اگر چه خوانایی چیزی بیش از فقط سبک برنامه‌نویسی است. عوامل زیادی که معمولاً دخالتی در توانایی رایانه برای ترجمه مناسب و اجرای بهتر برنامه ندارند، به خوانایی کمک می‌کنند. بعضی از این عوامل این‌ها هستند: جنبه‌های دیداری برای این کار (مثل تورفتگی، شکستن خطوط، علامت‌گذاری رنگی و مانند اینها) معمولاً به وسیله ویرایشگر کد منبع فراهم می‌شود، اما جنبه‌های محتوایی بازتابی از استعداد و توانایی‌های برنامه‌نویس است.
زبانهای برنامه‌نویسی دیداری متعددی با این منظور توسعه داده شده‌اند تا بتوانند از روش‌های غیر سنتی برای ارائه کد و تصویر استفاده کنند. محیطهای یکپارچه توسعه نرم‌افزار (IDEها) می‌خواهند تا تمام این گونه کمک‌ها را به شکل یکپارچه ارائه کنند. تکنیکهایی برای بازسازی کد می‌تواند خوانایی را افزایش دهد.
محیط‌های دانشگاهی و همچنین مهندسین فعال در برنامه‌نویسی هر دو عمیقاً به دنبال کشف و تکمیل الگوریتم‌های کارآمد تر برای گروه مشکلات مشخص شده هستند. برای نیل به این هدف الگوریتم‌ها در ترتیب‌هایی طبقه‌بندی می‌شوند که به عنوان نماد O بزرگ خوانده می‌شوند. این طبقه‌بندی نشانگر استفاده الگوریتم از منابع، مثل زمان اجرا یا انباشت حافظه در ازای اندازه یک داده وارده است.
برنامه نویسان حرفه‌ای با گستره‌ای از الگوریتم‌های خوب سازمان یافته آشنایی دارند و پیچیدگی‌های مخصوص آن‌ها را می‌دانند و در نتیجه از این دانسته‌ها برای انتخاب الگوریتم‌های مناسب برای شرایط مورد نظر خود، استفاده می‌کنند.
"برنامه نویسی رایانه برای بازی شطرنج" مقاله ای در سال ۱۹۵۰ بود که یک الگوریتم "minimax" را که بخشی از تاریخ پیچیدگی الگوریتمی است ارزیابی می‌کند. دوره ای در مورد IBM's Deep Blue (کامپیوتر شطرنج) بخشی از برنامه درسی علوم کامپیوتر در دانشگاه استنفورد است.
یکی از مهم‌ترین پیش‌نیازهای برنامه‌نویسی اطلاع داشتن از نحوهٔ حل مسئله و الگوریتم‌های برنامه‌نویسی است، الگوریتم‌ها به صورت خاص نحوهٔ حل و منطق زبان برنامه‌نویسی را بیان می‌کنند، نمای تصویری الگوریتم را روندنما می‌نامند، پس از نوشتن یک الگوریتم کامل برنامه‌نویسی می‌توان اقدام به رسم روندنما کرد تا نمود بصری الگوریتم به خوبی نمایان گردد.
قدم اول در فرایند توسعه بیشتر نرم‌افزارها به شکل معمول شامل بررسی نیازمندی‌ها، سپس آزمایش برای تشخیص الگوی متغیرها، اجرا و سپس حذف خرابی‌ها (اشکال زدایی) است. راه‌های مختلفی برای رسیدن به هر کدام از این وظایف وجود دارند. یک راه پرطرفدار برای تحلیل نیازمندی‌ها تحلیل مورد کاربردی است. بسیاری از برنامه نویسان از شکل توسعه چابک نرم‌افزاری استفاده می‌کنند؛ در این روش مراحل مختلف توسعه نرم‌افزار به شکل چرخه‌های کوتاه با هم ترکیب می‌شوند به‌طوری‌که هر کدام از این چرخه‌ها فقط چند هفته طول بکشند. این در مقابل روش معمول است که ممکن است چند سال زمان ببرد. روش‌های خیلی زیادی برای روند توسعه برنامه‌ها وجود دارند.
تعیین اینکه محبوب‌ترین زبان برنامه‌نویسی مدرن کدام است کار بسیار مشکلی است. بعضی از زبان‌ها در کاربردهای خاصی محبوب است و بعضی دیگر مرتباً در نوشتن کاربردهای گوناگون استفاده می‌شود. روش‌های اندازه‌گیری محبوبیت زبان شامل موارد زیر می‌باشد: شمردن تعداد آگهی‌های اشتغال و توجه به یک زبان، تعداد کتاب‌های آموزشی فروخته شده در مورد یک زبان، تخمین تعداد خطوط کد نوشته شده در یک زبان؛ که امروز می‌توان زبان برنامه‌نویسی پایتون و جاوا اسکریپت از محبوب‌ترین زبان‌های برنامه‌نویسی جهان دانستند؛ بخصوص پایتون که به دلیل سادگی و کارایی بالا در زمینه‌های مختلف افراد زیادی رو به خود جذب کرده.
اولین قدم در اکثر فرایندهای رسمی توسعه نرم‌افزار، تجزیه و تحلیل الزامات است، و پس از آن آزمایش برای تعیین مدل‌سازی ارزش، پیاده‌سازی و حذف نقص (اشکال زدایی) انجام می‌شود. برای هر یک از این کارها رویکردهای مختلفی وجود دارد. یکی از رویکردهای محبوب برای تجزیه و تحلیل الزامات، استفاده از آنالیز Case است. بسیاری از برنامه نویسان از اشکال توسعه نرم‌افزار Agile استفاده می‌کنند که مراحل مختلف توسعه نرم‌افزار رسمی در چرخه‌های کوتاه که چند هفته به طول می‌انجامند در کنار هم قرار گرفته‌اند. رویکردهای زیادی برای فرایند توسعه نرم‌افزار وجود دارد.
تکنیک‌های محبوب سازی مدل‌سازی شامل تحلیل و طراحی شی گرا (OOAD) و معماری مدل محور (MDA) است. زبان مدل‌سازی متحد (UML) علامتی است که برای OOAD و MDA استفاده می‌شود.
تکنیک مشابهی که برای طراحی بانک اطلاعاتی مورد استفاده قرار می‌گیرد، مدل‌سازی رابطه-رابطه (Entity-Modelation) (مدل‌سازی ER) است.
تکنیک‌های اجرای شامل زبان‌های ضروری (شی گرا یا رویه ای)، زبان‌های کاربردی و زبان‌های منطقی است.
تعیین اینکه محبوب‌ترین زبانهای برنامه‌نویسی مدرن چیست، بسیار دشوار است. روشهای سنجش محبوبیت زبان برنامه‌نویسی عبارتند از: شمارش تعداد آگهی‌های شغلی که به آن زبان اشاره می‌کنند، تعداد کتاب‌های فروخته شده و دوره‌های آموزش زبان (این اهمیت بیش از حد زبان‌های جدید را بالاتر می‌برد) و تخمین تعداد خطوط موجود کد نوشته شده به زبان (این کمترین تعداد کاربران زبانهای تجاری مانند COBOL را دست کم می‌گیرد).
برخی از زبانها برای انواع خاصی از برنامه‌ها بسیار محبوب هستند، در حالی که برخی از زبان‌ها به‌طور مرتب برای نوشتن انواع مختلف برنامه‌ها مورد استفاده قرار می‌گیرند. به عنوان مثال، COBOL هنوز هم در مراکز داده‌های شرکتی غالباً در رایانه‌های اصلی بزرگ، Fortran در برنامه‌های مهندسی، زبان‌های اسکریپت در توسعه وب و C در نرم‌افزارهای تعبیه شده قوی است. بسیاری از برنامه‌ها از ترکیبی از چندین زبان در ساخت و استفاده خود استفاده می‌کنند. زبانهای جدید عموماً در حدود نحو یک زبان قبلی طراحی شده‌اند که قابلیت‌های جدیدی نیز به آن اضافه شده‌است (به عنوان مثال ++C جهت‌یابی به شی را به C اضافه می‌کند، و جاوا مدیریت حافظه و بایت کد را به ++C اضافه می‌کند، اما در نتیجه بازده و توانایی کم را از دست می‌دهد. دستکاری ساده)
اشکال زدایی کار بسیار مهمی در فرایند توسعه نرم‌افزار است زیرا نقص در یک برنامه می‌تواند عواقب قابل توجهی برای کاربران آن داشته باشد. بعضی از زبانها بیشتر مستعد ابتلا به برخی از خطاها هستند زیرا مشخصات آنها به کامپایلرها نیاز ندارد تا به همان اندازه سایر زبانها بررسی کنند. استفاده از ابزار تجزیه و تحلیل کد استاتیک می‌تواند به تشخیص برخی از مشکلات احتمالی کمک کند. به‌طور معمول اولین مرحله برای اشکال زدایی تلاش برای تولید مثل مشکل است. این می‌تواند یک کار غیر مهم باشد، به عنوان مثال با فرایندهای موازی یا برخی از اشکالات نرم‌افزاری غیرمعمول. همچنین، شرایط خاص کاربر و تاریخچه استفاده می‌تواند تولید مشکل را دشوار کند.
پس از تولید مجدد اشکال، ممکن است ورودی برنامه ساده شود تا اشکال زدایی آسانتر شود. به عنوان مثال، یک اشکال در کامپایلر می‌تواند هنگام عبور از فایل منبع بزرگ خراب شود. با این حال، پس از ساده‌سازی مورد آزمایشی، فقط چند خط از پرونده منبع اصلی می‌تواند برای تکثیر همان تصادف کافی باشد. چنین ساده‌سازی می‌تواند به صورت دستی و با استفاده از روش تقسیم و تسخیر انجام شود. برنامه‌نویس سعی خواهد کرد که برخی از قسمت‌های تست اصلی را حذف کند و بررسی کند که آیا این مشکل هنوز وجود دارد یا خیر. هنگام اشکال زدایی مشکل در یک رابط کاربری گرافیکی، برنامه‌نویس می‌تواند سعی کند برخی از تعامل‌های کاربر را از توضیحات اصلی مسئله جستجو کند و بررسی کند که آیا اقدامات دیگر برای ظاهر اشکالات وجود دارد یا خیر.
اشکال زدایی اغلب با IDE‌هایی مانند Eclipse , Visual Studio , Xcode , Kdevelop , NetBeans و Code :: Blocks انجام می‌شود. از اشکال زدایی‌های مستقل مانند GDB نیز استفاده می‌شوند و اینها معمولاً کمتر از یک محیط بصری استفاده می‌کنند، معمولاً با استفاده از یک خط فرمان. برخی از ویرایشگرهای متنی مانند Emacs به GDB اجازه می‌دهند تا از طریق آنها فراخوانی شود تا محیط بصری را فراهم کند.
یک برنامهٔ ساده در زبان برنامه‌نویسی Basic که از ساده‌ترین زبان‌های برنامه‌نویسی است می‌تواند به شکل زیر باشد:
سطر نخست که با واژه کلیدی "REM" آغاز شده و از سوی برنامهٔ واسط در نظر گرفته نمی‌شود و تنها برای نگاه داشتن یک توضیح یا مانند آن برای خود برنامه‌نویس است. سطر دوم با واژه کلیدی "PRINT" به دستگاه فرمان می‌دهد تا نوشته "HELLO NEW WORLD!" ("سلام دنیای نو!") را روی نمایشگر بنویسد ("چاپ" کند). سطر آخر پایان فرامین و برنامه را به ماشین اطلاع می‌دهد.
پس از نوشتن یک برنامه مانند بالا، برنامهٔ مترجم (در اینجا Basic) دستورها را تبدیل به فرامینی می‌کند که لایه زیرین، که ممکن است همان سخت‌افزار باشد، می‌تواند آن‌ها را "اجرا" کند.
برای راحت‌تر شدن کدنویسی (برنامه‌نویسی) از نرم‌افزارهای مختلفی وابسته به زبان آن استفاده می‌کنند که به آن‌ها محیط یکپارچه توسعه نرم‌افزار گفته می‌شود به عنوان مثال برای کدنویسی به زبان سی شارپ از نرم‌افزار مایکروسافت ویژوال استودیو استفاده می‌شود.
زبان‌های برنامه‌نویسی گوناگون براساس قابلیت‌های در نظر گرفته شده از شیوهٔ خط‌های مختلف استفاده می‌کنند. موارد ریزتری مانند چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبان‌های مختلف متفاوت است. علاوه بر این‌ها، مفاهیمی متفاوت از (اجرای) یک برنامه تصور شده‌اند که پارادایم یا الگو نام دارند.
مقاله اصلی: زبان برنامه‌نویسی زبان‌های مختلف برنامه‌نویسی وجود دارند که هر کدام از آن‌ها سبک‌های خاصی را پشتیبانی می‌کنند (به نام پارادایم‌های برنامه‌نویسی). انتخاب زبان مورد استفاده، مورد توجه بسیاری از مباحث از قبیل خط مشی شرکت، مناسب بودن در انجام کار، در دسترس بودن بسته‌های شخص ثالث یا ترجیح شخصی است. در حالت ایده‌آل، زبان برنامه‌نویسی که برای کار مورد نظر مناسب‌تر باشد، انتخاب می‌شود. تجارت از این ایده‌آل شامل یافتن برنامه نویسان به اندازه کافی است که زبان را برای ایجاد یک تیم می‌شناسند، در دسترس بودن کامپایلرها برای آن زبان و کارایی که برنامه‌های آنها را با یک زبان خاص اجرا می‌کنند. زبان‌ها طیف تقریبی را از «سطح پایین» تا «سطح بالا» تشکیل می‌دهند. زبان‌های «سطح پایین» به‌طور معمول بیشتر دستگاه محور و سریع‌تر اجرا می‌شوند، و به زبان ماشین نزدیک‌تر هستند در حالی که زبان‌های «سطح بالا» انتزاعی‌تر و آسان‌تر برای استفاده هستند اما سرعت کمتری دارند. معمولاً کدگذاری به زبان‌های «سطح بالا» از زبان‌های «سطح پایین» ساده‌تر است.
آلن داونی در کتاب «چگونه به شکل یک استاد رایانه فکر کنیم» می‌نویسد:
جزئیات در زبان‌های برنامه‌نویسی مختلف متفاوت به نظر می‌رسند ولی تعدادی از ساختارهای اساسی در همه زبان‌های برنامه‌نویسی یکسان هستند:
بسیاری از زبان‌های برنامه‌نویسی مکانیسم‌هایی را برای تماس با توابع ارائه شده توسط کتابخانه‌های مشترک فراهم می‌کنند. مشروط بر اینکه توابع موجود در یک کتابخانه از کنوانسیون‌های زمان اجرا مناسب پیروی کنند (مثلاً روش گذراندن آرگومان‌ها)، ممکن است این توابع به هر زبان دیگری نوشته شود.
چند مورد از زبان‌های برنامه‌نویسی: سی شارپ (#C)، سی (C)، ++C، پایتون (Python)، جاوا (Java)، جاوا اسکریپت (Java Script) و …؛ اینها فقط چند نمونه از زبان‌های برنامه‌نویسی هستند.
نوشتار اصلی: برنامه‌نویس
همچنین ببینید: توسعه دهنده نرم‌افزار، مهندس نرم‌افزار
برنامه نویسان رایانه کسانی هستند که نرم‌افزار رایانه ای می‌نویسند. مشاغل آنها معمولاً شامل موارد زیر است: