موضوع مقاله: برنامه‌نویسی رایانه‌ای | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # برنامه‌نویسی رایانه‌ای | مقدمه: برنامه‌نویسی رایانه‌ای همان فرایند طراحی و توسعه یک برنامه رایانه‌ای اجراپذیر برای به‌دست‌آوردن یک نتیجه رایانشی خاص، یا انجام یک عمل خاص می‌باشد. | ## بخش 1: برنامه‌نویسی رایانه‌ای | کد منبع یک برنامه به یک یا بیش از یک زبان نوشته می‌شود که این زبان برای «برنامه‌نویس» قابل فهم است (به جای کد ماشین که به صورت مستقیم توسط واحد پردازش مرکزی اجرا می‌شود). هدف از برنامه‌نویسی، پیداکردن ترتیبی از دستورالعمل‌ها است که انجام یک عمل را در یک رایانه خودکارسازی می‌کند. این دستورالعمل ها معمولاً برای حل‌کردن یک برنامه داده می شوند و می‌تواند تا حد یک سیستم‌عامل پیچیده توسعه پیدا کنند. بنابراین، یک برنامه‌نویسی حرفه‌ای نیاز به مهارت در چندین موضوع متفاوت دارد که شامل دانش دامنه کاربردی، الگوریتم‌های خاص و منطق صوری است. برنامه‌نویسی به‌طور خلاصه یعنی تعیین یک سری دستور برای اجرا شدن توسط رایانه به منظور رسیدن به هدفی دلخواه. در اوایل قرن نهم میلادی، یک ترتیب سنج موسیقی قابل برنامه‌ریزی توسط برادران فارسی بانو موسی اختراع شد که یک دستگاه پخش خودکار فلوت را در کتاب دستگاه‌های مبتکر توصیف کرد. در سال ۱۲۰۶میلادی، مهندس کوردالجزاری یک دستگاه درام قابل برنامه‌ریزی را اختراع کرد که در آن می‌توان از اتوماتیک مکانیکی موسیقی برای پخش ریتم‌های مختلف و الگوهای طبل، از طریق میخ‌ها و کامپ‌ها استفاده کرد. در سال ۱۸۰۱، با تغییر دادن برنامه «ژاکارد»، بافندگی ژاکارد می‌تواند بافتهای کاملاً متفاوتی تولید کند - مجموعه ای از کارتهای کارتن با سوراخهایی که در آنها وجود دارد. در قرن نهم میلادی، ریاضیدان عرب، آل کندی، برای رمزگشایی کدهای رمزگذاری شده، الگوریتم رمزنگاری را در «دست نوشته در رمزگشایی پیام‌های رمزنگاری» شرح داد. او نخستین توصیف رمز پزشکی را با استفاده از آنالیز فراوانی، نخستین الگوریتم رمزگشایی کد، ارائه داد. در دهه ۱۸۸۰ هرمان هالریت مفهوم ذخیره داده‌ها را به صورتی که قابل خواندن با دستگاه باشند اختراع کرد. در سال ۱۹۴۹، نخستین کامپیوترهای الکترونیکی با همین شیوه و با مفهوم رایانه‌هایی با قابلیت ذخیره برنامه معرفی شدند که در آنها هم برنامه ها و هم داده‌ها به همان شیوه در حافظه کامپیوتر ذخیره و دستکاری می شدند. کد ماشین زبان برنامه‌های اولیه بود که در مجموعه دستورالعمل‌های دستگاه خاص، غالباً به صورت دودویی نوشته شده‌است. به زودی زبانهای مونتاژ ایجاد شد که به برنامه‌نویس اجازه می‌دهد تا دستورالعمل‌ها را در قالب متن مشخص کند (به عنوان مثال، ADD X، TOTAL)، با اختصار برای هر کد عملیات و نام‌های معنی دار برای مشخص کردن آدرس‌ها است. اما از آنجا که یک زبان مونتاژ چیزی بیش از یک نشان دیگر برای یک زبان ماشین نیست، هر دو ماشین با مجموعه‌های مختلف دستورالعمل نیز دارای زبان‌های مونتاژ متفاوت هستند. زبان‌های سطح بالا روند تهیه یک برنامه را ساده‌تر و قابل فهم تر و محدودتر به سخت‌افزار زیرین می‌کردند. FORTRAN، نخستین زبان سطح پرکاربرد برای اجرای عملی، در سال ۱۹۵۷ منتشر شد [۱۰] و بسیاری از زبان‌های دیگر به زودی توسعه یافتند - به ویژه، COBOL با هدف پردازش داده‌های تجاری و لیپ برای تحقیقات رایانه است. در اواخر دهه ۱۹۶۰، دستگاه‌های ذخیره‌سازی داده و پایانه‌های رایانه به اندازه کافی ارزان شدند که می‌توان برنامه‌ها را با تایپ کردن مستقیم به رایانه‌ها ایجاد کرد. ویرایشگرهای متن (خود برنامه‌ها) ساخته شده‌اند که اجازه می‌دهد تغییرات و اصلاحات بسیار آسانتر از کارت‌های سوراخ شده انجام شود. کاربرد پذیری ارگونومی یک برنامه: آسانی استفاده از برنامه برای شخصی که می‌خواهد از آن برای کار در نظر گرفته شده استفاده کند یا گاهی برای کارهای پیش‌بینی نشده آن را به کار برد. طیف وسیعی از عناصر متنی، تصویری و گاهی سخت‌افزاری وجود دارند که می‌توانند باعث ارتقای وضوح، درک، پیوستگی و کامل بودن واسط کاربری برنامه شوند. قابلیت حمل: طیف سخت‌افزارها و سیستم عامل‌هایی که کد منبع (سورس کد) برنامه را بتوان روی آن‌ها با مترجم یا مفسر اجرا کرد. نگهداشت پذیری: این که سازندگان و ارتقا دهندگان فعلی برنامه یا افراد دیگری در آن بتوانند به راحتی ارتقاها یا تغییراتی در برنامه انجام دهند تا خطاها و حفره‌های امنیتی را رفع کنند یا بتوانند آن را برای محیط جدیدی تطبیق دهند. این خاصیت ممکن است تأثیر خیلی زیادی روی کاربر نهایی برنامه نداشته باشد ولی در بلند مدت برای سرنوشت یک برنامه خیلی مهم است. خوانایی کد منبع در برنامه‌ریزی رایانه، خوانایی عبارت است از این که خواننده متن کد منبع بتواند هدف، جریان برنامه و عملکرد کد منبع را متوجه شود. این موضوع در مجموعه نیازهای کیفیتی شامل موارد قابلیت انتقال، کاربرد پذیری و نگهداشت پذیری می‌شود. خوانایی خیلی مهم است به این علت که برنامه نویسان بیشترین وقتشان را به جای این که صرف نوشتن کد جدید بکنند، در زمینه درک و تغییر کد منبع موجود می‌کنند. نشان داده است که تغییراتی جزئی و ساده‌ برای خوانایی برنامه می‌تواند منجر به این شود که کد نهایی نوشته شده کوتاه‌تر شود و همچنین زمان فهم آن به‌طور قابل توجهی کاهش یابد. پیروی از یک سبک برنامه‌نویسی منسجم معمولاً به خوانایی کمک می‌کند؛ اگر چه "خوانایی" چیزی بیش از اتکای صرف به سبک برنامه‌نویسی است. | ## بخش 2: برنامه‌نویسی رایانه‌ای | عوامل زیادی که معمولاً دخالتی در توانایی رایانه برای ترجمه مناسب و اجرای بهتر برنامه ندارند، به خوانایی کمک می‌کنند. بعضی از این عوامل عبارتند از: بلوک بندی متفاوت (فاصله سفید) یادآورها تکه‌تکه کردن نوشته‌های طولانی قواعد نامگذاری برای اشیا (مثل متغیرها، کلاسها، روال‌ها و غیره) جنبه‌های دیداری برای این کار (مثل تورفتگی، شکستن خطوط، علامت‌گذاری رنگی و مانند این‌ها) معمولاً به وسیله ویرایشگر کد منبع فراهم می‌شود، اما جنبه‌های محتوایی بازتابی از استعداد و توانایی‌های برنامه‌نویس است. زبانهای برنامه‌نویسی دیداری متعددی با این منظور توسعه داده شده‌اند تا بتوانند از روش‌های غیر سنتی برای ارائه کد و تصویر استفاده کنند. محیط‌های یکپارچه توسعه نرم‌افزار (IDEها) می‌خواهند تا تمام این گونه کمک‌ها را به شکل یکپارچه ارائه کنند. پیچیدگی الگوریتمی محیط‌های دانشگاهی و همچنین مهندسین فعال در برنامه‌نویسی هر دو عمیقاً به دنبال کشف و تکمیل الگوریتم‌های کارآمد تر برای گروه مشکلات مشخص شده هستند. برای نیل به این هدف الگوریتم‌ها در ترتیب‌هایی طبقه‌بندی می‌شوند که به عنوان نماد O بزرگ خوانده می‌شوند. برنامه نویسان حرفه‌ای با گستره‌ای از الگوریتم‌های خوب سازمان یافته آشنایی دارند و پیچیدگی‌های مخصوص آن‌ها را می‌دانند و در نتیجه از این دانسته‌ها برای انتخاب الگوریتم‌های مناسب برای شرایط مورد نظر خود، استفاده می‌کنند. الگوریتم‌های شطرنج به عنوان نمونه "برنامه نویسی رایانه برای بازی شطرنج" مقاله ای در سال ۱۹۵۰ بود که یک الگوریتم "minimax" را که بخشی از تاریخ پیچیدگی الگوریتمی است ارزیابی می‌کند. کاربرد الگوریتم و روندنما در برنامه‌نویسی یکی از مهم‌ترین پیش‌نیازهای برنامه‌نویسی اطلاع داشتن از نحوهٔ حل مسئله و الگوریتم‌های برنامه‌نویسی است، الگوریتم‌ها به صورت خاص نحوهٔ حل و منطق زبان برنامه‌نویسی را بیان می‌کنند، نمای تصویری الگوریتم را روندنما می‌نامند، پس از نوشتن یک الگوریتم کامل برنامه‌نویسی می‌توان اقدام به رسم روندنما کرد تا نمود بصری الگوریتم به خوبی نمایان گردد. روش‌ها قدم اول در فرایند توسعه بیشتر نرم‌افزارها به شکل معمول شامل بررسی نیازمندی‌ها، سپس آزمایش برای تشخیص الگوی متغیرها، اجرا و سپس حذف خرابی‌ها (اشکال زدایی) است. بسیاری از برنامه نویسان از شکل توسعه چابک نرم‌افزاری استفاده می‌کنند؛ در این روش مراحل مختلف توسعه نرم‌افزار به شکل چرخه‌های کوتاه با هم ترکیب می‌شوند به‌طوری که هر کدام از این چرخه‌ها فقط چند هفته طول بکشند. محبوب‌ترین زبان در برنامه‌نویسی تعیین اینکه محبوب‌ترین زبان برنامه‌نویسی مدرن کدام است کار بسیار مشکلی است. بعضی از زبان‌ها در کاربردهای خاصی محبوب است و بعضی دیگر مرتباً در نوشتن کاربردهای گوناگون استفاده می‌شود. روش‌های اندازه‌گیری محبوبیت زبان شامل موارد زیر می‌باشد: شمردن تعداد آگهی‌های اشتغال و توجه به یک زبان، تعداد کتاب‌های آموزشی فروخته شده در مورد یک زبان، تخمین تعداد خطوط کد نوشته شده در یک زبان؛ که امروز می‌توان زبان برنامه‌نویسی پایتون و جاوا اسکریپت از محبوب‌ترین زبان‌های برنامه‌نویسی جهان دانستند؛ به‌خصوص پایتون که به دلیل سادگی و کارایی بالا در زمینه‌های مختلف افراد زیادی را به خود جذب کرده‌است. روش‌شناسی نخستین قدم در اکثر فرایندهای رسمی توسعه نرم‌افزار، تجزیه و تحلیل الزامات است و پس از آن آزمایش برای تعیین مدل‌سازی ارزش، پیاده‌سازی و حذف نقص (اشکال زدایی) انجام می‌شود. بسیاری از برنامه نویسان از اشکال توسعه نرم‌افزار Agile استفاده می‌کنند که مراحل مختلف توسعه نرم‌افزار رسمی در چرخه‌های کوتاه که چند هفته به طول می‌انجامند در کنار هم قرار گرفته‌اند. تکنیک‌های محبوب سازی مدل‌سازی شامل تحلیل و طراحی شی گرا (OOAD) و معماری مدل محور (MDA) است. تکنیک‌های اجرای شامل زبان‌های ضروری (شی گرا یا رویه ای)، زبان‌های کاربردی و زبان‌های منطقی است. اندازه‌گیری میزان استفاده از زبان تعیین اینکه محبوب‌ترین زبان‌های برنامه‌نویسی مدرن چیست، بسیار دشوار است. روش‌های سنجش محبوبیت زبان برنامه‌نویسی عبارتند از: شمارش تعداد آگهی‌های شغلی که به آن زبان اشاره می‌کنند، تعداد کتاب‌های فروخته شده و دوره‌های آموزش زبان (این اهمیت بیش از حد زبان‌های جدید را بالاتر می‌برد) و تخمین تعداد خطوط موجود کد نوشته شده به زبان (این کمترین تعداد کاربران زبان‌های تجاری مانند COBOL را دست کم می‌گیرد). برخی از زبان‌ها برای انواع خاصی از برنامه‌ها بسیار محبوب هستند، در حالی که برخی از زبان‌ها به‌طور مرتب برای نوشتن انواع مختلف برنامه‌ها مورد استفاده قرار می‌گیرند. به عنوان مثال، COBOL هنوز هم در مراکز داده‌های شرکتی غالباً در رایانه‌های اصلی بزرگ، Fortran در برنامه‌های مهندسی، زبان‌های اسکریپت در توسعه وب و C در نرم‌افزارهای تعبیه شده قوی است. برنامه‌نویسی بسیاری از برنامه‌ها از ترکیبی از چندین زبان در ساخت و استفاده خود استفاده می‌کنند. زبان‌های جدید عموماً در حدود نحو یک زبان قبلی طراحی شده‌اند که قابلیت‌های جدیدی نیز به آن اضافه شده‌است (به عنوان مثال ++C جهت‌یابی به شی را به C اضافه می‌کند، و جاوا مدیریت حافظه و بایت کد را به ++C اضافه می‌کند، اما در نتیجه بازده و توانایی کم را از دست می‌دهد) اشکال زدایی اشکال زدایی کار بسیار مهمی در فرایند توسعه نرم‌افزار است زیرا نقص در یک برنامه می‌تواند عواقب قابل توجهی برای کاربران آن داشته باشد. بعضی از زبان‌ها بیشتر مستعد ابتلا به برخی از خطاها هستند زیرا مشخصات آن‌ها به کامپایلرها نیاز ندارد تا به همان اندازه سایر زبان‌ها بررسی کنند. استفاده از ابزار تجزیه و تحلیل کد استاتیک می‌تواند به تشخیص برخی از مشکلات احتمالی کمک کند. این می‌تواند یک کار غیر مهم باشد، به عنوان مثال با فرایندهای موازی یا برخی از اشکالات نرم‌افزاری غیرمعمول. پس از تولید مجدد اشکال، ممکن است ورودی برنامه ساده شود تا اشکال زدایی آسان‌تر شود. به عنوان مثال، یک اشکال در کامپایلر می‌تواند هنگام عبور از فایل منبع بزرگ خراب شود. | ## بخش 3: برنامه‌نویسی رایانه‌ای | با این حال، پس از ساده‌سازی مورد آزمایشی، فقط چند خط از پرونده منبع اصلی می‌تواند برای تکثیر همان تصادف کافی باشد. چنین ساده‌سازی می‌تواند به صورت دستی و با استفاده از روش تقسیم و تسخیر انجام شود. برنامه‌نویس سعی خواهد کرد که برخی از قسمت‌های تست اصلی را حذف کند و بررسی کند که آیا این مشکل هنوز وجود دارد یا خیر. هنگام اشکال زدایی مشکل در یک رابط کاربری گرافیکی، برنامه‌نویس می‌تواند سعی کند برخی از تعامل‌های کاربر را از توضیحات اصلی مسئله جستجو کند و بررسی کند که آیا اقدامات دیگر برای ظاهر اشکالات وجود دارد یا خیر. از اشکال زدایی‌های مستقل مانند GDB نیز استفاده می‌شوند و این‌ها معمولاً کمتر از یک محیط بصری استفاده می‌کنند، معمولاً با استفاده از یک خط فرمان. برخی از ویرایشگرهای متنی مانند Emacs به GDB اجازه می‌دهند تا از طریق آن‌ها فراخوانی شود تا محیط بصری را فراهم کند. پس از نوشتن یک برنامه مانند بالا، برنامهٔ مترجم (در اینجا Basic) دستورها را تبدیل به فرامینی می‌کند که لایه زیرین، که ممکن است همان سخت‌افزار باشد، می‌تواند آن‌ها را اجرا کند. برای راحت‌تر شدن کدنویسی (برنامه‌نویسی) از نرم‌افزارهای مختلفی وابسته به زبان آن استفاده می‌کنند که به آن‌ها محیط یکپارچه توسعه نرم‌افزار گفته می‌شود به عنوان مثال برای کدنویسی به زبان سی شارپ از نرم‌افزار مایکروسافت ویژوال استودیو استفاده می‌شود. پارادایم‌ها زبان‌های برنامه‌نویسی گوناگون براساس قابلیت‌های در نظر گرفته شده از شیوهٔ خط‌های مختلف استفاده می‌کنند. موارد ریزتری مانند چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبان‌های مختلف متفاوت است. علاوه بر این‌ها، مفاهیمی متفاوت از (اجرای) یک برنامه تصور شده‌اند که پارادایم یا الگو نام دارند. زبان‌های برنامه‌نویسی مقاله اصلی: زبان برنامه‌نویسی زبان‌های مختلف برنامه‌نویسی وجود دارند که هر کدام از آن‌ها سبک‌های خاصی را پشتیبانی می‌کنند (به نام پارادایم‌های برنامه‌نویسی). انتخاب زبان مورد استفاده، مورد توجه بسیاری از مباحث از قبیل خط مشی شرکت، مناسب بودن در انجام کار، در دسترس بودن بسته‌های شخص ثالث یا ترجیح شخصی است. در حالت ایدئال، زبان برنامه‌نویسی که برای کار مورد نظر مناسب‌تر باشد، انتخاب می‌شود. تجارت از این ایدئال شامل یافتن برنامه نویسان به اندازه کافی است که زبان را برای ایجاد یک تیم می‌شناسند، در دسترس بودن کامپایلرها برای آن زبان و کارایی که برنامه‌های آنها را با یک زبان خاص اجرا می‌کنند. زبان‌های «سطح پایین» به‌طور معمول بیشتر دستگاه محور و سریع‌تر اجرا می‌شوند و به زبان ماشین نزدیک‌تر هستند در حالی که زبان‌های «سطح بالا» انتزاعی‌تر و آسان‌تر برای استفاده هستند اما سرعت کمتری دارند. برای نمونه پایتون زبانی ساده‌تر و سریع تر برای نوشتن و سی زبانی اصولی تر و زمانبر تر برای نوشتن می‌باشد. آلن داونی در کتاب «چگونه به شکل یک استاد رایانه فکر کنیم» می‌نویسد: جزئیات در زبان‌های برنامه‌نویسی مختلف، متفاوت به نظر می‌رسند ولی تعدادی از ساختارهای اساسی در همه زبان‌های برنامه‌نویسی یکسان هستند: ورودی: داده‌ها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم می‌کند. خروجی: اطلاعات را روی صفحه تصویر نشان می‌دهد، به یک فایل می‌فرستد یا به دستگاه‌های دیگری انتقال می‌دهد. حالت‌های شرطی: شرط‌های مشخصی را کنترل می‌کند و بر اساس آن رشته مناسبی از عبارات را اجرا می‌کند. حلقه: بعضی اعمال را به شکل تکراری انجام می‌دهد، معمولاً با استفاده از تعدادی متغیرها این کار انجام می‌شود. بسیاری از زبان‌های برنامه‌نویسی مکانیسم‌هایی را برای تماس با توابع ارائه شده توسط کتابخانه‌های مشترک فراهم می‌کنند. مشروط بر اینکه توابع موجود در یک کتابخانه از کنوانسیون‌های زمان اجرا مناسب پیروی کنند (مثلاً روش گذراندن آرگومان‌ها)، ممکن است این توابع به هر زبان دیگری نوشته شود. برنامه نویسان نوشتار اصلی: برنامه‌نویس همچنین ببینید: توسعه دهنده نرم‌افزار، مهندس نرم‌افزار برنامه نویسان رایانه کسانی هستند که نرم‌افزار رایانه ای می‌نویسند. مشاغل آنها معمولاً شامل موارد زیر است: کد نویسی اشکال زدایی سندپردازی یکپارچه سازی نگهداشت تجزیه و تحلیل مورد نیاز معماری نرم‌افزار آزمایش نرم‌افزار مشخصات مهارت‌ها یک برنامه‌نویس رایانه علاوه بر دانستن زبان برنامه‌نویسی ملزم به برخورداری از توانایی‌هایی مانند تسلط به زبان انگلیسی، تایپ ده‌انگشتی، ذهنیت حل مسئله، تسلط کافی به ریاضیات و توانایی جستجوی صحیح در اینترنت است. این دنیا پر از اصطلاحات، مفاهیم و کلمات اختصاری است که در نگاه اول ممکن است ترسناک یا گیج‌کننده به نظر برسند. کلماتی مانند API، گیت، دیباگ کردن، کامپایلر و فریمورک، واژگان روزمره توسعه‌دهندگان نرم‌افزار هستند. | ## جمع‌بندی | اگر به تازگی یادگیری برنامه‌نویسی را شروع کرده‌اید، یا حتی اگر در حوزه‌ای کار می‌کنید که با تیم‌های فنی در ارتباط هستید، درک این اصطلاحات یک ضرورت است.