Mondhatjuk, hogy messziről indultam neki a szoftverfejlesztésnek: gimiben még sehol sem volt az érdeklődés, illetve egyetemen is inkább a villamosmérnöki tanulmányokat választottam. Programozni ezek mellett hobbi szinten kezdtem el - iOS-ből először az 5.0-s verzióval találkoztam első iPad-emen. Tudásom túlnyomó részét különböző online tutorialoknak köszönhetem, köztük főleg a RayWenderlich.com-nak, amely talán a legismertebb oldal a témában. Az évek alatt egyre jobban elmélyültem az iOS világában, olyannyira, hogy 3 évvel később már nem csak olvasom ezeket a cikkeket, de írom is őket: tagja lettem ugyanis Ray Wenderlich szerzői csapatának.
Eljutni addig, hogy bekerülhessek egy ilyen csapatba, nem volt egyszerű. Egy tutorial megírása - mint azóta megtudtam - rengeteg kihívást tartogat, ugyanakkor mind szakmailag, mind emberileg kiváló tanulási lehetőség. Arról nem is beszélve, hogy milyen elképesztő érzés együtt dolgozni azokkal az emberekkel, akik korábban megtanítottak az iOS alapjaira.
De ne szaladjunk ennyire előre... Térjünk vissza arra a "nulla" szintre, és nézzük meg, hogyan is jutottam el ide.
Nulla tudásról elfogadható szintű fejlesztőig
A programozás nekem az okostelefonommal indult. 2012-ben egy Android 2.2-t futtató telefon volt az első, amin elkezdtem próbálgatni nagyon-nagyon egyszerű dolgokat. Csak telepítettem az Eclipse
-et (még sehol se volt az Android Studio
:)), és elkezdtem ismerkedni a mobilos fejlesztéssel. A következő állomás egy iPad volt, amely egyből felkeltette az érdeklődésem az iOS iránt. A setup itt már kicsit összetettebb volt: szükség volt Xcode
-ra, ehhez pedig OS X
-re. Akkoriban Windows-t használtam, így kénytelen voltam virtuális környezetet felállítani.
Kezdetben főként a Big Nerd Ranch könyveire támaszkodtam, főként az Objective-C Programming volt hasznos. Persze annak, aki mostanában kezdi, inkább a Swift Programming könyvet ajánlanám - de akkoriban a Swift még nem létezett.
Közben az egyetem mellett elkezdtem dolgozni a Lufthansa Systems-nél gyakornokként. A gyakornoki program nagy hangsúlyt fektetett a tanulásra: a mindennapi feladatok mellett különböző soft- és hard skill képzéseket is kaptunk. Én nagyon szerencsésen egy mobillal foglalkozó csapatba kerültem, ráadásul egy nagyobb, nemzetközi projekt hajrájának kellős közepén, így rögtön a karrierem elején mélyvízbe csöppentem. Szerencsére volt mellettem több, nálam jóval seniorabb ember, akiktől rengeteget tudtam tanulni.
A főállású hobbi
Ezzel egy időben megjelent bennem egy érzés - ami a mai napig is elő-elő jön - hogy nem tudok eleget. Tekintve, hogy a karrierem elején voltam, ebben semmi meglepő nincs, mindenesetre ez elég erős motiváció volt arra, hogy a munka mellett, otthon is igyekezzek felzárkózni, fejlődni.
Tisztán emlékszem arra a délutánra, mikor a munkából hazajöttem, és eldöntöttem, hogy ideje tényleg beleásni magam az iOS világába. Elkezdtem összegyűjteni, honnan is tudnék többet tanulni. Megismerkedtem az NSHipster-rel, az objc.io-val, és Mike Ash blogjával. Az iOS közösség jelentős része Twitter felhasználó, így én is regisztráltam, és a mai főleg fejlesztőket követek. Ezen felül nagyon sok jó hírlevél van, ezekre is érdemes feliratkozni.
A RayWenderlich-et is ekkor kezdtem el sűrűbben látogatni: nagyon széles körben tartalmaz kezdők számára is érthető, követhető anyagokat (újabban videó formában is). Minden tutorial végére tanulhatsz valami kézzelfogható dolgot, viszont nem mennek olyan mélyre, ahol egy kezdő már elveszne. Az oldal kiváló segítség volt az alapok (pl. UITableView, Auto Layout) megismerésére, de a mai napig egy nagyon jó kapaszkodó, ha valamit elfelejtenék.
A Lufthansánál töltött idő alatt rengeteget fejlődtem - nem csak a munkahelyemen, de otthon is. Több mint két év után viszont eljött a váltás ideje: csatlakoztam a Misys-hez iOS fejlesztőként.
Röviddel a váltás után láttam meg a RayWenderlich-en, hogy új tagokat keresnek. Nem voltam róla meggyőződve, hogy van reális esélyem a bekerülésre, viszont mindenképp ki akartam próbálni magam, így minden mindegy alapon jelentkeztem. A jelentkezésemhez csatoltam egy rövid bemutatkozást, illetve a GitHub profilom. Nagy meglepetésemre még aznap válaszoltak az oldaltól, és egy próbafeladat elvégzése után bekerülhettem a csapatba.
Amikor átmentem a próbafeladaton, és a csapat tagja lettem, nekem ez egy világmegváltó érzés volt. Én ugyanis ezektől az emberektől tanultam meg iOS-re fejleszteni - és most már közéjük tartoztam. Ez az érzés eszméletlen jó volt.
A Ray Wenderlich az egyik legnépszerűbb, iOS programozási oldal, ami kezdőknek kifejezetten jól használható. Nevét az oldal alapítójáról, egy iOS fejlesztőről és oktatóról kapta, aki 2010-ben kezdte megosztani itt az első oktató cikkeit. Az oldal hamar az iOS fejlesztők egyik kedvenc tanuló oldala lett, Ray pedig egy egész csapatot épített az oldal köré.
Jelenleg körülbelül 100 szerző publikál rendszeresen tutorialokat az oldalon. Az iOS mellett rendszeresen jelennek meg Android, OS X, és játékfejlesztés témájú cikkek is. A szerzők között két magyar van jelenleg - rajtam kívül még Hegedűs Attila is az iOS csapat tagja.
Szerzőnek bárki jelentkezhet, akinek van releváns fejlesztői tapasztalata. Ahhoz viszont, hogy a csapatba bekerülj, egy felvételi folyamaton kell átmenni. Az én esetemben ez egy próbafeladatot jelentett: egy rosszul megírt cikket kellett gatyába rázni. Manapság a próbafeladat már valamivel összetettebb: egy teljes tutorial folyamaton kell végigmenni, demo app készítéssel és cikkírással.
Egy cikk megírásának lépései
Az témák több nagy ágra vannak osztva, például: iOS
, Android
, Unity
. Minden ág köré épül egy csapat, és minden csapatnak van egy team lead-je. A team lead-ek döntik el, milyen témákról érdemes írni, majd ezekből assignmentek születnek. Emellett van egy kívánságlista is, ahol a szerzők számára érdekes témakörök kerülnek. Az esetek felében a team lead-ek szabják meg a témát, a másik felében pedig a szerzők választhatnak. Ha megvan a téma, kezdődhet a cikkírás.
Az első szakasz a vázlat elkészítése, erre egy heted van. A legnehezebb része ennek a szakasznak, hogy a demo app ötletét is ki kell találnod - viszont ekkor még nem feltétlenül lehet tudni, mi az, ami megvalósítható (főleg, ha egy új témáról írsz).
A második feladat a demo app elkészítése, amelyre szintén egy hét van. Itt már több dologra is oda kell figyelni: követni kell egy egységes style guide-ot, illetve törekedni kell arra, hogy a lehető legújabb megoldásokat használjuk. Jó példa erre a nemrég megjelent stack view-k használata, illetve, hogy minden új cikk Swift
-ben készül Objective-C
helyett. A demo appot ilyen szempontból is alaposan átnézik, kipróbálják.
Az első tutorialomban például ebben a fázisban azt a feedback-et kaptam, hogy az appom nagyon sok memóriát használ. Mint kiderült, ez a kép assetek nem megfelelő kezelése miatt volt, gyorsan javítottam is a hibát. Az ilyen apróságoknál is látszik, mennyire komolyan veszik a review folyamatot.
A demo app után jön az igazán nehéz rész: a cikk megírása. Itt két heted van, hogy megírd a cikket. Viszont, mivel a legtöbb ember főállás mellett írja ezeket a cikkeket, ezért ez a gyakorlatban sokkal kevesebb időt jelent. A vázlat, és a demo app alapján kell a cikket összerakni, részletes lépésekkel, példakóddal, képekkel. A struktúra, és a követhetőség nagyon fontos: ügyelni kell a szöveg-kód arányra, és az egyértelmű utasításokra.
Ha elkészült a cikk, további 3 review kör következik. Egyrészt kap egy technikai review-t, ahol ellenőrzik, hogy technikailag helyt áll-e amit írtál. Emellett egy editorial review is készül, ami a cikk nyelvtanát, olvashatóságát, és érthetőségét figyeli. Végül pedig egy végső, összesített review készül a cikkről. Mindhárom review során kapsz egy értékelést: 1, ha gyengén, 2, ha átlagosan, és 3, ha kiemelkedően teljesítettél.
Hatalmas szakmai fejlődés egyetlen cikk megírásával
Szerencsére elég korán megtanultam angolul, és sosem jelentett gondot, hogy szóban kifejezzem magam. Ebből arra következtettem, hogy ez írásban is hasonlóan fog működni. Az első cikkemmel kapcsolatos editorial feedback viszont ennek pont az ellenkezőjét bizonyította: a mondataimat nehéz volt értelmezni, illetve néhány esetben a nyelvtani szerkezetekkel is voltak gondok.
Ebben persze semmi különös nincs: a legtöbben ismerik az érzést, amikor valami nem jön össze. Például egy általános egyetemi vizsga feedback loop-ja: tanulsz, vizsgázol, kapsz egy jegyet. Ha a jegy megfelelő, továbblépsz, ha nem, tanulsz többet. Ez a visszacsatolási rendszer aztán az életünk során több helyen is előjön. Egy részről jó, mert megtudod, hogy a befektetett energia elégséges volt-e vagy sem. Másrészről viszont nem a leghasznosabb: nem mindig derül ki, hol rontottad el a felkészülést, vagy hogyan végezhetnéd hatékonyabban a teendőket.
A RayWenderlich csapataiban ez az, amit másképp csinálnak: a feedback sokkal több, mint egy értékelés: gyakran több bekezdésnyi észrevétel, és jótanács érkezik. Ha kell, kérhetsz nyelvtani tippeket, vagy technikai segítséget. Egyértelműen az a cél, hogy tanulj belőle. Rengeteg feedbacket kaptam korábban, viszont nem volt egyértelmű, hogyan lehetnék jobb. Ezzel szemben itt egyből tudtam, mi az, amin javítanom kell.
És hogy mennyit is ér a jó feedback? Az első cikkem technikai értékelése 2-es, az editorial pontszám pedig 1-es lett. A nemrég megjelent második cikkem megírása során igyekeztem a visszajelzések alapján javítani a stílusomon: mindhárom feedback kategóriában kiemelkedő értékelést kapott. Ez volt számomra az első alkalom, amely bebizonyította, hogy létezik konstruktív feedback, és rengeteget lehet fejlődni, tanulni belőle.
Mennyi időt jelent ez? Megéri?
Nem tagadom, egy cikk megírása rengeteg energia- és idő befektetést jelent. A JavaScriptCore assignment-et úgy kaptam meg, hogy korábban nem dolgoztam JavaScript-tel. Rászántam egy repülőutat a nyelv megismerésére, majd összehoztam egy kezdetleges weboldalt, hogy kipróbáljam, hogyan tudnék egy jó példa appot írni code sharing-re. Mindez karácsony környékén történt, tehát nem kevés áldozatot jelentett a szabadidőmből.
Ha viszont hajlandó vagy feláldozni a szabadidőd egy részét, számos előnye is van. Szakmailag egyértelmű előny, hogy rengeteg új dologgal lehet foglalkozni: én mindkét alkalommal olyan témáról írtam, amellyel még korábban nem volt dolgom. Ha nem írtam volna meg a cikkeket, még valószínűleg ma sem tudnék sokat róluk. Emellett emberileg is sokat lehet tanulni, például a hatékony visszajelzésről, vagy az egyenes kommunikációról.
További előny, hogy egy ilyen cikk írásával kicsit én is hozzá tudtam tenni a közösségi tudásbázishoz. Az iOS körül kialakult közösségnek rengeteget köszönhetek, és a cikkeimen keresztül ezt végre viszonozhatom is. Mióta a csapat tagja vagyok, igyekszem aktívabban részt venni a fejlesztői közösségben: többet dolgozom például open source projekteken. A saját kódom megosztása mellett mások projektjeihez is igyekszem hozzáadni, legyen szó egy-két issue-ban megfogalmazott kérdésről, vagy pull requestekről. Korábban nem feltétlenül mertem ezekben részt venni, félve attól, hogy tudok eleget. Ma viszont már látom, hogy a fejlesztés nem csak kódolásból áll, a közösségi része legalább olyan fontos: az én kérdéseim másban is felmerülhetnek, a megoldásaim pedig hasznosak lehetnek mások számára is.
Összegezve tehát úgy látom, hogy nagyon megérte a sok befektetett idő. Rengeteget tanultam, fejlődött az írási stílusom, és amit ennek eredményeképp az "asztalra tettem", abból mások is tanulhatnak.