Úvahy programátora – Refaktorovanie

Naša historicky prvá úvaha programátora (a snáď nie posledná). Poviem ti, prečo by si mal/a byť ako hrčiar a teda prečo je refaktorovanie dôležité a prečo by si mal/a refaktorovať svoj kód.

Táto úvaha je dostupná aj vo forme videa na YouTube a aj ako krátky podcast napr. na Spotify normálne v rámci nášho podcastu.

Stiahnuť

Veľmi zriedka sa ti ako programátorovi stane, že kód, ktorý napíšeš, je dokonalý na prvý pokus. Hm, tvoj kód vlastne možno nikdy nebude dokonalý. Ale na to, aby si sa k dokonalosti aspoň ako tak vedel alebo vedela priblížiť je tu refaktorovanie.

Toto sú úvahy programátora.

Predstav si hrnčiara. Na jeho hrnčiarskom kruhu sa mu točí nejaká kopa hliny. Táto kopa hliny reprezentuje myšlienky, ktoré sa tebe točia v hlave o tom, ako nakódiš tvoju aktuálnu úlohu. Jemným pritláčaním na správne miesta tejto kopy hliny hrnčiar postupne vytvorí niečo, čo sa trošičku podobá na krčah. Je to taký ošarpaný, hrboľatý a divný možno-krčah. Tento ošarpaný, hrboľatý a divný možno-krčah je ako tvoj prvotný kód, ktorý by mal byť akože to, čo si plánoval alebo plánovala nakódiť.

Dobrý hrnčiar sa však neuspokojí s ošarpaným, hrboľatým a divným možno-krčahom. Dobrý hrnčiar, chce mať pekný a uhľadený jednoznačne-krčah. Preto sa dobrý hrnčiar nevzdáva. Využije svoju jemnú motoriku a z ošarpaného, hrboľatého a divného možno-krčahu spraví pekný a uhľadený jednoznačne-krčah.

Asi už aj stačilo všetkých tých prídavných mien. Poďme ďalej.

Tak, ako sa dobrý hrnčiar neuspokojí s možno krčahom, tak by si sa ani ty nemal alebo nemala uspokojiť s tým prvým, čo nakódiš. A možno ani tým druhým. Mal alebo mala by si svoj kód upraviť. Ako som už povedal, proces upravovania kódu do prijateľnej podoby nazývame refaktorovanie.

Nie nadarmo sa v programovaní hovorí, že prvých 80% práce spravíš za 20% času a zvyšných 20% práce spravíš za 80% času. Vyprodukovať funkčný kód je väčšinou pomerne jednoduché. To je tých prvých 80%. Funguje ti to. Trvalo ti to deň. Celý natešený alebo natešená si hovoríš aký alebo aká si super a že už to iba trošičku doladíš a zajtra ráno robíš PR-ko.

Ako tak ale postupne prechádzaš cez tento tvoj prvotný výplod, začínaš si všimať, že ten tvoj kód je ako ten možno-krčah – ošarpaný, hrboľatý a tak trochu divný. Začneš upravovať. Upravuješ celý deň. Prichádza panika, lebo šak už to malo byť pushnuté a už si pomaly mal alebo mala riešiť pripomienky z code review.

Upravuješ ďalej. Zrazu si uvedomíš, že tam máš nejaký ten nepokrytý edge case. Opravuješ edge case. By the way – áno, aj jemné úpravy alebo fixy môžu byť súčasťou refaktorovania nového kódu. Ďalšieho pol dňa fuč. Ale zároveň sa tešíš lebo tvoj kód je zase o čosi hladší. Pokračuješ.

A nejak podobne sa ti toto upravovanie (refaktorovanie) natiahne na 4 dni, kedy konečne vytvoríš PR-ko s tvojim takmer dokonalým kódom. Hej, reálne to nemusí trvať štyri dni, ale potreboval som sa dostať na to, aby mi sedelo to 80-20 rule. Čo som týmto chcel hlavne povedať, je to, že buď ako dobrý hrnčiar – refaktoruj svoj kód. Zamysli sa nad tým, ako sa tvoj kód dá možno ešte vylepšiť. Veľmi zriedka sa totiž stane, že ti žiadne zlepšenie nenapadne.

A už to možno skoro znie aj ako záver môjho rozprávanie. Ale ešte nekončíme.

Je tu ešte druhý druh refaktorovania – refaktorovanie starého a/alebo cudzieho kódu. V prvom rade treba povedať, že čo je to vlastne ten starý kód? To môže byť akýkoľvek kód, ktorý už bol mergnutý do mastera (alebo main-u alebo akokoľvek nazývate svoju hlavnú branchu) a ty sa na tento kód z nejakého dôvodu znova pozeráš. To je starý kód. A čo je to ten cudzí kód? To je starý kód, ktorý si možno písal alebo písala aj ty.

Prečo by trebalo starý kód refaktorovať? Pretože do tohto kódu sa postupne pridávali ďalšie a ďalšie veci a nikto sa nepozeral na tzv. velký obraz – big picture. Každý sa pozeral iba na tie svoje malé zmeny, ktoré síce boli refaktorované, čiže takmer dokonalé, ale v tom big picture to postupne prestalo byť takmer dokonalé. A to nie je zlé. To nie je krivda tomu tímu, ktorý to dopustil. To sa proste tak stane.

Avšak dobrý hrnčiar (alebo aj programátor alebo programátorka) tento kód zoberie a pozrie sa naň z toho big picture a nájde tam nejakú peknú príležitosť na refaktorovanie. Ale zároveň to nesilí. Zamyslí sa nad tým, či ten refaktor stojí za to. A keď áno, nezlakne sa a odvážne tento refaktor spraví, aby sme mali opäť pekný a uhľadený jednoznačne-krčah. Hm, teda kód, sorry.

Pri refaktorovaní treba však dávať pozor aj na to, aby sme náš krčah nedoľaďovali až tak, že zrazu v ňom budeme mať diery. To znamená, aby sme to proste nepreháňali. Pretože ďeraví krčah je nám na nič. Podobne ako nám je na nič aj kód, ktorý je tak zrefaktorovaný, že sa v ňom ťažko naviguje, ťažko sa číta, má jednoriadkové funkcie a ani hrnčiar netuší, čo to vlastne celé robí a hlavne ako. Aj v tomto prípade treba nájsť balans – nejakú rovnováhu.

Rovnováhu medzi tým, čo sa ešte oplatí refaktorovať a čo už by bolo fakt priveľa. Rovnováhu aj medzi tým, koľko času ma toto refaktorovanie stojí a koľko času mi možno ušetrí alebo stratí v budúcnosti. Rovnováhu medzi tým, koľko ďalších úloh som mohol počas tohto refaktorovania urobiť. A ešte rovnováhu medzi tým, koľko peňazí je ten, kto ma platí, ochotný za toto refaktorovanie minúť.

A preto buď dobrý hrnčiar. Mysli na hrnčiarov, ktorý budú tvoj krčah upravovať po tebe. Hm, ak sa moja analógia s hrnčiarom doteraz nerozbila, tak teraz som ju už rozbil. Prečo by niekto po mne upravoval krčah? Snáď ale chápeš, čo tým chcem povedať. Možno práve ty budeš ten alebo tá, kto bude upravovať tvoj kód v budúcnosti a budeš sa čudovať, aký neschopný hrnčiar toto nakódil. A až Git Blame ti odhalí, že si to bol alebo bola vlastne ty a vtedy si uvedomíš, že si mal alebo mala refaktorovať.

Ak si sa dostal alebo dostala až sem, tak sa veľmi teším. To znamená, že sa ti táto úvaha programátora páčila, alebo si čakal alebo čakala na pointu, ktorá neprichádzala. Ak ti napadajú nejaké otázky k hocičomu, kľudne sa môžeš pridať na náš Discord a spýtať sa tam, alebo hodiť otázku do komentára.


Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.