Програмирането е процесът на създаване на компютърни програми – програмен код или алгоритъм, който може да бъде разчетен и изпълнен от компютър. Програмиране се наричат също академичната дисциплина и компютърната наука – дял от математиката и информатиката – които се занимават с алгоритмите и методите и средствата на програмирането.

При програмирането се използват различни езици за програмиране, на които се записват изходните кодове на програмата.Желязко Желязков (и други колектив), Информатика, Учебници за ВУЗ Тези езици имат различно предназначение, като някои от тях са езици на ниско, други на високо ниво, някои са уеб езици за програмиране, някои са скриптови, други функционални или процедурни, както и такива, които включват работа с обекти – обектно ориентирани езици за програмиране. Алгоритмите се делят най-общо на прости, сложни, и такива които изискват теореми или създаването на нови теореми (в математиката). Алгоритмите са специфична област на изучаване в програмирането и компютърните науки, в математиката, както и за оптимизацията на програмния код и добрата работа на процесора.

Програмирането включва писането на код, тестването му и поддържането на изходния код. Програмата е изпълнима от компютъра, но за да бъде полезна за потребителите, тя трябва да отговаря на поставените изисквания към софтуера. За разлика от системния софтуер, софтуерът за потребителите има други етапи на създаване, като се отделя внимание на функционалните и потребителски изисквания („Какво иска потребителят?“). Потребителят може да е голям клиент или множество по-малки клиенти, или дори фирма, заявила разработка на софтуер, затова във всеки конкретен случай се дефинират софтуерни изисквания (requirements) според нуждите на потребителите. След това се пристъпва към най-общото разграфяване по етапи и дизайн като решение на софтуерно програмния процес: от една страна, самият софтуер се проектира най-общо като потребителски дизайн и интерфейс, от друга страна, се разпределят неговите функционалности на изпълнението за написване като код, в необходимата последователност.

Програмният код, който се пише на даден език за програмиране, се пише на базата на избраните според изискванията и спецификациите алгоритмични параметри, той може да бъде и модификация на съществуващ вече код или да бъде базиран на код на друг език, с цел решаването на даден математически проблем или програмно изискване.Информатика, Учебници за ВУЗ, ИУ – Варна, 2013 Отделно готовият софтуерен продукт подлежи на тестване на потребителския интерфейс. Макар че обикновено се възприема, че софтуерният продукт се тества от тестови екип по осигуряване на качеството, в действителност това е основното тестване на даден софтуер или програмен продукт, това може и да е уебсайт или конкретна онлайн функционалност към уебсайт, а основното тестване се прави от софтуерния мениджърски екип и дори от топ мениджъра, които проверяват дали писаното като код и тествано от тестовия екип е действително работещо. Компании от софтуерната индустрия, които се опитват да прехвърлят основното тестване към тестващия екип в действителност възлагат мениджърска работа и отговорности към тестващите, като отказът от този тип отговорност от страна на софтуерния мениджмънт понякога става причина такива компании да излязат от пазара или се налага да се преструктурират, независимо колко изгодно на пръв поглед изглежда да се прехвърля отговорното тестване, което предхожда пускането на софтуера към клиентите на тестовия екип.

В действителност най-солидните компании като Майкрософт например разчитат на код, писан и от самия основател на компанията, така че може да се каже, че тестването на софтуер за клиенти е мениджърски минимум, който разбира се не отменя работата на софтуерни или тестови екипи. В този смисъл от значително предимство е основателят или президентът (дори това да е жена) на една софтуерна или програмистка компания да е програмист, да може да програмира на практика, да може да прави софтуер, да има личен опит в създаването на софтуерни продукти, да разбира значението на това един софтуер да е работещ и да е тестван, преди да бъде подаден на потребителите, да е програмист или поне инженер в някоя близка област, която да му дава възможност да разбира значението на термини като „изисквания“ и „спецификации“, а не да ги поставя в полето за неясни софтуерни термини, това са термини от инженерните науки като цяло.

В сферата на софтуерното инженерство, програмирането е основната част от процеса на разработка на софтуер, но създаването на стабилен работещ софтуер изисква много повече от способността да се пише код.

В някои специализирани приложения или специфични ситуации, програма може да бъде написана или модифицирана чрез директно зареждане на нужните инструкции на машинен код и тяхното изпълнение.

Програмист Програмистът е действителен специалист по писането на предимно нов код. Включително ползването на различни известни алгоритми или при необходимост създаването на такива. Когато пише алгоритмите за една програма програмистът е и математик.

Писане на код Писане на алгоритми

Софтуерен инженер

Софтуерният инженер може да пише компютърни програми, както и програмистът, но неговата задача е по-различна: да разпредели възложените за изпълнение задачи върху няколко екипа или дори множество екипи. Като той може да разпределя времето между отделните екипи и в някаква степен да координира работата им или да работи в рамките на един екип.

Работата на софтуерния инженер обикновено включва:

Анализ на изискванията – анализът на изискванията е процес, който се извършва от самите програмисти, или от екип софтуерни инженери и други специалисти, участващи в процеса, на които е възложено изпълнение на софтуер, без да имат пряка връзка с потребителите, тоест на тях са зададени писани изисквания, които трябва съответно да бъдат „разчетени“ Спецификация – инженерните спецификации се отнасят до параметрите, които трябва да отговарят на съществуващите стандарти Софтуерен дизайн или архитектура на софтуера Писане на код Компилиране на код Тестване Софтуерна документация Интеграция на софтуер (пример интеграция на Текстови редактор с останалите програми от офис пакет) Основна поддръжка

Софтуерен разработчик

Софтуерният инженер възлага на софтуерния разработчик на базата на съществуващ код и съществуващ софтуер да допълва и доизгражда дадена програма и софтуер.

Мениджър на софтуерен екип Това е мениджърът, който ръководи дейността на целия софтуерен екип или на няколко софтуерни екипа, които могат да се състоят от програмисти, разработчици (виж по-горе за разликата между двете), също софтуерни инженери и тестъри, които осигуряват качеството, включително ръководи мениджърите на тестовите екипи, както и всички останали софтуерни специалисти, които са част от софтуерния екип като цяло.

История на програмирането Най-старата машина за програмиране (това е машина, чието поведение може да се контролира от промените на програма) е програмният хуманоиден робот на Ал Джазари през 1206 г. Външният вид на робота на Ал Джазари е механизирана лодка с четирима автоматични музиканти, която се носи по езерото и забавлява гостите по време на кралските балове. Неговият механизъм включва програмируеми барабани с ключе, захванати на малка ръчка, които отмерват ритъма. Барабанистът е можел да изпълнява различни ритми в зависимост от положението на ключето.

Често за образец на ранното изкуство е считан жакардовият стан, създаден през 1801 г. В тази машина се използвали картонени карти с дупки по тях, като дупките показват извивките на дрехата. Така в зависимост от картите, които му се поставят, станът можел да произвежда напълно различни дрехи. Такива карти е използвал и Чарлз Бабидж през 1830 г., за да управлява своята сметачна машина. Тук отворите се използват за контрол на машината.

Това нововъведение по-късно е подобрено от Херман Холерит, който прилага перфорацията по определена схема за въвеждане на данни. Холерит изобретява специална перфорираща машина за въвеждане на големи масиви от данни, наречена табулатор. Тя се основава на релета и работи с перфокарти, които получават неговото име. Освен тях изобретява и четец за тези карти. Първото приложение на машината е при обработката на резултатите от преброяване на населението в САЩ през 1890 г. когато резултатите са обработени много по-евтино от очакваното и преди определения срок (при предишното преброяване обработката отнела години).U.S. Census Bureau: Tabulation and Processing Следват усъвършенствувания на машината и през 1906 г. моделът Type I Tabulator вече е снабден с комутационен панел и позволява бързо и автоматизирано да се изпълняват различни задачи в счетоводството и складовото стопанство (първата крачка към програмирането).

През 1896 г. Холерит основава компанията Tabulating Machine Company (днес IBM). До края на 40-те години имало различни видове машини за програмиране с комутационен панел, които да изпълняват четенето на картите. Ранните компютри също са били програмирани чрез комутационни панели.

Архитектурата на Джон фон Нойман позволява програмите да бъдат запаметени в компютърна памет. Ранните програми трябвало стриктно да задават инструкциите на отделната машина, обикновено в бинарен вид. Всеки модел компютър се нуждаел от различни команди за изпълняването на една и съща задача. По-късно са създадени езиците за програмиране, които позволяват на програмистите да представят всяка инструкция в текстов формат, като въвеждат абревиатури за всички операции, вместо да ползват числа и специфични адреси в символен формат. През 1954 г. е създаден FORTRAN – първият език на високо ниво. Това позволило на програмистите да извършват изчисленията директно чрез задаване на нужната формула. Изходният текстов код на програмата се превежда до машинни инструкции чрез специална програма, наречена компилатор. След това са създадени още много езици за програмиране (някои от тях с комерсиална цел) – като например COBOL. Програмите обаче все още се въвеждат с перфокарти или перфолента.

Към края на 60-те години устройствата за съхранение на данни и компютърните терминали се развиват достатъчно, за да стане възможно програмите да бъдат писани директно на клавиатурата. Създадени са текстови редактори, които позволяват на програмистите да въвеждат, редактират и обработват кода си много по-лесно, отколкото с перфокартите.

Програмирането в България Както програмирането в други страни, така и програмирането в България има своите основни характеристики. Например в САЩ се възприема, че програмирането основно се отнася до операционни системи като Уиндоус, софтуерни офис пакети и подобни, в България обикновено от 90-те насам се смята, че програмирането е в голяма част свързано с мрежовото програмиране, поради високото ниво на Интернет разрастването от 90-те, доброто качество от началото на хилядолетието и т.н. Разбира се, това не означава, че у нас не се програмира и стандартен софтуер, но много често, когато това е за вътрешни или външни компании, това са програмни продукти, свързани с работата за онлайн решения и платформи, които позволяват потребителя да може да прави по-сложно функциониращи неща онлайн.

Основи на програмирането през социализма в България Още преди въвеждането на персоналните компютри, в заводите и други социалистически предприятия има мейнфрейм компютри от вида цяла зала или стая, като се почне от ламповите, от ранния социализъм, се премине през работещите с перфокарти и принтери компютри (които не са персонални), които, както се разбира, са програмируеми и дори основно програмируеми, тъй като не много често работят с готов софтуер или програма.

Пред-модерно програмиране в България