Sunday, January 26, 2014

Kniha: Konec prokrastinace

Hodně lidí věnuje ve svém životě podstatnou část svého času práci. Avšak výsledek našeho odborného snažení nemůsí odpovídat úsilí, kterému do něj vkládáme. Já to často připisuju neefektivnosti toho, co děláme.
"Přes stromy nevidí les."
Tohle známé přísloví mi občas charakterizuje stav do kterého tu a tam spadnu. Jak se člověk noří do problému hloubš a hloubš, tak zapadne, a místo jednoduchého řešení z high-level pohledu volí komplikované - často výrazně náročnější - postupy. Člověku pak chybí jakási efektivnost v tom co dělá.

Tohle se často vyřeší tím, že o problému začnu vyprávět kolegovi a sám si většinou přijdu na řešení popř. problém. Nicméně v tomhle čase je už pozdě.

Proč tohle píšu?

Snažím se popsat motivaci, kterou mám k tomu, že si tu a tam přečtu nějakou motivační nebo sebe-zefektivňující knížku. Moje asi nejvíc oblíbené jsou Get Things Done a Rework. Důležité však je to, občas si připomenout obsah a postupy, protože rád zapomínám a zklouzávám z toho, co se mi na začátku zdálo tak efektvivní. To je důvod, proč nečtu stále dokola jen výpisky z výše uvedených, ale raděj nové :-)

Před vánoci jsem však narazil na knihu, o které chci psát. Konec prokrastinace českého autora Petra Ludwiga.


Po prolistování obsahu jsem se do ní rád pustil, protože to vypadalo, že kniha shrnuje to nejlepší z mnoha knížek a nakonec jsem se vůbec nemýlil.

Prokrastinace je výrazná a chronická tendence odkládat plnění (většinou administrativních či psychicky náročných) povinností a úkolů (zejména těch nepříjemných) na pozdější dobu. Může představovat rizikový fenomén pro duševní zdraví. Psychologové často popisují takové chování jako mechanismus pomáhající jedinci vyrovnat se s úzkostí spojenou s výkonem dané činnosti. Podle některých vědců jsou kritéria definující prokrastinaci následující: je kontraproduktivní, zbytečná a zdržující.
Tak tímhle rozhodně netrpím! Ale to vůbec nevadí, protože kniha obsahuje spoustu zajímavých informací a hlavně reálných postupů, které člověka mohou zefektivnit. Je rozdělena do čtyřech částí:

  1. Motivace
  2. Akceschopnost
  3. Výstupy
  4. Objektivita
Zajímavé jsou pro mě první dvě. Dagi psal nedávno o vnitřní motivaci, existuje také jedna pěkná kniha o motivaci zvenčí.

Motivace

Hned první kapitola pro mě byla stěžení. Celé povídání mi dalo dohromady ideu, proč lepší výplatou nadšenějšího programátora z člověka neuděláš. Zajímavá pro mě byla hlavně část, kde se probírá motivace cestou

O co jde?

Je dobré si dávat úkoly. Je určitě dobré si dávat vyšší úkoly než byly ty předchozí. Jenomže dlouhodobě vzniká problém, že člověk plní úkoly a nemá z nich radost v pohledu na ty další a často těžší a těžší věci. Logicky z toho tedy vypadne, že to nadšení a uspokojení nepramení ze splnění a vyřešení problémů, ale spíš z toho, jak to člověk udělal, jak se mu tohle a to další podařilo, co se naučil, jak do toho zatáhl další lidi a vůbec jak to bylo skvělé a zábavné :-)

Ruku v ruce s motivací a s radostnou náplní toho, co člověk dělá, jde také určitá osobní vize člověka, co by v životě chtěl dělat. Tohle jsem už mnohokrát četl, ale vždycky jsem se na to vykašlal, že to udělám později. Neudělal, takže napraven z předchozích neúspěchů - prokratisnace? - jsem tentokrát strávit pár hodin přemýšlením. Samozřejmě vizi toho, co bych chtěl dělat, jsem měl v hlavě už dávno. Důležité pro mě bylo k tomu přihodit pár zajímavých postupů a výstupů, které jsou popsané v knize - uvidíte.

Co z toho vypadlo? Celkem pěkná náplň na rok či dva s trochou objasněné mlhy za let pět.

Opravdu hodnotná pro mě také byla část, kde autor popisuje pracovní uspokojení člověka. Vysvětluje tam, že krom práce na sebe člověk niterně velmi oceňuje práci pro druhé a skupinovou motivaci stejně nadšených lidí.

Akceschopnost

Úspěšné lidi od neúspěšných odděluje také to, jak a že vůbec se dokáží rozhodnout pro tu či onu věc. Určitě se Vám často stane, že si nemůžete vybrat z jídel v menu nebo třeba cestu, jak vyřešit nějaký technický problém. Efektivní lidé neprokrastinují v mysli a ihned nahodí postup, kterým vybrat to, co je pro mě dobré. 
Chci dneska maso? Ano. Půjdu dneska sportovat? Ne. Mám velký hlad? Ano. Tak to si mohu dát XYZ.
Prokrastinace znamená i to, že ikdyž člověk jednu variantu jistě vybere, tak se vrací k dalším - na stejné úrovni - a znovu je zhodnocuje. To samozřejmě vede k tomu, že má člověk v hlavě stále mnoho možností a celková množina, ze které vybíra, se prostě nezmenšuje. Nakonec si nevybere, protože se prostě nerozhodne.

Samozřejmě výběr z jídelního menu je to nejsnažší, co nás v životě čeká :-)

Velmi mě v posledních měsících motivoval poslech podcastu s Lukášem Hudečkem z Node5, který v něm v jednom momentě říká, že má takové životní krédo:
Člověk by měl v životě dělat vždycky to, co se mu chce nejméně.
Autor Petr Ludwig jde ještě dál v části o osobních hrdinstvých. Tvrdí, že když člověk udělá něco odvážného má sklon dělat odvážné věci víc a víc. Myšleno v kontextu puštění se do hromady TODO věcí nebo vyzkoušení prototypu odvážného nápadu místo jeho odkládání.

Zárověn to ukazuje na příkladu, kdy si člověk ráno může dát studenou sprchu - což je třeba pro mě dosti hrdinský čin - čímž bude zbytek dne motivován dělat takové věci dál. A ono to funguje :-)

Závěr

Další dvě kapitoly jsou také zajímavé, ale pro mě už ne tak podstatně. Úplně bych zapomněl na praktickou část knihy, které ukazuje jak se v reálu pomocí např. buzer-lístku vyrovnat s odkládáním úkolů. Všechny tyhle formuláře jsou také dostupné na autorově webu.

Abych to shrnul. Kniha je říznutá seznamem psycho výzkumů, což přináší často úsměvná zjištění, jak se lidé chovají. Zároveň shrnuje hromady dalších knížek a jako by je propojovala v jeden smysluplný celek jak dělat věci smysluplně a zakousnout se do nich.

Za to se sluší autorovi zatleskat a knihu jednozančně doporučit.

Sunday, January 12, 2014

Coursera: Functional Programming Principles in Scala by Martin Odersky

It's almost half year when I found a link on Twitter when someone pointed out to new course of functional programming in Scala. The course prepared Martin Odersky who also recorded all video materials. All enthusiastic programmers know that Odersky is author of Scala programming language. I've studied hard so after couple weeks I obtained a certificate. I have to note that it was my first meet with coursera itself and it left as best impressions as it could. But lets start from the beginning.

The course took 7 weeks. There was also first, zero, week which supposed to define targets, make people to understand topics etc. Everyone could also follow steps how to setup scala environment from the scratch along with Eclipse and SBT. SBT build system was new for me and I already put it into my notes as thing I need to study later. Contrary to course recommendations I used IntelliJ Idea all the time and I've not met any problem. It was just about the first setup of your environment but nothing new for me as I already made few REST services in scala using Spray. But back to the course itself.

Martin Odersky published couple of videos every week. The total length was about 1 hour (per a week) so nothing which would consume some significant part of your time. I've already have couple real experiences, some books too, with Scala so first weeks was crucial for me. As the name of course indicates, it's not only about scala itself but about functional programming. This was the point of first weeks. I finally found out basic terms, designs and flows how modern functional programming works. Well, everyone attended some course regarding functional programming at a college but this was really good.

The work of every week was covered by one or more exercises. Despite my original feeling I have to say that those exercise were brilliant and seems for me that it was the crucial part of overall understanding. My original feeling was much more worse that today - three months after the end of course. Why? It seemed for me as little bit academical. What's going on?

Odersky and his team prepared skeleton in scala, provide couple tests in the solution and lead you to provide the rest of missing programming code. The solution was compilable all the time but those tests where failing. You supposed to read the tutorial for an assignment and put missing code in there. The difficulty was changing in the time, especially assignment at the end of the whole course was little bit hard but everyone will understand working with collections or stream approach in scala to death :-)

The problem I pointed out few lines above is that I spent a lot of time with reading and undestanding of the problem itself, e.g. how works very popular game of infection, or how they design the skeleton, e.g. words decomposition in the assignment of anagrams.

Once you was satisfied with your solution you just use git with SBT's commit and send your solution to repository. I've already written that original solution already contained few tests. The lecturer developed more non-public test used to testing when someone committed his solution. This sometimes arouse passion because you have developed your solution, your tests works so you decided to commit it to coursera's repository. After couple minutes when their tests were done you found out that your solution is not working for large data. What to do now? You do not have that test, you even do not have attributes of large test. One can just look into his code and try to find problem without any real point where to start.

The last thing was the only issue on perfect course in all other respects. There was also a follow-up in the form of course about Reactive Programming. Thing went around Akka, async/await, Futures and promises and so on.

I really enjoyed the course. After few moths I have to say that it's much more efficient than any kind of reading - obviously because of assignments. It turns out into my almost primary target where to learn new things as there is multiple things to learn.