Proč vlastně dneska skoro nikoho nebaví přemejšlet a dělají se virtualizace virtualních systému, kašle se na výkon, spotřebu zdrojů... Není to škoda ?
četl jsem o tom nedávno pěkný blogpost "Software Disenchantment": http://tonsky.me/blog/disenchantment/
Vypadá to na zajímavý článek... nečetl jsem to ještě celé.
(hovna typu web nebo Windows nechme stranou)
Ad "On each keystroke, all you have to do is update tiny rectangular region and modern text editors can’t do that in 16ms. It’s a lot of time. A LOT. A 3D game can fill the whole screen with hundreds of thousands (!!!) of polygons in the same 16ms and also process input, recalculate the world and dynamically load/unload resources."
Na tom je vidět, že vyvíjet efektivní a optimalizované programy lze -- náš obor to umí. Akorát se to dělá jen v některých případech. A teď je otázka: proč? Proč se neoptimalizuje všechno?
Nikdo nechce* záměrně vyvíjet pomalou aplikaci. Tzn. pokud to někdo dělá, má k tomu nějaký důvod. Můžu např. upřednostnit čitelnost a udržovatelnost před výkonem. Další věc, která jde často proti výkonu je bezpečnost a spolehlivost (např. přidání nějakých kontrol, validací či defenzivní programování). Nebo můžu ušetřit čas potřebný k napsání aplikace. A to jak volbou stylu práce, použitých nástrojů nebo třeba jazyka, který se (ne)naučím. Např. bych mohl pár let studovat nějaký super efektivní jazyk a pak teprve psát aplikace, které budou běhat o něco rychleji, nebo ty aplikace můžu psát už teď s tím, co umím. Co má větší přínos -- aplikace napsané v méně efektivním jazyce během těch pár let, nebo zvýšená efektivita v příštích letech? Tohle si každý musí rozhodnout sám, neexistuje na to jednoznačný recept. Je dobré se dívat do budoucna, ale zase se nejde celý život jen připravovat na to, že jednou napíšeš něco úžasného a leštit si nástroje. Je potřeba v tom najít nějakou rozumnou míru a průběžně si sice vylepšovat nástroje a schopnosti, ale zároveň dělat něco reálného teď hned s tím, co máš/umíš.
Kdybys měl firmu, tak můžeš roky vzdělávat svoje lidi, psát si vlastní frameworky, napsat si vlastní jazyk, knihovny, pilovat metodiku... nebo taky můžeš dělat reálné projekty pro svoje zákazníky a používat k tomu stávající nástroje a stávající znalosti svých lidí. Oba extrémy jsou špatné a nefungují. Tu míru si musí každý najít sám. Klidně si to zkus dělat tím prvním způsobem, ale pokud nejsi miliardář, který by to mohl roky dotovat ze svého, tak dojedeš dřív než ten, kdo šel tou druhou cestou.
Taky můžeš zjistit, že lidi jsou idioti a nemáš koho zaměstnat. Každý, kdo se ti přihlásí je podle tvých měřítek "lopata", a "prasí" kód. A co s tím? Budeš odmítat zakázky, protože je nemá kdo dělat? Nebo si spočítáš, že požadavky zákazníků lze implementovat i těmi "lopatami", které jsou k dispozici na trhu? Co když zákazníka nezajímá, že to běží o nějaké milisekundy déle, a potřebuje vyřešit svůj byznysový problém? Je lepší ho odmítnout a počkat, až si vyškolíš lidi a vypiluješ metodiku, a budete schopní psát extrémně efektivní kód, který z HW vytěží maximum?
Takže proč se neoptimalizuje všechno? Jde o efektivní alokaci zdrojů. Investuje se tam, kde se dají očekávat odpovídající přínosy, kde to někdo požaduje, kde to má smysl. Je to jako se vším -- řeší se úzké hrdlo a ne něco, kde vynaložené prostředky mají minimální dopad na celkový výsledek.
Když tedy pominu vyloženě hloupé a zbytečné výkonnostní chyby, tak nám zbývají ty případy, kde vývojář upřednostnil jiné hodnoty než výkon. A vyčítat mu to je nesmysl. Je to jako kdybys automobilce vyčítal, že neefektivně hospodaří s okolním vzduchem nebo deštěm či slunečním svitem dopadajícím na auto -- teoreticky z toho mohli vytěžit víc, méně s těmito zdroji plýtvat. Ale oni to nedělají. Proč?
*) Teoreticky by mohl nejdřív dodat pomalou verzi a pak ji za příplatek optimalizovat... ale o tom se spíš vtipkuje, než že by se to běžně dělalo v praxi.