tifyty

pure Java, what else ?

Havi archívumok: április 2013

Java és Perl

Mennyire más világ a két nyelv. Csináljunk valamit hatékonyan és gyorsan, legyen kész, működjön. A másik meg azt mondja, hogy legyen karbantartható. Legyen világos, érthető. Ne akarjunk trükkös kódot írni. Ne kelljen érezni a kódot. Ne lehessen megmondani, amikor ránézek a kódra, hogy ezt Józsi készítette, azt meg Juli.

Amikor 1999-ben csatlakoztam az Index.hu alakuló csapatához egy sörös, boros beszélgetés során Bánóczi Zoltán (ma mint seo.blog.hu például) mondta, hogy a perl programozás olyan, hogy azt nem elég érteni, meg gyakorlottnak lenni. Azt érezni kell. És igaza van. Mai fejjel azt gondolom, hogy a Perl kiválóan alkalmas kisebb szoftverek megírására, de nem alkalmas nagyobb rendszerek professzionális fejlesztésére. Persze jöhetnek az ellenpéldák, hogy mi mindent raktak össze Perl programokból, csak a megfelelő ember kell hozzá: éppen ez a baj. Ha ki akarom festetni a lakásomat, akkor nem körömlakk ecsetet veszek elő, hanem festőhengert. Nem Michelangelo-t fogom hívni, hanem Makrai urat (Dohány utca 1/B), mert a célnak megfelelő minőségben dolgozik, és ki tudom fizetni. Lehet, hogy jöhetne Michelangelo is, és meg is tudná csinálni, de nem tudnám kifizetni. Ha pedig de igen, akkor ő nincs megfizetve, és akkor hobbizott. A kulcs ott van, hogy professzionális megoldásról beszélek.

A perl túl nagy szabadságot ad, és egyébként is: halott nyelv. Persze feltámadhat, ahogy a héber nyelv is feltámadt (vagy mit tudom én), de pillanatnyilag halott. Amikor 2005-ben Magyarországon megtartották az első Perl konferenciát, akkor itt járt Larry Wall és Leopold Tötsch. Larry a Perl megalkotója, Leopold pedig akkoriban a Perl 6-os verziójának a virtuális gépét fejlesztgette szabadidejében. Az éppen akkor volt neki elég, mert munkanélküli volt, aminek az is lett a folyománya, hogy a konferencia szervezőinek kellett megvenni, és elküldeni neki a vonatjegyet.

Erre a konferenciára elhívtak engem is előadni. Akkoriban elég ismert volt a nevem a Perl fejlesztők körében. Na nem azért, mert annyira értettem a Perl nyelvhez, hanem azért, mert írtam egy rövid tutoriált a nyelvről magyarul, és kiraktam az internetre. Sok időm volt úgy látszik. A konferenciára pedig készítettem, egy előadást, aminek az volt a címe, hogy “Tiltsák be a Perl-t!” Gondoltam, hogy aki igazi elvakult perl programozó az iróniának veszi az egészet, aki meg csak szereti a perl-t és esetleg észreveszi, hogy nem csak irónia van a dologban, az elég értelmes (és kultúrember) ahhoz, hogy a testi épségem ne forogjon veszélyben. Az előadásról készült videó felvétel is, de az idők során elvesztettem. (Ha valakinek megvan, tegye már fel utubra, vagy valahova.) Az előadás szövege azonban rövidítve megvan, és megvannak a slide-ok is. Bemásolom ide az egészet, és aztán mindenki elgondolkodhat, hogy vajon mi minden változott az életünkben nyolc év alatt:


Az előadás azt mondja el, hogy miért nem szabad kis, közepes, illetve nagy projekteknél a Perl nyelvet használni. Minden más esetben persze lehet. De ezeknél az eseteknél valami más megoldást kell választani, tipikusan Java-t.

Slide1

A Java sokkal jobb választás mindenki számára. (A Java csak egy a lehetséges választások közül, bárki behelyettesítheti kedvenc nyelvét, persze a Perl kivételével.)

A felhasználónak/megrendelőnek azért, mert tudhatja olyan rendszert használ, amelyik széles körben elterjedt platformra épül, sok millió rendszer épül fel Java-ban, és így nem kell szembenéznie azzal a veszéllyel, hogy amikor kiderül, hogy a rendszer az üzleti céljait nem teljesíti akkor a személyes felelőssége felmerülne: ő szabvány megoldást választott. Hogy az azzal készült rendszer rossz lett? Az nem az ő hibája.

Slide2

Ti pedig képesek lennétek Perl-t használni? Normálisan működő rendszert készíteni pár nap alatt? Esetleg ha közben, már a működő rendszert látva kiderül, hogy valami egy kicsit másképp kell, akkor módosítani pár nap alatt? Kinek jó ez?

A programozónak is jó, hiszen iszonyat mennyiségű metodológiát, eszközt, paradigmát, objektum orientáltságot, alkalmazás szervert lehet felvonultatni, ezen kívül létezik mindenféle megszerezhető certificate. Így a megrendelő sokkal kevésbé lát bele a tényleges Slide3 munkába, nem okvetetlenkedik, nem kritizálja meg, hogy miért kell egy közepes feladatra is egy chief architect, egy infrastructure designer, egy database designer, valamint ha már ennyi senior expert van a csapatban akkor tíz programozó, és hogy valaki ezt összefogja egy projekt manager.

Ti pedig képesek lennétek Perl-t használni? Megcsinálni ugyanazt a projektet fele idő alatt három okos programozóval? És a többi tíz családjával mi lesz? Éhen hal?

Slide4

A hardvergyártónak is jó, hiszen…

Nem mondom el, hogy miért. A 13 fős Java team-nek sem mondanám el, úgysem értenék és vitatkoznának velem. Itt egész más okból nem mondom el.

Ti pedig képesek lennétek Perl-t használni? Csak gondoljatok bele: ha mindenki Perl-t használna, és apró, gyors programokkal lenne megoldva a feladatok zöme, akkor nem tudnának a hardvergyártók nagy tömegben eladni irdatlan teljesítményű gépeket. Ha pedig csak kevés gyors gépet adnak el, akkor ezek a gépek nagyon drágák lennének. Akkor min játszanánk a Doom-ot? (Tetszőleges kedvenc játék behelyettesíthető, kivéve a Perl-t.)

Slide5

A szoftvergyártó cégnek is jó, hiszen fillérekért lehet alkalmazni főiskoláról frissen kikerült Java-t alapszinten tudó kódgyártókat. Ha pedig okosodtak egy kicsit, akkor vagy olcsó chief architect lesz belőlük, vagy ha rájönnek arra, hogy mennyit érnek, és elkezdenek magasabb fizetést követelni, akkor utcára kerülnek, és jön helyettük új, friss diplomás. (Legfeljebb megtanulnak Perl-ben programozni.)

Slide6

Ti pedig képesek lennétek Perl-t használni? Végetek van! Már ott elrontottátok, amikor megtanultátok a Perl-t! Tagadjátok le, hogy ismertek ilyen nyelvet! Nem fog sikerülni, de legalább próbáljátok meg! A szoftvergyártó cégtulajdonos, menedzser nem fog felvenni benneteket, még ha megtanultátok is a Java-t! Csak zűrt okoz, ha a chief architect-en kívül más is érti, hogy hogyan működik az egész rendszer. Az meg aztán mindennek a teteje, ha egy programozó annyira átlátja a rendszer felépítését, hogy kiderül, hogy a chief architect viszont nem. Még a végén egy egyszerű, logikus, átlátható rendszer születne, amit másik szállító is tudna módosítani, ő pedig elveszít egy vevőt.

Slide7

Összegezve: NEM SZABAD PERL-t HASZNÁLNI! Tönkreteszi az informatikát! Tönkreteszi a világot! Tiltsák be a Perl-t!


A konferencia jó hangulatú volt. Utána elmentünk együtt vacsorázni, sörözni. (Egyébként javaslom, hogy ha egy jó sörözésre vágysz, akkor inkább a régi jó haverokkal menjetek, mint egy nemzetközileg ismert, introvertált geek-kel.) A Perl továbbra is töretlenül fejlődik, és már a 5.17.8 verziónál tart (2013. február), de már nincs akkora lendülete, mint 2005-ig volt (forrás, wikipédia (ha ha)).

Mit lehet még ehhez hozzátenni?

.

.

.

MONDOM: Mit lehet még ehhez hozzátenni?!?

Gombvarrás

~/github/aptools$ mvn clean install
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
chdir: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
chdir: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
Error occurred during initialization of VM
java.lang.Error: Properties init: Could not determine current working directory.
	at java.lang.System.initProperties(Native Method)
	at java.lang.System.initializeSystemClass(System.java:1115)

No ez mi lehetett? Nekem könnyű volt, mert én csináltam, és ezért beugrott, hogy mi ez a tageshit, de ha valaki így a blogon olvasva is rávágja, hogy mi történt, és mit kellett tenni, az előtt megemelem a nem létező kalapom, és elismerem, hogy vitathatatlanul sokat látott, és tapasztalt tevehajcsár, akivel félelem nélkül mernék nekivágni a Szaharának, feltéve, hogy rendelkezésre áll elég unit teszt.

Hint: a megoldás a következő volt:

cd
cd ~/github/aptools

De csak akkor kattints, ha már nagyon elkeseredett vagy!

És mivel régen volt savazás (sic!), most lehet:

Tudáspróba, int, mit ír ki

Mit ír ki az alábbi program?

public class IntDiff {
	public static void main(String[] args) {
		int maxi = Integer.MAX_VALUE;
		int mini = Integer.MIN_VALUE;
		int difi = maxi - mini;
		long difLi = maxi - mini;
		long maxL = Integer.MAX_VALUE;
		long minL = Integer.MIN_VALUE;
		long difLl = maxL - minL;
		System.out.println(difi);
		System.out.println(difLi);
		System.out.println(difLl);
	}
}

Természetesen a copy/paste mindenkinek működik, még a birkapásztoroknak is. Úgy kellene megoldani, hogy csak fejben.

Biztonságos?

Nagyobb cégeknél rendszeresen el kell végezni mindenféle értelmetlen tréningeket. Persze nem értelmetlenek, mert bármit amit megtanulsz, valaha lehet valami haszna, de amikor tele vagy melóval, és akkor még egy kötelező cégetikai tréninget is végig kell csinálni a céges intraneten, akkor tényleg úgy érzi az ember, hogy “nesze sánta itt egy púp”.

Most húsvétkor, hogy otthon jártam egy rokonom küzdött éppen otthonról egy ilyennel, mert mikor csinálja az ember, ha nem ünnep alatt? Olyankor nyugi van, nem csörög a telefon: lehet érdemben dolgozni. Volt húsz teszt kérdés a végén, és persze egy olyan volt, amit nem sikerült megoldani: az utolsó. Egy kérdés, és öt válasz, amelyikből egy, vagy több a jó. Nem olyan nagy kaland, hiszen csak 32 lehetőség van. Sajnos azonban a program úgy lett megalkotva, hogy ha tippeltél, akkor már nem mehetsz vissza, legfeljebb előröl kezded mind a 20 kérdést. Így már egy kicsit húzósabb.

Persze ha van egy informatikus a háznál, aki látja, hogy a nagy biztonságú VPN-en keresztül milyen csiga módra töltődik be az oldal, és ehhez képest mégis milyen azonnal vágja rá a hatos IE, hogy a megadott válasz nem jó (azt persze nem, hogy mi nem jó), akkor lehet sejteni, hogy itt valahol a háttérben egy JavaScript mókol, és ha JavaScript, akkor talán ki lehet kerülni, meg lehet hakkolni a jó cél érdekében, hogy meg legyen csinálva a mandatory tréning.

Valóban az volt, és nem is volt túl bonyolult a félig kézzel írt, félig valamilyen program által generált JavaScript makramé/origami keverékben megtalálni, hogy mi a jó válasz: mind az ötöt be kellett jelölni. A legszebb a dologban, hogy valójában, tartalmilag ez a megoldás hibás volt.

De vajh hibás-e az a megoldás, hogy ott van az egész JavaScipt vomitus, benne a megoldással?

Először azt gondolja az ember, hogy bizony hibás. Hol van itt a biztonság? Minden kérdésre ott a válasz, igaz, hogy \u00XX alakban, de ez nem okozhat gondot. Pillanat alatt meg lehetett hakkolni.

Aztán azt is gondolja az ember, hogy talán mégsem. Mert igaz, hogy informatikusként… na de utcaseprőként, ápolónőként, vésnökként, szóval azokban a szakmákban, amik tipikusan előfordulnak a multiknál? Azok előbb tanulják meg a jó válasz, még akkor is ha az rossz, mint ahogy megtanulnak JavaScript-ül.

Biztonságos?

Semmi sem az. Vagy minden, annyira, amennyire kell. Néha kevésbé, néha jobban. Szóval? Mi a véleményed? Biztonságos?