A weboldal jelenleg csak szakaszosan érhető el, ezért álljon itt a bejegyzés másolata.
Next step on the road...
Monday March 28, 2011Through some odd twists in the road over the past year, and a tardis encountered along the way, I find myself starting employment at Google today. One of the toughest things about life is making choices. I had a hard time saying "no" to a bunch of other excellent possibilities. I find it odd that this time I'm taking the road more travelled by, but it looks like interesting fun with huge leverage. I don't know what I'll be working on. I expect it'll be a bit of everything, seasoned with a large dose of grumpy curmudgeon.
- A hozzászóláshoz be kell jelentkezni
- 5800 megtekintés
Hozzászólások
Nahát, egy évig tartott neki elhelyezkedni.
- A hozzászóláshoz be kell jelentkezni
annyi meló után én is elmentem volna egy évig lóbálni...
- A hozzászóláshoz be kell jelentkezni
Vagy a szerződése 1 évig tiltotta a konkurenciánál való elhelyezkedést.
Egyébként örülnék, ha a Google-Apache alapítvány páros előállna egy új platformmal+programozási nyelvvel (a Java alternatívájaként), ami mentes a szabadalmaktól és Apache V2 licences.
- A hozzászóláshoz be kell jelentkezni
C# .NET - új platform és programozási nyelv a Java alternatívájaként
Mondjuk nem Apache 2.0 licences, de hát annyi baj legyen.
- A hozzászóláshoz be kell jelentkezni
Az Apache vagy más megengedő licenc hiánya igenis hátrány. Amúgy ott van a Go. De véleményem szerint Javahoz hasonlóan egy interpretált, statikusan típusos nyelvre van szükség.
- A hozzászóláshoz be kell jelentkezni
A Go nem alternatívája a Javanak és nem is arra találták ki. Bár néhány nyelvi feature-t szívesen vennék belőle (type inference).
"De véleményem szerint Javahoz hasonlóan egy interpretált, statikusan típusos nyelvre van szükség."
+1 és támogassa az OO-t. Hozzátenném a platformot is: GC/automatikus memória kezelés, és hogy továbbra is hordozható legyen az OS-ek között a lefordított kód.
- A hozzászóláshoz be kell jelentkezni
Az OO talán annyira nem fontos ha van ducktyping (ami ugye dinamikus nyelveknél van, és mivel a statikusság fontos lenne ezért mind1) vagy go szerű type interface. Ettől függetlenül a Go nem tudná felváltani a Java-t. Bár az egyik koncepciója a Go-nak a nagyon gyors fordítás, ami elég előnyös.
- A hozzászóláshoz be kell jelentkezni
Pontosítok, nem biztos hogy fel tudná váltani a Java-t a Go.
- A hozzászóláshoz be kell jelentkezni
Mi hiányzik a Góból, ami a Javában adott? (Exitnek is ez a kérdés.)
- A hozzászóláshoz be kell jelentkezni
Öröklődés, method overloading, generikusok hiánya. Ez az implicit interface megvalósítás sem tetszik: elsőre klassznak tűnhet, hogy minden osztály implementálja az interface-t, ha a metódusok megvannak, de ez egy rémálom lehet refactorkor. Kell az az explicit két irányú kapcsolat (Javaban implements és @Override).
Nem a nyelv hibája, de az, hogy kapásból natív kódot fordít és így nem hordozható én nagy hátránynak tartom. Ez is akadályozza, hogy akkora lib környezet alakuljon ki hozzá, mint Javaban, ahol egy binárist elég feltölteni a központi maven repóba és minden java projekt használhatja (függetlenül attól, hogy hány bites, milyen architektúrás gépe van milyen oprendszerrel).
Én nem tartom olyan jelentős feature-nek, hogy gyorsan fordít (kit érdekel, a fordítási sebesség). Lehet, hogy ennek van jelentősége a C/C++ progikhoz képest, de Javaban én nem érzem lassúnak a fordítást (fejlesztéskor úgyis automatikus, inkrementális a fordítás, build-kor meg a tesztek lefuttatása sokkal több időt emészt fel, mint a fordítás).
- A hozzászóláshoz be kell jelentkezni
Erről van szó. Nagyon nem érdekel, hogy gyorsan fordít, amikor a java/eclipse nekem real time "fordít", nagy build-et meg viszonylag ritkán csinálok.
Meg tényleg ilyeneket szeretnék olvasni nagy mennyiségben, tényleg:
for i := 0; i < flag.NArg(); i++ {
if i > 0 {
s += Space
}
- A hozzászóláshoz be kell jelentkezni
Én meg ilyeneket ;]
var squares = [i * i for each (i in [1, 2, 3])];
- A hozzászóláshoz be kell jelentkezni
OMG :D
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Őszintén szólva nekem az olyan kódoktól, amiben több az annotáció mint az érdemi kód, vagy a típuskonverzió mindenféle hibavédelemmel ellátva, na ez ilyenektől leginkább a sírvahányós makróval hímzett ezredfordulós ms atl jut az eszembe.
Azt hiszem akkor tört el bennem valami a javaval kapcsolatban, amikor egy perzisztencia réteget szerettem volna egy kicsit továbbgyúrni, de egy generics-es interfész öröklődésnél megbukott a technológia.
- A hozzászóláshoz be kell jelentkezni
vagy inkabb te, ha nem tudod hogy kell hasznalni?
az annotation-driven code a jovo, ha nem tetszik, ne hasznald.
- A hozzászóláshoz be kell jelentkezni
Vagy esetleg leszállhatnál a magas lóról. A fél community sírva könyörög, amióta a java7 egyáltalán szóba került, hogy csinálják meg rendesen a generics implementációt, de az a fránya hanyattkompatilitás...
Az annotation driven kód max EE javában a jövő, egészségedre, én igyekszem kerülni a mértéktelen használatát. Csak hogy jól értsd nem az annotation a baj, hanem az, ha az osztályok kódja jóformán csak abból áll. Egyemistáknak már az elején oktatják -- nem véletlenül -- hogy a kód ne tartalmazzon konfigurációs elemeket, márpedig az annotáció egyre inkább az. De mindegy, nem különösebben érdekel, hogy ebben a témában mit hiszel, pláne nem itt kéne megtárgyalni
- A hozzászóláshoz be kell jelentkezni
IMHO a sok indiaival képtelenek lesznek bármit normálisan megcsinálni.
Semmi jót nem várok a 7-es Java-tól.
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
biztos azert megy erre egyre tobb kod :-)
szoltal nekik is, hogy nem jo? ;)
- A hozzászóláshoz be kell jelentkezni
A metaprogramozás (a funkcionális programozással karöltve) már az 60-as évektől kezdve mindig is a "jövő" volt! ;P
Ugyanúgy közeleg mint a linux desktop éve...
(Mondjuk én Linux desktopot használok, és funkcionális nyelveket is, szóval rajtam nem múlik... ;)
- A hozzászóláshoz be kell jelentkezni
Ja, meg az AOP-e, meg az intentional programminge, stb. Irtozatosan lassan mozog mar az ipar, es ez egyre rosszabb lesz, tekintve, hogy folyamatosan novekszik a kodbazis. Ha most valaki rendelkezik mondjuk 10 ev C vagy Java tapasztalattal, akkor szinte garantaltan kihuzhatja mar a maradek 30 evet nyugdijig ugy, hogy nem csinal semmi ujat. Ez persze nem tul szorakoztato, de megcsinalhato.
----------------------
while (!sleep) sheep++;
- A hozzászóláshoz be kell jelentkezni
Nem akarom túlzásba vinni a Spring Roo marketinget, mert persze ennek az eszköznek is vannak korlátai, de szerintem ez az eszköz az, amivel megvan az esély arra, hogy széles körben elterjedjen az AOP egy gyakorlatban is használható subsetje.
Üdv,
Gergely
- A hozzászóláshoz be kell jelentkezni
Sok hozzád hasonló panaszt olvasni. Azt nem értem, hogy miért nem JDBC-t használtok? Esetleg Spring-es JdbcTemplate-et... Hatékony, jó, egyszerű mint a faék.
- A hozzászóláshoz be kell jelentkezni
Mert a projektjeink nagy részében hibernate van használatban -- közel 6-7 éves döntés, szopunk mint a volwerine. Amit említettem meg egy másik, de inkább jdbc-közeli cucc (ami a java6-ból politikai alapon ki lett hagyva, tenksz to jpa lobby), hasonlóan az egyszerűbb fajtákból való.
- A hozzászóláshoz be kell jelentkezni
Elvannak ezek egymás mellett. Bizonyos részeket mi is migráltunk (vissza) JDBC-re anno.
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
El tudjátok mondani, hogy mi volt az ellenérv a hibernate-tel/illetve gondolom a perzisztenciás megoldásokkal szemben? Csak azért, mert nekünk most van egy nagy (értsd megabájtos méretű) db layerünk, ami nem igazán támogatja az adatbázis cserélgetést, és gondolkodtunk azon, hogy cserélnénk valami más megoldásra. (jelenleg kézzel beleírt SQL query-k vannak, adatbázis típusokra szétszedve)
Javaslatok?
- A hozzászóláshoz be kell jelentkezni
Mi pár rokon nagy projekten használunk hibernate-et. Távol álljon tőlem h azt mondjam, hogy nagy guru lennék, de ez eleve gond az általam eddig látott projekteknél -- ti. adatbázis kezelési ismeretekkel fel vannak általában vértezve az emberek, de a h3-hoz gyakorlatilag teljesen újra kell tanulni az egészet, és ezt magas szinten viszonylag kevesen művelik. Ha ez nincsen meg, akkor már középtávon is szopóág van.
Ha egy jdbc-szerű perzisztencia réteg írása/használata/supportja x tudást igényel, akkor a h3 az gyakran 2x-et. Főleg a bugfix/support van leginkább a rémálom kategóriában, és emiatt eléggé nagy önbecsapásnak tartom a magas szintű perzisztenciát/ORM-et. Ráadásul igazán nem is tud DB-független lenni, mert míg az egyszerűbb esetekben is minimum bele kell túrni a konfigurációba, később HQL-ben is találtok különbségeket/hiányosságokat, és többször volt már olyan, hogy saját dialect-et kellett készíteni.
Nem láttam még igazán jó megoldást DB-függetlenségre. Van aki a tárolt eljárások híve -- ami szintén nem kezdő szint -- van aki több DAO réteget tart naprakészen. A tárolt eljárások mellett szól a teljesítmény, de szétaprózza a kódot, és kell pár progzó, aki ehhez is ért.
- A hozzászóláshoz be kell jelentkezni
Mi is használunk tárolt eljárásokat (postgre) de ez kb. annyira kompatibilis a különböző adatbáziskezelők között, mint a standard SQL. A bugfixelést inkább kihagynám, akkor lehet,
hogy inkább marad a handcoded SQL, esetleg iBatis?
- A hozzászóláshoz be kell jelentkezni
Nem igazán ismerem. Van egy nem túl közeli kolléga, aki azzal vergődik, de őszintén szólva nincsenek illúzióim a dologgal kapcsolatban. Spring JDBCTemplate-et, vagy EoD SQL-t tudnék még javasolni jó szívvel -- utóbbinál megvan az az előnyöd, hogy a mezők mappigjét nem kell kézzel faragni, de legalább egy kis reflection-ös overhead van rajta :) Illetve még annyi, hogy igéény szerint annotációs/genericses, így pl egy dinamikus proxy készítésekor az ember könnyen beleszaladhat egy pofonba ;] amúgy nem vészes, csak helyén kell kezelni ezt is, mint a h3-at. Annak a kukában van pl a helye :D
- A hozzászóláshoz be kell jelentkezni
Nem tudom mi baj van a Hibernate-el meg EJB3 JPA-val. Nagyon jó. Polymorphism a kulcsszó.
- A hozzászóláshoz be kell jelentkezni
Addig örülj, amíg nem tudod
- A hozzászóláshoz be kell jelentkezni
Tarolt eljarasokrol es teljesitmenyrol:
Ez sajnos nem teljesen igy van, pontosabban nem mindenfele feladatra. Nemreg vegeztunk teljesitmeny mereseket Oracle (11g) adatbazisban:
Irasi celra (esetunkben data gridbol (uj vagy modositott) adatok szinkronizalasa adatbazisba minimalis olvasassal) a tarolt eljarasok SOKKAL lassabbak, mint a (kulonosen a batch alapu) direct sql-es muveletvegzes, mert a tarolt eljarasokat a JDBC driver nem tudja batch-elni. Es persze meghivni egy tarolt eljarast is dragabb a bonyolultabb parse es forditas miatt, mint egy sima SQL statement-et.
Mindennek megvan a maga szerepe, de a tarolt eljaras az inkabb olyan celra hasznalhato jobb teljesitmennyel amikor csak logikat kell az adatbazisba eljuttatni (mit kell meghivni), de adatot nem: pl. adatbazisban levo adatok helyben feldolgozasa.
Persze ha ekozben query-zni is kell, akkor valtozik a helyzet, itt a tarolt eljaras elonybe kerulhet a roundrip latency-k jelentos kulonbsege miatt.
Update: nem feltetlenul nyilvanvalo, de a fenti megallapitasok Oracle adatbazisra igazak. Mas gyarto adatbazisanak JDBC driverevel nem probalkoztunk, ott valoszinuleg ezek a dolgok nem feltetlenul helytalloak.
- A hozzászóláshoz be kell jelentkezni
Hát hosszan lehetne erről vitatkozni. Kezdve ott, hogy valamiért úgy rémlik, hogy sql serverrel a hibernate néha még a query-kre is generált egy tárolt eljárást. Nálunk elég nagy az adatmodell, és sokszor nem mindegy h milyen eszközökkel szeded össze az adatokat. A hibernate alap műveletei voltak a leglassabbak, a hql már kicsit többet nyújtott, ha ésszel használta az ember, de sok esetben még a legnagyobb gurujaink sem voltak képesek hql-ben megfogalmazni, ami sql-ben pikk-pakk ment -- lehet persze az értelmi képességeket feszegetni... Így sokszor maradt a hibernate natív sql-es támogatása, de amikor több-százezres/milliós rekordok között kellett kutakodni, és azok alapján továbblépni a modellben, akkor a jdbc driver és a hálózati kommunikáció megette a teljesítményt.
Arról nem is beszélve, hogy sokszor voltunk olyan helyzetben, hogy magával a hibernate-el sem lehetett megoldani azokat a problémákat, amik hibernate használata nélkül nem is léteznének :)
A magam részéről nem szeretem a tárolt eljárásokat, de gyakran futottunk bele olyan szituációba, amikor muszáj volt használni.
- A hozzászóláshoz be kell jelentkezni
Magam reszerol a Hibernate-rol nem szoltam egy szot sem. A hibernate hierarchia bejarasi hulyesegeit es annak kovetkezmenyeit en sem szeretem, ezert lehetoseg szerint kerulom a Hibernate hasznalatat, ha teljesitmenyre van szukseg.
En a plain JDBC direct sql (batchelve)-t probaltam egy konkret felhasznalasi terulet eseten (nagyon write-heavy adatpumpalas data gridbol adatbazisba) osszehasonlitani, es en is csak annyit mondtam, hogy nem mindig a tarolt eljaras a legjobb. (ellentetben azzal, amit a java.sql.* Javadoc-a es a JDBC leiras alapjan gondolnal, mert hogy ugye az csak azt allitja, hogy minel kevesebbszer kell forditani annal jobb (ergo CallableStatement jobb mint PreparedStatement, PreparedStatement jobb mint sima Statement)).
A Hibernate nativ sql tamogatasaval konkretan is megvan az a gondom, hogy nem igazan latom, hogy tamogatna a parameterezett native sql update muveletek batcheleset.
Az ertelmi kepessegek feszegeteset Gavin King-en kene elkezdeni, valami jo hegyes szerszammal...
- A hozzászóláshoz be kell jelentkezni
Rémlenek valami szinkronizációs problémák is, de az elsődleges ok a teljesítmény.
Nincs annyi kód és annyi ember, hogy rettentően kelljen az absztrakció meg az autoconfig.
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
Bevallom én nem értem a többiek problémáit. Évek óta használom a hibernate-t több projektben is (régebben hbm.xml-lel és spring dao-val, újabban JPA2 apin keresztül, de spring támogatással) és eddig semmi problémám nem volt vele. Ezek között volt olyan "egzotikus" is, ahol régi alkalmazást kellett portolni, ezért ResultTranformer-t kellett alkalmazni és criteria/HQL helyett jó kis nyers SQL-t (dinamikus táblanév választás és elég összetett sql queryk), de a hibernate itt is nagy segítség volt. Ilyeneket is meg lehet vele tenni:
final SQLQuery query = session
.createSQLQuery("SELECT {a.*}, {b.*}, {c.*} FROM "
+ aTableName
+ " a, "
+ bTableName
+ " b, "
+ cTableName
+ " c WHERE a.b = ? AND a.u = ? AND a.a = ? AND b.u = a.u AND b.bh = a.b AND c.b = a.b");
query.addEntity("a", A.class);
query.addEntity("b", B.class);
query.addEntity("c", C.class);
query.setString(0, b);
query.setString(1, c);
query.setString(2, a);
query.setResultTransformer(Transformers
.aliasToBean(Result.class));
query.setMaxResults(1);
result = (Result) query.uniqueResult();
Ahol a Result osztály egy összefogó eredmény A, B, C típusú mezőkkel (A, B, C tábláknak kb. 110 oszlopuk van összesen). A fenti példa elég sok gépeléstől ment meg és igazából nem más fű alatt mint plain JDBC.
De lehet használni sima springet is jdbc-vel. Az is sok gépeléstől ment meg, de nem annyitól, mint a hibernate. Ez esetben a JDBCTemplate és a különböző RowMapper jön jól (pl.: ParameterizedBeanPropertyRowMapper).
- A hozzászóláshoz be kell jelentkezni
Kisebb projekt, és nem túl nagy mélységű adatmodell esetében talán jól jön -- legalábbis ahogy én látom. De nem érzem pozitívnak a mérlegét (ráfordítás vs hozadék) akkor, amikor refactoring/ráfejlesztés/bugfix van. Nekem emellett még azzal is bőven volt gondom, hogy pár friss diplomás progmat rookie is beletenyerelt néha a lecsóba, és az első hibernate hibaüzenetnél hanyatt vágták magukat.
Amúgy akkor neked is ajánlom figyelmedbe az EoD SQL-t. Eredetileg a java6 beta JDBC része volt az api, de kidobatták a megfelelő emberek, és pár lelkes belecsapott a saját implementációba. A mappert ezzel is meg lehet spórolni ;]
- A hozzászóláshoz be kell jelentkezni
Nézted a példát amit írtam? Elég refactor friendly. Nem kellett kiírni a 110 oszlop nevet, nem kellett leírni 110 sornyi settert és mégis be tudja parsolni az eredményt egy több szintű bean struktúrába. Ahogy én látom ezt az EoD SQL sem tudja. Mellesleg kétlem, hogyha tényleg olyan jó cucc lenne, akkor el lehetne nyomni azzal, hogy "nem tették be a JDBC-be". Nem kell szabványnak lennie valaminek, hogy a Java világban sikeres legyen.
Ne vedd zokon, de nekem úgy tűnik, hogy fejetekbe vettétek: a hibernate az oka a nálatok előjövő hibáknak.
- A hozzászóláshoz be kell jelentkezni
Néztem, ezért is említettem, hogy a jdbctemplate-hez képest többet nyújt, hasonló alapokon. Többszintú struktúrát meg azért nem tud, mert nem ORM, akárcsak a jdbctemplate. Mindegy, sztem hagyjuk...
- A hozzászóláshoz be kell jelentkezni
Személyes tapasztalat, hogy a Hibernate/Toplink/JPA-val semmi baj nincs, és nagyjából mindent meg lehet velük csinálni - viszont vannak olyan dolgok (tipikusan pl. nagymennyiségű adatokból összefoglalók készítése), amelyekre nem optimális. Ezekre jobb szimplán a JDBC, vagy ha szereted a Spring-et, akkor annak a template-je.
- A hozzászóláshoz be kell jelentkezni
Generikusok tényleg nincsenek. Az OO-t pedig a megszokottól egészen eltérő módon közelíti meg. Öröklődés ugyan nincs, de beágyazás van, amivel meg lehet csinálni mindent, amit az öröklődéssel, beleértve a többszörös öröklődést és a virtuális öröklődést is, egyedüli megszorítás, hogy virtuális függvényeket csak az interfészekben kapsz. Az implicit interfészek pedig szerintem éppen hogy könnyítik a refaktorizálást.
Natív kód tényleg nem a nyelvtől, hanem az implementációtól függ, jelenleg ez van. Viszonylag fiatal még a dolog, a jövőben sok minden lehet, vagy nem.
Gyors fordítás tényleg inkább a C++-hoz mérve számít, Javához képest kevésbé.
- A hozzászóláshoz be kell jelentkezni
"Öröklődés ugyan nincs, de beágyazás van"
Rendes OO nyelvben meg mindkettő van, mert helyesség szempontjából mást fejeznek ki. Persze kiváltható tartalmazással az öröklődés, de az egy kicsit fából vaskarika.
"Az implicit interfészek pedig szerintem éppen hogy könnyítik a refaktorizálást."
Van egy interfaced egy metódussal és egy implementációd az interfacere. Átnevezed a metódust az interfaceben és nem lesz fordítási hiba. Az implementáció továbbra is lefordul. Ez visszalépés a refaktorálást tekintve. Javaban a @Override annotáció miatt rögtön ordít a fordító, hogy "hé te, ez a metódus már nem ír felül/implementál senkit".
- A hozzászóláshoz be kell jelentkezni
"Rendes OO nyelvben meg mindkettő van"
Ez elég dogmatikusan hangzik. Mi számít a rendes OO nyelvnek? A ma elterjedt OO megközelítés lényegében a Simulában jelent meg, aminek az OO fogalomkészletét Stroustrup ráhegesztette a C-re, lerakva ezzel a C++ alapjait. Aztán a C++ alkalmazásfejlesztésre lecsupaszított változata lett a Java, és újabban minden nyelvnek muszáj OO-nak lennie, és jobbára ugyanezt a Simulától örökölt fogalomkészletet használják.
De talán félreérted a dolgot. Hint: beágyazás != tartalmazás.
"Átnevezed a metódust az interfaceben és nem lesz fordítási hiba."
Lesz fordítási hiba, csak máshol. Nem ott, ahol az osztályt implementálod, hanem ott, ahol megpróbálod az osztály egy példányát (implicit módon) castolni az interface típusára.
- A hozzászóláshoz be kell jelentkezni
"Ez elég dogmatikusan hangzik [...] Hint: beágyazás != tartalmazás."
Pontatlanul fogalmaztam. Rendes alatt én a megszokott, hagyományos, oktatott OO-t értettem. Azt ahol az inheritance és a composition elkülönülő technika a Go-ban lévő hibrid embedding-gel szemben. A Go embedding lehetőséget ad többszörös öröklődésre (ha nem tenné nem sok értelme lenne a sima egyszeres öröklődéssel szemben), de az ebből adódó konfliktusok feloldása szerintem rossz. "Ha ugyanazon a szinten névütközés van, de senki nem használja, akkor nem hiba, egyébként hiba." De mi van ha az adott fordítási egységen kívül van a meghívás? Akkor ez lefordul, de a meghívó/használó már nem?
"Lesz fordítási hiba, csak máshol. Nem ott, ahol az osztályt implementálod, hanem ott, ahol megpróbálod az osztály egy példányát (implicit módon) castolni az interface típusára."
A probléma hasonló, mint az előbb: mi van, ha a castolás nem az én programomban (amiben az implementáció van) történik? Az implementáció használójánál lesz hiba, nem az írójánál. Ez szerintem nem oké. Java-ban a hiba ott keletkezik, ahol igazából van: az implementáció írója explicit kifejtette szándékát, hogy az adott osztály az interfacet megvalósítja. A fordító az implementáció fordításakor figyelmeztet, hogy ez már nem igaz.
- A hozzászóláshoz be kell jelentkezni
Az @Override is csak néha jó. Mi pl vegyesen használunk 1.5/1.6 runtime-okat a szervereken, és főként a ws api változások miatt senki nem érzett rá erős késztetést, hogy ezen a helyzeten változtasson. Ezen a ponton ez az annotáció részben használhatatlanná válik. Amellett sokszor előfordul, hogy tűzoltás jelleggel kell pecselni. Mivel az @Override csak fordításkor használatos, a runtime nem fogja az orrod alá bökni, hogy hülye vagy, mert nem passzol az ősosztállyal/interfésszel, és így könnyen bebukod a staging tesztet.
- A hozzászóláshoz be kell jelentkezni
Az öröklődés és az overloading egymásból következik. Helyette Delegate-elni lehet. Az öröklést amúgy értelmesen virtuális függvényekhez használják, szerintem nem jó design pattern egy két esetet leszámítva, amikor azért örököltetünk valamit hogy az adatokat (fieldek) örökölje a gyerek osztály. A refaktoring statikusságának köszönhetően tud jól működik.
A libekben igazad van, két megoldás van, minden platformnak külön bináris, vagy belinkeled a forráskódot (hála a tényleg gyors fordítás).
A java-ban számtalanszor van szükség a teljes kód újrafordítására, főleg ha más fejlesztőkkel dolgozol, és svn update git merge/rebase-t (stb.) csinálsz. Közepesen nagy projektnél igenis fordít 5-6 percet az eclipse, főleg ha még mindenféle validation lefut.
- A hozzászóláshoz be kell jelentkezni
"Az öröklődés és az overloading egymásból következik."
Te összekevered a szezont a fazonnal. Az @Override meg az overload két külön dolog. Más az, hogy felüldefiniálod a gyerekosztályban a szülőosztály metódusát (override) és más az, amikor több, más paraméterű és visszatérési értékű függvény létezik ugyanolyan néven (overload).
Az öröklődés pedig nem az adattagok öröklése miatt kell,főleg ha private adattagok, mert akkor nem öröklődnek (nem éred el őket közvetlenül, hanem amiatt örököltetünk, hogy egy osztály viselkedését kiegészítsük (és ne módosítsuk). A metódus overridenak is be kell tartani az ősosztálynak az arra a metódusra vonatkozó contractját, különben nem érvényesülhet a helyettesítési szabály.
Az eclipse pedig akkor fordítja le a teljes kódot, ha az teljesne megváltozott (egy svn update pedig ptenciálisan csinálhat ilyet). Hálistennek elég csak 1-1 class file leforgatni ha csak annyi változott.
- A hozzászóláshoz be kell jelentkezni
Igen valóban összekevertem az overload (túlterhelés) az override-al.
Természetesen nem arra gondoltam hogy leszármaztatás után a private fieldeket használod.
Az eclipse hajlamos 3-4 fájnál is mindent újrafordítani.
- A hozzászóláshoz be kell jelentkezni
"A refaktoring statikusságának köszönhetően tud jól működik."
Lásd utpKabel-nek írt példámat arról, hogy miért nem jó a refactoring Go-ban (implicit -><- explicit interface).
"minden platformnak külön bináris"
Nem valószínű, hogy egy lib íróját érdekli az összes platform, hogy mindre lefordítsa a kódját.
"vagy belinkeled a forráskódot"
Ez minden csak nem karbantartható. Bloated lesz a kódbázis, a verziófrissítések meg felérnek egy kínzással.
- A hozzászóláshoz be kell jelentkezni
A refaktoringban lehet igazad van :)
A binárisban is, de a tapasztalat az, hogy olyan libeket használ az ember, amiknek, bután fogalmazva, van valami múltjuk vagy hátszelük. Pl. Apache által szponzorált projektek. Az átlag user megír magának egy libraryt, esetleg kirakja a kódját code.google.com vagy githubra, akkor ha csak egyedül dolgozik nem biztos, hogy a kódot lefordítja több mint egy platormra. Viszont az említett pl. Apache projektek többnyire tartalmaznak sok különböző fordítást.
Meg lehet oldani a forrás belinkelését okosan is.
- A hozzászóláshoz be kell jelentkezni
Az @Override nem kötelező egyáltalán. Csak segítség a programozónak, nehogy véletlenül overrideoljon egy szülőosztálybeli metódust akaratlanul. Jónak tartom, ha az IDE kiteszi automatikusan az @Override-ot, de nem kötelező.
- A hozzászóláshoz be kell jelentkezni
"Az @Override nem kötelező egyáltalán."
Én ezt nem is írtam sehol.
- A hozzászóláshoz be kell jelentkezni
jython ?
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Dynamic typed és ebben a szálban static typed-ről volt szó. Másrészt csak a nyelvre alternatíva a platform ott is a JVM.
- A hozzászóláshoz be kell jelentkezni
+1 :-)
- A hozzászóláshoz be kell jelentkezni
"Javahoz hasonlóan egy interpretált [...] nyelv"
--
Fontos feladatot soha ne bizz olyan gepre, amit egyedul is fel tudsz emelni!
- A hozzászóláshoz be kell jelentkezni
"Az Apache vagy más megengedő licenc hiánya igenis hátrány."
na mesélj, miért? miben gátol meg?
- A hozzászóláshoz be kell jelentkezni
A Javaval nem technikai problémáim vannak, hanem "jogi". Ebből a szempontból a .NET nem kicsit rosszabb...
- A hozzászóláshoz be kell jelentkezni
Én a node.js-től vártam, hogy épp irányba fejlődnek, de ahogy nézem mostanában, a php-s állatkert rászabadult a dologra, és olyan dolgokat hanyagolnak csak, ami nagyobb lélegzetű dolgokhoz lassan már elengedhetetlen.
- A hozzászóláshoz be kell jelentkezni
Én meg kerülöm a dynamically typed nyelveket (amennyire tehetem). :) Se rendes IDE támogatás, se rendes sebesség.
- A hozzászóláshoz be kell jelentkezni
Én is kétkedő voltam amíg csak olvastam róla.
De most elkezdtem használni a Groovy-t és marhára nincs kedvem visszatérni a Java-hoz.
Lehet, hogy lassabb, de fele annyi kódot kell karbantartanom. Ez egy idő után lényegessé válik.
- A hozzászóláshoz be kell jelentkezni
És ez a kódcsökkenés a dnyamic typed eredménye? Tehát, ha Groovy helyett Groovy++-t használnál, akkor ez a különbség elveszne?
- A hozzászóláshoz be kell jelentkezni
Egy darabig én is csak bottal piszkáltam a dolgot, de mára elég jó framework-ök vannak kliens oldalon. Elég régóta használom a java-t, de ez a típusosság 1.5-től felfelé csak önámítás/önszívatás/cerkahegyezés. Az fejlesztő eszközök meg most kezdenek felnőni a feladathoz. A nagyobb gond inkább a runtime-al van, ott nehezen érhető tetten néha a hiba.
- A hozzászóláshoz be kell jelentkezni
Hát ahogy tapasztaltam, van az a projekt méret, ami felett a dynamically typed nyelvben tökönszúrás a fejlesztés, és főleg az IDE támogatás miatt, meg úgy egyébként is. Nem hiszem, hogy ~25000 forrásfájl esetén mernék bátran refaktorálni egy metódust.
- A hozzászóláshoz be kell jelentkezni
Fegyelemre mindenhol szükség van. Anélkül meg a java kód is aknamező
- A hozzászóláshoz be kell jelentkezni
Hát ebben egyetértünk, viszont ettől függetlenül sajnos a programozó ugyanolyan halandó ember mint a többi, és sajnos minden leütött karakterben ott lakozik a hiba aljas démona :) Valóban fegyelem, tesztelés, stb. elengedhetetlen, de nem árt, ha a használt eszközök is adnak némi támpontot.
- A hozzászóláshoz be kell jelentkezni
Nekem a legtöbb kényelmetlenséget Java esetén a sok boilerplate kód legyártása és karbantartása jelentette (getter-setterek hada ... stb.). Mindezek ellenére a többi előny (a nyelv egyszerűsége, hogy lehetőséged van egy platformokon átívelő projektet egy nyelvben megoldani, a megfelelő IDE-k és egyéb eszközök) mellett még mindig megérte sok esetben a Javat választani.
Azért múlt időt írtam, mert a Spring Roo használatával a boilerplate kód jelentős része kiküszöbölhető. Nekünk bevált, pedig még nem is használjuk ki minden lehetőségét.
Üdv,
Gergely
- A hozzászóláshoz be kell jelentkezni
Ritka alkalmak egyik, amikor az annotációt hasznosnak látom: getter/setter helyett
- A hozzászóláshoz be kell jelentkezni
Szerintem nézd meg a Spring Roo-t, mert nagyon hasonló ehhez, konkrétan itt is annotációkkal lehet súgni a Roo-nak, hogy mit is szeretnél. Viszont a transzformációkat AspectJ Aspect-ekként készíti el, annak minden előnyével. Viszont emellett van még egy sor kényelmi funkció (pl. Maven integráció), ami egy JavaEE fejlesztésnél jól jön.
Üdv,
Gergely
- A hozzászóláshoz be kell jelentkezni
Egyszer _majdnem_ megnéztem :D
- A hozzászóláshoz be kell jelentkezni
Nézzétek meg az Playframework!-ot vagy Apache Tapestry-t. Be fog jönni. A kód generálás (scaffolding) nem a kedvencem, viszont a Roo-ban tényleg jól van megoldva, ahogy sok más hasonló frameworkben.
Playframework fordítás idejű jquery integráció (észreveszi hogy ha olyan servletbe hív ami nincs serveren) viszont nagyon sok java konvenciótól eltér.
Tapestry az újrahasználhatóság az egyik mottója, illetve nincs szükség pl. jqueryre, magától tud asynchron elemeket (page reload nélkül frissülő) elemeket kirakni.
Mindenkettő dinamikusan tölti be a Class fájlokat.
Ilyet vagy hasonlót egyébként egy JRebel-el (ez fizetős), vagy egy Java Hotspot patchel lehet elérni Dynamic Code Evolution.
- A hozzászóláshoz be kell jelentkezni
A tapasztalatom eddig az, hogy nagy cégek mind a static typed nyelveket preferálják és különböző workaroundokat alkalmaznak, ha dynamic typed nyelvvel kell dolgozni. Pl.: Google GWT (Java-t fordít JS-re), Facebook HipHop (PHP-t fordít C++-ra), Actionscript (gyakorlatilag static typed JS), magában az ECMAScript szabványban is már többször felmerült, hogy legalább opcionálisan lehessen static typed módban használni (talán egyszer be is kerül).
A másik, hogy egyszerűen nem lehet olyan szintű IDE támogatást fejleszteni egy dinamic typed nyelvhez, mint ami static typed-hez van. Pl.: milyen metódusai vannak az adott objektumnak: ezt csak futásidőben lehet tudni, így az IDE nem tud segíteni.
- A hozzászóláshoz be kell jelentkezni
Bekerül majd, ha a microhoo is úgy akarja. Én mondjuk vártam az ES4-et...
Az IDE támogatás is felemás, mert pl az aptana, vagy a spket képes egész használható támogatást adni. Nem veri a javas megoldásokat persze, de sokkal előrébb van az ember, mint egy natúr editorral.
- A hozzászóláshoz be kell jelentkezni
Meg ilyen is van pl.: http://pytools.codeplex.com/
- A hozzászóláshoz be kell jelentkezni
C# (dynamic) ftw, java es foleg a mai scriptnyelvek suxx. go-t kar idekeverni az felig erlang koppintas es a fiuk kicsit elszurtak. De nekik jo lesz.
- A hozzászóláshoz be kell jelentkezni
Java sux, c# rulez. Értem.
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
Jol erted.
- A hozzászóláshoz be kell jelentkezni
J++ egy kis visual basic-es beütéssel -- nekem is tetszik
- A hozzászóláshoz be kell jelentkezni
Miért olyan jó a dynamic?
- A hozzászóláshoz be kell jelentkezni
go nem alternative , de jobb :)
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
- A hozzászóláshoz be kell jelentkezni
Raadasul csak ilyen kis sufniceghez sikerult neki.. :)
--
Direp
- A hozzászóláshoz be kell jelentkezni
Bizonyára nem jól használta a "social media"-t az álláskeresésben, és nem volt elég szakmai a blogja...
- A hozzászóláshoz be kell jelentkezni
Grosling, lol. :)
- A hozzászóláshoz be kell jelentkezni
nem csoda, leven a Google eleg nagy Java fogyaszto, raadasul eleg sokan emigraltak oda a Suntol :-)
- A hozzászóláshoz be kell jelentkezni
Ja.
larry egy zsák(^k) zsét fizetett a völgy napos oldaláért, erre az architect-ek csapatostul átmennek az dontbeevil-hez.
- A hozzászóláshoz be kell jelentkezni
egye meg, amit főzött
- A hozzászóláshoz be kell jelentkezni
Rájöttek, hogy gyakorlatilag nincsen szükségük saját architektekre, mert a sok community tag önként és dalolva befejleszt nekik mindent az utolsó bitig. Nekik már elég csak bólintani.
- A hozzászóláshoz be kell jelentkezni
Csak lassan egyre kevesebbek fog erdekelni mire bolintanak vagy nem. Majd lesz $Java2 Council, a regi emberekkel csak mar Apache + Google zaszlo alatt, elobb-utobb csatlakozik az IBM es akkor vakarhatjak is a fejuket hogy mire is adtak ki a zset. Nem teljesen ertem miert is kellet ennyire szetcsapni a Sun-t, pont azokat a senior embereket vesztik el veszes sebessegel akik miatt erdemes volt eggyaltalan megvenni.
- A hozzászóláshoz be kell jelentkezni
meg ráírni, hogy ORACLE :-)
--
"SzAM-7 -es, tudjátok amivel a Mirage-okat szokták lelőni" - Robi.
- A hozzászóláshoz be kell jelentkezni
Ebből még sok jó dolog kisülhet.
- A hozzászóláshoz be kell jelentkezni
Késő van, így inkább csak téma boncolgatás. Oracle megvette a SÜN-t és a Java-hoz köthető jogokat. Perlik is a Google-t az Android Java szerűsége miatt. Ez mennyire kavarja meg ezt a pert? Jogok az Oracle tulajdonában vannak, akinek viszont a Java-t köszönhetjük és biztos sok kódrészletét is, most a Google-nél dolgozik.
- A hozzászóláshoz be kell jelentkezni
Szerintem semennyire. Ha te X cég alkalmazottjaként készítesz egy Y programot (tehát az X felkérésére), akkor Y-al kapcsolatos összes jog az X tulajdonában van. Ha átmész Z céghez, attól a jogok még X-nél maradnak. (már ha nem volt valami spec. megállapodás, de melyik az a hülye cég)
- A hozzászóláshoz be kell jelentkezni
Nem a java NYELV miatt perlik, hanem a JVM-ben használt szabadalomért. Nagy különbség.
- A hozzászóláshoz be kell jelentkezni
Gosling "goofiest" szabadalmai miatt. Bár ezek nyilván azok a sunoracle tulajdonában vannak, de Gosling maga jó alapot adhat ahhoz, hogy megtámadhassák érdemben a szabadalmak érvényességét.
- A hozzászóláshoz be kell jelentkezni
Nem az ő tulajdonában vannak a szabadalmak, hanem a cégében. Megoldás: máshogy kell implementálni, vagy mutatni kell egy korábbi megoldását (prior act).
- A hozzászóláshoz be kell jelentkezni
Az mondjuk vicces lenne, hogyha Gosling most csípőből előrántaná néhány saját Java szabadalom prior art-ját ;)
- A hozzászóláshoz be kell jelentkezni
Hiába tenné.
--
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
Nekem úgy, tűnik ugyanarról beszélünk, csak más végkifejlettel.
- A hozzászóláshoz be kell jelentkezni
Viszont a Google-nek közvetlen haszna nem származik a kisrobotból.
Ráadásul larry nem is focizik azon a pályán, így tehát közvetlen vesztesége sem keletkezett.
Szóval érdekes lesz az a kártérítési összeg.
- A hozzászóláshoz be kell jelentkezni
<sub>scribe</sub>
- A hozzászóláshoz be kell jelentkezni