Známou poučku o tom, že práce by člověka měla bavit, protože ji dělá větší část svého života, bych snad ani nemusel opakovat. Přesto ji opakuji, protože platí víc než jsem si myslel. A platí i u školního projektu.
Pracovat bez motivace je prakticky nemožné. Lidé si motivaci, zdá se, rozdělili do dvou škatulek - první je "má práce mě baví" a druhá "dostávám za to hodně zaplaceno". Protože však málokdo dostává tolik peněz, aby mu dostatečně vynahradily uspokojení z práce, která ho baví (kolik peněz to ale přesně je, to musí asi zjistit každý sám), skončíme většinou u požadavku, aby nás práce bavila.
A u školního projektu to platí dvojnásob. Za školní projekt vám asi těžko někdo dá hodně peněz, a tak všechno závisí především na tom, aby všechny v týmu práce bavila a vydržela je bavit těch 9 měsíců. V případě školního projektu je tu, pravda, ještě další motivace v podobě povinnosti předmětu, ta je však spíš bičem než cukrem a příliš nepomáhá - snad jen v závěrečné fázi projektu, kdy drží všechny nad vodou a nedovolí jim vzdát projekt před cílem.
Pokusím se nastínit hlavní věci, které ovlivní "zábavnost" projektu, tak, jak se na to dívám já po 7 měsících práce na projektu (můj pohled se za tu dobu poměrně dost změnil). A akčoliv píšu o školním projektu, myslím, že leccos platí i obecněji.

Zadání projektu

Každého napadne, že tohle bude stěžejní část motivace. Otázka ale je, které aspekty zadání jsou ty podstatné.
Když jsem zvažoval, zda se připojím k tomuto týmu a budu řešit nabídnuté zadání, zkoumal jsem kromě toho, co a v čem se bude dělat a jestli je to reálné za devět měsíců stihnout, taky dost to, kolik za to dostaneme. To je blbost. Samozřejmě že peníze něco motivace přidají a je rozhodně příjemné, když za svou práci nějaké dostanete, ale nečekejte a nežádejte nic moc. Na školním projektu vám asi nikdo nedá tolik, aby to vynahradilo jinou motivaci, to už jsem psal. Tedy - peníze projektu jistě dodají aspoň nějaký "smysl", ale nejde tu až tak moc o to, kolik jich bude. Jsou důležitější věci.
Důležitější je, aby vás práce na projektu bavila, abyste se nemuseli do něj od začátku do konce nutit. Proto by projekt měl směřovat do oblasti, která vás baví, a neměl by pro vás být ani příliš náročný, ani příliš jednoduchý. Důvodů, proč vás projekt může bavit, je spousta. Vyberte si. Ale hlavně si nevybírejte projekt proto, že zní jako něco čemu nebudete muset dát moc času. Lepší dělat 9 měsíců něco co vás baví dělat, než se 5 měsíců trápit.

Programovací jazyk

Ačkoliv každý správný matfyzák ví, že běžně používané programovací jazyky jsou v podstatě všechny stejné a jen se jinak píší (a každý druhý matfyzák viděl i důkaz tohoto tvrzení), každý má skupinu svých oblíbených jazyků a skupinu jazyků, které "nemusí".
Poučka je jasná - vyberte si projekt psaný v jazyce, který vám je blízký. Je nesmysl snažit se programovat v jazyce, ve kterém neumíte bez přemýšlení a bez chyby udělat zřetězení dvou textů nebo projít pole. Na projektu budete dělat 9 měsíců skoro denně - a pokud polovinu z tohoto času ztratíte psaním a přepisováním základních jednoduchých věcí, hodně brzo vás to přestane bavit.
Druhá věc je jít do projektu v jazyce, který příliš neovládáte, právě se záměrem se ho pořádně naučit. Mějte ale na paměti, že jde o experiment na 9 měsíců, z kterého po prvních pár týdnech už není snadné vycouvat.

Tým

Tady se dostáváme k bodu, který je naprosto klíčový a přitom asi nejhůř ovlivnitelný.
Základní poučka, proč programovat čistě a dobře, zní: protože z dobrého kódu máte dobrý pocit, a motivuje vás to psát dál.
Zní to divně, ale je to pravda - aspoň pro mě osobně. Můj názor je ten, že dobrý programátor by měl poznat, když napíše "prasárnu", měl by se za ni stydět a měl by takovou prasárnu opravit dřív, než ji commitne a ostatní ji uvidí. Tenhle reflex jsem si naštěstí osvojil (asi i díky tomu, že se občas vrátím k nějakému vlastnímu staršímu kódu a pokusím se v něm něco změnit).
Při práci v týmu ovšem tohle nabývá dalšího rozměru - budete totiž muset číst kód i po ostatních. V lepším případě budete každý pracovat v oddělené části aplikace - pak je jen nutné mít opravdu dobré rozhraní mezi jednotlivými částmi. V horším, jako v našem projektu, bude každý dělat všechno. Potom je opravdu důležité, aby všichni měli podobné standardy úrovně kódu. Jeden jediný člověk, který nemá tuhle mentální zábranu psát špatný kód, nebo dokonce špatný kód vůbec nepozná, může znechutit práci celému týmu. Věřte, že opravovat každý týden jednu a tutéž prasárnu zase na novém místě je dost na nervy.
Žádnou dobrou poučku v tomhle případě v rukávu nemám - poznat dobrého programátora není snadné. Takže jen zopakuji, co už každý dobře ví - nepodceňujte výběr svých spolupracovníků, nepovažujte za ztrátu času podívat se na úroveň zdrojových kodů z dřívějších projektů každého potenciálního kolegy. Vězte, že opravdu lze narazit na člověka, který projekt nejen nikam neposune, ale dokonce ho může brzdit a táhnout zpátky. A hlavně pamatujte, že ani titul Bc. z Matfyzu není zárukou kvality (i když tohle se mi píše těžko a dlouho jsem tomu odmítal uvěřit).

Vedoucí týmu

Týmy na softwarový projekt jsou podle pravdiel vedené některým z vyučujících z fakulty. Neslibujte si ale od tohodle příliš - dobrý vedoucí vám pomůže s administrativou kolem projektu a komunikací s projektovou komisí, občas na vás dohlédne, ale nebud mít čas ani motivaci dělat o moc víc. Skutečný vedoucí týmu bude muset být jeden z týmu. Je důležité, aby to byl člověk, který má autoritu, zkušenosti, vůli i rozum na to, aby tohle stádo matfyzáků vedl. Musí to být člověk, který si dokáže nechat poradit, dokáže vést diskuzi, ale dokáže taky určit autoritativně, co se jak bude dělat, a dohlédnout na to, aby to tak bylo. Musí dokázat trpělivě vysvětlit podstatu chyby některého z kolegů z týmu, ale taky pořádně ho seřvat za její opakování příště. A ostatní z týmu musí uznávat jeho právo tohle všechno dělat.

Poslední měsíce projektu

Další papírová poučka, jejíž platnost si právě ověřuji v praxi, říká, že prakticky u každého programátora a projektu přijde chvíle, kdy to člověka prostě přestane bavit. A stejně jako dokáže jeden špatný programátor demotivovat celý tým, dokáže to i jeden člověk, kterého to přestalo bavit. S tím se bohužel asi nedá nic dělat, ani se proti tomu nijak bránit. Je tedy hlavně nutné s tím počítat - vězte, že ten moment přijde, ujistěte se, že i ostatní to vědí a dohodněte se, že až to nastane, budete to řešit. Jak, to nevím, to je jeden z problémů, který v současné době má náš projekt. Ale je nutné alespoň, aby všichni o problému věděli a je jakmile nastane, je nutné o něm začít mluvit - jedině pak se dá vyřešit.

Náš projekt

Mám-li zhodnotit náš projekt z pohledu 7 měsíců po zahájení a 2 měsíce před dokončením, řekl bych, že jsem si podle povětšinou naprosto špatných kritérií vybral celkem dobrý projekt.
Zadání je víceméně úměrné těm 9 měsícům, není na něm nic složitého, ale díky pěknému návrhu jsem se leccos naučil a není to tupá práce. Pěkný návrh mě motivuje k práci a projekt mě v celku baví. Je v jazyku PHP, což je můj oblíbenec. Zadavatel projektu nás platí, ne málo, ne moc, ale jak jsem psal - jde tu hlavně o pocit, že "z toho aspoň něco mám" - a ne "jen" až po 9 měsících podpis v indexu.
Pokud jde o náš tým, zdá se, že jsem dopadl ještě slušně: v pětičlenném týmu si se dvěma ze zbývajících čtyř celkem vyhovujeme.
S vedoucím našeho týmu si vyhovujeme, zdá se, vzájemně a téměř bez výhrad. Druhý mi sedí "většinou" - některé jeho zvyky a postupy mi pijí krev, ale jde většinou o věci nepříliš zásadní.
Nad prací třetího kolegy hlavou střídavě obdivně kývám a nevěřícně kroutím. Tenhle člověk s dobrými nápady je bohužel často až katastrofálně nedůsledný. Navíc je těžké s ním koordinovat práci, protože nedokáže příliš dobře komunikovat.
No a čtvrtý z týmu je bohužel chodící ukázka toho, že existují lidé, kteří pro projekt znamenají ne nulový, ale opravdu záporný pokrok. Nedá se říct, že by to dělal úmyslně - opravdu se snaží pomáhat a produkuje spoustu kódu. Bohužel ale mizerné kvality. Ve výsledku jsem jen já strávil opravami jeho kódu asi víc, než bych strávil jeho napsáním z nuly. Jedinou chybou toho člověka je, že při vybírání mezi rycholstí a kvalitou programování si zvolil rychlost. A že nepozná, když píše špatný kód. Kombinací usilovaného přemlouvání k lepší sebekontrole, trpělivého vysvětlování chyb a mnoha zlostných e-mailů se nám podařilo jej aspoň trochu usměrnit, přesto doufám, že je tohle poslední projekt, na kterém s ním spolupracuji. Je to zrádné především proto, že ten člověk to nedělá úmyslně - nicméně to nemění nic na faktu, že je velkou zátěží nejen pokud jde o čas spotřebovaný na opravy jeho chyb, ale hlavně pro motivaci.