Компјутерско програмирање (често се користи за програмирање, скриптирање , или кодирање) е процес на дизајнирање, пишување, испробување, дебагирање и одржување на изворниот код на компјутерските програми. Овој код е напишана во еден или во повеќе програмски јазици (како што се Java, C + +, C #, Python итн.) Целта на програмирањето е да се создаде сет на инструкции дека компјутерите се користат да извршуваат специфични операции или да ги извршуваат сакано однесување. Процесот на пишување код често бара експертизам во многу различни теми, вклучително и познавање на апликацискиот домен, специјализирани алгоритми и формалната логика. Во рамките на софтверското инженерство, програмирање (имплементација) се смета како една фаза во процесот на развивање. Во тек е дебата за степенот кој за пишување на програми е форма на уметност, занаетчиска дејност, или инженерска дисциплина. Дисциплина се разликува од многу други технички професии во кои програмерите, во принцип, не треба да бидат лиценцирани или да ги положат сите стандардизирани (или регулирани од надлежни) тестови за сертификација со цел да се нарекуваат себеси "програмери" или дури "софтверски инженери." Бидејќи дисциплината опфаќа многу области, кои може или не може да вклучуваат критични апликации, тоа е дискутабилно дали лиценцирање е потребно за професијата како целина. Во повеќето случаи, дисциплината е призната од страна на субјекти кои бараат програмери, а понекогаш и многу строги услови се дефинирани (пр. САД воздухопловната употреба на AdaCore и безбедносен сертификат). Сепак, претставувајќи се себеси како "професионален софтверски инженер" без дозвола од акредитирана институција е нелегална во многу делови на светот.
Друга дебата е степенот до кој програмскиот јазик се користи во пишувањето на компјутерски која влијае нафиналната програма. Оваа дебата е слична на онаа околу Сапир-Whorf хипотеза Kenneth E. Iverson, the originator of the APL programming language, believed that the Sapir–Whorf hypothesis applied to computer languages (without actually mentioning the hypothesis by name). His Turing award lecture, "Notation as a tool of thought", was devoted to this theme, arguing that more powerful notations aided thinking about computer algorithms. Iverson K.E.,"Notation as a tool of thought", Communications of the ACM, 23: 444-465 (August 1980). во лингвистиката и когнитивните науки, кои постулираат дека посебно зборуван јазик дека природно го менува мислењето на неговите говорници. Различни јазични патенти даваат различни патенти на мисли. Оваа идеја претставува можност за претставување на светот совршено со јазикот, бидејќи признава дека механизмите на било кои услови на јазикот се мислите на неговата заедница на говорници.
Историја
Античките култури немаат концепт на сметачи надвор од едноставната аритметика. Единствениот механички уред кој постои за бројчена пресметка на почетокот на човечката историја бил абакусот, измислен во Сумериа околу 2500 п.н.е.. Подоцна, механизмот Актикитера, измислен некаде околу 100 година во Стара Грција, беше првиот механички калкулатор кој користел брзини од различни големини и конфигурација за вршење на пресметки,"Ancient Greek Computer's Inner Workings Deciphered". National Geographic News. November 29, 2006. кој го пронашла Метонов циклус уште се користи во месечевите календари, и што е во согласност за пресметување на датумите на олимпијадите. Курдиски средновековен научник Ал-Јазари изградена програмабилни автомати во 1206 година.
Еден систем вграден во овие уреди е употребата на клинови и камери поставени во дрвен тапан во одредени локации, кои секвенцијално ќе предизвика лост, претворен во ударен инструмент. Излезот на овој уред е мал тапанар кој свири различни ритми и миксови A 13th Century Programmable Robot , University of Sheffield. Jacquard разбојот, која Џозеф Мари Жакард го развила во 1801 година, користејќи серија од картон картички со дупки во нив. Шемата на дупката претставува моделот дека разбојот мора да го следи во ткаење ткаенина. На разбојот би можел да произведе сосема различни ткаенини со користење на различни групи на карти. Чарлс Бабејџ усвоиl употребата на ударни картички околу 1830 да го контролира својот аналитички мотор. Првата компјутерска програма напишана за Аналитичка мотор била напишана од математичарката Ада Лавлејс и била за да пресмета низа на Бернули броеви. синтеза на бројчена пресметки, предодредена операција и излез, заедно со еден начин да се организираат и влезни инструкции на начин релативно лесен за луѓето да горазберат и произведат, доведува до модерен развој на компјутерското програмирање. Развој на компјутерско програмирање се забрзува преку индустриската револуција. Во 1880-тите, Херман Холерит измислиле снимање на податоци на медиум кој потоа може да се чита од машина. Пред употреба на машински читлив медиуми, погоре, била листи на инструкции (не податоци) да се стартува програмирани машини како Жакард разбоите и механизирани музички инструменти. "По некои првични испитувања со хартииена лента, се поставиле на ударни картички ..." За обработка на овие удирани со ударни картички, првиот познат како "Hollerith картички" тој го измислил keypunch, сортирач и табулатор единица рекорд машини.U.S. Census Bureau: The Hollerith Machine Овие пронајдоци се темелат на податоци преработувачката индустрија. Во 1896 година го основал Сумирање Машинска компанијата (кој подоцна стана јадрото на IBM). Додавање на контролниот панел (plugboard) на неговиот 1906 Тип и табулатор дозволен тој да направи различни работни места, без да биде физички изградена. До крајот на 1940 година, имаше неколку единица рекорд калкулатори, како што се IBM 602 и IBM 604,на чиј контролни панели има наведена низа (листа) на работењето и на тој начин се програмабилни машини. Пронаоѓањето на фон Нојман архитектура дозволува компјутерските програми да бидат зачувани во компјутерската меморија. Раните програми мораше да биде внимателно направена со користење на инструкции (основно работење) на одредена машина, често во бинарна нотација. Секој модел на компјутер, најверојатно, ќе користат различни инструкции (машински јазик) да ја изврши истата задача. Подоцна, собранието јазици се развиени кои му дозволуваат на програмерот наведените инструкции во текст формат, влегуваат кратенки за секоја операција наместо кодот. Во 1954 година на бројот и специфицирање адреси во симболична форма (на пример, да додадете X, ВКУПНО). Внесување на Програмата во асемблерски јазик е обично полесно, побрзо, и помалку склон кон човечка грешка од користење на машински јазик, но бидејќи е асемблерскиот јазик е малку повеќе од една поинаква нотација за машина јазик, било кои две машини со различни инструкции исто така имаат различни собрани јазици. Во 1954 година, FORTRAN бил измислен, тоа било првиот високо ниво на програмски јазик да има функционална имплементација, наспроти само дизајн на хартија (Високо ниво на јазик во многу општи термини, било секој програмски јазик кој им овозможува на програмерот да пишуваат програми во смисла дека се повеќе апстрактно од асемблерски јазикчни инструкции, односно на ниво на "повисоко" од она на асемблер јазикот.) Тоа е дозволено на програмерите да наведете пресметки со внесување на формулата директно (на пример, Y = X * 2 + 5 * x + 9). Програмскиот текст, или извор, се претвора во машински инструкција со користење на посебна програма наречена компајлер, што значи на програмата FORTRAN во машински јазик. Всушност, името FORTRAN значи "Формула за превод". Многу други јазици се развиени, вклучувајќи и некои за комерцијално програмирање, како што COBOL. Програми уште најчесто се прават со влезно користење на ударни картички или лента од хартија. (Види компјутерско програмирање во перфокарта ера). До крајот на 1960-тите години, складирање на податоци во уред и компјутерски терминали станале евтини доволно така што програмита може да биде создадена со пишување директно во компјутери. Текст едитори се развиени така што е дозволено промени и исправки да се направат многу полесно отколку со картички. (Обично грешка во картичка значеше дека на картичката мораше да биде отфрлена и да биде заменета со друга картичка.) Како што времето напредуваше, компјутери направиле гигантски скокови во областа на моќ на обработка. Ова доведе до нови програмски јазици кои се повеќе апстрахирани од основните хардверски. Популарни програмски јазици на модерната ера вклучуваат C + +,C #, Objective-C, Visual Basic, SQL, HTML со PHP, ActionScript, perl, Java, JavaScript, Ruby, Python, Хаскел и многу други.<Наведена мрежна страница|url=http://spectrum.ieee.org/at-work/tech-careers/the-top-10-programming-languages |author=Ritchie S. King |name=The Top 10 Programming Languages |accessdate=2012-11-26> Иако овие јазици на високо ниво обично прават поголеми трошоци, зголемување на брзината на современите компјутери ја направи употребата на овие јазици многу повеќе попрактична отколку во минатото. Овие се повеќе апстрахирани јазици обично се полесни да се научат и да се овозможи на програмерот да развиваат апликации многу поефикасно и со помалку код. Сепак, на јазиците на високо ниво сè уште се непрактични за неколку програми, како што се оние каде ниско ниво хардвер контрола е потребна или каде што максималната брзина на обработка е од витално значење. Компјутерско програмирање стана популарна кариера во развиениот свет, особено во САД, Европа, Скандинавија и Јапонија. Поради високата цена на трудот на програмерите во овие земји, некои форми на програмирање се повеќе предмет на надворешно изведување (увезена програмска опрема и услуги од други земји, обично по пониска плата), што ја прави програмирачките кариерни одлуки во развиените земји повеќе комплицирани, додека зголемување на економски можности за програмерите во помалку развиените области, особено Кина и Индија. Модерно програмирање Барања за квалитет Без оглед на пристап кон развој на софтвер може да биде, конечната програма мора да ги задоволуваат некои основни својства. Следниве својства се меѓу најрелевантните: Сигурност: колку често резултатите на програмата се точни. Ова зависи од концептуална исправноста на алгоритмите, и минимизирање на програмерските грешки, како што се грешки во управување со ресурси (на пример, buffer overflows и race conditions) и логика грешки (како што се поделба од нула или off-by-one errors). Робусноста : колку добро програмата предвидува проблеми не се должи на програмерската грешка. Ова ги вклучува ситуации како што се неточни, несоодветна или корумпирани податоци, недостапноста на потребните ресурси како меморија, оперативен систем и мрежа на врски, и кориснички грешка. Употребливост: на ергономијата на програмата: леснотијата со која една личност може да ја користат програмата за наменетата цел, или во некои случаи дури и непредвиден цели. Ваквите прашања можат да направат пауза или успехот дури и без оглед на други прашања. Ова вклучува широк спектар на текстуални, графички, а понекогаш и хардвер елементи кои подобрување на јасноста, , кохезијата и комплетноста на корисничкиот интерфејс на програмата. Преносливост: опсег на компјутерски хардвер и оперативен систем ,платформи на кои изворниот код на програмата може да биде компајлиран/ толкуван и да ја стартувате. Ова зависи од разликите во програмираните објекти што се предвидени од страна на различни платформи, вклучувајќи хардвер и оперативен систем на ресурси, се очекува однесувањето на хардверот и оперативниот систем и за достапноста на платформа специфични компајлери (а понекогаш и библиотеки) за јазикот на изворниот код.