Jak se pozná dobrý programátor jsem už začal v jednom z dřívějších příspěvků, kdy jsem zmínil, že při tvorbě programů nezáleží na nějakém programovacím jazyce nebo na vývojovém prostředí ani na ručním psaní kódu nebo debuggování každé hlouposti. Na čem tedy opravdu záleží u každého programátora? Jaké jiné kvality musí mít programátor, kromě technické úrovně?
Také jsem se již zmiňoval, co je asi nejdůležitější při vývoji aplikací a jaké jsou ověřené zásady dobrého vývoje, tj. při tvorbě Web stránek i Web aplikací nebo při programování nějakých Desktop aplikací pro zákazníky.
Stručná rekapitulace zásad:
1. Empatie a chápání potřeb zákazníka
2. Rychlý návrh prototypu aplikace
3. Support a rychlá implementace úprav
Co je to vlastně ta "dobrá zakázka" pro programátora?
Netýká se to teď práce programátora v nějaké firmě, kde vývojář jen pracuje na svěřených projektech, které mu přidělil zaměstnavatel. Tam není možno si něco vybírat a hodnotit dobrou nebo špatnou zakázku. Je to většinou přidělená práce, kde rozhoduje něco úplně jiného, ať se to někomu líbí nebo nelíbí.
Musí se poslouchat dobrý nebo špatný šéf, opravovat a ladit (zprasený) kód po někom druhém, poslouchat (stupidní) rozhodnutí managementu ;-)
Když ale někdo pracuje jako samostatný programátor a má trochu možnost vybírat si práci z nějaké nabídky zakázek, tak při vybírání vždy posuzuje několik hledisek. Záleží jen na osobních prioritách, zda někoho okouzlí prestižní jméno zákazníka, zda se někomu líbí náročná vývojová práce, kde může dokázat i nemožné, zda někoho láká specifický obor a nové technologie, či zda se preferuje vysoké ocenění za málo práce a bez ohledu na kvalitu.
"Je důležitější umět sehnat zakázku na Web stránky za 10.000 USD a udělat ji rychle v table-based layoutu nebo je důležité honit si triko za 10.000 Kč v ČR v rádoby moderním CSS-based?"
Na ceně asi mnohdy záleží nejvíce, kdy někdo je pak schopen i dobře programovat v Excelu nebo se naučí programovat cokoliv, co se prodá, příp. přijme práci, ať je jakákoliv. Jsou také situace, kdy si někdo může dovolit pracovat zdarma, když má svobodu volby a chce podpořit dobré nápady nebo si něco nového vyzkoušet.
Kdysi jsem spolupracovat s jedním vývojářem na volné noze, který si definoval minimální cenu jako základní kritérium pro každou zakázku, tj. nejprve se zeptal, za kolik by ta práce mohla být. Tuším, že to bylo nejprve 20.000, pak po pár letech si hranici stanovil na 50.000 Kč a zakázky, které byly za míň, tak automaticky odmítal jako "špatné" ;-)
Bylo na tom něco "špatného"? Ani ne, jen se soustředil na jiný trh a jiné typy zakázek, neboť nechtěl plýtvat svou energií na nějaké maličkosti.
Opět se to netýká programátorů, kteří pracují jako zaměstnanci, kdy práce je přidělována, dělají jen část nějakého kódu v týmu, mají relativně dostatek času hrát si se svým kódem, co nestihnou dnes, tak odloží na pozítří a zítra mají veget. Nemusí si sami shánět zakázky ani umět přesvědčit nějaké zákazníky, ať jim svěří zakázku. Není u nich důležitá schopnost komunikace a vystupování, stačí jim jen (mírná) specializace na svou odbornost, neboť zbytek zařídí ostatní ;-)
(Teoretici, kteří učí IT někde na VŠ, příp. redaktoři odborných IT médií, kteří všude byli, všechno znají a programují si pro zálibu nebo ve volném čase, jsou ještě úplně něco jiného.)
Kdo ale pracuje jako samostatný programátor, ať už jako kontraktor v týmu u jiných firem, či jako dodavatel komplexního IT řešení pro nějakou firmu, tak musí projevit také trochu jiné schopnosti. Je úplně jedno, zda pracuje samostatně, najme další kontraktory na specifické části řešení, zda se podílí na práci v jiném týmu kontraktorů.
Musí být technicky "na výši", rozumět dobře svému oboru, umět se dobře prodat, být schopen přesvědčit zákazníka, že je ten pravý dodavatel, ten pravý specialista. Svou prací a svými konkrétními výsledky musí získat dobré reference a ručit za svou práci. Musí být výkonný a produktivní, tj. umět hospodařit s časem a být schopen rozlišovat priority.
PROČ? Aby vůbec dostal proplacenou fakturu, aby dostal proplacenou i příští fakturu, aby získal nějakou příští zakázku! TO je totiž jednoduché hodnocení kvalit opravdového programátora, který osobně ručí za svou kvalitní práci, neboť jeho výsledky okamžitě hodnotí odběratel a to většinou ještě před proplacením faktury.
Základem je určitě umění komunikace, neboť na novém projektu pro nového zákazníka záleží právě na schopnosti diskuze a hledání nejlepšího řešení společně se zákazníkem a jeho odborníky, příp. s kolegy na stejném projektu (viz empatie výše). Znalost angličtiny v dnešním globálním světě snad není nutno zdůrazňovat podobně, jako schopnost učit se rychle novým věcem.
Co rozhled v oboru? Schopnost diskutovat se zákazníkem o různých technologiích, vysvětlit mu výhody různých databází a vývojových nástrojů, být schopen integrovat nové řešení do stávající infrastruktury, umět navázat vlastní kód na API třetích stran, analyzovat náročnost komplexního řešení vzhledem k praktickým potřebám uživatelů?
Co takhle, být schopen diskutovat s managementem i s běžnými uživateli u zákazníka, schopnost vyjednávat, umět spolupracovat s jinými dodavatelskými týmy, třeba i z různých částí světa? Co schopnost prezentace výsledků a umět kvalitně vyškolit uživatele?
Nejsou to trochu "důležitější" věci, na kterých opravdu záleží, jak dumat nad tím, zda nějaký RAD nástroj generuje CSS-based nebo Table-based layout Web stránek, jak se kdosi podivoval u dřívějšího příspěvku - Jak rychle vytvořit Web stránky, kdy jsem v komentářích zmiňoval nějaké příklady Web projektů?
Who knows? Who cares?
Poznámka: Je fakt, že když programátoři a nadšenci do technologií nemají opravdu co dělat, tak mají i čas vymýšlet třeba nové ikonky, které jsou asi vůbec "nejdůležitější" na celém světě ve srovnání třeba s cenzurou v Číně, že?
Viz také - Google's New Favicon ;-)
Ale což, kdo umí, tak ať si hraje, neboť kdo si hraje...
Na čem opravdu záleží u programátora při hledání dobré zakázky?
Výraznější úspěch se ne a ne dostavitZáleží ale jen na tom, po čem toužíme, co chceme, co nás osobně uspokojuje...Čti více...
Neraďte lidem, co nechtějí poradit!Zkuste si schválně spočítat, kolik činí opravdový příjem z vaší činnosti na jednu hodinu...Čti více...
"Silver bullets" v oboru IT?Každý ve svém oboru asi zná někoho, kdo umí víc (míň), kdo vydělává víc (míň)...Čti více...
10 comments :
@Who knows? Who cares? Profesionál by se měl care. Table-based layout je špatný (v drtivé většině případů), stačí progooglovat proč. Právě profesionál by měl sledovat trendy a nedělat zakázku, aby byla co nejrychleji, bez námahy pro něj.
To mi připomíná současnou situaci s řemeslníky... "Ale paninko, takhle to dělám už 20 let, věřte mi, bude to ok. Že prý existují modernější a správnější metoda? Nesmysl, to vymýšlí teoretici na VŠ, mě můžete věřit....hliník stačí".
Netvrdím, že zrovna table based layout je známka špatného programátora, ale také to není známka dobrého profesionála.
Souhlas. Nejhorsi freelanceri jsou technologickti nacisti, kteri vidi jen jednu jedinou moznou technologii a vsechno ostatni je jen shit, ktery nestoji za zvazeni.
Stejne tak jak od architekta ocekavam, ze mi nabidne ruzne moznosti k reseni, zna vyhody i nevyhody jednotlivych moznosti a dokaze mi navrhnout presne to reseni ktere pro soucastnou situaci potrebuju, tak i od dobreho softwaroveho odbornika ocekavam to same.
Obcas i ten excel (udelany behem jednoho odpoledne) dokaze byt lepsi reseni nez 8 vrstva JEE, AJAX, (doplne sve buzz words) s API.
2PK: Však můžeš to své dokonalé řešení nabídnout těm oklahomským Troopers nebo někomu jinému v těch ukázkových příkladech Web stránek. Třeba ti dají zakázku na opravu toho vyloženě špatného layoutu ;-)
Já také neříkám, že je něco dobré nebo špatné, jen zdůrazňuji, že je něco důležitější ve srovnání s něčím jiným.
Tento článek (a v podstatě i ty předchozí) mi přijde jako taková reklama na freelancery. Mezi řádky lze číst něco jako: programátor freelancer je něco víc, než korporátní programátor, protože vybírá technologie, analyzuje, navrhuje, komunikuje, programuje, komunikuje, testuje, komunikuje atd. :) Nic proti, ono to tak je ve většině případů a přímo to vyplývá z charakteristiky obou způsobu práce (kontraktor vs. zaměstnanec). Možná bych to ale trochu obrátil tak, že takový člověk, jakým se Cayman zdá být, je spíš dobrý IT manažer co umí zároveň programovat, než super programátor. To co dělá programátora dobrým a výborným programátorem je to, že umí výborně programovat a je obecně vzdělaný v technologiích i v nezbytné teorii (computer science). To bohatě stačí. Však taky se stává, že OBČAS ti frajírci nájemní jsou právě lepšími prezentátory a ukecávači, než programátoři. Jsou to prostě lidi orientovaní hlavně na ekonomickou stránku věci, oni si nebudou hrát s kódem, refaktorovat až k dokonalosti, zkrátka to nebývají ti praví nadšenci. Pro ně je mnohem důležitější, že se jim podařil kšeft za tisíce doláčů a přitom to bylo o spíchnutí nějakýho webu, než když sami naprogramují netriviální SW, který pro svoji slávu uvolní jako open-source :-) Já sám sebe považuji za křížence. Ale myslím, že článek není ani tak o hodnocení kvalit programátora, ale spíš o schopnostech vydělat prachy, což tedy není to samý.
Mě běžný programátor připomíná jednu kadeřnici, ke které když jsem přišel, tak jsem jí řekl, ať mi zvolí účes, který by se mi hodil. Kadeřnice uměla desítky druhú účesů, byla fakt špička, přestože jsem byl uťáplý slušně oblečený člověk, vystřihla my do hlavy Z (takové tři čary), půlku hlavy skoro vyhlila a nakonec na ruhou půlku dala gel a pak řekla "ještě by to chtělo náušnici do nosu" :)
Cayman je asi jako obyčejná kadeřnice, zkrátí účes na 3cm,, úplnej standard naúčtuje si cenu a vezme dalšího.
Já už bych znovu k extravagantní kadeřnici co sleduje trendy nešel :)
Tak něco jinýho je bejt člověkem tak říkajíc jdoucím s dobou a bezhlavým implementátorem módních trendů bez jakýhokoliv vkusu (tobě hlava ale zůstala co?hehe).
2Markonius: Pěkné přirovnání, ale nemysli si, umím také dělat "extravagantní účesy". Rozdíl je ale v tom, že se snažím chápat potřeby zákazníků, pár jich ostříhám na krátko, ale vydělané peníze mi umožní věnovat dostatek času na nějaké extravagance tam, kde se to hodí a je to smysluplné :-)
Ono se často dopředu nepozná, co bude dobrá zakázka a co jen přicmrdávka. Před 5 lety mi známý dohodil drobný kšeftík - opravit jedné fimě pokažený ceník v excelu. Šel jsem tam opravdu jen abych od něho měl pokoj a nakonec jsem pro ně během 5 let udělal rozsáhlý evidenční systém s SQL, mobilními terminály, čárovámi kódy, EDI komunikací,...
A na druhou stranu ambiciózní projekt na globální analalýzu ekonomických a výrobních vnitropodnikových ukazatelů na bázi OLAP totálně zkrachoval, hlavně na nechuti uživatelů začít ho vůbec používat.
A někdy se sesere i dobře rozjetý projekt. 3 roky mě dobře živil program pro řízení chovů prasat. O program byl zájem, klient měl velké plány na další rozšiřování, dokonce jsem pro urychlení vývoje hledal další spolupracovníky. A do toho (už 1/2 roku před současnou finanční krizí) přišel dlouhodobý propad výkupních cen vepřového masa. Spousta chovatelů ukončila činnost a ti co zůstali, měli a stále mají vážné existenční starosti. Projekt jsem musel zmrazit a horko těžko jsem z klienta dostával dlužné peníze.
Takže jako další důležité hledisko pro zvažování zakázky doporučuji zvážit ekonomickou situaci a perspektivu zákazníka, aby vám nezkrachoval dříve, než ho stihnete zkasírovat :)
2TB: Pravda, dobrá zakázka nejde rozpoznat hned a je úplně jedno, zda je to v ČR nebo ve světě. Zákazníci jsou všude stejní :-)
Základ jsou u všeho asi zálohové platby nebo faktury v průběhu projektu, což docela funguje a omezuje to trochu všechny neplatiče na konci projektu.
Přijde mi to tak, jako rychle zbastlit nějaký 'shit' a přesvědčit někoho, kdo tomu nerozumí (tj. zákazíka), aby za to zaplatil co nejvíc. V podstatě o tom to je, ale takto programovat jen pro 'prachy' by mě nebavilo. Rozhodně mezi pojmy 'dobrý či výborný programátor' a tím, co je popsáno ve článku, naprosto nekladu rovnítko. Může se to překrývat, ale vydělat si jako samostatný asi spíš bude o tom získávání si vhodných zakázek než vlastním vynikajícím programátorském umění:-)