Přejít k navigační liště

Zdroják » Různé » Než začneme programovat…

Než začneme programovat…

Články Různé

Největší nebezpečí, které na vývojáře číhá, je, že dostane nápad a začne ho okamžitě realizovat. Tomuto nebezpečí lze čelit vhodnou aplikací některých postupů, známých z projektového řízení. V článku se nedozvíte o projektovém řízení nic; místo toho si řekneme, co je důležité si uvědomit dřív, než sedneme ke klávesnici.

Úvodní déjà vu

Tento článek je určen především solitérním vývojářům a malým týmům. Pokud pracujete ve velkém SW studiu, pravděpodobně tyto věci řeší někdo jiný. Článek neobsahuje žádné nové informace ani převratná sdělení, přesto bude (snad) pro někoho užitečný. Naleznete v něm několik tipů a rad z oblasti, které mnozí technokratiční vývojáři nepřipisují přílišnou důležitost, a tou je projektové řízení. Autor sám není v této problematice nijak systematicky vzdělán, přesto se drze cítí oprávněn rozdávat rady – všechny chyby, o nichž bude řeč, totiž coby vývojář udělal, některé i víckrát.

Známe to všichni: Brouzdáte si po webu a najednou – nápad! Mohl bych udělat takový a onaký web, to by bylo skvělé něco takového mít, a nedalo by to ani moc práce! Ještě chvíli se s myšlenkou mazlíme, a pak vybereme název, nakoupíme domény a jdeme nadšení spát.

Ráno bývá moudřejší večera, ale my jsme nadšení, sedáme ke klávesnici a nic nás nezastaví. Následuje několik dní, kdy spotřebováváme zásobu endorfinů, a na konci se najednou probereme a zjistíme, že máme zhruba hotový nějaký web či aplikaci a že nevíme co teď s tím. Zahodit se nám to nechce, takže s tím musíme ven, a čeká nás všechna ta otrava – psát k tomu texty, propagovat to, dohadovat se se známými, že to opravdu mělo smysl a k něčemu to bylo…

Timothy Leary, známý psychedelický guru, kdysi údajně prohlásil, že po podání MDMA („Extáze“) by člověku mělo být dva dny zakázáno uzavřít svatbu. Stejně tak by mělo platit nějaké pravidlo, které by webovému vývojáři, co dostal nápad, zabránilo dva dny kupovat domény a spouštět vývojářské nástroje. Webový vývojář, který dostal nápad, je mnohdy ještě nebezpečnější než zákazník, který dostal nápad. Nápad na úplně novou službu totiž není požehnáním, ale závazkem (ne, trestem snad ne).

Co dělat s nápadem?

Dostali jsme nápad a víme, co nesmíme: Nesmíme vymyslet název, koupit doménu a začít datlovat. Co bychom ale měli dělat?

Každý preferuje jiný konkrétní postup, někdo si naleje sklenku vína a kouká do stropu, jiný jde na koncert, jiný jde něco malého pojíst a další se donutí dělat něco jiného a rozchodit to. Účelem je jediné – zamyslet se dřív než začneme něco dělat. Co všechno si máme rozmyslet a jak, na to existuje spousta návodů ve spoustě knih od spousty velmi zkušených autorů; jejich společným rysem je, že si je většina vývojářů nikdy nepřečte. Vím o čem hovořím – byl jsem přesně takový. Shodou náhod a řízením osudu jsem se najednou ocitl na druhé straně barikády, vystaven záplavě nápadů a nadšených vizí, a mou rolí bylo být právě tím korektivem, tím, kdo bude říkat počkej, počkej, počkej, ještě nic neobjednávej, nic neprogramujeme – nejdřív se zamyslíme…

Nakonec jsem si formuloval takovou velmi jednoduchou pomůcku, kterou jsem nazval pro naše interní potřeby podle své internetové přezdívky Dentova břitva. Zněla takto: „Co to bude, pro koho to bude, k čemu mu to bude a z čeho to zaplatíme?“ Není nijak originální, ale v praxi se mi osvědčila na nápady cizí i vlastní.

Co to bude?

Nelze dělat něco, když nevíme co budeme dělat. Bude to databáze, e-shop, komunitní server, galerie nebo informační systém? Nebo to bude něco úplně nového? Pokud ano, nezapomeňte, že nic nového nevzniká v naprostém vzduchoprázdnu, ale vždy to má nějaké předchůdce – i když hodně vzdálené. I naprostou novinku lze popsat nějakým „je to jako… něco mezi…“ Co na tom, že se v průběhu vývoje ukáže, že vlastně máme dělat něco jiného – důležité je v každé chvíli vědět, k čemu naše snažení bezprostředně směřuje. (Mimochodem: nejtragičtější projekty vznikají z toho, že někdo objeví volnou doménu se jménem, co se mu zamlouvá, a vymýšlí, k čemu by se dala použít.)

Uděláme stránky o jazzu! Doména jazz-hudba.cz je volná!

Naprosto nepřijatelné je odpovědět slovem „stránky“ (nebo „web“ nebo „aplikace“). Určitě jsme každý už slyšeli obdobu výše uvedené věty a známe ten pocit bezmoci, který v programátorovi vyvolá. Leckdy je to ale těžké:

Fajn, stránky o jazzu – ale co tam bude? Nějaké texty o jazzu? Recenze jazzových desek? Pozvánky na jazzové koncerty? Teorie? Historie? Ukázky hudby ke stažení? Noty?

Ano, to by bylo skvělé, kdyby tam šlo dát všechno!

V takovém případě je dobré klienta (i když jím jsme v tuhle chvíli my sami) upozornit, že kdo chce všechno, nemá nic. Než takovou kládu naprogramujeme, tak nám dojde nadšení už ve čtvrtině práce, a zjistíme, že nemáme nic – lépe řečeno že máme čtvrt galerie, čtvrt blogu, čtvrt e-shopu, čtvrt redakčního systému, čtvrt systému na registraci uživatelů… Spoustu věcí, ale žádnou hotovou. Je lepší dělat jednu věc, a tu rychle dodělat, dřív než nás přejde nadšení. A abychom ji mohli dělat, musíme si nejdřív říct, co to bude.

Pro koho to bude?

Je k nevíře, kolik autorů tuto otázku ignoruje. Co mi po tom kdo to bude používat, já to dokážu udělat! V zásadě to není špatná odpověď, ale musíme si uvědomit, že v takovém případě děláme dotyčnou věc pro sebe, takže veškeré náklady na vývoj, čas atd. se musí vyrovnat přínosům, které to bude pro nás mít. Ale většinou při vývoji na web vyvíjíme něco, co budou používat i ostatní. Kteří?

Odpovědět na tuto otázku je velmi důležité – ovlivní totiž celou výslednou podobu toho co děláme. A to nejen design webu a použitý jazyk, ale i logiku práce s webem. Budou naše dílo používat programátoři? Kuchaři? Matky v domácnosti? Mladí? Traktoristi? Umělci? Důchodci? Naštvaní padesátiletí radikálové? Vysokoškoláci se zájmem o genderovou problematiku? Inteligenti nebo „obyčejní lidé“?

Zaměření webu na určitou cílovou skupinu není dogma, ani není nikde psáno, že musí být cílová skupina vymezena nějak přesně a úzce. (Například u Bloguje.cz jsem jako primární cílovou skupinu určil „lidi, co chtějí psát a mají co psát, ale nemají čas nebo zkušenosti zařizovat si hosting a instalovat si vlastní blogovací systém.“ – pozn. aut.) Znát cílovou skupinu nám ale pomůže při rozhodování o konkrétních věcech v návrhu (Má tam být to či ono? A jak to udělat?) nebo při uživatelském testování.

K čemu mu to bude?

Je fajn, že víme co děláme a pro koho, ale musíme si položit i otázku k čemu mu to bude. Otázka vypadá sice nevinně, ale zkuste ji položit a zaměřit se na to, jestli odpověď odpovídá opravdu na dotaz K ČEMU TO JE? a jestli neutíká někam jinam…

No, ten uživatel tam přijde, zaregistruje se, tam bude mít svoje kamarády, těm bude moct poslat zprávu, bude moct sdílet co se mu líbilo, bude tam moct komentovat, najde tam informace o té hudbě, ukázky známých skladeb a bude si je moct zahrát, protože tam najde i noty!

To je všechno hezké, ale to popisuje funkce, nikoli smysl a účel. Tady je na místě oponovat: A opravdu chce naše cílová skupina dělat právě toto? Proč to chce dělat?

Odpověď na tuto otázku by měla obsahovat dvě věci: formulovanou potřebu cílové skupiny („milovníci jazzu chtějí poslouchat jazz“) a popis způsobu, jak náš produkt tuhle potřebu naplní („nabídneme jim skladby k poslouchání!“). Samosebou můžeme chtít uspokojit víc potřeb, tak si je můžeme sepsat všechny, a u všech vymyslet, jak je naplníme (nebo škrtat a škrtat). Při odpovědi na tyto otázky si mimochodem odpovíme i na jinou, totiž Proč to děláme? Přece pro cílovou skupinu, aby mohla nějak naplnit svoje potřeby.

Z čeho to zaplatíme?

V jistých vývojářských kruzích je slovo „peníze“ skoro tak sprosté jako „marketing“. Web přeci musí být svobodný, komerce ho kazí, budoucnost je v open source… Realitou je, že komerce proměnila web z akademické hříčky ve společenský fenomén, který ovlivnil celý svět. A ačkoli se někomu (autora nevyjímaje) může příčit přepočítávání všeho na peníze, u plánování projektů se bez toho neobejdeme.

Náš nápad budeme nějakou dobu vyvíjet, a naše práce něco stojí. Bude muset někde fungovat, a server není zadarmo. Budeme tomu muset udělat nějakou reklamu, i když malou a lacinou, ale i to jsou náklady. Budeme se tomu muset dál věnovat, což jsou další náklady… Ve skutečnosti tedy tím, že uděláme nějaký projekt „na svoje triko“, okamžitě proděláme, a dalším provozem se ztráta zvyšuje. Pokud počítáte s tím, že budete vše neustále dotovat z vlastní kapsy a vlastní prací zdarma, je to v pořádku; je to vaše věc. Ale jinak je na místě se zamyslet, z čeho náklady na provoz pokryjeme.

Konkrétním radám na téma „jak na svém webovém projektu vydělat miliony, nebo aspoň neprodělat kalhoty“ se budu věnovat v některém dalším článku, protože jde o velmi obsáhlé téma. Na tomto místě tedy poslední bod Dentovy břitvy obsáhnu stručnou radou: Dřív než vůbec začnete programovat, tak si rozvrhněte, co budete dělat měsíc po spuštění, co za půl roku, co za rok, a proč za to budou lidé platit.

Samosebou nevíme, kam se přesně během roku trh (ano, trh – třetí neslušné slovo v jednom textu, fuj!) posune a na co bude potřeba reagovat (možná budete řešit změnu funkcí, možná se bude celý váš projekt evolučně vyvíjet, možná – a to bych vám přál – budete bojovat s obrovským náporem zájemců). Každopádně je dobré počítat s několika pravděpodobnými scénáři vývoje a být flexibilní. Ostatně, i agilní metodiky vývoje připouštějí stav, kdy se sice přesně neví, co se stane a jak to ovlivní vývoj, ale je jasné, že to někam směřuje. V našem případě tedy k hotovému dílu, které je pro někoho užitečné a dovede si na sebe vydělat.

Shrnutí

Dostali jsme nápad, a dokázali jsme se samým nadšením nezbláznit. Zvládli jsme prvotní nával emocí, a i když nám cuká ruka ke klávesnici, tak jsme se donutili sednout si a přemýšlet: Je to opravdu něco smysluplného? Neudělal to už někdo? V čem to bude jiné proti tomu co existuje? Kdo to bude používat? K čemu mu to bude? Jak to bude fungovat? Budu to provozovat nebo to někomu prodám? Jak dlouho to budu provozovat?

Nejhorší možnou kombinací odpovědí na Břitvu je: „Nevím co to bude, nevím pro koho to bude a nevím k čemu mu to bude.“ Takový projekt (spíš „projekt“) je lépe zarazit včas, protože když děláme a nevíme co to bude, pro koho a k čemu, tak pravděpodobně uděláme šmejd, co nebude nikomu k ničemu. Všechny příklady geniálních objevů, co vznikly náhodou bez konkrétního záměru, jsou čestnými výjimkami z tohoto pravidla, s pravděpodobností výskytu v řádu zlomků promile.

Doporučuju si odpovědi sepsat a použít je jako základ pro všechny neprogramátorské věci, co budete muset dělat – tedy sepsat nějaký záměr, zadání, nějaký byznysplán a byznysmodel a vůbec všechny tyhlety soft skills, kterými pravý vývojář pohrdá nebo se jich bojí, ale bez nichž téměř nemá šanci udělat smysluplný projekt.

Článek by bylo vhodné uzavřít bonmotem. Co třeba něco takového: Schopnost vývojáře se projevuje v tom, co udělal; jeho moudrost v tom, co nakonec neudělal.

Komentáře

Subscribe
Upozornit na
guest
16 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
bli

Jsou dokonce i lidé, kteří čas od času naprogramují nějaký menší projekt jen pro zábavu, není třeba za vším vidět peníze a marketing.

I když člověk udělá chybu a začne s něčím s čím by neměl, stejně se zlepší jako programátor, získá nějaký ten přehled a zkušenosti, příště už bude jednat jinak. Na tohle si asi každý musí přijít sám, v tom mu článek nepomůže.

wn

Aneb „Chybami se clovek uci“

vlabra

Přesně tak. Mělo by se ale dodat, že jen blbec těmi svými :-D

Michal Kára

To jistě, ale je potřeba si uvědomit, že provoz velké části projektů má nějaké časové náklady a je potřeba s tím počítat.

A jinak „dělám projekt proto, že chci získat zkušenosti s tou a tou technologií / technikou“ je naprosto validní důvod.

CrazyWolf

Souhlasím. Pokud se jedná o malé soukromé projekty, pak nemám námitek. Taky si čas od času sednu a začnu programovat bez přípravy, jen proto že mám chuť něco udělat právě teď hned.
Ale právě teď začínám pracovat na něčem větším. Chtěl bych udělat on-line webovou hru. A tady už nejde psát kód přímo z hlavy. Už se na to připravuju několik měsíců – oťukávám si technologii, jednotlivé prvky zkouším samostatně na jiných místech, promýšlím si strukturu kódu… Tenhle článek mi hodně pomohl. Došlo mi, že i když jde o můj soukromý projekt pro zábavu, byl bych moc rád, kdyby se stal časem populární (alespoň v malém okruhu lidí). A možná, kdyby se mi to opravdu povedlo, třeba by ho ode mne někdo i koupil… Proto se musím ještě jednou pořádně zamyslet se nad účelem, jak bych měl začít, jak by se to mělo vyvíjet a kam by to mělo směřovat. Každý trošku větší projekt, který má nějaké ambice, by se měl opravdu důkladně promyslet po všech stránkách.
Ale i kdyby z toho byl naprostý debakl, doufám, že si to vytváření alespoň užiju. Už teď jsem se naučil spoustu nových věcí, takže rozhodně to není ztráta času.

Zdenda

Jednou z nejlepších kombinací odpovědí pak je: „Nevím co to bude, nevím pro koho to bude, nevím k čemu mu to bude, ale vím z čeho to zaplatíme“ (projekty pro státní správu, příp. projekty dotované z fondů EU).

František Kučera

Smutná pravda.

Riny

To je dobré, poslední dobou se tu objevují samé takovéto zajímavé články nepopisující konkrétní postupy programování a technologii, ale obecné zásady, kterých bychom se měli držet ^^. Škoda, že na to, co popisuje tento článek jsem si už musel přijít sám, ale aspoň poslouží dalším :).

Martin

… v podobě vrozené lenosti velké části programátorů. Sám mám taky v adresářích spoustu „nadějných“ projektů. Naštěstí to vždy dopadlo tak, že jsem napsal proof of concept, abych si dokázal, že myšlenka je realizovatelná, dokázal jsem si, že „já na to mám“ a tím to pro mne haslo. Naštěstí.
Nejhorší byly stavy, kdy jsem na základě jednoho o trošku více důmyslnějšího algoritmu a pár dotazů do aplikace chtěl vystavět ekonomický systém.
Nevím, jak vy ostatní, ale mám pocit, že autor mi bude rozumět.

Jen houšť a větší kapky. Dík za článek

frr

Nejsem webař, jsem někde mezi systémákem a hardwarákem. Osobně když už dělám nějaký „proof of concept“, třeba maličkou testovací utilitu na konkrétní problém, tak nakonec zdroják vystavím na webu. Pokud to bude řešit někdo další, a najde ten můj zárodek přes Google, posune ho to o kus dál. Potažmo všecky věci píšu od začátku tak, aby měly pokud možno hlavu a patu, a aspoņ minimalistickou dokumentaci. Já sám po sobě si za půl roku detaily nepamatuju – píšu dokumentaci i pro sebe. U sebe na lokále si křečkuju jenom informace, které se beztak dají dohledat i jinde (datasheety ke konkrétnímu problému apod).

Když jsem jako malej kluk pořád něco kutil a bastlil, oblíbenou otázkou mého táty bylo ironické: „co to bude, až to zahodíš“? To je docela solidní základ imunity proti růžovým brýlím.
Není větší hnus, než když se Vám na půdě hromadí nedokončená torza všeho možného. To už je lepší, když se hromadí dokončené hračky, které Vás okamžikem dokončení přestaly bavit.

Už jsem se při svém samotářském napůl-hobby-programování dostal taky párkrát do situace, že jsem musel cosi přepsat zgruntu znova – protože jsem pozdeji dalším vývojem a studiem došel k závěru, že původně zvolená struktura kódu nebo implementační nástroje vedou do slepé uličky. Některé věci se člověk naučí jedině z vlastních chyb – a čím složitější problém řešíte, tím delší může být Vaše slepá ulička :-) Dobře míněné zkratkovité hraběcí rady od zkušenějších kolegů na tom mnoho nezmění, barák se nedá stavět od střechy. Ostatně pokud má člověk napsat něco rozsáhlejšího, nutně pro něj musí do jisté míry i cesta být cílem.

uf

Proč píšete místo mě? To vše bych mohl napsat já, jen jsem asi míň schopný, než vy.

Ještě dodám mé postřehy:
– hlavně nápad zapsat !
– zapsat i ostatní nápady a postřehy, dokud prýští
– pravidelně zažívám situace, kdy nevím, jak to vymyslet a naplánovat dál a pak zase nevím, co a jak udělat, když začnu programovat, že to mám málo promyšlené. (ono to je asi se všemi mými myšlenkami, že).
– potřeboval bych začít jeden projekt zgruntu znova, ale už je zaverzovaný na webu. Co mám dělat? Refaktorovat?

Mimochodem – programování není jen vytváření webu :-)

miki

DŮLEŽITÉ!!! Zapsat tak, abych i po roce věděl, co jsem to zapsal!

Já se naučil zapisovat, bohužel občas už po týdnu nevím, co jsem tím chtěl říct… :-/ Takže myšlenku na jednu větu už zapisuju na jednu stránku… :)

Slavek

A hlavně si zapsat, kam jsem si to zapsal…

Sergej

Pekný článok, chápem o čom je reč…

>> Počul a zabudol, videl a zapamätal si, urobil a pochopil. <<

lzap

Výborný článek. Tohle je potřeba vývojářům opakovat stále dokola.

Přidal bych jednu věc navíc. Pokud máte nápad na startup, nebojte se ho zveřejnit. Pokud se toho bojíte, tak jej alespoň diskutujte s lidmi, kteří k tomu mají co říct. Nebojte se toho, že vám nápad někdo ukradne, protože pokud by byl nápad dobrý, stejnak se najde někdo, kdo to okopíruje později. Z vlastní zkušenosti musím říct, že tenhle „čínský“ přístup tu je (vč. českého internetu) a tihle „chlapíci“ reagují velmi rychle.

Často mě až překvapuje, jak banální věci může člověk při svých startup plánech přehlédnout. Člověk je obvykle „zaslepen“ svým nápadem a má velmi omezený úhel pohledu.

asystematic

Zase posílám chválu na zajímavé čtení. Není v něm sice nic převratného, ale alespoň se tématu „projektového řízení“ někdo čtivou formou věnuje. Těším se na další.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.