Iš tiesų, yra ne viena must–read knyga, kurią turi perskaityti kiekvienas, norintis būti geru programuotoju. Šiame blog’e aptarsime keletą knygų, kurios, mūsų manymu, yra labai naudingos. Knygas išsamiai apžvelgia jas perskaitę programuotojai.
The Clean Coder: A Code of Conduct for Professional Programmers
A book by Robert Cecil Martin
Komentuoja Mindaugas Poškus, .Net programuotojas
Medijoje vis dar gajus klišinis programuotojo paveikslas – nuoboda, intravertas, pats vienas galintis nulaužti labiausiai saugomas sistemas bei sukurti milijonų vertus algoritmus ar startuolius. Visgi, realybė yra kiek kitokia. Tokie darbai atliekami tik dirbant komandoje, bet joje svarbu ne tik techninė kompetencija, bet ir socialiniai įgūdžiai. Būtent apie žmogiškuosius darbo aspektus ir yra R. Martin knyga.
Knygoje nerašoma apie technologinius aspektus. Joje nerasite patarimų kaip rašyti švarų kodą, joje taip pat nebus algoritmų ir architektūrinių šablonų (besidomintiems švaraus kodo technika rekomenduoju paskaityti to paties autoriaus knygą Clean Code. A Handbook of Agile Software Craftsmanship). Visas knygos turinys dedikuotas programinės įrangos kūrimo procesui. Dviejuose skyriuose kalbama apie svarbų profesionalaus darbuotojo bruožą – mokėjimą pasakyti „taip” ir „ne”. Nors ir skamba paprastai, tačiau spaudžiant laikui, o kliento lūkesčiams augant, IT inžinierius turi gebėti argumentuoti, kodėl kai kuriuos lūkesčius įgyvendinti galima, o kai kurių – ne.
Skyriuje „Coding” autorius rašo apie programavimo procesą. Aprašoma darbo aplinkos svarba, nepunktualumo žala. Griaunami populiarūs mitai, tokie kaip the flow zone – tai būsena, kai sąmoningumo lygis sumažinamas iki minimumo ir programuotojas tiesiog rašo kodą nereaguodamas į aplinką. Autoriaus nuomone, būtent tada parašomas blogiausias įmanomas kodas. Taip pat, griaunamas mitas, jog muzikos klausymas padeda susikaupti, nors realybėje tai mažina tiek produktyvumą, tiek darbo kokybę.
Didelė knygos dalis skirta testavimo svarbos akcentavimui. Ši tema nagrinėjama net trijuose skyriuose. Aptariamos tiek Test Driven Development (TDD), tiek Acceptance testing praktikos bei testavimo kaip esminio elemento, užtikrinančio kodo kokybę.
Keli skyriai dedikuoti laiko valdymo strategijoms bei praktikoms, padedančioms susitvarkyti su spaudimu. Daugelis dirbančių patvirtins – laiko visada trūksta, o užduotys turėjo būti atliktos jau vakar. Atrodo, jog galime padirbėti ilgiau, tačiau tiesa tokia, kad kuo ilgiau dirbame – tuo mažiau padarome. Būtent todėl autorius daug kalba apie efektyvumo ir produktyvumo didinimą.
Knygos pabaigoje pasakojama, jog svarbu savo žinias perduoti kitiems. Dauguma sėkmingų programuotojų karjeros pradžioje šalia turėjo žmones, iš kurių galėjo mokytis gerųjų praktikų ir nerašytų taisyklių. Tad įgiję žinių, būtinai turime jas perduoti, antraip industrija neaugs, o kokybė kris.
Knyga ypač vertinga bet kuriam pradedančiajam IT inžinieriui – programuotojui, QA’s, DevOps’ui, dizaineriui, architektui, projektų vadovui ir t.t. Perskaitę ją, specialistai sužinos kaip išlaikyti šaltą protą įtemptose situacijose, kaip bendrauti su vadovais, kaip sukurti gerą darbo aplinką, sėkmingai dirbti su kolegomis, planuoti laiką ir darbus. Mano nuomone, ši knyga yra geras pasirinkimas ir IT įmonių vadovams, ypač tiems, kurie neturi daug patirties šioje industrijoje. Ji padės formuoti komandą, geriau suprasti žmones, kuriančius programinę įrangą, įvertinti jų kompetenciją. Knyga yra nedidelės apimties ir lengvai skaitoma. Rekomenduoju ją visiems norintiems tobulėti.
Clean Code. A Handbook of Agile Software Craftsmanship
A book by Robert Cecil Martin
Komentuoja Aurimas Repečka, .Net programuotojas
Pradedant naują projektą, rašyti kodą nėra sunku, tačiau bėgant laikui jis „užsiteršia” t.y. tampa nebesuprantamas, jį keisti darosi vis sunkiau. Tam, kad būtų galima to išvengti ir tuo pačiu užtikrinti ilgalaikę projekto sėkmę, yra svarbu laikytis šioje knygoje apibrėžtų „švaraus” kodo praktikų.
Perskaitęs šią knygą ėmiau į kodą žiūrėti labiau iš „skaitytojo”, o ne „rašytojo” perspektyvos. Pradėjau užduoti sau klausimus, ar kintamojo/funkcijos/klasės pavadinimai yra aiškūs ir ar bus suprantami kitiems kodą skaitantiems žmonėms. Taip pat žymiai griežčiau pradėjau taikyti Single Responsibility principą – sumažėjo klasių ir funkcijų apimtis, kodas tapo lengviau suprantamas ir keičiamas. Galiausiai, projekte pradėjau naudoti gerąsias TDD testavimo praktikas.
Knygą ypač rekomenduočiau jaunesniesiams programuotojams, kurie dar tik pradeda savo karjerą. Kodas „užsiteršia” ne per vieną dieną. Tai yra ilgas procesas, todėl nepatyrę programuotojai ne visada mato, kokias pasekmes vienas ar kitas kodo fragmentas gali turėti ateityje. Ši knyga yra unikali galimybė užbėgti šiems įvykiams už akių, pamatyti dažniausiai daromas klaidas ir iškart pradėti rašyti bent šiek tiek „švaresnį” kodą.
The Pragmatic Programmer. From Journeyman to Master
A book by Andrew Hunt & David Thomas
Komentuoja Redas Pališkevičius, .Net programuotojas
Programinės įrangos kūrimas yra sudėtingas amatas. Programuotojas turi būti puikus klausytojas, aiškiai dėstyti savo mintis, interpretuoti reikalavimus ir paversti juos į kodą tokiu būdu, kad ateityje jį būtų įmanoma išplėsti. Visa tai turi tilpti į apibrėžtus laiko rėmus. Taip pat, nėra „sidabrinės kulkos” technologijos, programavimo kalbos ar metodologijos. Turint tai omenyje ir norint sukurti programinę įrangą, kuri išvystų dienos šviesą ir sėkmingai operuotų, privalome būti pragmatiški. Knygoje, programavimo ekspertai dalinasi savo patirtimi apie visą programinės įrangos kūrimo procesą – pritaikydami jų patarimus, tapsime geresniais programuotojais.
Skyriuje Your Knowledge Portfolio autoriai teigia, kad žinių valdymas yra panašus į finansų valdymą: patyrę investuotojai dažnai investuoja, išskirsto investicijas, palaiko balansą tarp konservatyvių ir aukšto pelno/aukštos rizikos investicijų, perka, kai kaina yra žema ir parduoda kainai pakilus, periodiškai peržiūri savo investicinį portfelį. Valdydami savo žinių portfelį, programuotojai turi laikytis šių gairių. Perskaitęs šį skyrių, pradėjau daugiau dėmesio skirti savo žinių portfeliui.
Projekte naudojame Xamarin.Forms. Ši technologija sparčiai keičiasi, todėl svarbu sekti šaltinius, kuriuose diskutuojamos jos galimybės. Xamarin.Forms yra atviro kodo ir patalpinta GitHub versijavimo sistemoje – tai leidžia stebėti, kokios problemos yra užregistruojamos ir kaip jos sprendžiamos. Svarbu sekti technologijas, kurios sprendžia tą pačią problemą kitaip, pvz.: Flutter. Technologija yra nauja, tačiau sulaukia daug dėmesio, todėl skiriu laiko susipažinti su technologijos teikiamais privalumais. Rizikinga neskirti laiko žinių portfelio valdymui, nes savo projekte programuotojai gali jaustis užtikrintai su turimomis žiniomis apie tam tikras technologijas, tačiau IT sritis keičiasi itin sparčiai, tad turimos žinios sensta. Apibendrinau tik vieną skyrių, tačiau manau, kad kiekvienas skyrius turi informacijos, kurios prieš tai nežinojau ar ją reikėjo papildomai perskaityti, kad galėčiau įsisavinti.
Visi twoday programuotojai yra susipažinę su septyniais vidiniais įmonės „THE BEST WORKPLACE FOR IT ENGINEERS” principais, kurių laikydamiesi kuriame sėkmingą įmonę. Norint, iš esmės, suprasti šiuos principus, rekomenduoju perskaityti knygą The Pragmatic Programmer, kurios turinys apima kiekvieną principą. Knyga yra lengvai skaitoma, autoriai nagrinėdami temą pateikia realių problemų pavyzdžius, su kuriomis susiduria programuotojai. Siūlomi problemų sprendimo būdai ir jie apibendrinami vieno sakinio patarimais, kurių knygoje yra 70. Vienas iš patarimų yra žymusis, knygos autorių nukaldintas, Don’t Repeat Yourself principas, kuris teigia, kad: „Every piece of knowledge must have a single, unambiguous, authoritative representation within a system”. Taip pat, pateikiama daug užduočių – dalis užduočių yra praktinės ir turi atsakymus knygos apendikse, o kitos užduotys kelia klausimus, kuriuos privalome apmąstyti ir atsakyti patys sau. Knygoje esanti informacija yra universali – joje aprašomos praktikos gali būti taikomos įvairių programavimo kalbų specialistų.
The Art of Unit Testing
A book by Roy Osherove
Komentuoja Mindaugas Poškus, .Net programuotojas
Test Driven Development (TDD) yra programavimo taktika, akcentuojanti automatinių testų svarbą ir skatinanti programuotojus juos rašyti visam jų kuriamam programos kodui. Esmę galima nupasakoti trimis žingsniais:
- Pirmiausia reikia parašyti testą kodui. Aišku, testas neveiks, nes nėra kodo, kurį jis turėtų testuoti.
- Antra, dabar galime rašyti patį kodą. Taip esame tikri, kad jį rašydami, nepadarysime klaidų, nes kodui jau yra testas. Tai neturi būti galutinis kodo variantas, jis net neturi būti gražus, tiesiog toks, kad veiktų testas. Tuomet galime būti tikri, kad mūsų kodas reikalavimus įgyvendina teisingai.
- Trečias žingsnis – pertvarkyti kodą, t.y. laikytis gerųjų praktikų, architektūrinių reikalavimų ir t.t. Vėlgi, pertvarkant kodą, mes turime testą, kuris saugo nuo klaidų. Tikroji TDD nauda – matyti tik ilguoju laikotarpiu. Kuo programa didesnė, tuo sunkiau daryti pakeitimus, tačiau kuo daugiau testų, tuo labiau galima pasitikėti kiekvienu pakeitimu.
Kaip ir kitos metodologijos, TDD turi savo gerąsias praktikas. Autorius atskleidžia kaip turėtų veikti darbinis procesas naudojant TDD. Kas yra geri unit testai, kas yra stub, mock, dependency injection, kokie framework’ai yra pasiteisinę, kaip organizuoti savo testus, kaip integruoti juos į savo projektus ir organizacijas ar kaip dirbti su senu kodu.
Ši knyga turi du pagrindinius tikslus. Pirmas yra įtikinti skaitytoją TDD nauda. Antrasis – išmokyti gerųjų TDD praktikų. Tai TDD klasika tapusi knyga, kuri, mano nuomone, yra naudinga visiems, kurie nori pradėti taikyti TDD praktikas arba tiesiog pagilinti žinias. Knyga parašyta C# kalba, tačiau tai neturėtų atbaidyti programuojančius kitomis kalbomis. TDD yra metodologija, o ne technologija, todėl jos principai sėkmingai taikomi praktiškai visose kalbose. Taip pat, C# yra lengvai suprantama daugumai žmonių, programuojančių kitomis C šeimos kalbomis, tokiomis kaip C, C++, Java, PHP ir t.t.
Pirmasis knygos leidimas pasirodė 2009 m. o antrasis – 2013 m. Nuo tada praėjo nemažai laiko, o technologijų pasaulis, kaip žinia, nuolat keičiasi. Kaip jau minėjau, pati TDD yra metodologija, todėl ji yra atspari laikui. Žmonėms, norintiems pagilinti žinias, knyga bus naudinga, tačiau reikėtų atkreipti dėmesį į naudojamus įrankius ir technologijas. Daug dėmesio skiriama RhinoMocks ir NUnit. Naujesnių, po knygos išleidimo atsiradusių įrankių, autorius, natūralu, neapžvelgia. Pavyzdžiui, nepasakojama apie tokius populiarius įrankius kaip NSubstitute, FakeItEasy ar BDD įrankį SpecFlow. Taip pat, nuo knygos pasirodymo buvo išleista ne viena nauja C# ir .NET versija, todėl ketinantiems skaityti knyga patariu – perskaičius apie vieną ar kitą autoriaus naudojamą įrankį, paieškokite ar šiuo metu nėra sukurta pranašesnių įrankių tam pačiam darbui atlikti.
Daugybė autorių ir apžvalgininkų knygą įtraukė į IT inžinieriams būtinų perskaityti knygų sąrašą. Ji lengvai skaitoma, temos nagrinėjamos nuo pačių pagrindų, kas, galbūt, ją paverčia labiau tinkamą pradedantiems mokytis TDD. Perskaičius knygą, galima tęsti mokymąsi skaitant sudėtingesnes žanro knygas, pavyzdžiui, Working Effectively with Legacy Code (Michael Feathers), Growing Object-Oriented Software, Guided by Tests (Steve Freeman ir Nat Pryce), Refactoring: Improving the Design of Existing Code (Martin Fowler).
Skaityti, skaityti ir dar kartą skaityti
Tai yra 4 knygos, kurias perskaityti rekomenduoja mūsų programuotojai. Programuotojams ir kitų IT sričių specialistams vertingų knygų - gausu ir jos, kaip ir kursai ar konferencijos, yra būtinos, norint kelti savo kompetenciją. Minėtas knygas galite rasti Kindle ar audio formatu Amazon: