2017. május 31., szerda

Vim "alapszintű túlélőkészlet"

Nemrég olvastam egy StackOverflow-s blog bejegyzést arról, hogy a "hogyan tudunk kilépni a Vim szerkesztőből" kérdést már több, mint 1 millióan nézték meg. Illetve, olyanok is vannak, akik nem találtak még rá erre a kérdésre :)

No, de viccet félretéve, vannak időszakok, amikor egészen sok időt töltök én is a Vim szerkesztőben. Mondjuk, én szeretem :) Egyszer rászántam az alapok megismerésére és begyakorlására, meg egy "alapszintű bekonfigurálásra" néhány héten keresztül napi kb. fél-egy órát. Amit akkor "felszedtem", azzal egészen hatékonynak tűnök a kollégák számára, pedig igazából nem túl sok, ha a Vim összes lehetőségét nézem (egy élet is kevés alaposan megismerni...).

Windows alatt is van telepítve és bekonfigurálva egy GVim, egy viszonylag szolid színsémával és jó néhány kiegészítő plugin-nel (igen, a sötét hátteret szeretem kódszerkesztésnél, változatos felüdülés a szememnek a számos dokumentumkészítés és -olvasás között/után :) ).


Ugyanakkor azt is meg kell mondanom őszintén, hogy viszonylag ritkán veszem elő, sokkal gyakrabban indítom el a Sublime Text 3-at. De jó dolognak tartom, hogy sikerült megismerkedni az alapokkal.

Legtöbbször akkor használom, amikor valamilyen Linux szerveren kell úgy beállításokat eszközölnöm, hogy időveszteség lenne onnan letölteni a fájlokat, helyben módosítani és visszatölteni. Ehhez nem is kell túl sok parancs ismerete, én az alábbiakkal a leggyakoribb feladatokat gyorsan és hatékonyan (és nem utolsó sorban magabiztosan!) el tudom végezni:

<Esc>:q! - Kilépés mentés nélkül
<Esc>:w - Fájl mentése (ha ki is lépnénk utána, akkor <Esc>:wq)
<Esc>:set bg=dark - ha sötét hátterű a shell, amivel dolgozunk, és nem látjuk jól a Vim-ben a karaktereket
<Esc>:%s/mitkeresünk/mirecseréljük/igc - "klasszikus" keresés/csere művelet, az igc toldalékok miatt minden cserére rákérdez a Vim, kis-nagybetű érzéketlenül keres és egy soron belül mindegyik előfordulást megtalálja, ha több is van

A fenti parancsokban az <Esc> az Escape billentyű megnyomását jelenti. Ha valamilyen szerkesztő üzemmódban voltunk, akkor abból ezzel kilépünk a szerkesztő üzemmódból az ún. normál módba. Onnan a : (kettőspont) segítségével kaphatjuk meg a vim "parancssorát", ahova gépelhetjük, amit gépelünk.

Ha normál módban vagyunk, az i megnyomásával átmehetünk szerkesztő üzemmódba. Sok más parancs segítségével is átmehetünk, de, mivel minden modernebb környezetben szépen támogatja a Vim a kurzorbillentyűk használatát még a szerkesztési navigációban is, kezdetben elég ezt az egy átmenetet ismerni. Következőnek - már félig "haladóként" - erősen javaslom a c (change) parancs és a Vim szövegobjektumainak (text objects) a megismerését, ez az a pont, amit, ha valaki jól megismer, akkor - általában - megszereti a szerkesztőt.

Normál módban "ugrálni" a következő parancsokkal szoktam, ez nekem többnyire elég (vagy a fájl végét szerkesztem, vagy egy bizonyos környezetet, amire rá szoktam keresni):

/mitkeresek - keresés a fájlban előrefelé (a kurzorpozíciótól)
?mitkeresek - keresés a fájlban visszafelé (a kurzorpozíciótól)
n - keresés után a következő találatra ugrás
G - fájl végére ugrás
gg - fájl elejére ugrás
<sorszám>gg - a megadott számú sorra ugrás

Nagyjából ennyi az, amit gyakran használok a Vim lehetőségei közül. Nem sok, de az alap dolgokat kiválóan el lehet vele látni. Ha pedig tovább szeretnénk lépni, kiváló online anyagok állnak rendelkezésre, többek között:
  • Vimcasts.org: cikkek és rövid bemutató videók egyes Vim lehetőségekről
  • A Byte of Vim: online elérhető és olvasható könyv

2017. május 26., péntek

Rövid elmélkedés a Pomodoro technika kapcsán

Elég sokat kutakodom a nagyvilágban hatékonyságnövelő ötletek, gondolatok után. Igazából túl sokat is... sajnos hajlamos vagyok beleesni időnként abba a csapdába, hogy ahelyett, hogy alkalmaznám, amit már megértettem, még újabb és újabb ötleteket hajkurászom. De azért már javulok :)

Az egyik érdekes kirándulásom a Pomodoro-technika irányában volt. Sok blog bejegyzést, cikket, videót, és alkalmazást megnéztem, de nem sikerült megértenem, hogy miért is működne nekem ez a technika. Mégis, már mekkora "hülyeség" az, hogy majd 25 percig dolgozom, és utána szünetet tartok? És, ha egy feladat 40 percig tart, akkor hagyjam félbe? Ha meg 20 percig, akkor utána kezdjek bele valami másba még 5 percre? Tisztára nem értettem.

Az a része világos volt, hogy segít a nap tervezésében, illetve segíthet koncentráltnak maradni. De nagyon szigorúnak éreztem, és úgy láttam, hogy a saját világomban nem fogom tudni egyáltalán alkalmazni.

Aztán szembetalálkoztam más írásokkal is (pl. a 15 perces szabállyal), ami további ötleteket adott, hogyan tudnám használni mégis valahogyan.

Végül arra jutottam, hogy nem fogom arra használni, hogy "pomodoronként dolgozzam le" a napi feladataimat, hanem elsősorban heti "időbecslésre" és a napi feladatmennyiség behatárolására fogom használni. A munkám során számos, egymástól független tevékenység van, amelyekkel  rendszeresen (ha nem is minden nap, de heti szinten biztosan) kell foglalkoznom:
  • Általam vezetett/koordinált projektek esetén:
    • belül "architekti", "projekt menedzseri", konzulensi, tesztelői és reviewer feladatok,
    • ügyfél felé "business analyst" és támogatási feladatok
  • Egyéb, már működő rendszerek esetén ügyféltámogatási feladatok
  • Cégen belüli folyamatok / eszközök folyamatos ellenőrzése, felülvizsgálata, változáskövetése, újdonságok kipróbálása / bevezetése
  • Kollégák mentorálása, nem csak projekt, hanem általános szakmai értelemben is

Alapfeltevések:
  • 1 órába 2 pomodoro-nyi feladat fér fele :)
  • egy átlagos, "kellemesen laza" munkanap kb. 12 pomodoro (nagyjából 6 órányi "effektív munka"); egy koncentrálós, keményebb munkanapba kb. 15 pomodoro fér bele, egy extrém munkanapba pedig kb. 18 (ez utóbbi már kb. 11 órányi munkahelyen töltött időt jelent, tehát tényleg extra, ezt hosszú ideig nincs értelme csinálni)
  • a fentiek alapján egy átlagos hétbe kb. 70 pomodoro fér bele, ezen lehet némileg feljebb tornászni, kb. 80-ig, de csak időszakosan
Heti tervezés:
  • A GTD is használja, és tényleg, szerintem ez az egyik legfontosabb dolog annak, aki kicsit is szeretné jobban tervezni és megvalósítani a dolgait. Heti szinten viszonylag gyorsan át lehet tekinteni az előző hetet, levonni a tanulságokat, és legalább nagy vonalakban megtervezni a következő hetet (hogy akkor, milyen területeken kell előrehaladni).
  • Fontos, hogy a hetet tervezem, nem a napokat! Vagyis azt táblázom be, hogy az adott héten kb. hány pomodoro-t foglalkozom a soron következő feladatokkal. Azt, hogy egy konkrét napon ténylegesen mivel töltöm az időt, a nap elején határozom meg (amit persze még mindig felboríthat valami "vis major" dolog, de általában több, mint 80%-ban tudom magam tartani a tervhez).
  • Ez a megközelítés nekem sokat segített abban is, amikor olyan időszak van (és többnyire ilyen van :) ), hogy párhuzamosan több "nagyon fontos" projekt vagy "eseményszál" is megy. Ha nincs heti terv, akkor folyamatosan bennem van, hogy "a többivel is foglalkozni kellene", míg, ha van, és van azokra is idő tervezve, akkor sokkal nyugodtabban tudok az éppen aktuálisra figyelni.
Feladatok:
  • Ha elkezdek egy feladatot, akkor amennyire csak tőlem telik, nem hagyom, hogy bármi vagy bárki megzavarja (nekem nagyon bejött az, hogy legalább 15 percig kötelező csinálnod, utána szabadon eldöntheted, hogy folytatod, vagy áttérsz másra). Ugyanakkor, mivel többségében koncentrációt igénylő feladatokat végzek, ezért van egy max. 45-50 perces határ (ami végül is 2 pomodoro :) ), ami után biztosan tartok szünetet.

Ezt a megoldást alkalmazom kb. fél éve, egyelőre váltakozó sikerrel, de hatékonyabb vagyok, mint korábban, amikor csak napi szinten terveztem meg valamennyire, hogy mit fogok csinálni.

A leggyengébb láncszem a folyamatban a heti tervezés, és a feladatokhoz való "pomodoro becslés" (tehát hogy azon a héten kb. hány pomodoro folyhat el az adott feladatra). Ha ez elmarad, vagy csak félszívvel csinálom meg, akkor azt nagyon megérzem a következő héten.

2017. május 6., szombat

IT tanulás "ingyen"

Az informatikai, főleg a szoftvertervezés és szoftverfejlesztés világában számos olyan lehetőség nyílik meg, ami talán egyáltalán nincs is meg más szakmában. Ez pedig annak a lehetősége, hogy "ingyen" jussunk jó minőségű eszközökhöz és tudáshoz is.

Az ingyen azt jelenti, hogy pénzt nem fizetünk érte (az internetkapcsolat díján és a számítógépünkön túl), viszont rengeteg időt kell "beletenni". Ez az a pont, ahol a legtöbben elvéreznek. Viszonylag kevés olyan embert ismerek, aki hajlandó átlagosan napi 1 óra plusz tanulást folytatni a munkaidején túl. Ugyanakkor, napi egy óra, és esetleg hétvégén még pár óra plusz az már heti 8-10 óra, havi 32-40 óra. Vagyis havi szinten mondhatjuk, hogy "plusz egy heti" tudást / tapasztalatot felszedhetünk, vagyis egy év alatt majdnem három havi, öt év alatt pedig másfél évnyi tudással lehetünk előrébb. Ez az egyik olyan faktor, ami a munkavállalói világban meg tudja különböztetni a jó szakembert és a kevésbé jó szakembert. Van persze még sok más is, de ebben a posztban csak az "ingyenes tanulás" a téma.

Főleg az iskolaévek alatt, illetve az első 10 munkaévünk alatt számít rengeteget a plusz tanulás, itt nagyon "el tudunk húzni". Ebben az időszakban ráadásul még gyorsabban megy a tanulás, és elvileg jobban is tudunk rá időt szánni (talán kevésbé vannak családi kötelezettségeink, de ez nyilván egyéni élethelyzet kérdése).

Hihetetlen mennyiségű információ vesz minket körbe az internet jóvoltából, és ezek között sok jót is találni. Vannak szakmai podcast-ok, YouTube csatornák, blog-ok, oktatóoldalak, szabadon elérhető egyetemi előadások és jegyzetek, szóval tényleg rengeteg információ közül választhatunk.

Az én személyes kedvenceim (mivel elsősorban JVM platformon dolgozom, Windows-os környezetben, így az eszközök és a többi link is ennek megfelelők - de más területre is ugyanígy megvannak az eszközök, a keresők segítenek megtalálni azokat):

Ingyenesen elérhető, nagyon jó minőségű eszközök szoftverfejlesztést tanulóknak, gyakorlóknak, hobbistáknak (van, ami "csak" magánszemélyeknek, tanulóknak, illetve néhány fős csapatoknak "ingyenes", ezért mindig meg kell nézni a kapcsolódó licensz információkat):
A felsorolásból kimaradtak a kódtárkezelés kivételével a "felhős dolgok" (pl. IDE a felhőben), ennek az oka, hogy én, személy szerint azokkal még nem igazán foglalkoztam, nincs bennük tapasztalatom. Amiket itt felsoroltam, azok mindegyikével dolgoztam vagy dolgozom, és "nagyon rendben" láttam a stabilitásukat / funkcionalitásukat, az árukhoz képest meg főleg :)

Az oktatóanyagokból, blog-okból még nagyobb a választék, és nagyon függ attól a választás, hogy milyen IT szakterület irányába szeretne valaki orientálódni. Az én Top 5 ingyenes kedvencem a tanuláshoz:
  • Simple Programmer: lehet rajta kifejezetten programozási bejegyzéseket is találni, de a blog nagyon nagy hangsúlyt fektet az ún. "soft skillek" (kommunikáció, tanulás, "fitten maradás" stb.) népszerűsítésére. Abszolút egyet tudok érteni vele, hiszen, ha valaki megfelelően tud kommunikálni, gyorsan tud olvasni és értelmezni, akkor szinte bármit meg tud tanulni élete során, később sem okoz akkora problémát, ha pl. technológiai stack-et kell váltani.
  • Packt Publishing: ha regisztrálsz (ingyenes), akkor van minden nap egy olyan e-book, amelyet ingyenesen megszerezhetsz a Free Learning program keretében. Én (bár nekem van Mapt előfizetésem is, de ez most itt nem lényeges), a Free Learning program keretében évente kb. 15-20 számomra érdekes e-bookot tudtam beszerezni (elsősorban PostgreSQL, Java, Python, webbiztonság, web fejlesztés, DevOps témakörökben).
  • Udemy: rengeteg oktatóvideó található meg, közülük több ingyenesen is elérhető. Kicsit "kavarni" kell az oldalon, mire eljut az ember az ingyenes kurzusokig, de utána már lehet válogatni (pl. ezen a linken keresztül a szoftverfejlesztéshez tartozó ingyenes kurzusok érhetők el; van itt Ruby on Rails, Android, Python, webfejlesztés, web design, Java, Github, Swift, C#, Eclipse, hogy csak néhányat említsek, közel 500 kurzusból lehet választani). Nyilván, a fizetős kurzusok alaposabbak és naprakészebbek is, de az ingyenes anyagok is nagyon értékesek, ha valaki valóban tanulni és fejlődni szeretne.
  • Free books via GitHub: egy korábbi nagyon jó StackOverflow gyűjtemény továbbvitele és karbantartása. És egyúttal nagyon jó példa arra, hogy miért fontos egy szoftverfejlesztőnek angolul megtanulnia (ha megnézed a magyar és az angol listát, hát, van különbség :) ).
  • Zen Habits: egy kicsit "fura" ebben a válogatásban, de nagyon szeretem az itt megjelenő írásokat. Az itt leírt dolgok közül néhány megértése és megélése segíthet abban, hogy érzelmileg jó, kevésbé frusztrált életet éljünk meg, és ez is rengeteget tud segíteni a szakmai fejlődésben is (több időnk, és sokkal több energiánk marad, mint ha hagyjuk, hogy a külvilág történései miatt a napjainkat folyamatosan idegeskedéssel és rohanással töltenénk).
A fentiek mind csak csepp a tengerben. Így, ha valaki informatikai területen szeretne tanulni, egy dologban biztos nem lehet kifogása, ha van számítógépe és internetelérése: abban, hogy nincs miből tanulni :)