Nemrég találkoztam olyannal ahol az eladható termékeket úgy kérdezték le hogy .. where id not in(select..eladottermékek)
De ezt doctrinon keresztül, tehát a belső select először lefutott visszaadta az eredményt és utána hívodott meg a második.
A gond az hogy ~100ezer rekord van a táblában. (már nem a fenti módszerrel kérdezzük le ez eladott termékeket )
Az SQL alap.
Én már láttam olyan weblapot, ahol a főoldalon 4000 Query futott le, mire szóltam a kedves kollégának, hogy van olyan hogy join
Szépen sikerült elővenni egy kihaló topicot. Amúgy én is ismerek olyat aki mostanra már szerintem egy középvezetői fizetést markol fel, btk-s diplomával püföli a billentyűzetet és egy 1.5 millió rekordos táblát 'kapcsolt össze' önmagával az alábbi módon:
select * from tabla1, tabla1
where ...
Ez kb. 1.5 óra alatt futott le. Én készítettem belőle egy rövidebb verziót a join szócska beillesztésével...
Amúgy meg nem tudom hogy péntek este ki mivel művelődik, nállam citromos Gösser van :)
Mi a baj a "végén mit ír ki" kérdésekkel? Nagyon jó szűrő arra, hogy már az elején kiszórják a férgesét, két percbe se telik.
Ezek olyanok mint anno az általánosban "három ember felszáll a buszra kettő meg le, ha öten voltak a buszon, akkor most hányan vannak?" jellegű kérdések. Nem arra kiváncsi, hogy szereted e a BKV-t, hanem hogy tudsz e egyáltalán számolni.
Az SQL fejlesztőkkel meg tényleg nem értem mi bajod...
Nemtom ez elég egyszerűnek tűnik, egy bejárás, három pointer. Erről beszélek hogy mit kezdesz egy olyan emberrel akiben nincs annyi hogy 1. felfogja a problémát 2. leir egy ilyen algoritmust 3. papíron ledebuggolja 4. ha nem megy akkor kijavítja, mindez kb. 2 percet se vesz igénybe. Ehelyett ül az üres papírlap felett és tanácstalanul néz a világba. És a programozók nagy százaléka mind ilyen, több év tapasztalattal is, főleg az adatbázisos "három sql lekérdezést írtam, tehát programozó vagyok" okoskák (lásd ez a fórum) tudnak remekelni ilyen téren...
Amúgy a kedvencem interjúkérdésem még mindig az hogy leirnak valami ötsoros c++ parancsot, megkerdik hogy na mi jon ki a vegen, X, Y vagy Z? Na és mi a válasz? Na vajon mi lenne?? Hát az hogy aki ezt így leírja annak a kezét le kell törni. És rohadtul nem érdekel hogy mit gondolnak, ha nem tetszik nekik ez a válasz akkor a viszontlátásra.
Szerintem is az indiai veszély nagyobb mint a belföldi:)
Bár az indiaiak nem tudnak programozni de 100$-ért hajlandóak bármit összehekkelni. Több legendás megoldást is halottam már indiai kollégákról:)
Amúgy tényleg nehéz megmondani, hogy ki a jó programozó. Szerteágazó ez a szakma. Erről a témáról sokszor eszembe jut ez a cikk: cikk
Állítólag a következő kérdést tették fel interjún:
"Write a C function that reverses a singly-linked list."
És állítólag a döntő többség (20-ból 19) nem tudta megoldani. Segítséggel sem, fél óra alatt sem, (igaz, telefonon). Nem a teljesen trivi feladat, de azért nem is annyra nehéz. És nem ám pistikék voltak a jelentkezők, hanem állítólag kernel fejlesztők, Phd-s emberek (sőt még nyelv tervezők!) is voltak köztük! Tényleg mind rossz programozó lett volna? Nem hiszem. Talán a nagy részük igen. De lehet, hogy egy részük csak nem bírta az interjúval járó stresszet. Vannak, akik lassabbak, de mélyen gondolkodnak. Vagy más az erősségük. Mindenesetre nehéz megmondani, ki a jó programozó. Többdimenziós azért ez. Meg erősen feladatfüggő, hogy milyen típusú ember az ideális. Van akinek nagy tapasztalat van, bölcs, jól átlát hatalmas rendszereket mert jó a memóriája, jól tud tervezni hosszútávra. A másik véglet, aki meg az ilyen interjúkon kisujjból gépeli be a megoldást az ilyen algoritmizálási kvízekre, hogy csak úgy füstöl a billentyűzet. Legtöbben valahol a kettő között vagyunk.
Adatbáziskezelést is lehet magas szinten csinálni. Egy igazán bonyolult query-t már nem feltétlenül triviális optimálisra megírni. Illetve ugye olyankor esetleg érdemes elgondolkodni, hogy módosítani kéne a táblaszerkezeteket. Vagy részben valami brutálgyors key-value datastore-t kell használni az SQL-es adatbázis mellett. Én ehhez csak átlagosan értek, meg annyira nem a kedvenc területem, de volt olyan munkatársam, aki erre volt specializálódva, és Oracle query plan-eket bogozgatott egész nap. Pl. egy amazon vagy facebook jellegű cégnél nagyon megbecsülik az ilyen tudást.
A java meg a .NET az kajak ugyanaz mint a C++. Ugyanazt a gondolatmenetet igényli egy adott probléma modellezése mindegyikben. Azt nem tekintem különbségnek hogy más paranccsal színezel be egy pixelt a képernyőn, meg hogy az egyikben van TöltsdLeAFaszomPontComRolANagymelluCsajKepetEkkoraMeretben(size p_size) könyvtárfunkció a másikban meg nincs.
A párhuzamos programozás meg majd biztosan ká jó lesz, meg az lesz majd a jövő. Vagy majd az aspektus alapú programozás. Vagy majd a neurális hálók. Ja.
A kezdő programozó egyik legjobb ismérve, hogy megmondod neki, hogy adjon össze két számot és egyből párhuzamosan, neurális hálóval meg mittomén milyen hókuszpókusszal akarja megcsinálni. Aztán fél év múlva egy másik ember ránéz - mert persze nem működik - és kb. olyan bonyolultságú a kód mintha a T800-as halálosztó központi egységének a kódja lenne.
És télleg nem az a lényeg hogy olajjal festesz(c++), vízfestékkel(java), vagy csak simán ceruzával (C#), hanem hogy a végén egy értelmes, szép egésszé összeáll a cucc. Egy ecsetvonást mindenki fel tud húzni a vászonra, de attól még nem lesz rembrandt senkiből. A programozás művészet, jó művész pedig kevés van, így a melónkat sem kell félteni jó darabig.
Én szívesen szórakoznék a modem, videókártya stb programozásával, a baj csak az hogy ezért nem fog nekem fizetni senki. Szerintem ez a piac méginkább telített mint a webes.
A programozó a C++ -nál kezdődik és az OO C++-ban végződik.
Mondjuk ez szubjektív dolog, de én az olyan fajta tudást csodálom a legjobban (és az olyanok blogját szeretem olvasni legjobban), akiknek vertikális tudásuk van: eléggé otthon vannak a legmagasabb szintű absztrakcióktól kezdve a legalacsonyabb szintű bitbuherálásig minden szinten, és ezt az egészet viszonylag holisztikusan egyben tudják látni. Mondjuk képzelj el egy embert, aki amúgy a Java comiplerét írta: erős matek alapok (type theory szakértő), kitalálta a világ talán legfejlettebb programozási nyelvét: Scala, megírta hozzá a comilert (a világ talán legbonyolultabb compilerét) ami JVM-re fordít. Az ilyen kaliberű emberekről legtöbbször kiderül, hogy elég jól átlátja az alatta lévő rétegek működését is: esetünkben a JVM működését, JIT compilerestül. Aztán valószínűleg jól átlátja a procik architektúráját, cache hierarchiákat, proci pipelineokat. Egészen addig a mélységig, amíg értelmét látja, vagy szüksége van rá. Na én így képzelek el agy ideális programozó Ninját.
Kétségtelen tény, hogy aki jól ismeri a C++-t, az ezen a skálán jól áll, mert a C++ nagyon összetett nyelv (mindenképpen a legösszetetteb a kommersz nyelvek közül) és elég magas szintű és elég alacsony szintű koncepciókat is támogat.
És mért pont a c++?
Amúgy mért van kizárólagos feltétel a c++ és az oo között, illetve mitől olyan nagy szám, hogy c++-ban tudsz oo programozni?
C#, java nyelveken ez alap, nem is kérdés...
A programozó a C++ -nál kezdődik és az OO C++-ban végződik.
Nyilván ezért nincs kereslet a java/.net programozókra, és ezért is keresnek olyan sz-rul.
Azért ha valaki az említett nyelven mintákban gondolkozik, bevált algoritmusokat használ, tesztelhető, fejleszthető, átlátható kódot ír, és töviről hegyire ismeri a használt környezet (vm, alkalmazásszerver, stb) előnyeit/hátrányait/lehetőségeit, engedtessék már meg programozónak nevezni...
A programozás szintje nem arányos a használt pointerek számával + a nyelv életkorával.
Most meg csilivilli IDE-k, alad csinalnak mindent.
Szerintem ez nem igaz. Ami automatizálható, azt megcsinálják, de csinálják is meg, nem? Ha GUI-t fejlesztek miért tartson két napig egy bonyolult form összekaparása kézzel, ha van rá eszköz, amivel tíz perc alatt elkészül, és egy cseppet sem lesz rosszabb minőségű a kód? Az én szememben ez hasonló ahhoz, mint hogy te is makrókat használsz az asm kódodban, ahogyan többször mutattad már itt a fórumon. Egy cseppet sem lesz rosszabb a kód, viszont töredékét kell leírnod hozzá.
És ez nem csak az én kényelmemről szól. Aki engem alkalmaz, órabért fizet nekem, és joggal várja el, hogy használjam az eszközöket, amit ad, főleg ha időt (neki pénzt) takarítok meg ezzel.
Másfelől meg, pontosan azok a dolgok automatizálhatók, amihez nem kell különösebb ész (lásd GUI kódolás). Így pontosan azokra a dolgokra kell jó képesség, szaktudás, tapasztalat, amikre a csillivilli IDE-k nélkül is kell és kelleni fog.
A végzett programozók többsége nem programozóként helyezkedik el, mert csak azt sajátítja el amit az iskola ad, ez pedig ma nem versenyképes.
Önálló tanulásra sokuk képtelen, egy részük pedig a pénzért csinálja, merthogy biztos jól lehet majd keresni vele...ezek kihullanak.
Ha 3-4-10-20-30 éve kódolsz, megintcsak nem kelll félni.
Hiszen az újaknak nincs piacképes tapasztalatuk.
Egyébként ha megnézünk egy nyelvet, mondjuk Java, vagy C#, nagyon nagyon összetett rendszerekről van már szó, és egyre újabb "fícsörökkel és tool-okkal" pakolják tele őket, aki ezekhez ért, az biztos meg fog élni, de gyaníthatóan ASM-hez, vagy C++ -hoz köze sincs.
Tehát aki programozásra szánja el magát, annak mindenképp specializálódnia kell. Még 1 nyelven belül is vannak részterületek, pl a cégem csak Silverlighttal és Win7 phone-al foglalkozik (vagyis ez a cél mert új cég), és nem érdekel sem a win forms, sem a c++ sem a Java sem linux alapú dolgok...tehát itthon igen kevés cégnek jelentek bármilyen konkurenciát (ez volt a reklám helye ).
Ha azt nézzük, hogy valamilyen elképzelhetetlen okból az ország lakosainak tizede programozásra adná a fejét, tehát majdnem 1 millió fő, ezek mind specializálódnak, és mondjuk 50%-uk csak külföldre dolgozik, egy részük meg hamar kihullik, nagyon nagyon kevés ember fog még ebben az esetben is érteni a PLC programozáshoz, vagy CRM rendszer kódoláshoz Java alatt.
Szerintem még nem jött el az idő, hogy aggódni kéne komolyabban.
Olyan értelemben többet várnak el szvsz, hogy egységnyi pénzért több melót kell általában megcsinálni. Kiscéges környezetben nem nagyok a munkák, de nincs is rájuk sok pénz. Nagyrésze kuliminka, de sok meló ahhoz képest, hogy a megrendelő úgy beszél róla, mintha 5 perc alatt össze lehetne klikkelni, és úgy is akar fizetni. De ezzel úgy látom te is egyetértettél.
Ha meg az ember nagy cégnél dolgozik, akkor meg olyan méretű code base-ket kell maintainelnie, átlátnia, ami régebben nem volt ennyire jellemző. A code-base-ek mérete a történelem során folyton nőtt. (Többmillió soros code base-ek ma már teljesen mindennaposak, de a többtízmillió soros cuccok sem ritkák). Ilyeneket maintainelni is kulimunka de nehéz kulimunka.