Teljesen egyetértek veled!
Az biztos, hogy nem dolgoznék ilyen cégnél, azaz kezdőként biztos nem bírtam volna sokáig, hogy fogja anyuci, apuci a kezem...
Nem tudom, hogy ki hogy van vele, de én a 'code monkey' címet abban a kontextusban szoktam alkalmazni, hogy egyes (nagy) cégek hogyan tekintenek a programozóik nagy részére. Lazán előfordulhat, hogy valaki zseniális programozó, de code-monkey szerepbe van kényszerítve egy nagy bürokratikus cégben, pláne ha fiatal.
A nagy cégek nem szeretik a kockázatot, ezért ódzkodnak attól, hogy a munkatársak kreativitásában megbízzanak. Inkább csináltatnak mindent több emberrel lassabban, de a viszonylag bürokratikus 'process'-jeiket végigvíve, bízva abban, hogy ha közepes is lesz a termék, ezzel a módszerrel kiszámítható módon elkészül. Ami vagy igaz, vagy nem, de ez az alapállás. Továbbá nem technológiai fókuszú cégeknél szeretik semmibe venni a technológiai embereket. Egy pénzügyi cégnél a pénzügyi szakemberek az istenek. Még technológiai cégeknél is van olyan, hogy nem becsülik meg nagyon a technológiai embereket, lásd James Gosling (és sokan mások) felmondása az Oracle-nél. Na mindegy ez már céges politika. Mindenester nekem a kisebb, de kompetens csapatban dolgozás jobban tetszik, mint a tipikus nagycéges felállás.
Hát ha nagyon összetett dologról van szó, akkor nem biztos, hogy jó, ha egy olyan kezdő foglalkozik a hiba megoldásával, aki az adott résszel egyáltalán nincs tisztában...
Nyilván nem totál kezdőre bíztnak egy eszméletlen összetett dolgot. Meg persze mi az, hogy kezdő, én olyan cégnél dolgozok, ahol az első két év gyakorlatilag betanulási idő, minimális önállósággal, nulla döntési joggal. Ja,és ezalatt egyetlen terület pár részterületével foglalkozol. 4-5000 munkaóra ott vna mögötted, na ez a kezdő.
Ez egy Javaban írt pár ezer soros munkaidő elszámoló progi új menüpontjának tesztje.
Van egy online felület az intraneten, szépen be lehet adogatni, melyik projekten hány percet dolgozott a jómunkásember. Ezt egy pályakezdőnek is meg kell tudnia terveznie, le kell tudnia kódolnia és tudnia kell debugolnia is, méghozzá reális időtartamon belül. De itt nem is a teljes progiról van szó, csak egy új képeséségéről. Tökeletes junior task.
Attól függ mi okozza a null pointer exceptiont. Ugyanis legalábbis C# alatt nem tudsz olyat csinálni hogy
Label alma;
alma.Text="Akármi";
Ehhez legalább az kell hogy Label alma=null; legyen, különben már eleve fordítási hibád van. Ezért aztán a null pointer exception sem annyira könnyen fordul elő mint a régi szép időkben. Ha igen, annak általában elég komplex oka tud lenni...
Épp most küldtem egy null pointer exception-ös bug jelentést egy fejlesztői csoportnak. Egy ilyen javításához minek kéne 10 év tapasztalat?
Hát ha nagyon összetett dologról van szó, akkor nem biztos, hogy jó, ha egy olyan kezdő foglalkozik a hiba megoldásával, aki az adott résszel egyáltalán nincs tisztában...
Igen, ez így van. Sőt, ha egy multinál vagy, ami azért jött Magyarországra, hogy olcsóbb legyen a fejlesztés mint az USA-ban, akkor nagy esély van arra, hogy amúgy tapasztalt emberek is ha nem is kizárólag, de nagyrészt code monkey-ként vannak kezelve a magyar részlegen. Van, hogy szinte az egész magyar részleg code-monkeyként van nagyrészt kezelve. Van pénzük, miért ne vegyenek fel csóró Magyarországon seniorokat ilyen szerepre is? A baj csak az, hogy ezt sokan megunják és lelépnek. Én is ezért léptem le az utóbbi multi állásomból. És ez is egy ok arra, hogy inkább a Scala felé próbálok orientálódni és nem a Java-nál maradni mindenáron.
Profi multinál soha nem kódol, csak tervez. A kódolás és debugolás büdös, koszos, fárasztó részét a code monkey seregek végzik. A Java teljesen jól támogatja ezt a fejlesztési módot, talán ezért is terjed el bizonyos szektorokban annyira.
Épp most küldtem egy null pointer exception-ös bug jelentést egy fejlesztői csoportnak. Egy ilyen javításához minek kéne 10 év tapasztalat?
Egyéni fejlesztésnél, kiscsoportos fejlesztői gárda esetén igen.
Egy multinál ez nem feltétlen igaz.A kezdő reszeli az alap kódot, bugokat jevít, ezzel fejlődik, a haladó reszeli a nehezebb részeket, az öreg róka meg tervez, felügyel, döntéseket hoz.
Az, hogy egy programozási nyelv egy másik nyelven alapul vagy befolyásolva van általa, egy teljesen megszokott és természetes dolog a programozási nyelvek világában (bár ezt ugye senkinek sem kell mondani). Ilyen alapon az összes C-szerű szinaxisú nyelvet lehetne azzal vádolni, hogy a C-t "koppintja", "majmolja". Szerintem nincs, vagy alig van olyan elterjedt nyelv, ami ne alapozna egy másikra szintaxisában.
A wikipédia szerint a jávát a következő nyelvek folyásolták be:
Ilyen szempontból a Scala egy hatalmas előnnyel indít.
Ha ugy vesszuk, az OCaml is egy hatalmas elonnyel inditott ahhoz a rengeteg meglevo Java libhez kepest: elottuk letezett!
A jáva kód a map inicializálására milyen jáva verziót igyényel?
Nincs benne semmi speci dolog, egy egyszeru anonymous osztalyt peldanyosit, amely HashMap-bol szarmazik, es peldanyasitaskor az inicializalo blokkban levo kod belepakol par erteket. En is vakartam a fejem par percig, amikor eloszor latam ilyent!
Hasonlo nyelvek eddig is voltak (pl. OCaml), valamiert megsem terjedtek el...
Azok mögött nem volt ott a JVM, és így nem működnének együtt a számtalan meglévő jáva könyvtárral és nem lehet őket összekötni az esetlegesen meglévő jáva kódokkal. Ilyen szempontból a Scala egy hatalmas előnnyel indít.
A jáva kód a map inicializálására milyen jáva verziót igyényel?
Egyébként, ha már az objektum-orientált funkcionális programozási nyelveknél tartunk, a microsoft is elindult az F#-al. Valakinek valami tapasztalata róla? Remélem nem túlságosan off-topik a kérdés.
a fejlettebb startupok, vagy egyéb elitebb cégek szvsz. egyre inkább lejönnek majd a Java-ról a JVM világában, és áttérnek pl. Scala-ra
A Scala szep es jo, de sokkal nehezebb a Javanal, es azert egy atlagos Java koder (ez sem valami hiperszuper magas szint ugyeugye...) most sem olcso. Jelenleg sok ceg azert valaszt pl. PHP-t Java/.net helyett, mert a celnak megfelel, de sokkal konnyebb olcso munkaerot talalni.
Szerintem legfeljebb a leginnovativabb cegek fognak Scala-ra atterni, akik megengedhetik maguknak, hogy a legjobbakat alkalmazzak, ezzel is probaljak a zseniket magukhoz vonzani.
Talan Marius Danciu (Liftweb) mondta egy interjuban, hogy szerinte a Scala lehetosegeit egy profi programozo megfeleloen kihasznalva sokkal attekinthetobb kodot dobhat ossze rovidebb ido alatt, de egy gyengebb koder a nyelvi ficsoroket nem megfeleloen hasznalva sokkal ganyabban kodolna, mint Javaban...
Hasonlo nyelvek eddig is voltak (pl. OCaml), valamiert megsem terjedtek el...
Namost, lehet, hogy így még nem világos, ezért még írok pár példát:
iyenkor a greeting írható olvasható (var):
class CarefulGreeter(var greeting: String) {
iyenkor a greeting csak olvasható (val):
class CarefulGreeter(val greeting: String) {
ilyenkor a greeting nem érhető egyáltalán el kívülről:
class CarefulGreeter(private var greeting: String) {
És persze mondom attól, hogy ilyen rövidítések vannak, még mindent csinálhatsz hasonlóan mint a Java-ban, tehát megvannak a hagyományos módszerek. Itt egy hagyományosabban definiált class (explicit definiált member variable-kkel, explicite definiált (nem elsődleges) konstruktorral.):
class Square {
var x: Double = 0
var y: Double = 0
var width: Double = 0
var height: Double = 0
def this(x: Double, y: Double) = { this(); this.x = x; this.y = y }
def area(): Double = width * height
}
Ez hasonló a java-hoz, azzal a különbséggel, hogy a konstruktor nevének mindig this-nek kell lennie.
Vagy pl. kedvcsinálónak hasonlítsuk össze, hogy hogyan inicializálsz egy Map-et Javaban, és hogy Scala-ban:
(És igen, Scala-ban is van többféle Map implementáció (HashMap, stb...) és írhatsz sajátot is, csak mint látható iszonyú tömören írhatod le a dolgokat, ha a default-ot használod.)
Természetesen azt is lehet.
Scalaban is lehet definiálni egy csomó konstruktort, de mindig van egy elsődleges konstruktor, aminek a paramétereit egyből a class után írod. A nem elsődleges konstruktorokat a JAva-s konstruktorokhoz hasonlóan definiálod.
Namost mi van, ha te az elsődleges konstruktorban akarsz valamit csinálni? Semmi gond, minden végrehajtható kódot amit a class bodyjába írsz közvetlenül, azt az elsődleges konstruktor body-jának tekinti, és az elsődleges konstruktor végrehatjátskor végrehajtja.
class CarefulGreeter(greeting: String) {
if (greeting == null) {
throw new NullPointerException("greeting was null")
}
def greet() = println(greeting)
}
A Scala egyszerűen kifinomultabb mint a Java, persze tovább is tart megtanulni. A Scala-t egyébként az a Martin Odersky tervzte, aki a generics támogatást tervezte a Java-hoz.
Egyébként Java-ban profi vagyok, de Scala-ban totálisan kezdő. Szóval erre a kérdésedre tudtam válaszolni, de nagyon trükkös kérdésekre valószínűleg jelenlegi tudásommal még nem fogok tudni.