How to code dobře

Tipy triky jak kódit alright. IDE, pluginy, zkratky.

Jazyk je na vás, ale já dělám python.

Jedná se pouze o jednu z mnoha možností vývoje, ale mě se osvědčila.

Python – Instalujte nejnovější verzi.

Vývojové prostředí

VS Code – IDE (Vývojové prostředí).

Pluginy

Stáhněte VS Code, nainstalujte, otevřete, vlevo v liště otevřete extensions a nainstalujte.

  • Python
  • Bracket select
  • Code runner
  • Comment anchors
  • Markdown preview enhanced

Pokud chcete víc, tak nepovinně Excel viewer, GitLens, Image preview, Open in browser, SQL Server (mssql) a mnoho dalších. Pokud vám Vs Code nevyhovuje, další rozumnou volbou je PyCharm.

Nastavení

Když máme IDE nainstalované, přejdeme k nastavení. Samozřejmě, že funguje nastavení tak jak znáte, ale protože se snažíte kódit, není nic lepšího, než upravit přímo JSON, který nastavení obsahuje (JSON spolu s XML slouží například k přenosu dat, nebo k jejich uložení. JSON vypadá jak CSS a XML zas jako HTML).

Pokud budete mít otevřených více souborů (většinou), můžete přepínat okna stejně jako v prohlížeči pomocí Ctrl + Tab, pokud jich máte hodně, použijte Ctrl + P – kurzor se objeví nahoře v řádce. Napište první 2 písmena jména souboru, takzvaný intellisense vám doplní zbytek a Enter. Pokud chcete spustit nějak příkaz v VS Codu, stlačte Ctrl + Shift + P. Do objevivšího se kurzoru napište například rel. Intellisense vám nabídne celou možnost reload window. To potvrďte, aby fungovala rozšíření. Poté znovu Ctrl + Shift + P, a nyní napište settings, zvolte Preferences: Open Settings (JSON). Ukázka jak může nastavení vypadat…


{
    "editor.renderWhitespace": "all",
    "python.linting.flake8Enabled": true,
    "window.zoomLevel": 0,
    "terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",
    // ...
}

Zkratky

Další věcí tedy bude rychlá orientace v IDE. Moje pravidlo zní, myš používej jen v případě nouze. Používej zkratky jak jen dokážeš. Pokud ti některá nevyhovuje, tak ji změň. To ve VS Codu to uděláš tak, že pod kolonkou file kliknete na preferences a poté na keyboard shortcuts. Hodně zkratek je totožných s internetovými prohlížeči. Pár zkratek, bez kterých se neobejdete. PS: možná že jsem si je některé definoval já a nebudou fungovat, potom si je upravte dle své libovůle Preferences: Open Keyboard Shortcuts (JSON). Ukázka některý používaných zkratek.

  • Ctrl + Tab – Přeskočí na další okno (soubor)
  • Ctrl + W – Zavře soubor
  • Alt + – Přesune řádku nahoru (lze i dolů)
  • Alt + Shift + – Zkopíruje řádku nahoru (lze i dolů)
  • Shift+ Enter – Skočí na další řádku i když jste u prostřed slova
  • Ctrl + D – Označí slovo, dašlí stisk další stejné slovo dále v textu (možno upravovat najednou)
  • Ctrl + Shift + Alt + – Rozmnoží kurzor nahoru (Psaní více řádek najednou)
  • Ctrl + P – Otevře tabulku souborů
  • Ctrl + Shift + P – Otevře tabulku příkazů
  • Ctrl + ] – Odsadí označené doprava ([ posune doleva)
  • Alt + A – Označí obash uvnitř závorek, nebo uvozovek – Pouze s pluginem Bracket select
  • Ctrl + Enter – Spustí Jupyter (Ještě si počkejte)
  • Ctrl + Alt + N – Spustí kód

Další věcí jsou Tasky i když ty budeš potřebovat až později. Ty umožňují spustit sérii libovolnýcho operací. Díky taskům tedy můžeš na jedno kliknutí zbuildit aplikaci, spustit CI pipelinu, nebo spustit server.

Pokud s VS Code začínáš, můžeš použít následující nastavení, kde najdeš moje zkratky, nastavení i pluginy.

Teď proberem si lištu vlevo. První ikona soubory. Druhou nazvu spolupráce – tedy historie souborů (na většině věcí nedělá jenom jeden člověk). S takzvaným verzováním nám pomůže GIT, popřípadě plugin GITLens, kdy můžeme mít náš soft na Githubu a zároveň v počítači, a tak když něco pokazíme, můžeme se vrátit libovolně daleko. Naopak když jsme si jistí, přehrajeme lokální verzi na Github. Dalším panelem je debug mode (ukážu na konci). Předposledním panelem jsou rozšíření, ty už znáte a posledním jsou kotvy, nebo záložky jestli chcete. Za komentář můžete napsat například TODO, a víte, že se sem budete muset ještě jednou vrátit a co udělat. Další možností je za komentář napsat SECTION název. V rozsáhlejším projektu tyto záložky velmi šetří čas i nervy.

Dokumentace v IDE

Když už máme nějak přizpůsobené vývojové prostředí, tak k těm best practicies. Stáhněte si tento soubor Dokumentace. Jedná se o mojí dokumentaci toho, jak se co dělá. Pokud, to myslíte s programováním vážně, doporučuju začít si dělat vlastní od začátku a přidávat to, s čím jste se už setkali. Když máte dokumentaci staženou, přidáme si jí do VS code. Vytvořte si workspace – složku kam budete vše ukládat. Zkopírujte do ní stáhlý soubor s dokumentací. Klikněte na první kolonku souborů vlevo, otevřete soubor dokumentace dvojklikem. Otevře se vám soubor pro úpravy, do něj klikněte pravým tlačítkem a dejte Markdown preview enhanced: Open preview on the side. Simsalabim, máme dokumentaci přímo v IDE.

Psaní kódu

Nyní do psaní pythoního kódu. Pokud s programováním začínáte, základní syntaxi se naučte například na Sololearn. Když už znáte základy syntaxe, není podle mě nutné rovnou číst dlouhosáhlé knihy o teoretickém programování. Ideální je prostě si s tím hrát. Aplikovat kód někoho jiného, třeba ho jednou i vylepšit a pak se o to s komunitou podělit. Praxe vás donutí jít občas v něčem hloouběji a najít si vhodnou literaturu. Když nevíte kde začít a baví vás datová analytika, můžete si stáhnout například můj kód z Autoregresivní neuron. U všech skriptů vidíme nahoře import něco as něco, nebo from něco import něco. Zatím nemáme co importovat. Knihovny musíme stáhnout. Jedním řešením, je nainstalovat si anacondu (nebo minicondu), která většinu standardních knihoven obsahuje. Úplně dole v liště je potom potřeba anacondu zvolit jako výchozí itnerpreter. Další možností je instalovat si je jednu knihovnu po druhé.

V dolní části vidíme panel s možnostmi problems, output, terminal. Chceme terminal, takže na něj klikneme. Do terminálu napíšem pip install pandas.

Pokud skončíte v erroru, jsou přinejmenším dvě možnosti. První, že IDE neví jaký python spustit. Python je normální soubor s příponou .exe. V modré liště dole máte mít Python 3.7 nebo vaše verze. Pokud ne, pokuste se o to. Pokud to nejde, nezoufejte. Je potřeba nastavit enviromentální proměnnou.

V nastavení dejte do vyhledávače environ, a zvolte nabízené Edit system enviromental variable. Tam rozklikněte Enviromental variable. Vyskočí na vás okno.

V okně upravíme řádku Path. Přidáme adresu kde je soubor python.exe, který můžeme najít normálně ve vyhledávání. Mnohdy je to C:\Users\uzivatel\AppData\Local\Programs\Python\Python37\ přidejte ještě stejnou adresu, se složkou scripts, tedy C:\Users\uzivatel\AppData\Local\Programs\Python\Python37\Scripts\. Ve skriptech jsou další exe soubory, které spuštějí například import knihoven pip.exe, nebo například jupyter o kterém bude řeč později.

Doporučuji použít automatické formátování (když budeme všichni mít podobný styl, budem snadnějc rozumět ostatním). Mohu doporučit Black. Nastavit ho můžete například v UI Settings takto

Důležité je však nastavit správnou délku řádku před zalomení, jinak kód nebude vypadat dobře. Přidejte do settings JSON


"python.formatting.blackArgs": ["--line-length", "110"],

Nyní nejzábavnější část – napsat kód. V pythonu jde udělat všechno hned několika způsoby a nedá se často říct, že jedna je lepší než druhá. Spustu věcí můžete napsat jako for cyklus, stejně tak jako list comprehensions, stejně jako tak pomocí map volat funkci nad daty. Několik způsobů, stejný výsledek. Jde spíše o filozofické téma. Pište věci tak jak vám vyhovuje a vždy se nechávejte inspirovat (ale nepřehánět). Co je na pythonu skvělé, je jeho filozofie. Věci mají jít jednoduše. Neřešíte správu paměti, když něco chcete, stačí najít knihovnu, kterou udělal někdo na druhé straně světa po práci jenom za to, že mohl něčím přispět komunitě. Bojujte zkoušejte.

Když máme nějaký kód, co chceme spustit, nebo debugovat, máme 2 možnosti. Výchozí puštění v terminálu téměř nepoužívám. První možností pomocí pluginu a Code runner a zkratky Ctrl + Alt + N, dalším řešením je použít Jupyter a posledním a nejvhodnějším je používat debuger.

Vs Code pro datovou analýzu

Jupyter se hodí pokud se hodláte věnovat datové analytice a budete mít hodně grafů, budete dokumentovat a používat rovnice a podobně. Dnes už je součástí samotného python rozšíření a není ho třeba instalovat. Netřeba teoretických řečí o tom, že je to server, že vychází z jazyků Julie, Python a R. Důležité je, že funguje přenádherně rychle (kromě prvního spuštění, které naopak trvá). Okno je dobré rozdělit si na dva díly, v jednom psaný kód, nebo dokumentace (o dvou monitorech nemluvě). Jupyter za nás tohle udělá automaticky. Poslední co zbývá – pokud máte tmavé téma (doporučuju), tak je potřeba nastavit, aby grafy byly s černým pozadím. Nainstalujte si knihovnu jupyterthemes pomocí pip install, v terminálu spusťte příkaz


jt -t monokai

Najděte složku ~/.ipython/profile_default/startup/ začátek je obvykle C:/users/nazevuzivatele. Pokud neexistuje soubor startup.ipy, tak ho vytvořte. Ipy musí být přípona, nikoliv název – startup.ipy(.txt) vám nebude fungovat. Do souboru vložte následující


from jupyterthemes import jtplot
jtplot.style()

Aby jupyter fungolval, je potřeba na začátek napsat #%%. V případě, že chcete spustit jen kus kódu, napište opět #%% tam, kde chcete skončit. Jupyter spustí jen to, co je mezi těmito znaky. Wualá, můžeme pouštět – u mě Ctrl + Enter. Výsledek může vypadat jako na dalším obrázku.

VS Code

Vpravo nahoře mám seznam proměnných, pod ním výsledek. Pokud máme někde chybu a z proměnných nelze vyčíst kde, protože je to třeba ve smyčce, je potřeba použít následujícího postupu.

VS Code pro vše ostatní

Asi nejvhodnějším postupem je použití debuggeru. Nejdříve vložíme tzv. breakpoint. Vložíme ho tam, kde chceme kód zastavit, nalevo od čísla řádky (nebo pomocí F9). Musí se objevit malé červené kolečko. Poté stiskneme F5. Nyní můžeme sledovat postup kódu a vývoj objektů a proměnných. Můžeme skákat po řádce dál, nebo skákat dovnitř volaných funkcí, nebo naopak ven. Můžeme sledovat cestu kódu i skrze jinými soubory. Ty máme všechny otevřené pod oknem Call Stack. Pokud chceme poskočit o velký kus dále, stačí vložit další breakpoint a opět zmáčknout F5 (skočí na další breakpoint, nebo zastaví na první chybě).

Cílem je programovat tak, že budu co nejméně program spouštět od začátku, ale že se na nějakém místě zastavím a pomocí interaktivní konzole se doberu toho, jak by měl kód fungovat. Pokud debugger pouštíte pořád a pořád dokola, pravděpodobně děláte něco špatně.

Co dál

Zatím se jednalo jen o nastavení IDE a pár slov k úplnému základu. Co dál? Tato stránka by byla velmi dlouhá a proto raději odkáži k dvěma prezentacím, kde jsou věci vysvětlené podrobněji.

  • Programování prezentace – Obecně k programovacím paradigmatům (funkcionální, objektové), IDE (intellisense, linting atd…), verzování (GIT, github), refactoringu, DRY principu, zdrojům ze kterých se učit…
  • Python prezentace – Obecně k jazyku, syntaxi (podmínkám, smyčkám, třídám, iterátorům, generátorům atd.) a k mírně pokročilým technikám (profiling, jiné interpretery atd.)…

Project scaffolding

Jak začít nový projekt? Můžete začít na zelené louce, nebo naopak vzít existující funkční projekt a odmazávat co nepotřebujete. Dále můžete použít jakýsi cookiecutter, který obsahuje strukturu společnou pro všechny aplikace a umožňuje například

  1. Testování
  2. Automatické generování dokumentace
  3. CI/CD (Řada událostí, která se sama automaticky vykoná při uložení na repozitář (testy, build, deploy…))

Buď můžete použít cookiecutter a nějakou šablonu, nebo project-starter. Daný starter je možný použít dvěma způsoby. Zaprvé pro pythonní knihovnu na PyPi, zadruhé jako aplikaci včetně grafického rozhraní (GUI) vytvořeného pomocí webových technologií (VUE (Javascript)). Protože mazat je rychlejší než psaní, projekt není prázdný a obsahuje něco málo pro inspiraci. Ukázka vypadá zhruba takto

project-starter

Dokumentace

Jak dokumentovat se dozvíte v dokumentaci (v první prezentaci). Ukázka automaticky generované dokumentace například tady.

Co zbývá…?

Nyní už jenom hodiny, dny, týdny, roky, probdělé noci. Inspiraci můžete hledat například v jupyter noteboocích někoho jiného (ideální pro inženýry, pro které je programování pouze pomůckou). Tady je ukázka několika krásných kousků. Nemusíte nic stahovat, můžete pomocí jupyteru a Nbvieweru prohlížet, upravovat i kódit přímo z prohlížeče.

Pokud chcete napsat nějakou knihovnu, můžete se nechat inspirovat některou z mých menších a jednoduchých knihoven

  • mypythontools – Misc python tools. CI/CD pipeline withou provider for example. Help push, build or deploy app with single click
  • mydatapreprocessing – Load, consolidate and preprocess your CSV, parquet, pandas DataFrame or numpy array on couple of lines (from code, from file or from URL)
  • mylogging – Highlite warnings and logs in a way you know what’s yours and what’s from imported libraries
  • predictit – Time series predictions

Kdybyste měli jakýkoliv dotaz, neostýchejte se zeptat. Pokud vám není něco jasné v uvedených knihovnách, napište tzv. Issue a přidejte vhodný tag (bug, help wanted, question)

Pokud vám něco nefunguje, nebo nevíte jak něco udělat, zkuste Stack Overflow – Programátorův denní chleba (pomocí pluginu lze zobrazit přímo v IDE). Až se budete trochu orientovat, nezapomínejte taky odpovídat a pomáhat ostatním. Na stack overflow můžete za to že pomáháte sbírat bodíky, medaile, ocenění…

Jen takový detail na konec – Komentujte, komentujte a komentujte. Většinou to není jen pro vás a i vy jednou zapomenete. Nesnažte se taky psát chytřeji než je třeba. Něco co napíšete na deset řádků se většinou dá stlačit na tři. Bude to i elegantní, ale někdo jinaj vás bude proklínat, protože tomu nebude rozumět. Jedna věc je elegance, druhá přehlednost a srozumitelnost. Dobrej kód by se měl dát číst jako kniha.

Dokumentace většinou vzniká až jako poslední, ale hlavně jí neodbyjte, právě ona je vstupní bránou do vašich projektů. Pro VS Code a python je možné použít plugin Python Docstring Generator, kdy použijete jeden příkaz a plugin vám sám pro danou funkci vytvoří template pro všechny použité parametry i pro vracený argument. Vyberte si pro docstringy vhodný formát (já používám google formát).

Nepsaný standard – Pište prosím vše v angličtině (a to i když všichni kolegové jste Češi…)

Teď už nezbejvá než popřát hodně zdaru.

PS: Nezapomínejte taky chodit na sluníčko, kdyby vás to chytlo…

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *