Vybírám technologii pro novou web aplikaci. Vývojáři se zadají podle vybrané technologie. Pak mohu ignorovat většinou nejdůležitější kritérium – znalosti vlastního týmu. Umístění webové aplikace do cloudu považuji za velmi výhodné. Mám poroto tyto důvody:
·
Nemusíme se
starat u údržbu a upgrade hardware.
·
Nemusíme se
starat o údržbu a upgrade operačního systému dalšího potřebného software.
·
Nemusíme
řešit jak moc bude aplikace vytížená. Poskytovatel cloudu nám zajistí, že
v případě vysoké zátěže, bude automaticky přidán další hardware a
v případě nezájmu uživatelů nebudeme za zbytečný hardware platit. Platíme
pouze zato, co spotřebujeme.
·
Nemusíme
řešit datovou konektivitu. Pokud je webová aplikace mezinárodní, není to snadný
úkol. Internet sice propojuje kontinenty, ale odezvy některých vzdálených
serverů mohou být dost pomalé. To může uživatele odrazovat. Poskytovatelé
cloudů mají tento problém obvykle dobře vyřešen.
Tedy zůstali mi
tyto technologie:
·
Microsoft
Azure a ASP.NET MVC.
·
Google App
Engine (GAE) a Java nebo Python.
Microsoft jsem
vyřadil. MVC architektura je u ASP.NET už na dobré úrovni a C# je podle mého
názoru špičkový jazyk. Bohužel Microsoft je dodavatelem nejen výborného
vývojového prostředí, ale také operačních systémů. Štve mě to, že nejnovější
technologie fungují u Microsoftu pouze na jeho nejnovějších operačních
systémech. Například vývojové prostředí Visual Studio v poslední verzi již
na Windows XP nespustíte. Chápu proč to Microsoft dělá, ale Open Source
nástroje těmito problémy netrpí.
Nyní mi tedy
zůstaly pouze dvě technologie. Python a jeho špičkový web framework Django a
Java. U Javy to s frameworky není snadné. Jenom Open Source jich je podle
serveru
http://java-source.net/open-source/web-frameworks
64! Já jsem si nechal poradit podle několik zdrojů a vybral Stripes. O tom ale
až dále.
Rychlost provádění kódu
Rychlost je
důležitá u cloudů ze dvou důvodů. V první řadě, aby program běžel rychle a
mohl zvládnout nějaké případné matematické úlohy. To je zřejmé. Druhý důvod je,
že se platí za spotřebovaný čas CPU. Čím program běží rychleji, tím levnější to
je.
Musím ale
přiznat, že rychlost provádění kódu není hlavním kritériem. Ve srovnání
s ostatními náklady nejsou platby za čas CPU nijak vysoké. Navíc webová
aplikace v naprosté většině neprovádí nijak složité výpočty. Pokud jsou u
webové aplikace problémy s rychlostí, je pro to několik důvodů, ale
programovací jazyk mezi nimi není.
Co se týká rychlosti, tak Java byla 31x rychlejší. Google
App Engine též umožňuje v programu sledovat kolik procesorového času vylo
aplikací spotřebováno. V tomto kritériu byla Java 60x úspornější. Tedy
Java je z hlediska nákladů na spotřebu CPU 60x úspornější.
Z tohoto hlediska je Java jednoznačným vítězem.
Webový framework
Jak jsem již
psal výše, zde není snadné porovnání. U Pythonu to je jednoduché. Existují dva
hlavní. Django a Turbogears.
U Javy je
situace mnohem složitější. Za prvé má kombinace Java a Google App Engine
problém se startem aplikace. Pokud třeba použijete framework Spring MVC a pro
ukládání objektů do databáze JDO, je problém se startem aplikace. Pokud u GAE
aplikace několik minut neběží, cloud ji odloží na disk. Při prvním požadavku se
musí nahrát do paměti. U Java virtuálního stroje se nahrávají všechny knihovny.
JDO i Spring MVC jsou knihovny velké.
Podle některých zpráv v konferenci může start aplikace trvat i několik
desítek sekund. To mnoho návštěvníků webu odradí a přejdou jinam. Google podle
některých informací pracuje na možnosti si připlatit za vlastní Java virtuální
stroj. Lepším řešením je ale použít knihovny malé, které se nahrají okamžitě.
Průzkumem jsem došel k tomu požít pro přístup k databázi interface
Objectify-appengine a jako web framework nasadit Stripes.
Django je
nepochybně dospělejší framework. Také má velké množství vývojářů a právě se
dokončuje jeho verze a úpravy pro nasazení i nerelačních databází, jaká je
například u GAE. Má ale i některé nevýhody. Je dost komplexní a původně bylo
Django vytvořeno pro vydávání elektronických novin. To je zde i dnes znát.
V polovině roku 2009 přešel velký známý server sourceforge.net z PHP
na Python a zvolil místo Djanga Turbogears. Jedním z důvodů byl nízký
výkon šablon Django. Django má ale skvělou administraci a lze se ho snadno
naučit.
Podle mého
názoru je lepší Python/Django, ale jen o kousek.
Programovací jazyk a produktivita
programátora
Oba jazyky jsou
objektové. Java má sice kvůli rychlosti i primitivní typy, přesto jde o vyspělé
objektové jazyky. Hlavní rozdíl mezi nimi je v tom, že Java je staticky
typovaný jazyk, kdežto Python dynamicky. Na výhody a nevýhody obou řešení
existují dlouhé články. Osobně preferuji statické typování. Mám raději, když mě
kompilátor upozorní na chybu i když za to zaplatím více naklapanými řádky.
Refaktoring je další důvod proč osobně preferuji Javu.
Za hlavní
nevýhodu Javy považuji její „ukecanost“ a někdy zbytečnou složitost. U Pythonu
se mi moc nelíbí syntaxe. To je ovšem velmi subjektivní.
Co je asi
nejdůležitější je efektivita programátora. Ta se velmi špatně měří. Je něco
jiného program napsat a je úplně něco jiného ho dlouhodobě udržovat. V tom
prvním vítězí Python a v tom druhém Java.
Čím větší je projekt, tím vhodnější je Java a naopak.
Pro oba jazyky
existuje několik kvalitních vývojových prostředí. Zmíním například Eclipse.
Samotné je naprogramováno v Javě a dá se v něm programovat jak Java,
tak pomocí pydev pluginu i Python.
Oblíbenost
programovacího jazyku je důležitá. Ukazuje jak obtížně se pro projekt najde
programátor a i jak obtížné je si jako programátor práci najít. Podle Tiobe
indexu k dnešnímu dni má Java 17.9 procent (1. místo) a Python 4.5 procent
(7. místo). Trend je ale ve prospěch Pythonu. Za polední rok Java poklesla o
1.5 procentního bodu. Python stoupl o 0.7 procentního bodu. Oba trendy jsou
dlouhodobé.
Moje osobní preference upřednostňuje Javu, ale když se
pokusím o osobní odstup, jsou pozice vyrovnané.