Magamról

Saját fotó
Főiskolai, majd egyetemi diplomamunkáimtól kezdve világ életemben, adatok, adatbázisok, adattárházak (leginkább Oracle) környékén mozogtam. Mostanság adattárházasként, adatbányászként élem napjaimat.

2016. március 29., kedd

"Melyik programozási nyelvet tanuld meg először?"

.
Melyik programozási nyelvet tanuld meg először?

A fenti - ábrával illusztrált - rövid blogposzt jelent meg pár órája. E poszt írásáig 94 db blog.hu-s komment és 4 db facebook-komment futott be. A beszélgetés - érzékelésemben - eléggé tárgyszerű, konstruktív, helyenként jóhangulatú is volt (páran próbáltak csak beszólogatni, értetlenkedni, rombolni). Én is igyekeztem résztvenni a diskurzusban (és ignorálni a rombolást), nekem is jó alkalom volt új infókhoz jutni meg végiggondolni pár aspektust.

A poszt veleje az alábbi ábra:
Magyarul
Angolul

Én igazából sem az ábrával és szemléletével, sem a nyelvek listájával nem vagyok elégedett. Persze elviselem, mint más - tiszteletben tartható - véleményét.

Továbbá a kommenteknél is írtam (pre-alpha és tömörebb verzióban), hogy

Egyfelöl szűkíteném az amúgy egyébként alapból szűk listát (minimum két nyelvvel).
* A Ruby-t szvsz ki lehet hagyni. Ami előnye lenne nyelvi oldalról, azt más nyelvek jobban tudhatják mára már, míg a hátrányai sosem múlnak már el talán.
* PHP-nak az a legnagyobb hátránya, hogy egyre nehezebb lesz vele jó zöldmezős projektet találni hozzá, más PHP-s - esetleg gányolt - kódját túrni viszont eléggé elkedvetlenítő tud lenni. (ténykérdés azonban, hogy van kereslet PHP-programozókra, itthon is)

Másfelöl bővíteném minimum kettő nyelvcsalád valamely elemeivel:
* Hiányzik belőle a (4GL-es) "SQL-orientált" nyelvek
* Funkcionális nyelvek (alsó hangon Clojure, Elixir).
* Bár nem vagyok nagy R- vagy Matlab/Octave-fan, de a választék-listára felférhetnek ők is bőven.
* Megemlítem a perszonális kedvenceimet is, de ez nem azt jelenti, hogy helyük lenne a listán: D, Go, Julia vagy éppen a menthetetlenül egyre inkább kiszoruló Pascal.
* Fortrannal, Cobollal nem kívánnék bohóckodni, hiába sok megírt és karbantartandó program van szerte a világban, amiket bennük írtak.
Ezek mögött tökkülönböző programozás nyelvi filozófiák, amik nemcsak abban különböznek, hogy van-e pontosvessző a sorok végén.

Ha három konkrét - különböző paradigma menti - programozási nyelvet kéne megjelölni "elsőnek" (a létező 7-8000-ből) én a "sikerélmény-orientált" Python + (analitikus)SQL + Elixir-t jelölném meg, pusztán elméleti programozási nyelv centrikus megközelítés esetén (ha nem az állásválaszték, vagy elérhető átlagfizetés a szempont).

Home projekt-scope esetén elég csak a Python (vagy igazából bármi egyéb szimpi). Aki mindháromban tud értékelhető sikerélményt átélni, arról talán könnyebben kijelenthető, hogy van túlélésre/pénzkeresésre is alkalmas programozási vénája. A sorrend személyfüggő, nálam a fenti sorrend vált be.

Pár link szavazás alapján programozási nyelvek népszerűségének böngészéséhez:
Általánosan: TIOBE Index  vagy  Most Popular Coding Languages of 2015
Engem érintően: Data Science 2014 vagy Data Science 2015

Sokkal izgalmasabb azonban a csatolt kép folyamatábra részébe belegondolni, azon laikusok számára, akiket megkísért a programozás, milyen vízválasztók mentén hogyan döntsenek. :)

Egy linket mindenképpen megérdemel Kedves Lóránd témában írt írása (tárgybeli blogposzt komment-szekciójából. Amivel az angol nyelv fontosságát is kipipáltam):
Programozó szakkör

Nem kívánok állást foglalni a vitában, hogy előbb legyen a programozással és aztán a programozási nyelvvel való ismerkedés vagy fordítva. Az én értelmezésemben majdhogynem mindegy és semmi lényegi nem fog ezen múlni, tömeges - statisztikailag nem elhanyagolható - léptékben. Nekem időkímélésből a "fordítva" jobban tetszik én is így tettem annó, és semmi gondom nem volt. De a másik irány is bőven jó lehet.

Elöljáróban: nehéz egyszerre érdeklődőhöz és szakmához szólni.
Én most
- elsősorban az érdeklődőhöz/laikushoz,
- kizárólag a saját szubjetív (ezért vitatható)
- pragmatikusan
- legáltalánosabb megközelítésből  kívánok szólni
- csak a számomra fontos dolgok (nem mindegyikére)-ra kitérve
- az (el)olvashatóság/érdekesség/továbbgondolhatóság megcélzásának igényével (nem ígérem, hogy sikerülni fog, hiszen nagyon nehéz, vitákkal bőségesen terhelt a téma, ez azért lejöhet mindenkinek a tárgybeli poszt kommentjeiből).

A három kulcstéma, ami köré építeném a gondolatmenetemet ("akarjon-e közelebbi/mélyebb kapcsolatot a programozással" topikban)

(1) Tapasztalat(+sikerélmény) ignorálhatatlansága a kérdés eldöntésében. A valós tapasztalatnál nincs jobb fogódzó ráadásul bőven van rá lehetőség is (sőt sokszor inkább a bőség zavara a probléma). A megszerzett tapasztalatot nem lehet elõre kiváltani, mégoly körültekintõ patikamérlegelésű szempont-súlyozással sem.

Ha valaki patológus akarna lenni annak nehezebb inspiráló tapasztalatot szereznie. ;)


(2) Meg kell határozni mennyit és mi módon akar valaki befektetni a kérdés eldöntéséhez.

Ennek minimuma valamilyen feladat és nyomában az összes kezelhetően felmerülő probléma sikerélmény-orientált megoldásának végigvitele valamely programozási nyelven. Fontos, hogy feladat- és problémaorientáltan kell dolgozni, minél jobb időhatékonysággal. Nem szabad elcsábulni, kísértésekbe esni, szétfolyni: hiszen csak a megoldott feladat fényében tudhat az ember érdemi következtetést/konklúziót levonni (és még akor is bőven hibázhat, ugye).

Rengeteg jó, fokozatos, fájdalommentes, ingyenes eszköz van már a neten ehhez, igaz perdöntően angolul. Lejön belőlük az angol fontossága, ugyanakkor első körben komolyabb angol-tudás nélkül is elérhető sikerélmény, de ugyanakkor a problémák széles skálájával lehet találkozni már ezen a szinten is.

Az én perszonális kedvencem data scientistként és Python-centrikusként
Intro to Python for Data Science

vagy

Coursera: ingyenes online kurzusok világa
(2014-es részletesebb indexes cikk erről a világról)

Ezek teljesértékű ingyenes online kurzusok, még papír (certifikáció) is szerezhető kevés anyagi ellentételezésért cserébe. Vannak videók, jó esetben (angol) felirattal, direkt oktatási céllal, megközelítéssel, házi feladatok, segítségnyújtó fórumok, megoldások.

Gyakorlati maximuma meg, másik végletként, ELTE/BME/Más/Külföld célirányos egyetem 5+ éves, PhD-zés nélkül is, rengeteg matekkel és látszólag sok értelmetlen felesleges dologgal (amik persze absztrahálás, gondolkozás-mélyítés terén adhatnak jelentős hozzáadott értéket, komoly stresszhelyzetek közepette is).

Nyilván életünk végéig érnek új impulzusok minket, azaz az elméleti maximum jóval kijjebb van.

De közbülső út lehet símán, juniorként nyitásként kevesebb pénzért beleszagolni a szoftveres cégek életébe, valódi munkájába. Ehhez elég lehet valami egyéb jó skill, pl.: komolyabb angol nyelvtudás. Nekem rengeteg ilyen "kívülről jött" kollégám volt, láttam az egymáshoz képest eltérő fejlődésüket. Itt a time-management nagyon fontos, hiszen az alapfókusz azon kell legyen, hogy érdemben eldönthető legyen az alapkérdés.


(3) Csomó - önmagunkat és programozást érintő - kérdést kell végiggondolni, becsületes őszinteséggel.

Sajnos olyan mérhetetlen mennyiségű több blogposztra elég jegyzetet írtam össze ehhez a ponthoz, hogy ezt most erőforrás hiányában ignorálom, szerintem örök életre. Különben is lassan el kéne engednem ezt az egész témát. Lehet, hogy még ennyi potenciál sem volt benne, csak vitt előre a lendület (tévesen).

Na jó. Egy bonmotot eleresztek: A programozás sokszor olyan, mint a fényképezés (hivatásűzés szintjén nézve). Vannak az élvezetes művészetig is elhatolni tudó kattintások és van hozzá csomó - sőt trendszerűen növekvő mennyiségű tehát elkedvetlenítő - nemszeretem kulimunka is. Affinitás + tehetség + fegyelmezettség + türelem + lényeglátó és -szelektáló + kiégést elkerülni tudó + lelkesedés és kitartás elég erős kombója kell az érdemi sikerességhez (anyagi sikerességhez kevesebb is elég).

Na jó még egy. Van egy érdekes vízválasztó is, legalábbis az én életemben az volt. Világéletemben sikerült "non-visual" programokkal dolgoznom, mert engem ezek érdekeltek igazán. Az interaktív felületek programozása már a Javascript elött sem érdekelt, azóta meg pláne nem (nemkívánatos inegzaktságuk miatt kerültem őket, miközben a Data Science inegzaktsága egyenesen lenyügöz).
Egy ilyen aspektus végiggondolása is "megérhet egy misét".

Na jó most már tényleg egy utolsó rövid észrevétel. Vajon a programozás mennyire a fiatalok sportja? ;)

Focimeccs-kimenetel előrejelzése

.
Magyar-horvát - Utóbeharangozó és értékelő

A fenti friss blogposzt és kommentben generálódott egy-két aspektusa okán, a legjobb elveimet félretéve írok egy pársoros blogposztot a focimeccs-kimenetel(H,D,V) előrejelzése témájában.

Különösen az ad nagy aktualitást a témának, hogy nemrég volt a norvég-magyar selejtező rájátszás,  amit két nyert meccsel hoztunk le (és jön nem sokára maga az EB).

Állítom k-i-t-a-l-á-l-h-a-t-a-t-l-a-n volt ez a norvégok elleni győzelmünk (Publikusan és könnyedén elérhető ingyenes információkból. Bár szkeptikus vagyok, hogy létezhet-e előrejelzésre alkalmas elég jó dataset, legyen akármennyire drága/fizetős; most kizárólag erre a norvég-magyar párharcra fókuszálva).

Állítom kitalálhatatlan volt az egyébként jó sportszellemű (lásd női/férfi kézilabda) norvég 180 perces totális mélyrepülés. Mintha a magyarok nyernének a norvégek ellen 10-ből 8-szor és nem fordítva.

Minden a (kettős) magyar siker ellen szólt (én két fillért nem tettem volna rá),
- a magyar selejtezői  (közvetlen) előzmény sikertelensége,
- A túlórázásra kényszerűlés elképesztő leépítő jellegű pechsorozata, amikor másoktól függtünk már (pl.: "utolsóperces" nekünk hátrányos gól és társai)
- norvég-magyar (közel)múlt,
- norvég stílus nem komálása,
- Storck kapitány nem túl meggyőző, sikerkerülő debütálása,
- problémás előzetes megnyilatkozásai ("nem az én érdemem lesz, ha győzünk" típusú beszólásai és társai),
- itthoni sok esetben jogos foci-ellenes, hogynemondjam ellendrukkerségig menő légkör (pl.:: stadion-építés meg gyenge nb1 kapcsán),
- nem túl acélos fizikai és mentális csapattényezők,
- tervszerűségre, véleményaggregálásra alkalmatlan magyar közeg megspékelve kisstílűséggel (hazai edzőszakma erősen túldimenzionált sértettsége, Bognár Görgy beszólásai, stb.)
- teljesen jogosnak látszó norvég nagymellény, ahol még a véletlen, sikerforrás-tényező lehetősége sem látszott sehol sem.

Mit tekintenék én megfelelő előrejelzésnek? Ha az oddsok szerinti 33%-33%-33%-os két meccsből stabilan hozni lehet 1 találatot (amiért ugye a tippmixen is fizetnek, lévén ilyenkor 2 felett van az odds minden kimenetelre.) Amit aztán persze lehet projektálni nagyobb odds-verziókra, kötéses kivitelezésben. Azért ez így elsőre nem is hangzik olyan lehetetlennek :)

Mi kellene ehhez a megfelelő kimenetel-előrejezéshez? Minimum két dolog az én felfogásomban (és én sajnos egyikkel sem rendelkezem).

(1) Érteni a focihoz, olvasni a pályán történteket és ennek adatait adatbázisba tölteni. Ugyan sok ilyen drága adattöltő és -elemző szoftver van, amikről elhiszem,hogy támogatják az edzők munkáját, de előrejelzési erejükkel kapcsolatban én szkeptikus vagyok a túl nagy és kezelhetetlen big data zaj miatt (jelentős missing value mellett ráadásul). Ha van terület, ahol nehéz megélni domain-specifikus tudás nélkül az a foci, szvsz.

(2) Datasetemet két lényegi dolog/aspektus köré építeném
(a) káros és hasznos mentális és fizikai energiák elégetése (rövid és hosszútávú kudarctűrés, bírói hibák, pl.: kényszerítőzés, háromszögelések, technikai fölény/hibák miatt elvesztett játékos-súlyozottan összegzett energiák vagy másik oldalról motivációk, akarat-rákényszerítés az ellenfélre, stb.)
(b) a focicsapat 11-re mint hálózatra gondolok, ahol a csapattagok között kohéziós erő működik ("csapatmunka", "csapategység"). Mennyire bontható ez meg, minek hatására, mekkora kilengésekkel. Megfordítva mennyire alakítható rugalmasan taktika szerint.

E két területen érzem a legnagyobb potenciálját a legerősebb magyarázó változók gyűjtésének.

Én egyébként érzésre/intuitive azt tippelem, hogy nem maradunk pont nélkül a három EB csoportmeccs során, sőt szerencse esetén (amivel eddig hadilábon álltunk), még akár tovább is juthatunk a csoportból. Én inkább erre fogadnék, mint arra, hogy csúnyán kizúgunk.

2016. március 21., hétfő

[Kedves Lóránd] DUST framework vezetői összefoglaló - diagnózis-rész

.
Kedves Lóránd már két blogposztomban is előkerült. Így sokat nem szaporítanám a szót, itt van két link az előzményekről:
Kedves Lóránd, avagy a prófétaság mibenléte korunkban...
Az "intelligens" Antalffy Tibor

Az utóbbi posztomhoz további/későbbi keltezésű adalékként kapcsolódik egy érdekes dialógus-link, amit Lóránd is kiemelten linkel:
Arrogancia 

A teljeskörűség jegyében Lóránd legfontosabb url-jei:
Hajnalvilág
Hajnavilág-blog

Noha rövid találkozásunk itt a blogon igazándiból sem nem volt jó hangulatú, sem igazán mélyenszántó (és ezt tulajdonképpen bőven ráfoghatjuk az én korlátaimra), ettől még továbbra is nagyon sok mindenben egyetértek vele. Például a korábban is említett DUST-tal is kapcsolatban.

A kövér/bold kiemelések, tőlem származnak, innen is elnézést kérek a szerzőtől, ha ezt nem "sikerrel" tettem. Egyetlen mentségem, hogy ezt a bekezdésenkénti fókuszálást/kiemelést, minden posztomnál alkalmazom.

Álljon itt a 15 oldalas (PDF) magyar nyelvű vezetői összefoglalóból, a bevezetői diagnózis részből néhány bekezdés. Nincs szó rá mennyire szívemből beszél, miközben nekem esélyem sem lett volna ennyire összeszedetten a lényeget megvilágítani.

"...a programozás kreativitása eltűnőben van, a "piac" lényegében azonos feladatok repetitív megoldását kívánja egyre újabb, és a korábbiakkal sosem kompatibilis környezetekben: futtató rendszerek, programozási nyelvek, szolgáltatáskészletek. A hatalmas, és állandóan fejlesztett eszköztárak mélységeinek ismerete egyre nagyobb súllyal esik latba az eredeti programozói képességekkel szemben, ma nem alkotók, hanem betanított informatikai szalagmunkások adják a szakma túlnyomó többségét. Semmi nincs "kész", nem lehet továbblépni azzal, hogy ezt a feladatot megoldottuk, folyamatosan jönnek ki az új hardver eszközök, operációs rendszerek, ügyviteli programok, szórakoztató alkalmazások – nem a valós szükséglet, hanem a várt nyereség szerint.

"Mindez elképzelhetetlen mennyiségű erőforrást szív fel és pazarol el. Tekintetbe véve azt, hogy erőforrásaink végesek, ez egy alapvető problémát jelent, továbbá nem megszünteti, csak vagyoni alapra helyezi és tovább növeli a távolságot az emberek között."

"A jelenség oka az, hogy az informatika világa alapvetően eltér minden általunk megszokott környezettől. Az informatika „alapeleme” az információ: adat, esemény, algoritmus, amely sokkal inkább hasonlít egy gondolatra, mint egy tárgyra. A két legfontosabb különbség: a korlátlan másolhatóság és az akár végtelen élettartam."

"A világunkat ma alapvetően meghatározó üzleti gondolkodás ezt a két tulajdonságot kezelni képtelen, mert minden eszköze erőforrások kinyerésére, termékek folyamatos előállítására épül. Fogalmai között nem szerepel a feladat végleges megoldása, kizárólag az állandó igény folyamatos kielégítése (esetleg új igények „feltárása”, nem ritkán generálása) – amely viszont az informatika alaptörvényeivel ellentétes. Ez pontosan látszik az üzlet és a gondolati értékek „frontvonalán” (a számítástechnikától függetlenül is): szerzői jogok, szabadalmak kérdésében."

"A korai számítástechnika üzleti oldala ezért a hardverrel egységet alkotó programokban és adatokban gondolkodott: hatalmas és igen drága gépek készültek, a programok írása pedig néhány magasan képzett varázsló feladata volt. Mindaddig, amíg nem jött egy ember, aki képes volt üzleti modellt alkotni az erre köztudottan alkalmatlan informatikára, és céget alapított a hardvertől elválasztott számítógépes programok létrehozására: ez volt Bill Gates és a Microsoft (Steve Jobs, az örök „nagy ellenfél” kijelentése szerint)."

"Az üzleti modell lényege, hogy elválasztja az adatokat és programokat az őket kezelni képes hardvertől, ugyanakkor az új verziókkal (operációs rendszer, nyelv, felhasználói programok, szabványos, tehát cserélhető és egyre fejlettebb hardverek) visszahozza az „avulás” fogalmát: „régi program”, „régi gép”, így az informatikai eszköztár „inflálódik”. A befektetett pénz tehát meg fog térülni, az operációs rendszer, a szövegszerkesztő, stb. többé nem egyszeri megoldott feladat, hanem állandóan kifizettethető szolgáltatás, a programozás nem egyetemi kutatás többé, hanem ugyanolyan folyamatosan üzemeltethető gyár, mint amelyik mondjuk cipőket állít elő."

"Ennek köszönhetjük azt, hogy ma otthoni, hétköznapi, a családi költségvetésbe illeszthető eszköz a számítógép, hogy létrejött a világháló, amelynek elérhetősége oly természetes a számunkra. Ezek a tényezők gyökeresen átalakították, és ma még fel sem fogott mértékben megváltoztathatják egész életünket, gondolkodásunkat (bár a folyamat irányítóinak nyilván nem ez lebegett a szeme előtt, hanem hatalmas vagyont szereztek vele)."

"Ennek látható ára az, amit folyamatosan kifizetünk az új számítógépes alkatrészek, operációs rendszerek, felhasználói programok, játékok, ma már táblagépek, telefonok... megvásárlása során. Rejtett költsége pedig mindaz az energia és alapanyag, amely az új gépek hihetetlen tömegének előállításához szükséges. Veszteség az, hogy az elavultnak tekintett gépeinket nem adhatjuk tovább a kevésbé tehetőseknek, fejlődő régióknak (tehát nem csökkenthetik a távolságot közöttünk), mert ők sem tudják mire használni: már nem létezik a 3.1-es Windowszal, betárcsázós modemmel elérhető világ. Az ezt futtatni képes gép már értéktelen, veszélyes hulladékként kezelendő szemét, amelyben lassan összegyűlik a világ egyre szűkebb ritkaföldfém-készlete..."

"A közösség számára hátrányos következményekkel együtt tudnánk élni különösebb korlátok nélkül, viszont az utóbbi költség lehetetlenné teszi a folytatást, váltásra kényszerít minket."