Закључак

На самом крају овог „путовања кроз књигу”, биће поновљене основне идеје и принципи на којима је сам уџбеник заснован. Најпре, показано је да програмски језик није само средство да се рачунар натера да ради оно што корисник жели, већ да је такође и један нови, формални начин за изражавање метода израчунавања. Дакле, узимајући то у обзир, програми би морали да буду писани тако да их људи могу лако читати и разумети, а само успут да их и рачунари могу извршавати. Затим, иако је програмски језик Пајтон коришћен да илуструје велику већину примера, суштинска замисао обраћања читаоцу није да се пренесе синтакса одређеног програмског језика, нити приближе алгоритми за ефикасно израчунавање појединих функција и операција, па чак ни математичка анализа алгоритама и основа израчунавања, већ технике за смањење и управљање интелектуалном и когнитивном сложеношћу великих софтверских система. Једна од главних ствари коју би читаоци требали да су усвојили на крају овог излагања јесте добар осећај за естетику и стил програмирања. Такође, требало би да су савладали и основне технике за ублажавање или умањење комплексности великих система.

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

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

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

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

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

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

У основи приступа материји која је предмет овог уџбеника лежи уверење да рачунарство, односно у буквалном преводу „рачунарске науке“ (енг. computer science), није наука, те да сам значај рачунарства чак и нема првенствено везе са рачунарима. Рачунарска револуција заправо је револуција у начину размишљања и у начину изражавања идеја и онога што мислимо. Суштина ове промене је појава парадигме која би се најбоље могла назвати процедурална епистемологија — проучавање структуре знања са императивног становишта, за разлику од декларативног, то јест исказног гледишта класичних математичких предмета. Математика пружа алат и оквир за прецизно баратање појмовима у смислу шта је нешто. Израчунавање пружа оквир и алат за прецизно баратање појмовима како нешто урадити.

За преношење знања и излагање материје изабран је Пајтон, програмски језик високог нивоа који подржава безмало све основне програмерске парадигме: императивно (процедурално), објектно-оријентисано и функционално програмирање. У овом уџбенику Пајтон се не уводи, нити изучава формално, јер га читаоци и без тога савладају за релативно кратко време што је његова велика предност. На крају крајева, циљ и није био изучавати један програмски језик, већ програмирање као такво. Предмет и циљ градива јесу како нешто израчунати, па на том истом курсу и како разложити веће проблеме на мање целине које ће бити обрађиване појединачно. Још једна предност Пајтона је да подржава више стратегија модуларне декомпозиције и растављања програма. Као што је приказано у прва два поглавља, могу се вршити функционалне апстракције и апстракције података, могу се користити функције вишег реда за описивање уобичајених образаца употребе, могу се моделирати локална стања помоћу додељивања и мутације података. Затим, како је приказано у последњем поглављу, могу се повезати делови програма са токовима и одложеним вредновањем, програми се могу паралелизовати путем расподељеног израчунавања и обраде података, а такође се и лако могу имплементирати уграђени, тачније обласно-специфични језици. Све ово је уграђено у доступна интегрисана интерактивна развојна окружења са одличном подршком за инкрементално пројектовање, писање и тестирање програма, као и за отклањање грешака.

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

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