Ах, наивност. Убавината на новите нешта. Она кога уште немаш поим колку ќе се нервираш за некои работи, наспроти оптимизмот дека можеш да направиш буквално сè. Со секоја година сум сè подалеку од оној 100% наивен Red Hood и на моменти ми фали таа доза на детски оптимизам. Без гајле, сè уште ја имам и дел од него засекогаш ќе остане во мене, но дел е веќе созреан и умее да посочи на реалноста и на грешките, на моментот дека светот и знаењето не се црно-бели. Напротив, има многу голема сива маса.
Со ова ве подготвувам за она што следи. Мојот пат како јуниор Data Scientist содржи убав вовед, мотивација, грешки, но сега ќе пишувам за навики. Оние програмерските. Оние кои имаат падни-стани момент на обиди и грешки и одат во крајности – знаат да ве остават без спиење што ве истоштува зашто не можете да го најдете решението, за потоа од нигде никаде да доживеете „Еурека“ момент.
Кога се навраќам на моите почетоци во програмирање, секогаш ги гледам со розoви очила: прости задачи, наоѓање на периметар на триаголник, просек на броеви и многу слични задачи, што ќе ви се познати, ако некогаш сте почнале да учите програмирање. Но, ако сте го поминале тој почеток, знаете дека таа проста перспектива на „програмерските проблеми“ брзо е заменета со многу потешки проблеми за решавање. За тие што сè уште се на почетните фази или пак допрва ќе почнуваат, можам да понудам неколку совети, за да не создадете лоши навики кои подоцна ќе мора да ги „тргате“.
Прва навика: Лошо именување на променливи (варијабли) и функции
Оваа навика ја имав 4 години и дури минатата година почнав да ја одвикнувам, така што можам да кажам дека е неверојатно штетна за да ви остане. Именување на променливи со a, b, c, i, x, y и слични единечни букви, како и некои кратенки кои не се универзални (пишување bgp наместо best_game_played), станува поштетно што повеќе програмирате. Секогаш пробувајте да ја опишете променливата во нејзиното именување. На пример, ако имате бројач, именувајте го counter, ако сакате да зачувате фудбалер со најдобри преформанси, именувајте го best_preformance_footballer. Ако функцијата ви собира два броја, именувајте ја number_adder и слично. Проблемот од оваа лоша навика настанува кога имате многу голема задача или работите на проект со повеќе луѓе и имате користено лоши именувања. Па така, кога ќе пробате или вие или вашите колеги да сфатите на што се мисли, ќе се изгубите барајќи што е тоа што би требало „а“ да значи.
Втора навика: Подобро е да се пишува описно, одошто кратко
Едноставно решение не значи и подобро решение. Ова е исто така работа што многу често ја правев и мислев дека сум нешто посебно добар што можам да направам нешто што е барано со помалку код од очекуваното. Во суштина, секогаш ќе е поважно да напишеш почитлив код одошто да напишеш краток код. Со ова не велам дека треба да се зголеми комплексноста во име на читливост, односно секогаш да се оди на пишување подолги кодови, но ако нешто напишеш во една линија и после тоа си речеш „Нема да имам поим како ова ми работи, ако треба пак да го прочитам“, напиши го одговорот во повеќе линии. Ова е особено важно за јазици како Java и C++, но важи многу и за Python, во форма на list comprehension наместо за циклуси или пак lambda функции наместо убаво дефинирани функции.
Трета навика: Делење на проблемот на повеќе (помали) проблеми
Ова е позитивна навика која ја стекнав со тек на време, па можно е и вас да ви треба време за да ја стекнете. Концептот е лесен: aко задачата која ви е дадена e подолга од една реченица, најверојатно има начин да се подели на повеќе помали проблеми. Навиката што треба да ја создадете е сами да си го делите проблемот на помали проблеми и потоа да сфатите како пак да ја споите. Како најпрост пример за ова ќе ја земам обичната задача за решавање плоштина на триаголник. Да разгледаме што треба да направиме за да најдеме плоштина на триаголник, ако ни се дадени големините на страните:
- Ги внесуваме страните како променливи
- Наоѓаме плоштина на триаголникот
- Ја враќаме плоштината
Ова е некоја основна поделба и е многу едноставна. Во случајот на Data Science, може да имаме многу покомплициран проблем. Еве еден пример за тренирање модел користејќи податочно множество:
- Собираме податоци
- Ги чистиме податоците
- Бираме модел и го имплементираме
- Го евалуираме моделот
- Го тренираме моделот
- Предвидуваме користејќи го моделот
Секој еден од овие проблеми може да се подели на уште помали проблеми, но можете да замислите колку би било тешко да се обидеме сето ова наеднаш да го направиме. Ако на еден проблем не можете да му смислите едноставно решение, поделете го проблемот на помали и полесни проблеми.
За крај, не дека нема други навики што требало да ги надминам или почесто да ги применувам. Сигурно има такви за кои ќе ми треба уште време за да се свестам дека ги правам, имам премногу примери во кои се наоѓам себеси како подоцна сфаќам дека правам нешто што ми помага, односно одмага.
До следното читање,
Вашиот Red Hood!
_____________________________________________________________
Chapter 2: Зошто сакам да го учам и работам ова?
Chapter 3: Грешки при учење Data Science (и како се справив со нив)