Před nějakou dobou zde bylo založeno téma, ve kterém se autor dotazoval, proč jsou programy v Javě pomalé (což je bohužel také má zkušenost), ze kterého mimo jiné vyplynulo, že programování ve SWINGu je nevhodné.
Obecně psát GUI aplikace ve Swingu není problém, je to ověřená a použitelná technologie. Ono dost záleží, kdo je cílová skupina té aplikace a koho se ptáš. Když se zeptáš diskutérů na Rootu nebo na Ábíčku, tak ti asi řeknou „fuj Java“ – protože to moc nezapadá do jejich desktopového prostředí (KDE/Gnome), vypadá to jinak a odezva je o trošku horší (i když stále použitelná) než u nativních toolkitů (Qt/GTK). Toto je asi
nejnáročnější a nejkritičtější cílová skupina. Otázka je, jestli píšeš tu aplikaci pro ně. Podobně kdybych psal nějakou frikulínskou konzumní aplikaci pro applisty, tak bych volil nativní toolkit (i když v Mac OSu ta Java vypadá hodně nativně, podobně ve Widlích).
Přiznám se, že i já, když si můžu vybrat desktopovou aplikaci (třeba prohlížeč obrázků, správce souborů nebo e-mailového klienta) tak radši volím nativní (KDE/Qt), která zapadne do mého desktopu.
A něco jiného je, když budeš psát aplikaci do podnikového prostředí – tam jsou jiné priority, nejde o to, jestli ikonky a styl posuvníků/tlačítek přesně respektuje desktopové prostředí, taky je jedno, jestli ta aplikace startuje 100 ms nebo 10 vteřin – ráno ji pracovník pustí a do večera tam bouchá nějaké formuláře. Odezva je důležitá, ale pokud nebrzdí práci, opět se nějaké milisekundy neřeší. Naopak problém je, kdyby ti to na půl dne spadlo a ty lidi neměli co dělat, nebo kdybys jim ztratil data. Klíčová je funkcionalita, stabilita a rychlost, jakou jsi schopný implementovat nové požadavky – a v těchto směrech má Java (včetně GUI) hodně co nabídnout.
Co se týče spotřeby paměti, nejvíc mi tu žere Firefox, kde žádná Java není – a naopak javovké aplikace jako Netbeans IDE nebo jEdit mají menší nároky a jejich spotřeba je konstantní i když mi tu běží týdny v kuse. Nedávno se mi nějak zaplnila paměť, tak jsem koukal do htopu, která aplikace může – a byl to jeden prográmek v Pythonu, který jsem zapomněl běžet v pozadí na jedné ploše – byl odpojený, nikdo na něj neklikal, neměl teoreticky nic dělat… a během pár dnů sežral přes 4 GB paměti. A to nebyl nějaký odkudsi stažený bastl nebo alfa-verze, ale program nainstalovaný z distribučních balíčků. Podobně neočekávané pády aplikací – ty potkávám mnohem častěji u aplikací psaných v Pythonu než u aplikací v Javě. Částečně je to o kultuře programátorů a částečně hraje Javě do karet silné/statické typování a kontrolované výjimky, které musíš odchytávat (jinak ti to zařve už při kompilaci).
Shrnutí:
- pro firemní aplikace pro práci: klidně Javu/Swing
- pro náročné desktopové uživatele GNU/Linuxu: C/C++ a Qt/GTK na straně klienta (Java může být na serveru/backendu)
- pro spotřebitele – konzumní aplikace: hlavně asi webové rozhraní a mobilní (Android) + opět Java na serveru
- pro nějaké utilitky, které přinášejí klíčovou funkcionalitu, ale potřebuješ je jednou za čas (tzn. nebudou ti strašit na KDE/Gnome desktopu dlouho): klidně Javu/Swing