Nízky kód vs.

© Shutterstock/Vizuálne generovanie
V posledných niekoľkých desaťročiach existovalo množstvo iniciatív na odstránenie alebo aspoň minimalizáciu programovania z vývojového procesu. Aktuálnym výsledkom je programovanie s nízkym kódom, ktoré sa však musí merať oproti funkčnému programovaniu, ktoré je takisto v kódovej diéte.
Vždy to bol veľký sen správy IT: vývoj softvéru bez programátora. Ak by to bolo možné, znamenalo by to do veľkej miery schopnosť zaobísť sa bez drahých vývojárov. V 80. rokoch minulého storočia existovali takzvané 4GL, programovacie jazyky štvrtej generácie. Vďaka tomu boli okamžite dostupné typické funkcie mnohých softvérových aplikácií, a preto by sa malo drasticky znížiť úsilie pri programovaní. Spravidla išlo o aplikácie, do ktorých používatelia v podstate zadávajú údaje, ktoré sú uložené v databázach, znovu zobrazené a spracované do správ.
Ďalším aspektom tohto myslenia je nespočetné množstvo listov Excel, ktoré sa používajú v spoločnostiach na kritické úlohy v oblasti IT. V skutočnosti môžu dokonca aj zamestnanci, ktorí nie sú vyškolení v programovaní, používať program Excel na vykonávanie úloh so zložitosťou, ktoré môžu byť podporené kódom vo VBA (Visual Basic for Applications). Najneskôr keď dorazí kód VBA, je zrejmé, že vytváranie listov Excel je tiež formou programovania. Aj keď pre neprogramátorov je ľahké začať, hárky programu Excel nakoniec dosiahnu svoje limity. To platí predovšetkým pre automatizáciu väčších procesov, spracovanie väčšieho množstva dát alebo čistú integráciu do podnikového IT. Nadchádzajúca migrácia je často bolestivá a nákladná.
Pravdepodobne najúspešnejším projektom na demokratizáciu opísaných „databázových aplikácií“ je Microsoft Access: Je neprekonateľne ľahké zostaviť aplikáciu CRUD (Create, Read, Update, Delete) s grafickým užívateľským rozhraním z databázových schém kliknutím myši. Ale to isté platí aj tu: Prístup k aplikáciám sa zväčšuje iba vo veľmi obmedzenom rozsahu. Keď sa požiadavky zvýšia, často dochádza k bolestivým migráciám.
Od hororového príbehu po rozprávku: Písanie kódu, ktorý si ľudia chcú prečítať
Michael Dowden (Andromeda Galactic Solutions)
Vytvorenie hybridnej a multi-cloudovej stratégie pomocou Azure API Management
Modul ADOC - dokumentácia architektúry - zaznamenávanie a komunikácia softvérových architektúr
s trénerom Stefanom Zörnerom
Túžba po „vývoji softvéru bez programovania“ viedla k nízkemu kódu
4GL stratili svoj význam niekedy v 90. rokoch, pretože boli príliš konkrétne a obmedzené. Túžba manažmentu po „vývoji softvéru bez programovania“ zostala, a tak sa hnutie vzkriesilo v podobe „platforiem s nízkym kódom“, ktoré to presne naznačujú. Namiesto toho sú aplikácie zložené z blokov v grafickom prostredí a môžu byť uvedené do prevádzky priamo na škálovateľných cloudových platformách, často ako mobilné webové aplikácie. Obmedzená škálovateľnosť programu Excel alebo Access tu už nie je problémom.
Bližší pohľad však odhalí rovnaké obmedzenia na platformách s nízkym kódom ako v tom čase pre 4GL, Access a - v istom zmysle - aj Excel: Pokiaľ je softvérová aplikácia iba o zadávaní, zobrazovaní a hlásení tabuľkových údajov, prídete s nimi celkom ďaleko. Okrem tohto dosť zlého obrazu toho, čo softvér dokáže, zasahuje nízky kód múr.
Príklad: Programovanie aplikácie v dopravnom sektore
Ako to vyzerá? Povedzme napríklad, že cieľom je napísať aplikáciu pre diaľničné oddelenie v Texase, ktorá sleduje, čo sú zvieratá na diaľnici a čo sa s nimi stane. Začíname malí, s pásavcami. Agentúra sleduje, či sú pásavce nažive (mnohí sú prepadnutí po diaľnici) a koľko vážia. V klasickej databázovej aplikácii sa to začína nasledujúcou tabuľkou „Armadillos“:
| Id | živý? | váha |
| 1 | Pravdaže | 10 |
| 2 | Falošné | 12 |
| 3 | Pravdaže | 9 |
Prvý riadok predstavuje živého pásavca s hmotnosťou 10 kg, druhý mŕtvy s hmotnosťou 12 kg atď. V aplikácii s nízkym kódom by bolo možné teraz graficky zostaviť masku, pomocou ktorej je možné spravovať túto tabuľku. To znamená, že je možné zadať nových pásavcov, zobraziť tabuľku atď.
V Low-Code je tiež možné vytvoriť tlačidlo, ktoré užívateľ stlačí, keď sa oznámi, že došlo k prebehnutiu pásavca. Tlačidlo popisuje pracovný tok, často v podobe podobnej BPMN. Patrí sem akcia, ktorá popisuje, čo sa vlastne stane. Môže to vyzerať asi takto:
Zatiaľ je všetko dobré. Predpokladajme, že sa aplikácia rozšíri o papagáje, ktoré sa náhle objavili na diaľnici. Tieto papagáje by mohli byť uvedené v tabuľke „Papagáje“:
| id | Veta | Váha |
| 1 | "Dobrý deň!" | 2 |
| 2 | "Dobrú noc" | 1.5 |
A aj tu by sa dala definovať akcia, ktorá popisuje nájazd papagája:
Tiež zatiaľ dobre. Čo však s tým, keď sa majú pásovce a papagáje viesť spolu? Sú uvedené v dvoch rôznych tabuľkách, čo to sťažuje. Pojem „zviera je pásavec alebo papagáj“ nemožno priamo vyjadriť v relačných databázach. Za vyskúšanie by stáli rôzne riešenia,
- veľký stôl so všetkými stĺpcami „Armadillos“ a „Papagáje“ a ďalším stĺpcom, ktorý hovorí, o aké zviera ide, príp.
- tabuľka s dvoma stĺpcami, ktorá obsahuje odkazy na dve existujúce tabuľky, z ktorých je aktívna vždy iba jedna.
Riešenie by bolo ešte chvíľu realizovateľné, ale rýchlo by vyústilo do neschopného neporiadku. Ako by to vyzeralo, keby existoval nejaký priamejší spôsob modelovania týchto zvierat na diaľnici? Formulácia vo funkčnom jazyku Haskell by vyzerala takto:
Zvislá čiara | znamená „alebo“. V súlade s tým sa hovorí: Zviera je tiež
- pásovec, pásavec, s majetkom pásovec Živý typu Bool a majetkom pásovec Hmotnosť typu Float alebo
- papagáj so stanovenými aj hmotnostnými vlastnosťami
Je možné vytvoriť zoznam na zaznamenanie populácie zvierat:
Nie je teda problém zmiešať obe triedy zvierat. To je samozrejme možné aj pri objektovo orientovanom programovaní, vyžadovalo by to však rozhranie a dve pomerne zložité programovacie triedy. Riešenie Haskell má výhody, ktoré získa s menším počtom kódov a kód je priamo založený na modelovaní.
Operácie možno definovať aj s veľmi malým kódom. Napríklad prejazd. Haskellova definícia sa skladá z dvoch rovníc - jednej pre každú triedu:
Čo sa týka množstva kódu, funkčné programovanie má stále výhodu oproti nízkemu kódu. Oveľa dôležitejšie však je, že funkčný kód je možné ďalej rozvíjať s rastúcimi požiadavkami, zatiaľ čo prostredie s nízkym kódom dosahuje svoje limity.
Moderné prostredia s nízkym kódom sú akýmsi „Enterprise Cloud 4GL“.
Moderné prostredia s nízkym kódom nepochybne zjednodušujú mnoho „štandardných úloh“ v programovaní, najmä v súvislosti s databázou a návrhom grafických používateľských rozhraní: stačí kliknúť na všetko dohromady. Takže do istej miery to sú „Enterprise Cloud 4GL“, ktoré eliminujú problémy s prevádzkovým škálovaním programov Excel a Access. Dalo by sa takmer prekvapiť, že „bežné“ programovacie technológie nič podobné neponúkajú.
Ale iba takmer: Pre každý slušný objektovo orientovaný programovací jazyk existujú „ORM“, tj Object-Relational Mappers, ktoré automatizujú veľa úloh pri mapovaní doménových objektov do databázy. Rovnako ako v prípade ORM, aj tu sa táto vymoženosť kupuje za cenu prvého spojenia vo vznikajúcej architektúre: databázový model je neoddeliteľne prepojený s dátovým modelom, oba sa musia vyvíjať spoločne, a preto si navzájom dedia náladu. To vedie k množstvu problémov, keď kód rastie: spomínané slabiny modelovania, nekontrolovateľné chovanie cache, ťažké ladenie a veľké úsilie pri vykonávaní zmien. Podľa toho ORM vypadli z módy aj po počiatočnej eufórii.
Podobné je to aj s používateľskými rozhraniami. Sú úzko prepojené s dátovými modelmi v prostrediach s nízkym kódom (ako vo veľkých stavebných zostavách používateľského rozhrania z minulosti - Visual Basic 6 a Delphi).
Obmedzená škálovateľnosť: Aké východisko z dilemy existuje?
Prostredia s nízkym kódom umožňujú „rýchle prototypy“ jednoduchých aplikácií, ale nerastú spolu s požiadavkami. Java a C # sú lepšie, ale veľké úsilie a náklady odčerpávajú rozpočet a hlavne dušu vývojára. Na druhej strane funkčné jazyky spočiatku produkujú menej kódu, takpovediac „nižší kód“. Neutomatizujete všetko, ale vynikajúca podpora programovania používateľského rozhrania a databáz vedie k kompaktným riešeniam bez obávaného architektonického prepojenia.
Oveľa dôležitejšie je však to, čo by malo byť nášmu srdcu blízke: Podpora modelov na vysokej úrovni, ktoré presne mapujú domény špecialistov a flexibilne s nimi rastú. Pokiaľ ide o modelovanie, vo funkčnom programovaní sa otvárajú nové svety - prostredníctvom jednotného využívania abstrakcie a aplikácie matematiky. Môže to znieť, akoby bolo funkčné programovanie vyhradené pre vysoko kvalifikovaných odborníkov. V skutočnosti je to však najúspešnejší prístup v programátorskom vzdelávaní, a preto sa ho môžu naučiť všetci profesionáli v programovaní.