Езиците за програмиране са изкуствени езици, които ни позволяват да даваме различни инструкции на машините и да споделяме алгоритмична информация. Tе имат голямо влияние върху обществото, тъй като са в основата на всеки информатично-технологически артефакт. Именно на тях дължим днешния бум на софтуерни технологии. Тази статия разглежда главните развития в историята на езиците за програмиране

Ранна история През 1842 – 1843 година Ада Лъвлейс превежда статия на италианския математик Луиджи Менабрия, посветена на Аналитичната машина, замислена от Чарлз Бабидж. Към статията тя включва и свои бележки, които конкретизират в детайли метода за изчисляване на числата на Бернули с помощта на машината. За някои историци именно това е първата компютърна програма в света. 

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

През 1945 г. Джон фон Нойман, който работи за Института за авангардни науки, става автор на две важни концепции, които оказват значение за развитието на програмните езици за в бъдеще. Първата се нарича „shared-program technique“ (техника на споделените програми). Според Джон фон Нойман хардуерът на компютрите трябва да е прост и да не се налага да се реконструира за всяка нова програма. От това следва, че при по-сложни задачи ще е необходимо да се задават по-сложни инструкции.

Втората концепция е много важна за развитието на програмните езици. Джон фон Нойман я нарича Conditional control transfer (условно предаване на контрола). Тази идея поощрява използването на подпрограми или малки парчета код, които да могат да се извикват в нехронологичен ред. Освен това компютърният код трябва да има възможност да се разклонява с помощта на логически изрази като IF THEN, както и да се повтаря чрез FOR израза. Тази теория дава идеята за библиотеките – парчета код, които могат да се използват многократно.

Най-ранните компютърни кодове са имали строго специализирано приложение. В първите десетилетия на 20 век изчисленията са били базирани на десетичната бройна система. В края на краищата обаче хората осъзнават, че тази логика може да бъде успешно изразена не само с думи, но и с числа. Така например Алонсо Чърч успява успешно да изрази ламбда смятането чрез формули. Алтернативен процес на изчисление предлага Алън Тюринг в т.нар. машина на Тюринг, която е своеобразна абстракция на телетипите, използвани от телефонните компании. Машините на Тюринг полагат основите на компютърната архитектура на фон Нойман, при която програмите се съхраняват също като данните. За разлика от ламбда смятането, кодът на Тюринг не се оказва подходяща основа за програмните езици от по-високо ниво. Основното му приложение е в строгите анализи и в теорията на изчислителната сложност.

Подобно на много „начала“, трудно е да се посочи с точност кой точно е първият модерен програмен език. Още от самото начало езиците са силно ограничени от хардуера. Перфокартите позволяват 80 колони, но някои колони е трябвало да бъдат използвани за сортиращ номер на всяка карта. FORTRAN включва някои ключови думи от английския език, като например „IF“ (ако), „GOTO“ (отиди до) и „CONTINUE“ (продължи). Използването на магнитен барабан за компютърна памет означавало, че компютърните програми трябва да се съобразяват с въртенето му. Поради тази причина и програмите са силно зависими от хардуера.

За някои хора определянето на първия модерен език за програмиране зависи от това колко енергия и човешка четимост са необходими, за да се даде статут на „Език за програмиране“. Жакардовите станове, както и Диференциалната машина на Бабидж са разчитали на прости, ограничени „езици“ за описание на действията, които е трябвало да извършват. Дори перфорираните дупки на свитъка за механичното пиано, макар че не са предназначени за четене от човек, биха могли да се интерпретират като специфичен „програмен език“.

Първите езици за програмиране През 40-те години на 20 век се създават първите наистина модерни компютри, захранвани от електричество. Ограничената скорост и памет принудила програмистите да пишат ръчно настроени програми с помощта на асемблерен език. В крайна сметка става ясно, че програмирането с помощта на асемблерен език изисква голямо интелектуално усилие и е можело да доведе до грешки.

Първият програмен език създаден така, че да задава инструкции на компютър, е написан през петдесетте. Един от първите езици за програмиране на високо ниво е Планкалкюл. Той е създаден от Конрад Цузе за немския компютър Z3 между 1943 и 1945 г.

Short code на Джон Моукли, предложен през 1949, е един от първите езици от високо ниво, проектирани за електронния компютър. За разлика от машинния код, в краткия код са представени математически изчисления в разбираема форма. Въпреки това програмата е трябвало да бъде преведена на машинен код при всяко стартиране, забавяйки по този начин процеса повече, отколкото при стартиране на еквивалентния машинен код.

През 1951 г. Грейс Хопър създава първия компилатор за Short code, наречен A-o. Компилаторът представлява програма която превръща всичките тези математически изрази в машинен код.

В началото на 50-те години на XX век в Университета на Манчестър Алик Глиние създава Автокод - програмен език, който използва компилатор, за да преобразува автоматично дадения език в машинен код. Първият код и първият компилатор са създадени през 1952 г. за компютъра Марк 1 в Университета на Манчестър – смята се, че това е първият компилиран програмен език от високо ниво.

Вторият автокод е създаден за компютъра Марк 1 от Р. А. Брукър през 1954 г. и е наречен Mark 1 Autocode. През 50-те Брукър, в сътрудничество с Университета на Манчестър, създава автокод и за Феранти Мъркюри. Версията за EDSAC 2 е била измислена през 1961 г. от Д. Ф. Хартли от Математическата лаборатория на Университета на Кеймбридж. Известна като EDSAC 2 Autocode, тя е стъпвала изцяло върху основите на Mercury Autocode. Освен това е била адаптирана за местните условия и е била известна със своята обектна кодова оптимизация и система за контролиран превод, които били напреднали за времето си. По същото време, но като отделна разработка, се появява Atlas Autocode за машината Atlas 1 в Университета на Манчестър.

FLOW-MATIC е друг ранен програмен код, създаден от Грейс Хопър в САЩ. Разработен е за UNIV в Ремингтън Ранд в периода 1955 – 1959 г.

Хопър открива, че клиентите, обработващи бизнес информация, не се чувстват комфортно с математическите символи. Затова през 1955 г. тя и нейният екип написват вариация за английския програмен език и създава прототип. Компилаторът FLOW-MATIC става обществено достояние през 1959 г. Той оказва съществено влияние върху дизайна на COBOL, тъй като по това време единствено той и неговият директен потомък AIMACO са били в реална употреба. В средата на 50-те години в IBM се създава и FORTRAN (FORmula TRANslating system) – език, чиято функция е била да подпомага научните изчисления. Той става първият широко използван програмен език от високо ниво с общо предназначение. Въпреки че е бил ограничен до ползването само на условни конструкции, като IF, DO и GOTO, FORTAN е бил доста напредничав за времето си. Основните типове данни в него намират място и в съвременните програмни езици. Например булевите и целочислените променливи, реални типове с плаваща запетая и реални типове с десетична точност.

През 1958 г. Джон Макарти създава езика LISP (LISt Processing), който намира приложение в областта на изкуствения интелект. Особеното при него е, че няма синтаксис, а единственият тип данни е бил списъкът (list). В средата на 60-те обаче LISP се сдобива и с други типове данни.

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

COBOL е създаден през 1959 г. с идеята да замести FORTAN. Основните му структури от данни са били числата и символните низове. Това е предоставяло по-голяма четимост. Интересно е да се отбележи, че COBOL има структура, подобна на есето. Освен това изразите в него са били доста сходни с английската граматика. Именно това прави COBOL лесен за научаване и използване.

Друг важен момент от средата на XX век, е пускането на ALGOL 60 (1960 г.) от комитета на Американските и европейски компютърни учени. Името му идва от Algorithmic Language заради алгоритмичните дефиниции на задачите. Той обединява много идеи, които са се обсъждали по онова време, и включва три ключови иновации в програмирането: „загнездена“ блокова структура – кодът и свързаните с него декларации могат да бъдат групирани в блокове, без да се налага да се преобразуват в отделни и изрично наименувани процедури. лексикален обхват – един блок може да разполага със свои собствени „частни“ променливи“, процедури и функции, които са невидими за кода, намиращ се извън този блок. Т.е. става дума за т.нар. „скриване на информация“.

Друга ключова иновация, свързана с ALGOL 60, е начинът, по който езикът е бил описван. За целта е използван метаезикът (формата) на Бекус-Наур. На практика почти всички езици, които ще се появят след това, ще използват вариация на тази форма, за да описват онази част от синтаксиса, която не е обвързана с конкретен контекст.

ALGOL 60 оказва особено голямо влияние в дизайна на следващите езици за програмиране, които бързо добиват голяма популярност.

Ключовите идеи на този език са прехвърлени и доразвити и в неговия наследник – ALGOL 68: Синтаксисът и семантиката стават още по ортогонални – с анонимни рутини, система за рекурсивно изписване и т.н. Не само онези части, които не са обвързани с конкретен контекст, но и целият езиков синтаксис и семантика са дефинирани формално посредством граматиката на Ван Вийнгардън – формализъм, създаден специално за тази цел.

По-непопулярните характеристики на ALGOL 68, като например едновременните и паралелните блокове, както и комплексната му система от синтактични преки пътища (и автоматични корекции) му печели репутацията на труден и не особено достъпен. Всъщност, Никлаус Вирт напуска дизайнерския екип, за да създаде доста по-семплия език Pascal.

По-важните езици, създадени в този период са:  1951 – Regional Assembly Language 1952 – Autocode 1954 – IPL (предшественик на LISP) 1955 – FLOW-MATIC (води до COBOL) 1957 – FORTRAN (първият компилатор) 1957 – COMTRAN (предшественик на COBOL) 1958 – LISP 1958 – ALGOL 58 1959 – FACT (предшественик на COBOL) 1959 – COBOL  1959 – RPG  1962 – APL  1962 – Simula  1962 – SNOBOL  1963 – CPL (предшественик на C)  1964 – BASIC  1964 – PL/I  1966 – JOSS  1967 – BCPL (предшественик на C) 

Установяване на фундаменталните парадигми Периодът от края на 60-те до края на 70-те години на 20 век се характеризира с разцвет на езиците за програмиране. Повечето от основните парадигми, които използваме днес, са създадени именно по това време. Simula – това е първият обектно-ориентиран език. Създаден е през 1967 г. от Кристен Найгард и Оле-Йохан Дал. Използван е за изработването на симулационни програми, в които данните се представят посредством обекти. (1) C – език, създаден от Деинс Ричи и Кен Томпсън в периода 1969 г. – 1973 г. Често се използва за системно програмиране. Той е междуплатформен, блоково структуриран, процедурен и императивен. Smalltalk (средата на 70-те години на 20 век) – обектно-ориентиран език в пълния и най-чистия смисъл на този термин. Prolog – създаден от 1972 г. от Ален Колмерое, Филип Ръсел и Робърт Ковалски. Това е първият език за логическо програмиране. ML, създаден от Робърт Милнър през 1973 г. Проправя пътя на функционалното програмиране.