کامپیوتر (به انگلیسی: Computer Programming) (یا به اختصار برنامهنویسی) بهطور کلی به فرایند نوشتن و توسعه نرمافزار کامپیوتر گفته میشود. به بیان جزئی تر برنامهنویسی رایانه به معنای فرایند تبدیل و سوق دادن فرمول حل یک مسئله یا الگوریتم محاسباتی، به یک برنامه قابل اجرا (نرمافزار) میباشد.
معنای برنامهنویسی رایانه در فرهنگ عامه میتواند به تمامی فرایند توسعه نرمافزار (به انگلیسی: Software Development) اطلاق گردد که شامل فعالیتهای مختلفی همچون بررسی، توسعه، درک، طراحی الگوریتم؛ پیادهسازی، تست، اشکال زدایی و نگهداری نرمافزارهای کامپیوتری نیز میشود. همچنین برنامهنویس به شخصی اطلاق میگردد که عمل برنامهنویسی و توسعه نرمافزار را انجام میدهد.
برنامهنویسی مستلزم فعالیتهایی همچون تحلیل و درک مسئله است و عموماً حل چنین مسایلی منجر به ایجاد یک الگوریتم میشود، بازبینی نیازمندیهای الگوریتم که شامل صحت و میزان منابع مصرفی است، پیادهسازی (که معمولاً به عنوان کدینگ از آن یاد میشود) این الگوریتم در یک زبان برنامهنویسی مقصد، تست کردن، اشکال زدایی، نگهداری کد منبع، پیادهسازی سیستم ساخت(build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامههای کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده میشود. کد منبع به یک یا چند زبان برنامهنویسی، مانند ویژوال بیسیک، جاوااسکریپت، اسمالتاک، پایتون، جاوا، سی شارپ، سی پلاسپلاس و سی نوشته شدهاست.
تاریخچه
موضوع دستگاههایی که به دنبالهای از دستورالعملهای از قبل تعریف شده عمل میکند برمیگردد به Greek Mythology.
برنامهنویسی مدرن نیازهای کیفیتی
هر روشی که برای برنامهنویسی به کار برود، برنامه نهایی باید دارای تعدادی مشخصات پایه باشد. مشخصات زیر تعدادی از مهمترین آنها هستند.
قابلیت اطمینان: این که چقدر نتایج یک برنامه درست باشند، به صحت طراحی الگوریتم و به حداقل رساندن اشتباهات برنامهنویسی مربوط میشود. اشتباهات برنامهنویسی شامل اشکالاتی مثل اشکال در مدیریت منابع (مثل سرریز شدن بافر یا وضعیت رقابتی) و اشکالات منطقی (مثل تقسیم بر صفر یا خطاهای off-by-one).
پایایی: این که یک برنامه چگونه اشکالاتی (نه باگها) را که ممکن است پیش بیایند، پیشبینی کردهاست. این شامل حالتهایی مانند دریافت اطلاعات نادرست، نامناسب یا غلط میشود؛ همچنین کمبود منابعی مانند حافظه، سرویسهای سیستم عامل یا اتصال به شبکه و سایر اشکالات مانند خطای کاربر یا اشکالات قطع برق نیز در این دسته قرار میگیرند.
کاربرد پذیری: ارگونومی یک برنامه: آسانی استفاده از برنامه برای شخصی که میخواهد از آن برای کار در نظر گرفته شدهاستفاده کند یا گاهی برای کارهای پیشبینی نشده آن را به کار برد. این مورد میتواند به تنهایی و علیرغم تمام موارد دیگر باعث موفقیت یا شکست شود. طیف وسیعی از عناصر متنی، تصویری و گاهی سختافزاری وجود دارند که میتوانند باعث ارتقای وضوح، درک، پیوستگی، کامل بودن واسط کاربری برنامه شوند.
قابلیت انتقال: طیف سختافزارها و سیستم عاملهایی که کد منبع برنامه را بتوان روی آنها با مترجم یا مفسر اجرا کرد. این قابلیت بستگی به تفاوت در تسهیلاتی دارد که سیستمهای مختلف از نظر منابع سختافزاری و سیستم عاملها برای برنامهنویسی ارائه میکنند. همچنین رفتار پیشبینی شده سختافزارها و سیستمهای عامل، و در دسترس بودن مترجمها (و منابع کتابخانهای) اختصاصی در آن سیستمها برای کد منبع موجود نیز مهم است.
نگهداشت پذیری: این که سازندگان و ارتقا دهندگان فعلی برنامه یا افراد دیگری در آینده بتوانند به راحتی ارتقاها یا تغییراتی در برنامه انجام دهند تا خطاها و حفرههای امنیتی را رفع کنند یا بتوانند آن را برای محیط جدیدی تطبیق دهند. در این مورد تلاش مناسب اولیه[۱] در ایجاد برنامه است که نقش عمدهای بازی میکند. این خاصیت ممکن است تأثیر خیلی زیادی روی کاربر نهایی برنامه نداشته باشد ولی در بلند مدت برای سرنوشت یک برنامه خیلی مهم است.
کارایی / عملکرد :اندازهگیری منابع سیستمی مورد نیاز برای یک برنامه (زمان پردازنده، فضای حافظه، وسایل کند مثل دیسکها، پهنای باند شبکه و موارد دیگری مثل تعامل با کاربر): هر چقدر کمتر، بهتر. این خاصیت همچنین شامل مدیریت صحیح منابع مانند پاک کردن فایلهای موقت و از بین بردن نشتیهای حافظه نیز میشود.
خوانایی کد منبع
در برنامهریزی رایانه، خوانایی عبارت است از این که خواننده متن کد منبع بتواند هدف، جریان برنامه و عملکرد کد منبع را متوجه شود. این موضوع در مجموعه نیازهای کیفیتی شامل موارد قابلیت انتقال، کاربرد پذیری و نگهداشت پذیری میشود.
خوانایی خیلی مهم است به این علت که برنامه نویسان بیشترین وقتشان را به جای این که صرف نوشتن کد جدید بکنند، در زمینه درک و تغییر کد منبع موجود میکنند. کدهای ناخوانا معمولاً به خطا، نارسایی و کدهای تکراری ختم میشوند. یک تحقیق[۲] نشان داد که تغییرات جزئی و سادهای برای خوانایی برنامه میتواند منجر به این شود که کد نهایی نوشته شده کوتاهتر شود و همچنین زمان فهم آن بهطور قابل توجهی کاهش یابد.
پیروی از یک سبک برنامهنویسی منسجم معمولاً به خوانایی کمک میکند؛ اگر چه خوانایی چیزی بیش از فقط سبک برنامهنویسی است. عوامل زیادی که معمولاً دخالتی در توانایی رایانه برای ترجمه مناسب و اجرای بهتر برنامه ندارند، به خوانایی کمک میکنند. بعضی از این عوامل اینها هستند:
بلوک بندی متفاوت (فاصله سفید)
یادآورها
تکهتکه کردن نوشتههای طولانی
قواعد نامگذاری برای اشیا (مثل متغیرها، کلاسها، روالها و غیره)
جنبههای دیداری برای این کار (مثل تورفتگی، شکستن خطوط، علامتگذاری رنگی و مانند اینها) معمولاً به وسیله ویرایشگر کد منبع فراهم میشود، اما جنبههای محتوایی بازتابی از استعداد و تواناییهای برنامهنویس است.
زبانهای برنامهنویسی دیداری متعددی با این منظور توسعه داده شدهاند تا بتوانند از روشهای غیر سنتی برای ارائه کد و تصویر استفاده کنند. محیطهای یکپارچه توسعه نرمافزار (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... استفاده میشود.
زبانهای برنامهنویسی گوناگون براساس قابلیتهای درنظر گرفته شده از شیوهٔ خطهای مختلف استفاده میکنند. موارد ریزتری مانند چگونگی برخورد با نیازهای پشت پردهٔ ماشین مانند مدیریت حافظه و مدیریت زباله نیز در زبانهای مختلف متفاوت است. علاوه بر اینها، مفاهیمی متفاوت از (اجرای) یک برنامه تصور شدهاند که پارادایم یا الگو نام دارند.
زبانهای برنامهنویسی
مقاله اصلی: زبان برنامهنویسی
زبانهای متعدد برنامهنویسی وجود دارند که هر کدام از آنها سبکهای خاصی را پشتیبانی میکنند . انتخاب زبان برنامهنویسی مورد نظر بر اساس ملاحظات متعددی صورت میگیرد: مانند سیاست شرکت، مناسب بودن برای وظیفه در نظر گرفته شده، موجود بودن بستههای برنامه از پیش آماده شده یا نظرات شخصی. به شکل ایدهآل مناسبترین زبان برنامهنویسی برای کاربرد مورد نظر که در دسترس باشد، انتخاب میشود. موضوعاتی که باعث میشوند از این وضعیت ایدهآل فاصله گرفته شوند شامل موضوعاتی مانند یافتن تعداد کافی برنامه نویسان ماهر که بتوانند تیم کاری تشکیل دهند، در دسترس بودن کامپایلرهای مناسب برای زبان مورد نظر، کارایی برنامههای نوشته شده با زبان مورد نظر، است.
زبانهای برنامهنویسی در طیفی بین زبانهای "سطح پائین " تا "زبانهای سطح بالاً قرار میگیرند. زبانهای سطح پائین معمولاً به زبان ماشین نزدیکتر هستند و سریعتر اجرا میشوند، در مقابل زبانهای سطح بالا خلاصه تر و برای کاربرد آسانتر هستند ولی با سرعت کمتری اجرا میشوند. کد نویسی با زبانهای سطح بالا معمولاً آسانتر از کد نویسی با زبانهای سطح پائین هستند.
آلن داونی در کتاب " چگونه به شکل یک استاد رایانه فکر کنیم " مینویسد:
جزئیات در زبانهای برنامهنویسی مختلف متفاوت به نظر میرسند ولی تعدادی از ساختارهای اساسی در همه زبانهای برنامهنویسی یکسان هستند:
ورودی: دادهها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم میکند.
خروجی: اطلاعات را روی صفحه تصویر نشان میدهد، به یک فایل میفرستد یا به دستگاههای دیگری انتقال میدهد.
محاسبات: اعمال محاسباتی اساسی مثل جمع و ضرب را انجام میدهد.
حالتهای شرطی: شرطهای مشخصی را کنترل میکند و بر اساس آن رشته مناسبی از عبارات را اجرا میکند.
حلقه: بعضی اعمال را به شکل تکراری انجام میدهد، معمولاً با استفاده از تعدادی از متغیرها این کار انجام میشود.
بسیاری از زبانهای برنامهنویسی مکانیسمهایی را برای استفاده از کتابخانههای مشترک فراهم میکنند. توابعی در این کتابخانهها بر اساس الگوهای مناسب اجرایی ایجاد میشوند (مانند روشهای انتقال آرگومانها) و سپس میتوان از این توابع در زبانهای متعدد برنامهنویسی استفاده کرد.
برنامهنویسها
مقاله اصلی: برنامهنویس
همچنین ببینید: توسعه دهنده نرمافزار، مهندس نرمافزار
برنامه نویسان رایانه کسانی هستند که نرمافزارهای رایانه را مینویسند. معمولاً شغل آنها شامل موارد زیر است:
برنامهنویسهای دانشجو در مؤسسهٔ فناوری در آلمان سال ۱۹۷۰ برنامهنویس، برنامهنویس رایانه، توسعهدهنده، کدنویس، یا مهندس نرمافزار کسی است که نرمافزار رایانه مینویسد. عبارت برنامهنویس رایانه میتواند به یک متخصص در زمینهای از برنامهنویسی یا یک شخص دارای سررشته که برای بسیاری از گونههای نرمافزار کد مینویسد اشاره کند. شخصی که یک روش رسمی برای برنامهنویسی تمرین یا تدریس میکند، همچنین میتواند بهعنوان تحلیلگر برنامهنویس شناخته شود. زبان برنامهنویسی اصلی یک برنامهنویس (کوبول، سی، سی++، سی شارپ، جاوا، لیسپ، پایتون، غیره) اغلب دارای پیشوندی به این نامها است، و کسانی که در محیط وب کار میکنند اغلب عنوانهایشان را با پیشوند وب مینویسند. عبارت برنامهنویس میتواند برای اشاره به یک توسعهدهندهٔ نرمافزار، توسعهدهنده وب، توسعهدهندهٔ اپلیکیشنهای تلفن همراه، توسعهدهندهٔ سفتافزار تعبیهشده، مهندس نرمافزار، دانشمند رایانه یا تحلیلگر نرمافزار به کار بـرده شود. هرچند، اعضای این حرفهها دارای دیگر مهارتهای مهندسی نرمافزار، جدا از برنامهنویسی هستند؛ به همین دلیل، عبارت برنامهنویس یا کد مانکی (به انگلیسی: code monkey) بعضی وقتها توهین یا سادهگیری تحقیرآمیزِ این دیگر حرفهها در نظر گرفتهمیشود.[۱] این مسئله بحثهای زیادی میان توسعهدهندهها، تحلیلگرها، دانشمندان رایانه، برنامهنویسها و کسانی که همچنان سردرگم در تفاوتهای ظریف در معانی این حرفهها هستند برانگیخته است.[۲][۳][۴][۵][۶]
ایدا لاولیس بهعنوان نخستین برنامهنویس رایانه شناخته میشود.[۷]
ایدا لاولیس، ریاضیدان و کنتس انگلیسی نخستین برنامهنویس رایانه در نظر گرفته میشود، زیرا او نخستین شخصی بود یک الگوریتم را به قصد پیادهسازی روی موتور تحلیلی چارلز ببیج، در اکتبر ۱۸۴۲، به قصد محاسبهٔ عدد برنولی نوشت و منتشر کرد.[۸] چون که ماشین ببیج هرگز برای عملکرد استاندارد در زمان لاویس کامل نشد، او هرگز اجرای الگوریتم خود را ندید.
نخستین شخصی که یک برنامه را روی یک عملکرد الکترونیکی مدرن مبتنی بر رایانه اجرا کرد، دانشمند رایانه کنراد تسوزه در سال ۱۹۴۱ بود.
تیم برنامهنویسی انیاک، شامل کاتلین انتونلی، ژان بارتیک، بتی هالبرتن، مارلین ملتزر، فرانسیس اسپنس و روث تیتلبام نخستین اشخاصی بودند که بهطور منظم برنامهنویسی کار میکردند.[۹][۱۰]
روز بینالمللی برنامهنویسها هر سال در ۷ ژانویه جشن گرفتهمیشود.[۱۱] در سال ۲۰۰۹، دولت روسیه فرمان داد تا هر سال یک روز تعطیل حرفهای که با نام روز برنامهنویسان شناخته میشود در ۱۳ سپتامبر (۱۲ سپتامبر در سالهای کبیسه) جشن گرفته شود. این روز همچنین پیش از آن یک روز تعطیل بینالمللی غیررسمی بودهاست.
ماهیت کار بعضی قسمتهای این بخش از Occupational Outlook Handbook، ویرایش ۲۰۰۶–۲۰۰۷، آمدهاست که در مالکیت عمومی به عنوان اثری از دولت ایالات متحده آمریکا است.
یک برنامهنویس رایانه در حال نوشتن کد جاوا.
برنامهنویسهای رایانه مینویسند، آزمایش میکنند، اشکالزدایی میکنند و از دستورالعملهای دقیق، که برنامههای رایانهای گفته میشوند و رایانه باید از آنها برای اجرا توابعشان پیروی کنند، نگهداری میکنند. برنامهنویسها همچنین تصور میکنند، طراحی میکنند و ساختارهای منطقی را برای برطرف کردن اشکالها توسط رایانه آزمایش میکنند. بسیاری از نوآوریهای فنی در برنامهنویسی — فناوریهای رایانش پیشرفته، زبانهای تازه پیچیده و ابزارهای برنامهنویسی — نقش برنامهنویس را دوباره تعریف کردهاند و بسیاری از کارهای برنامهنویسی که امروزه انجام میشوند را بسیار بهتر کردهاند. عنوانهای شغلی و توصیفها با توجه به آن سازمان ممکن است متفاوت باشند.
برنامهنویسها در بسیاری از محیطها، از جمله بخشهای سازمان فناوری اطلاعات، شرکتهای نرمافزاری بزرگ، شرکتهای خدمترسانی کوچک و نهادهای دولتی کار میکنند. بسیاری از برنامهنویسهای حرفهای همچنین برای شرکتهای مشاورهای در محلهای خدمت گیرنده به عنوان پیمانکار کار میکنند. اجازهنامه بهطور معمول برای کار کردن به عنوان یک برنامهنویس نیاز نیست، اگرچه گواهینامههای حرفهای بهطور معمول توسط برنامهنویس گرفته میشوند. برنامهنویسی بهطور گسترده یک حرفه در نظر گرفتهمیشود (هرچند بعضی از[چه کسی؟] مقامات بر این اساس که فقط شغلهایی که پروانهٔ قانونی نیاز دارند به عنوان یک حرفه به حساب آیند اختلاف نظر دارند).
کار برنامهنویسها بهطور گستردهای بسته به نوع کسب و کاری که آنها برای آن برنامه مینویسند متفاوت است. برای نمونه، دستورالعملهای درگیر در بهروزرسانی سوابق مالی بسیار متفاوت از تکثیر کردن شرایط در یک هواپیما برای آموزش خلبانان در یک شبیهساز پرواز هستند. برنامههای ساده میتوانند در چند ساعت نوشته شوند، آنهایی که پیچیدگی بیشتری دارند ممکن است بیش از یک سال کار نیاز داشتهباشند، این در حالی است که دیگر برنامهها هرگز 'کامل' در نظر گرفته نمیشوند بلکه بهطور مداوم تا زمانی که از آنها استفاده میشود بهبود مییابند. در بیشتر موارد، چندین برنامهنویس با یکدیگر زیر نظر یک برنامهنویس ارشد به عنوان یک تیم کار میکنند.
برنامهنویسها مطابق مشخصات فنی که در درجهٔ اول توسط برنامهنویسهای ارشد و تحلیلگرهای سیستم بیشتر تعیین شدهاند برنامه مینویسند. پس از تکمیل فرایند طراحی، کار برنامهنویس است که آن طراحی را به دنبالههای منطقی از دستورالعملهایی که رایانه بتواند پیروی کند تبدیل کند. برنامهنویس کد این دستورالعملها را به یکی از بسیار زبان برنامهنویسی مینویسد. زبانهای برنامهنویسی گوناگون بسته به هدف برنامه استفاده میشوند. کوبول، برای نمونه، بهطور معمول برای اپلیکیشنهای تجاری که معمولاً روی بزرگرایانه و رایانه کوچک اجرا میشوند استفاده میشود؛ در حالی که، فورترن در علم و مهندسی استفاده میشود. سی++ بهطور گسترده برای هر دو اپلیکیشنهای علمی و تجاری کاربرد دارد. جاوا، سی شارپ، ویژوال بیسیک و پیاچپی زبانهای برنامهنویسی محبوبی برای وب و نرمافزارهای کاربردی تجاری هستند. برنامهنویسها عموماً بیش از یک زبان برنامهنویسی میدانند، و چون بیشتر زبانها مشابه یکدیگر هستند، اغلب نسبتاً به آسانی زبانهای تازه را فرا میگیرند. در عمل، برنامهنویسها اغلب با زبانی که میدانند نسبت دادهمیشوند، برای نمونه برنامهنویسهای جاوا، یا با نوع وظیفهای که انجام میدهند یا محیطی که در آن کار میکنند، برای نمونه، برنامهنویسهای پایگاه دادهها، برنامهنویسهای بزرگرایانه یا توسعهدهندههای وب.
زمانی که در کد منبع، چیزی که برنامهها از آن ساخته شدهاند تغییر ایجاد شود، برنامهنویسها باید دیگر برنامهنویسها را از وظیفهای که روزمره انجام میشود آگاه کنند. آنها این کار را با نوشتن توضیحات در کد منبع و مستندسازی کدشان انجام میدهند؛ بنابراین، دیگر برنامهنویسها برنامه را با آسانی بیشتر درک میکنند. برای صرفهجویی در کار، برنامهنویسها اغلب از کتابخانههای کد پایه که میتوانند تغییر یابند یا برای نرمافزار کاربردی مشخص سفارشی شوند استفاده میکنند. نتیجهٔ این روش برنامههای قابل اطمینانتر و سازگارتر است و همینطور سودمندی برنامه را با حذف برخی از مرحلههای روزمره افزایش میدهد.
آزمون و اشکالزدایی
برنامهنویسها برنامه را با اجرای آن و دنبال اشکالها (خطاها) گشتن میآزمایند. زمانی که اشکالها مشخص شدند، برنامهنویس معمولاً اصلاحات مناسب را ایجاد میکند، سپس برنامه را دوباره تا وقتی که یک سطح پایین و شدت قابل قبول از اشکالها باقی بماند بررسی میکند. این فرایند را آزمودن و اشکالزدایی میگویند. اینها بخشهای مهم از وظیفهٔ هر برنامهنویس است. برنامهنویسها میتوانند به برطرف کردن این اشکالها سراسر زندگی یک برنامه ادامه دهند. بهروزرسانی، تعمیر، ویرایش و گسترش برنامههای موجود بعضی وقتها برنامهنویسی تعمیر و نگهداری نامیده میشود. برنامهنویسها میتوانند در راهنماهای کاربر و راهنمای برخط همکاری کنند، یا میتوانند با نویسندهٔ فنی برای انجام چنین کاری کار کنند.
برنامهنویسی نرمافزار کاربردی در مقابل برنامهنویسی سیستم
برنامهنویسهای رایانه اغلب به دو گروه گسترده تقسیم میشوند: برنامهنویسهای نرمافزار کاربردی و برنامهنویسهای سیستم. برنامهنویسهای نرمافزار کاربردی برنامههایی مینویسند تا به وظیفه مشخصی رسیدگی کنند، مانند برنامهای برای پیگیری سیاهه در یک سازمان. این گروه از برنامهنویسها همچنین میتوانند نرمافزار بستهبندیشده را اصلاح کنند یا نرمافزارهای کاربردی عمومی را که مکرراً از فروشندههای نرمافزار مستقل خریداری میشوند سفارشی کنند. در حالی که، برنامهنویسهای سیستم، برنامههایی برای نگهداری و بررسی نرمافزار سیستمهای رایانهای مینویسند، مانند سیستمهای عامل و سامانههای مدیریت پایگاه دادهها. این گروه از برنامهنویسها در دستورالعملهایی که مشخص میکنند چگونه شبکه، پایانههای رایانه رومیزی (معمولاً شبکه شده و قدرتمندتر از رایانه شخصی هستند) (به انگلیسی: Workstations) و واحد پردازش مرکزی سیستم وظیفههای گوناگونی که به آنها داده شدهاند را رسیدگی میکنند و چگونه با تجهیزات جانبی مانند چاپگرها و دیسکگردان ارتباط برقرار میکنند تغییر ایجاد میکنند.
زبانهای برنامهنویسی ساختارهای زبانی دستور مداری در رایانهها هستند که بهوسیلهٔ آنها میتوان یک الگوریتم را بهوسیلهٔ ساختارهای دستوری متفاوت برای اجرای رایانه توصیف کرد و با این روش امکان نوشتن برنامه جهت تولید نرمافزارهای جدید بوجود میآید. معمولاً هر زبان برنامهنویسی دارای یک محیط نرمافزاری برای وارد کردن متن برنامه، اجرا، همگردانی و رفع اشکال آن هستند. عموماً زبانهای برنامهنویسی را به پنج نسل تقسیم میکنند:
نسل اول زبان ماشین - زبان صفرو یک
نسل دوم زبانهایی مانند اسمبلی -قابل فهم تر برای انسان
نسل سوم زبانهایی مانند کوبول و پی ال وان و… -دستورهای قابل فهم تر برای انسان و نیاز به کامپایلرها
نسل چهارم مثل زبانهای اوراکل و فاکس پرو و اس کیو الها - نزدیک به محاورههای انسانی
نسل پنج زبانهایی مانند prolog , ops5، ویژوال بیسیک- تمرکز بر حل مسئله و استفاده از الگوریتمهای نوشته شده توسط برنامهنویس
یک زبان برنامهنویسی یک زبان مصنوعی انگلیسی است که برای بیان محاسباتی که توسط یک ماشین (مخصوصا رایانه) قابل انجام است، طراحی شدهاست. زبانهای برنامهنویسی برای ایجاد برنامههایی به کار میروند که رفتار یک ماشین را مشخص میکنند، الگوریتم دقیق را بیان میکنند، یا روشی برای ارتباط انسانند. بسیاری از زبانهای برنامهنویسی تعدادی قالب از ویژگیهای نوشته شده دستوری(syntax) و معناشناسی (semantics) دارند، چرا که رایانهها دستورهای دقیقاً مشخص نیاز دارند. برخی توسط سند خصوصیات (specification document) تعیین شدهاند. (برای مثال یک استاندارد ISO)، در حالی که برخی دیگر دارای پیادهسازی غالبی میباشند. (مانند Perl) اولین زبان برنامهنویسی به قبل از اختراع رایانه بازمیگردد، و برای هدایت رفتار ماشینهایی مانند دستگاههای نساجی اتوماتیک و نوازندههای پیانو به کار میرفت. هزاران زبان برنامهنویسی خلق شدهاند، بیشتر در زمینهٔ رایانه، زمینهای که هر ساله بسیاری دیگر ایجاد میشوند.
تقسیمبندی
زبانهای برنامهنویسی را میتوان از چهار دیدگاه متفاوت مورد بررسی قرار داده و تقسیمبندی کرد: الف) روشهای برنامهنویسی
زیر روالی
ساخت یافته
مدولار
شئ گرا
ب) نزدیکی به زبان ماشین
سطح پایین
سطح میانی
سطح بالا
ج) نوع ترجمه
مفسری
کامپایلری
د) رابط برنامهنویسی
مبتنی بر متن
مبتنی بر گرافیک (ویژوال)
نکته : امروزه با وجود ماشینهای مجازی، تقسیمبندی زبانهای برنامهنویسی بر اساس نوع ترجمه، اشتباه میباشد. ماشین مجازی HipHop (مورد استفاده شرکت فیسبوک برای کاهش مرحله تفسیر در PHP) و همچنین کامپایل زبان برنامهنویسی پایتون به کلاسهای جاوا) نمونههایی از چندگانگی نوع ترجمه در زبانهای برنامهنویسی میباشد.