Програмирање
Програмирање је термин под којим се најчешће подразумева креирање рачунарских програма, што укључује детаљну теоријску разраду проблема, налажење концептуалног решења и имплементацију коришћењем неког од програмских језика. Програмер је специјалиста за програмирање, односно креирање рачунарских програма.[1] Појам програмирање, међутим, обухвата и све остале процесе чији је циљ аутоматизовање решавања одређеног типа проблема, па тако постоји програмирање за телевизијске уређаје, веш-машине, мобилне телефоне, као и математичко програмирање и др. У најопштијем смислу програмирање значи дефинисање низа корака који се обављају један за другим у циљу извршења одређеног задатка.
Рачунарско програмирање је поступак дизајнирања и изградње извршног рачунарског програма за постизање одређеног рачунарског резултата или за извршавање одређеног задатка. Програмирање укључује задатке као што су: анализа, генерисање алгоритама, профилисање алгоритамске тачности и потрошње ресурса, и имплементација алгоритама на изабраном програмском језику (обично се назива кодирање).[2][3] Изворни код програма написан је на једном или више језика који су програмерима разумљиви, а не на машинском коду, који директно извршава централна процесорска јединица. Сврха програмирања је да се пронађе низ упутстава која ће аутоматизовати извођење задатка (који може бити сложен као оперативни систем) на рачунару, често за решавање датог проблема. Вешто програмирање стога често захтева стручност из неколико различитих предмета, укључујући знање из апликационог домена, специјализоване алгоритме и формалну логику.
Задаци који прате и односе се на програмирање укључују: тестирање, отклањање грешака, одржавање изворног кода, имплементацију система изградње и управљање изведеним артефактима, као што је машински код рачунарских програма. Они се могу сматрати делом процеса програмирања, али често се термин развој софтвера користи за овај шири процес, а термин програмирање, имплементација или кодирање резервисан је за стварно писање кода. Софтверски инжењеринг комбинује инжењерске технике са праксама развоја софтвера. Реверзни инжењеринг је сродни процес који користе дизајнери, аналитичари и програмери да би разумели и поново креирали/поново применили програм.[4]
Рачунарско програмирање
уредиУ мањим развојним пројектима фазе креирања програма нису одвојене и изводе се синхроно - реализација зависи од концепције и обратно. У већим развојним пројектима су те фазе јасно одвојене. Фаза израде концепта се у тим случајевима назива дизајн, а реализације имплементација. Програмерима се тада, када су циљеви и методе реализације у претходној фази (дизајну и спецификацији) прецизно одређени, даје мање слободе при имплементацији и његова креативност се заснива првенствено на проналажењу најбољих и најефикаснијих алгоритама и метода реализације појединих задатака (израде компоненти), као и оптимизацији рада тих компоненти.
Програм се обично реализује у једном програмском језику. У њему програмер формулише алгоритме. При томе га све више подржавају генератори кода који на бази модела (производ фазе концепције) аутоматски производе изворни код.
Критеријуми квалитета
уредиКвалитетно програмирање се одликује ефикасним искориштавањем могућности програмског окружења. Првенствено се тежи ка употреби већ урађених (и проверених) софтверских компоненти (библиотека) а не изналажењу већ постојећих решења. Добар програмер се истиче подробним знањем датог програмског окружења (све компоненте потребне при раду и изради програма), брзим налажењем потребних функција при реализовању датог пројекта као и способношћу апстрактне анализе задатих проблема и њиховим представљањем у облику модела или алгоритама.
Програмски језици
уредиСваки програмер пише програмски код у неком програмском језику. Различити програмски језици подржавају различите стилове програмирања (програмска парадигма). Различити програмски језици захтевају различите нивое знања, умећа и детаља које програмер треба да поседује.
Једини програмски језик који рачунар може директно извршавати је машински језик (машински код или бинарни код). У почецима рачунарства програмери су писали у машинском коду, што је било врло компликовано и заморно. Следећи корак у развоју рачунарског програмирања огледа се у употреби симболичких језика, познатих под заједничким називом асемблер. Асемблерски језици састоје се од једноставних инструкција које се директно и једнозначно могу превести у машински код који се директно извршава. Иако много погодније и од машинског програмирања, асемблерско програмирање карактерише велика количина посла коју програмер мора обавити, због чињенице да су операције и даље елементарне. Због тога су стручњаци створили програмске језике вишег нивоа помоћу којих се пише изворни код који се у машински код преводи посредством специјалних програма - преводилаца чији је задатак да преведе код вишег програмског језика у машински код тзв. интерпретер и компајлер.
Кораци у програмирању
уредиПри изради сваког програма потребно је проћи кроз 4 основне фазе или корака:
- Анализа проблема
- Креирање алгоритма (цртање дијаграма тока)
- Писање програмског кода
- Унос програмског кода у рачунар и покретање програма
Анализа проблема
уредиПрви корак у изради рачунарског програма је анализа потреба, разматрање ситуације и проблем који треба решити дефинисати преко једначина, услова и кроз тзв. псеудо алгоритам. Програмеру мора бити јасно како ће се дешавати промене, зависности, узроци и последице, да би све то пренео и прецизирао кроз програмски код. Све мора бити математички прецизирано. Код једноставнијих програма овај део је у домену усмене анализе, док се код сложенијих програма овај део ради у писаној и симболичкој форми уз уредно документирање свих промена (овај део спада у домен софтверског инжењерства).
Креирање алгоритма
уредиРеч алгоритам потиче од имена арапског математичара Џазиријаја који се сматра творцем алгоритма као скупом прецизно дефинисаних правила за извршавање аритметичких операција.[5][6] Алгоритам је процедура (поступак) са скупом јасно дефинисаних корака који недвосмислено воде ка решењу проблема. Сваки алгоритам мора испоштовати 5 основних законитости алгоритма:
- Дефинисаност (сви кораци морају бити јасни и недвосмислени)
- Коначност (извршење алгоритма се мора обавити у одређеном броју корака)
- Поседовање улаза и излаза (морају се дефинисати улази којих може бити: ни један, један или више и излази којих мора бити бар један или више)
- Ефикасност (алгоритам се извршава у разумном временском интервалу)
- Резултативност (алгоритам мора дати решење проблема, а ако нема решења онда поруку да решење не постоји).
Писање програмског кода
уредиНакон завршетка алгоритма, приступа се писању програмског кода на папиру. У овом кораку се сваки корак алгоритма преводи у одговарајућу команду у програмском језику у којем се пише.
Унос кода у рачунар и тестирање програма
уредиКада су извршене све (аналитичке) припреме и ручно исписан код потребно га је унети у рачунар прилагођавајући програмском алату у којем ће се програм тестирати и извршавати. Сваки програмски језик има свој едитор који омогућује унос програмског кода тзв. Изворни код уз контролу исправности исписа кључних речи и синтаксе уопће. Уз едитор у сваком програмском алату налази се и интерпретер који омогућава тестирање сваке линије кода или кода у целини како би се благовремено отклониле евентуалне грешке у синтакси или дефинисаним варијаблама, димензионисању варијабли и сл. Након уноса комплетног програма у рачунар програм се треба покренути да би се видело да ли ради. Програм се треба више пута покренути да би се видело да ли програм ради за различите улазне вредности, а ово подразумева и све граничне вредности.
Елементарне алгоритамске структуре
уредиАлгоритамске структуре се деле у три основне групе:
- Линијска (секвенција)
- Разграната (селекција)
- Циклична (итерација)
Пример алгоритма када није познат коначан број итерација са провером на почетку петље | |||
---|---|---|---|
Пример у Бејзику | Пример у Ц-у | ||
Код провере истинитости на улазу у петљу постоји могућност да се не изврши ни једно понављање. Разлог је једноставан, ако услов није испуњен одмах се „прескаче” на следећу линију изван петље. За ову врсту петље у већини програма се користи кључна реч „WHILE” прилагођена синтакси програмског језика. |
zbir = 0 WHILE zbir < 200 INPUT a zbir = zbir + a WEND PRINT zbir END |
#include <stdio.h> void main() { int a, zbir = 0; while (zbir < 200) { scanf("%d", &a); zbir += a; } printf("%d\n", zbir); } |
|
Пример алгоритма када није познат коначан број итерација са провером на крају петље | |||
Пример у Бејзику | Пример у Ц-у | ||
Код провере истинитости на крају петље, не постоји могућност да се не изврши ни једно понављање. Разлог је једноставан, провера се врши у последњем реду блока изворног кода, те се мора проћи барем једанпут кроз читав блок. За ову врсту петље у већини програма се користи кључна реч „DO..WHILE” прилагођена синтакси програмског језика. |
zbir = 0 DO INPUT a zbir = zbir + a WHILE (zbir < 200) PRINT zbir END |
#include <stdio.h> void main() { int a, zbir = 0; do { scanf("%d", &a); zbir += a; } while (zbir < 200); printf("%d\n", zbir); } |
Економским концептима се даље бави софтверско инжењерство.
Развој софтвера
уредиСтварање неког програма укључује:
- Анализу потреба
- Технички опис
- Дизајн и архитектуру
- Кодирање
- Превођење
- Испробавање
- Документацију
- Одржавање
Види још
уредиРеференце
уреди- ^ „Шта треба да знате да бисте радили као програмер”.
- ^ Bebbington, Shaun (2014). „What is coding”. Tumblr. Архивирано из оригинала 2020-04-29. г. Приступљено 2014-03-03.
- ^ Bebbington, Shaun (2014). „What is programming”. Tumblr. Архивирано из оригинала 2020-04-29. г. Приступљено 2014-03-03.
- ^ Eilam, Eldad (2005). Reversing: secrets of reverseengineering. John Wiley & Sons. стр. 3. ISBN 978-0-7645-7481-8.
- ^ Fowler, Charles B. (октобар 1967). „The Museum of Music: A History of Mechanical Instruments”. Music Educators Journal. 54 (2): 45—49. JSTOR 3391092. S2CID 190524140. doi:10.2307/3391092.
- ^ Noel Sharkey (2007), A 13th Century Programmable Robot, University of Sheffield
Литература
уреди- Eilam, Eldad (2005). Reversing: secrets of reverseengineering. John Wiley & Sons. стр. 3. ISBN 978-0-7645-7481-8.
- Ceruzzi, Paul E. (1998). History of Computing . Cambridge, Massachusetts: MIT Press. ISBN 9780262032551 — преко EBSCOhost.
- Evans, Claire L. (2018). Broad Band: The Untold Story of the Women Who Made the Internet. New York: Portfolio/Penguin. ISBN 9780735211759.
- Gürer, Denise (1995). „Pioneering Women in Computer Science” (PDF). Communications of the ACM. 38 (1): 45—54. S2CID 6626310. doi:10.1145/204865.204875.
- Smith, Erika E. (2013). „Recognizing a Collective Inheritance through the History of Women in Computing” . CLCWeb: Comparative Literature & Culture: A WWWeb Journal. 15 (1): 1—9 — преко EBSCOhost.
- A.K. Hartmann, Practical Guide to Computer Simulations, Singapore: World Scientific (2009)
- A. Hunt, D. Thomas, and W. Cunningham, The Pragmatic Programmer. From Journeyman to Master, Amsterdam: Addison-Wesley Longman (1999)
- Brian W. Kernighan, The Practice of Programming, Pearson (1999)
- Weinberg, Gerald M., The Psychology of Computer Programming, New York: Van Nostrand Reinhold (1971)
- Edsger W. Dijkstra, A Discipline of Programming, Prentice-Hall (1976)
- O.-J. Dahl, E.W.Dijkstra, C.A.R. Hoare (1972). Structured Programming. Academic Press.
- David Gries, The Science of Programming, Springer-Verlag (1981)
Спољашње везе
уреди- Software engineering на сајту Curlie (језик: енглески)