Шта је рачунарско програмирање? Дефинисање развоја софтвера.

Мој петогодишњи син Рами пришао ми је једног дана док сам радила од куће и питао ме: „Шта то радиш мама?“

„Радим“, одговорио сам.

Погледао је у екран мог лаптопа и поново питао: „Али шта то радиш ?“

Застао сам и почео да размишљам о овоме. Ја сам веб програмер и програмирам на ЈаваСцрипт-у. Како да објасним ово петогодишњаку?

„Пишем упутства за рачунар и рачунар ради оно што му кажем. То се зове програмирање ”, објаснио сам. Рами је изгледала збуњено.

Наставио сам, „На пример, могу да дам рачунару упутства за додавање два броја и то ће ми дати одговор.“ Написао сам функцију која је додала 2 + 2 и приказала му одговор на свом екрану. Очи су му засветлеле.

Од тада сам почео да размишљам шта је програмирање ? Шта се заправо догађа испод хаубе? Када сам почео да учим да кодирам 2017. године на фрееЦодеЦамп, користио сам уграђени уређивач кода на веб локацији и видео бих резултате. Међутим, заправо нисам разумео магију која се дешавала иза кулиса.

Почео сам да истражујем и то су били неки од појмова које сам тражио: „Шта је рачунарско програмирање? Шта је софтвер? “ На Гоогле-у постоји преко 600 милиона резултата претраге за „Шта је рачунарско програмирање?“ То је помало попут спуштања у зечју рупу - може бити сложено и неодољиво.

Желео сам да саставим свеобухватан увод о томе шта је рачунарско програмирање и развој софтвера за почетнике. Почећу са рачунарским програмирањем, а затим ћу обрађивати језике рачунарског програмирања. Тада ћу говорити о софтверу и развоју софтвера. Коначно, прећи ћу на тренутне трендове и будућност рачунарског програмирања.

Ако размишљате о преласку у свет програмирања или сте само заинтересовани за учење програмирања, ово ће вам пружити општи преглед, без (превише!) Техничког жаргона.

Имајте на уму само једно: речи „програмер“ и „програмер“ можете користити да бисте значили некога ко пише код.

Шта је рачунарско програмирање?

На Википедији је дефиниција „рачунарског програмирања“:

„Рачунарско програмирање је процес дизајнирања и изградње извршног рачунарског програма за постизање одређеног рачунарског резултата.“

Али шта то значи?

Рачунар сам по себи није паметан. Да, они су моћни и имају потенцијал да извршавају задатке много брже од човека. Али рачунарима је потребан човек да напише упутства и каже им шта да раде.

Стога је програмирање поступак писања тих упутстава. За то користимо програмски језик. Ова упутства су преведена у читљив формат који рачунар може да разуме. Упутства затим извршава рачунар.

Програмирање како направити шољу чаја

Узмимо за пример прављење шоље чаја. Ако бисте дали упутства како да направите шољу чаја, то би изгледало овако:

  1. Прокувајте мало воде
  2. Сипајте врућу воду у шољу са врећицом чаја
  3. Пустите да се чај скува
  4. Уклоните врећицу чаја
  5. Додајте млеко и / или шећер (по жељи)

Једноставно, зар не?

Оно што подразумевамо је да се комуникација са човеком разликује од комуникације са рачунаром. Човек има претходно знање и животно искуство - можда ће знати где да пронађе чај. Претпостављамо да знају да се млеко чува у фрижидеру.

Људи такође имају интуицију. Ако не можете да пронађете шољу, уместо тога можете претражити ормаре. Ту су и читање невербалних знакова људи попут говора тела.

Што се тиче програмирања, морате бити врло прецизни. Настављајући са начином прављења шољице чаја, можда ћете написати упутства у псеудо-коду попут овог:

  1. Иди у кухињу
  2. Пронађите чајник
  3. Отворите поклопац котла
  4. Напуните чајник водом
  5. Укључи чајник
  6. Сачекајте да прокључа на 100 степени Целзијуса
  7. Нађи шољу

И тако даље.

Шта ако упутства попут ових горе нису довољна? Можда ћете морати да додате логику која ће узети у обзир све сценарије. На пример: 2) Пронађите чајник. Па, је ли то електрични чајник или чајник који сте ставили на плочу за кухање? Мораћете да додате услов да ако је електрични чајник, направите киз. У супротном , направите киз за котлић који сте ставили на плочу за кухање.

Чак и када мислите да сте објаснили све могуће услове и дали врло конкретна упутства, постоје ствари које можда нећете предвидети. Почнете да правите шољу чаја и нешто пође по злу. О, не! Ваш котлић престаје да ради након што га почнете да кључате.

Шта се десило? Постоји грешка у вашем коду! Грешка је грешка или мана вашег кода која може довести до неочекиваних резултата. Да бисте поправили свој код, пролазите кроз поступак „отклањања грешака“, где ћете пронаћи проблеме у свом коду и решити их.

У овом случају, ваша упутства нису укључивала пуњење котла до 0,8 литара да покрије грејни елемент. Тако се котлић искључује као сигурносна мера.

Да не би дошло до грешака након покретања програма, програмери врше тестирање и јединствено тестирање на својим програмима. Јединствено тестирање је место где пишете тестове за делове кода. Тестови или не успевају или пролазе.

На пример, напишете функцију која додаје два броја: 1 + 1. Затим напишете јединични тест где је очекивани излаз 2. Сви одговори неће успети ако нису 2.

Пролазите кроз свој код док се све не покрене без неочекиваних проблема. Програмирање је стога детаљно оријентисан и понављајући поступак у којем непрестано побољшавате оно што сте претходно написали.

Како рачунар разуме ваш код?

Оно што већина програмера записује као „код“ је програмски језик високог нивоа. Дизајн је апстрактан. Апстракција у овом контексту значи да се удаљавамо од машинског кода и програмски језици су ближи говорним језицима.

Али рачунар не може да разуме код заснован на тексту. Треба га компајлирати (превести) у машински код. Машински код је скуп упутстава која може да разуме централна процесорска јединица рачунара (ЦПУ). Замислите ЦПУ као мозак рачунара. Машински код се састоји од јединица и нула. Ово се назива бинарно.

На пример, овако бисте написали „Хелло Ворлд“ у бинарном облику:

01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100

Као што видите, бинарни систем није лако читљив за људе, па настојимо да избегавамо програмирање у машинском коду!

Шта је заправо програмски језик?

Програмски језици спадају у спектар језика ниског нивоа, као што је монтажа, и програмских језика високог нивоа, као што је ЈаваСцрипт.

Али шта је тачно програмски језик? Најбоља аналогија којих се могу сетити су говорни језици које данас користимо. Сви језици изражавају исту идеју, али на различите начине према другој особи:

Енглески: Здраво

Француски: Боњоур

Шпански: Хола

Програмски језици су различити начини изражавања исте идеје, али уместо рачунара. Следеће ће исписати „Здраво“ на три различита програмска језика:

ЈаваСцрипт: alert(“Hello”);

Питхон: print(“Hello”)

Перл: print "Hello";

Сваки програмски језик има своју синтаксу. На енглеском језику имамо граматику. Исто се односи на програмске језике - сваки од њих има свој сет правила.

Како знати да ли је програмски језик програмски језик?

Ово би могло изгледати необично питање. Да ли је сав код написан на програмском језику? Технички, не. На пример, постоји погрешно мишљење да је ХТМЛ (ХиперТект Маркуп Лангуаге) програмски језик. То је у ствари „декларативни“ језик, који је према Википедији:

„... стил изградње структуре и елемената рачунарских програма - који изражава логику рачунања без описивања његовог контролног тока.“

Другим речима, ХТМЛ пружа структуру веб странице, али не контролише како се веб локација понаша или функционише.

Можете ли утврдити да ли је језик програмски језик да ли је „Туринг завршен“. Турингова машина је хипотетска машина коју је 1936. описао Алан Туринг. Да би програмски језик био Турингов комплетан, потребно је:

  1. Условно гранање (које истражујем у наставку).
  2. Способност читања и писања на бесконачну папирну траку. То у суштини значи могућност складиштења података у меморији.

Нећу детаљно истраживати ову тему, али ако сте заинтересовани, овај видео је користан увод.

Које су основе програмског језика?

Постоје неки основни елементи који су обично представљени. То укључује променљиве, петље, условне изјаве, структуре података и алгоритме. То су градивни блокови већине програмских језика.

Шта је „фор лооп“?

Јер су петље корисне ако морате више пута извршавати низ упутстава. На пример, поподневни чај морате да припремите за госте пет шоља чаја. Да бисте направили једну шољу чаја, морате следити низ упутстава, као мој ранији пример.

Уместо да упутства напишете пет пута, можете да кажете рачунару да пет пута прође кроз исте упуте. Ово вам омогућава скалирање.

Испод је пример основне forпетље:

for (let i = 0; i < 5; i++) { console.log("Make Tea!"); } //expected output: "Make Tea!" "Make Tea!" "Make Tea!" "Make Tea!" "Make Tea!" 

Шта је условна изјава?

У ЈаваСцрипт-у имамо if...elseусловне изјаве. Користе се када желите да извршите различите акције на основу услова.

Враћајући се на мој ранији пример, питате корисника да ли жели млеко у свом чају. Ако заиста желе млеко, додајте млеко у чај, иначе не радите ништа.

Ево примера if...elseизјаве у ЈаваСцрипт-у:

if(milk == true) { // add milk } else { // don't add milk } 

Шта су структуре података?

„Структура података је начин организације података како би се могли ефикасно користити ... Они су кључни састојци у стварању брзих и моћних алгоритама.“

(Курс структура података лак за напредовање, Виллиам Фисет)

Уобичајене структуре података које можете пронаћи у многим програмским језицима су низови, објекти, корице и уније. Као пример узећу низове.

У ЈаваСцрипт-у низ може да ускладишти низ података као што су бројеви и низови (текст). Обожавам кексе са својим чајем, па ћу их спремити у свој низ:

biscuits = [“shortbread”, “digestive”, “ginger nut”]; 

Ови кекси се чувају у меморији рачунара и ви као програмер можете приступити одређеном кексу референцирајући се на његов индекс. Индекс почињете да рачунате од 0. Индекс је сличан положају бисквита у лиму за бисквит. На њега се позивате помоћу ознаке угластих заграда.

biscuits[0]; // “shortbread” biscuits[1]; // “digestive” biscuits[2]; // “ginger nut” 

Ако желите да добијете варење кекс, можете приступити своју индек позицију: biscuits[1]. Лако га могу наћи, јер знам где се налази.

Запамтите да је прва ставка низа индекс 0. Дакле, када се позивате на индекс 1, то је заправо друга ставка низа.

Стога су структуре података начин управљања подацима. То укључује чување и преузимање података. Ефикасније је извршавати алгоритме ако су подаци организовани у структури података.

Шта је алгоритам?

Алгоритам је одређени скуп упутстава који решава проблем. То је апстрактан концепт. Ево везе до кратког видео снимка са ТЕД-а на тему „Шта је алгоритам?“.

Сећате се када смо раније писали упутства о томе како направити шољу чаја? То је у основи алгоритам: скуп секвенцијалних упутстава.

Када сам написао своју прву функцију на ЈаваСцрипт-у, уствари сам створио свој први алгоритам, а да нисам знао да је то алгоритам! Функција је имплементација алгоритма.

Баш као и у стварном животу, често постоји више решења за проблем кодирања. На пример, реците да планирате да одете у кафић у којем никада раније нисте били. Постоји неколико начина како доћи до одредишта. Неке руте трају дуже од других, али на крају вас све воде на исто место. У идеалном случају желите да одаберете најбржи, најефикаснији и најлакши пут.

Исти принцип се може применити и на програмирање. Обично постоји неколико начина за решавање проблема са кодирањем, а програмери се труде да пронађу најелегантније и најефикасније решење.

Програмери то често не успеју већ у првом покушају! Као што бих написао први нацрт за чланак, исти је и за кодирање. Неколико пута бих преправио чланак, где бих могао да променим структуру, уредим, препишем одељке и исечем непотребне реченице. У програмирању пролазимо кроз сличан процес и то називамо рефакторизирањем нашег кода.

Који су главни програмски језици који се данас користе? Колико их има?

Чини се да постоји нека расправа о укупном броју програмских језика на Интернету. Неке веб странице попут Википедије наводе приближно 700 „свих значајних“ тренутних и историјских програмских језика. Друге странице, попут Тиобе, прате и прате 250 „најпопуларнијих“ језика.

На Гитхуб-у, најпопуларнији програмски језик 2019. године био је ЈаваСцрипт:

Зашто постоји толико програмских језика? Како су се развијали програмски језици?

Различити програмски језици су развијени да задовоље различите потребе. То се показује током историје програмских језика. Погледајте овај О'Реилли-јев дијаграм који приказује историју програмских језика од 1950-их до 2004-их.

Средином 1950-их, ФОРТРАН (Превођење формуле) створен је за решавање сложених математичких, статистичких и научних проблема. ЦОБОЛ („Заједнички језик оријентисан ка пословању“) створен је 1959. године како би предузећима олакшао употребу кода. Постоје неки језици који су погоднији за обављање статистичке анализе попут Р (1976).

Уследио је пораст програмских језика опште намене од 1970-их па надаље, као што су Ц, Ц ++, Ц # и Јава. Као што видите на графикону изнад, језици опште намене доминирају међу 10 најпопуларнијих језика.

ЈаваСцрипт, створен 1995. године, популаран је језик за веб. Веб локацијама даје интерактивност и живот.

У новије време видели смо рађање нових језика као што је Го од Гоогле-а, чији је циљ био ефикасније одржавање великих софтверских система. Вероватно ћемо видети још више програмских језика створених у будућности.

Састављени у односу на протумачени програмски језици

Како се почињете упознавати са програмским језицима, наилазите на компајлиране и протумачене програмске језике. Која је разлика?

Шта је компајлирани језик?

Програмски језици као што су Ц, Ц ++ и Јава имају процес „изградње“ где се ваш код компајлира у читачји формат (машински језик) за рачунар.

Можда ће бити лакше помислити на двоје људи који не говоре исти језик, али морају да раде заједно. Џон говори енглески, а Клои француски. Клои пише сет упутстава о томе како направити чоколадни суфле на француском, али Џон то не може да разуме. Потребан им је преводилац који може да говори енглески и француски. Лакше је ако преводилац може унапред да преведе Цхлое-ина упутства пре него што започну заједничко кување.

Уместо тога, програмери „говоре“ програмским језиком као што су Јава или Питхон. Потребно је да се њихов код компајлира (преведе) на машински језик да би програм могао да се покрене како би га рачунар могао разумети.

Програми направљени од компајлираног језика рачунару је лакше да разумеју и зато се врло брзо изводе.

Шта је протумачени језик?

ЈаваСцрипт, ПХП и Питхон су примери тумачених програмских језика. Не постоји поступак израде и код не треба компајлирати. Ваш код се тумачи или чита ред по ред док покрећете програм.

Повратак на моју аналогију Цхлое и Јохн. Јован записује сет упутстава како се прави пастирска пита. Преводилац не преводи Јованова упутства унапред, већ им се придружује на сесији кувања. Преводилац преводи сваки ред Јохн-ових упутстава са енглеског на француски док Цхлое кува. Због тога је потребно више времена да Цхлое припреми и скува јело.

Стога су интерпретирани језици спорији од компајлираних језика. Морају се превести у лету како би рачунар могао да их разуме.

Али са праводобним (ЈИТ) компајлерима, тумачени језици постају бржи и ефикаснији.

Који програмски језик (језике) да одаберем за учење?

Програмски језици углавном чине исто, али то су само различити начини изражавања истих упутстава рачунару. Једном када схватите концепте и основе једног програмског језика, крива учења за учење другог језика неће бити толико стрма.

Програмски језик који бисте требали одабрати да научите прво зависи од низа фактора. На пример, желео сам да будем веб програмер, па сам изабрао ЈаваСцрипт као свој примарни програмски језик. Остали језици за веб које можете научити су ПХП и Руби он Раилс.

Ако желите да постанете научник података, онда би Питхон могао бити опција. Питхон се сматра једним од најбољих алата за науку података за анализу великих података. Раније сам споменуо Р, још један језик који се широко користи међу научницима и статистичарима података.

Питхон је програмски језик опште намене, а такође је корисно научити ако желите да уђете у поље машинског учења и вештачке интелигенције.

Ако желите да постанете софтверски инжењер, онда Јава може бити опција. Јава је један од најпопуларнијих и најтраженијих језика на свету. То је свестран језик који се може користити за развој софтвера од малих до великих предузећа.

Па размислите о томе коју бисте улогу у технологији желели и за какве компаније желите да радите.

Избор програмског језика такође зависи од тога који софтвер покушавате да направите. Ово нас лепо води до следећег одељка.

Шта је софтвер?

Колико пута комуницирате са софтвером одређеног дана?

Софтвер је свуда. Интегрисан је као уграђени систем у свакодневне уређаје као што су микроталасна пећница, веш машине, аутомобили, телевизори, дечије играчке и даљински управљачи. Затим постоје очигледнији рачунарски уређаји који имају апликативни и / или системски софтвер попут таблета, паметних телефона, преносних рачунара, стоних рачунара и кућних асистената попут Алека.

Просечна особа вероватно комуницира са софтвером неколико десетина пута дневно, ако не и више. То је део нашег свакодневног живота.

Сав софтвер програмира програмер. Софтвер је по својој природи окретан и може се стално понављати. Софтвер и хардвер су међусобно повезани. Замислите свој телефон без његових апликација и оперативног система. Телефон би у основи био скупа цигла! Стога софтвер даје хардверу живот, а хардвер је начин на који комуницирамо са софтвером.

Већина софтвера који су креирали програмери написана је на програмском језику високог нивоа.

Шта је развој софтвера?

Развој софтвера је све, од концепције идеје до развоја и примене. Овај процес, од конципирања идеје до примене софтвера, познат је и као животни циклус софтвера.

Постоји неколико фаза животног циклуса софтвера: откривање, дизајн, програмирање / креирање, тестирање и примена / извршавање. Такође укључује све остало у екосистему за развој софтвера, попут одржавања, документације и исправки грешака.

Нећу овде улазити у детаље, јер тема развоја софтвера оправдава властити чланак.

Тренутни трендови у развоју софтвера и рачунарском програмирању

Вештачка интелигенција и машинско учење

Последњих година вероватно сте чули за изразе попут вештачке интелигенције и машинског учења. Понекад се користе наизменично, али да ли су исти?

Не, нису сасвим исте ствари. Машинско учење је место где машина учи искуством. Док је вештачка интелигенција шира идеја да машине могу интелигентно извршавати задатке. Машинско учење је подскуп вештачке интелигенције.

Шта је вештачка интелигенција?

Објаснио сам како функционишу програмски језици - програмер пише сет упутстава за извршавање рачунара. Вештачка интелигенција (АИ) је шири концепт где рачунари могу опонашати начин на који мозак функционише. То увежбава машину да „размишља“ као човек.

Велико питање је: да ли можете да пресликате људску интелигенцију у машини? Можете ли опонашати начин на који човек учи, расуђује и опажа? Алан Туринг је ово питање поставио у свом чланку 1950:

„Могу ли машине да размишљају?“

(Рачунарске машине и интелигенција, 1950. Алан Туринг)

У Тјуринговом чланку он је предложио „Тјурингов тест” у којем би машина била класификована као „интелигентна” ако особа не би могла да разликује разлику између одговора човека и вештачки интелигентне машине.

После 70 година програмери АИ, академици, научници и истраживачи и даље покушавају да одговоре на ово питање и створе вештачки интелигентну машину. Мислим да још нисмо тамо. Да ли сте покушали да разговарате са Сири или Алека? Разговори са ова два уређаја су и даље основни. Међутим, сигуран сам да је само питање времена када ће се технологија побољшати.

Компаније попут ДеепМинд истражују овај концепт и да ли су машине способне за интелигенцију. АлпхаГо програм ДеепМинд-а доспео је на насловне стране када је победио професионалног играча у Го-у. Ово је била велика прекретница за АИ.

Шта је машинско учење?

Машинско учење (МЛ) је подскуп вештачке интелигенције. МЛ је другачији начин програмирања. Идеја је да рачунар може да учи без изричитог програмирања. Артхур Самуел је први пут дошао на идеју машинског учења у свом раду 1959. године:

„Програмирање рачунара за учење из искуства на крају би требало елиминисати потребу за великим делом овог детаљног напора у програмирању.“

Када сам подучавала свог сина како да препозна мачку, показивала бих му слике мачака. То сам радио више пута док није успео да препозна мачку, а да га нисам подстакао.

Машинско учење је слично овоме. Дајете рачунару стотину слика (уноса) мачака. Затим учи обрасце у подацима и понавља систем класификације. Ако свом рачунару дате више слика мачака и других животиња, требало би да може да препозна да ли је животиња на слици мачка или не. У основи је научио како мачка треба да изгледа.

МЛ даје податке о вашем рачунару и примере, а заузврат је у стању сам да учи као што то раде бебе и мала деца. Уместо да програмери дају упутства рачунару, рачунар креира свој сет упутстава која треба следити - алгоритми за машинско учење. Алгоритми машинског учења је подскуп МЛ-а, концепта познатог као „дубоко учење“.

„АИ је једна од најдубљих ствари на којима радимо као човечанство. То је дубље од ватре или струје ... “

(Сундар Пицхаи, Светски економски форум, јануар 2020)

Цитат Сундара Пицхаија, извршног директора Алпхабет Инц, резимира значај АИ и МЛ.

Каква је будућност рачунарског програмирања?

Овај последњи одељак биће моја предвиђања о будућности рачунарског програмирања.

Програмери ће наставити да стварају нове програмске језике. Програмски језици постаће апстрактнији и, према томе, доступни особама које уче кодирање.

Верујем да ће се већи значај придавати образовању за програмирање и програмирање у основним и средњим школама. Потражња за програмерима и програмерима ће се повећавати како технологија и софтвер постају све интегрисанији у наш свакодневни живот. Програмирање ће постати свеприсутно.

Видећемо стални раст и популарност МЛ и АИ како би помогли програмерима у процесу развоја софтвера. То укључује аутоматизовање тестирања, заједно са откривањем и спречавањем рањивости и грешака.

АИ ће револуционирати све аспекте нашег друштва, не само у програмирању и развоју софтвера. На пример, видели смо велике кораке у области уметничке интелигенције и аутомобила који се самостално возе.

Једна од водећих светских компанија која се бави развојем аутомобила са властитим погоном је Тесла, коју је основао Елон Муск. Уз надзор људског возача, аутомобил Тесла сада може аутоматски променити траку, аутономно се кретати аутопутем с ограниченим приступом, а власник може позвати аутомобил у гаражу или на паркинг место. Теслин циљ је створити потпуно аутоматизован, самовозећи аутомобил без икаквог људског надзора.

Како машине постају интелигентније, можемо доћи до тачке у којој машине надмашују интелигенцију људи. Ово се назива сингуларношћу. У овом тренутку то може изгледати као комплетна научна фантастика! Али значајне бројке попут Реја Курцвајла предвиђају да ће машине са интелигенцијом на људском нивоу бити доступне у наредних 20 година. Курзвеил је познат по својим тачним предвиђањима како ће технологије напредовати. О томе је написао књигу: Доба духовних машина.

Како ће се наше друштво променити као резултат супер интелигентних машина?

Завршне речи

Технологија утиче и кодира готово сваки део нашег живота. Од избора забаве (игре на мрежи, стриминг) и начина куповине, до избора онога што једемо, па чак и како излазимо! Код је важан и више послова ће се променити и захтеваће од људи бар неко основно разумевање програмирања.

Па ипак, постоји само приближно 23,9 милиона програмера на свету према студији Глобал Девелопер Популатион анд Демограпхиц 2019. Да бисмо то ставили у перспективу, само 0,3% светске популације зна како да програмира. Као што сам раније говорио, наша зависност од софтвера и технологије се повећава. Према статистикама америчког Бироа рада, очекује се да ће потражња за софтверским инжењерима порасти за 21% од 2018. до 2028. Због тога морамо да повећамо број програмера.

Ако размишљате о томе да постанете програмер, почните већ данас. Невероватно је узбудљиво време за то! На мрежи постоји много ресурса за учење кодирања. Постоје саме платформе попут фрееЦодеЦамп. Ту је и сјајан пост Лауренцеа Брадфорда који комбинује све најбоље ресурсе за бесплатно учење кодирања. Истражите и сазнајте који ресурс одговара вашем стилу учења.

Ако имате било каквих питања или само желите да се поздравите, пронађите ме на Твиттеру @ПхоебеВФ.

Посебна захвала Катерини Лимпитсоуни из Ундрава за стварање илустрација за овај чланак.