Archiv pro měsíc October, 2007
V tomto článku chci zachytit jenom několik myšlenek, které mě
napadly při čtení článků od Potřebujeme
silné nástroje. a Potřebujeme
domyšlené nástroje a některých dalších komentářů.
Úvaha 1 – Mění se způsob práce, komplexnost zůstává
Dnes sice existují silné IDE, které začátečníka odstíní od
elementárních úkonů, ale také je k dispozici více informací
(článků, knih, kurzů, výuka ve škole) o daných tématech.
Myslím, že je situace uplně stejná jako před léty kdy sice člověk
musel kompilovat zdrojáky javy z příkazové řádky, ale to byla jiná
doba – méně informací, jiné nástroje jednoduše nebyly.
Začátečníkovi je jedno jestli má IDE nebo příkazovou řádku –
obojí je pro něj tako nové, nepochopitelné, že v prvních dnech
nachápe aní jedno. Ortodoxní zastánce Assembleru může ohrnovat nos nad
jazyky jakými je např. java, které jsou proti Assembleru
„abstraktní“.
Když jsem před mnoha léty byl na setkání obchodních reprezentaců ČMSS
mluvili spolu dva účastníci o tom, zda je bylo těžší schánět lidi,
kteří by byli ochodní uzavřít smlouvu o stavebním spoření, před
léty – když se stavební spoření v ČR rozjíždělo, nebo teď
když už to všichni znají – odpověď byla zajímavá –
je to pořád stejně těžké. Dřív byl větší trh (10
milionů potenciálních klientů) ale malá důvěra. Dnes je důvěra velká,
ale trh se zmenšil na zlomek (mnoho lidí už stavební spoření má
uzavřeno).
Myslím, že tento příklad snese srovnání i se světem
programátorským – být dobrým programátorem (vyvíjet kvalitní
aplikace) je pořád stejně těžké.
Úvaha 2 – Programujeme nebo lepíme?
V úvaze Programujeme
nebo lepíme jsem se dočetl že:
Ale napadlo mě, že dneska už vlastně tolik neprogramujem, spíš
skládáme (lepíme) dohromady existující kousky. Však se potichu šušká,
že vše už bylo alespoň jednou napsáno.
A jaký je tedy závěr? I nadále programujeme, ale stále více
se uchylujeme k lepení. A zda lepíme pomocí GUI klikátek nebo ne,
to si musí každý rozhodnout sám, ale já jsem se rozhodl: „Raději ne,
děkuji“.
Můj názor je ten, že je zatraceně jedno, jestli klikáte nebo
programujete zdrojáky přímo. Používat by se měl ten způsob,
který nás co nejrychleji pusune k cíli. Někdy je ten způsob
naklikání a jindy ruční nakódování (zpravidla je to kombinace obou
přístupů).
PS: Nejlepším lepidlem posledních let jsou anotace. Abychom se do toho
lepidla, ale nezalepili sami.
Zalepit se lze od anotací i od XML konfigurace. Dobré je navrhovat
architekturu aplikace tak, abychom toho lepidla potřebovali co nejméně
– jednoduše nelepit jen proto, abysme ukázali, že umíme lepit.
Úvaha 3 – Stop pokročilým IDE pro začátečníky?
V jednom příspěvku na konferece (at) java.cz
jsem se dočetl:
Silna podpora v IDE? Ano, to je presne to, co NESMIE mat zaciatocnik,
ktory potrebuje najskor pochopit, co presne musi implementovat, konfigurovat,
ako to prelozit a ako to deploynut. Ked vsetko toto vie urobit rucne, moze
pouzit vykonnu podporut v IDE aby robil veci rychlejsie a nezatazoval sa
„reziou“ frameworku. Ak mu polovicu veci skryjete za IDE, tak ten
framework nikdy nepochopi.
Tak s tímhle nesouhlasím. Pro začátečníka
i pokročilého uživatele je důležité mít možnost si kostru aplikace
naklikat. To jestli se začátečníka stane skutečný znalec dané
technologie vůbec nezávisí na IDE, ale na člověku samotném.
Z vlastní praxe – PHP jsem se učil na jednoduchých
„IDE“ – například Ultraedit. C# jsem se učil
v plnotučném Visual Studiu, Javu jsem začal dělat v Eclipse.
Naučil jsem se dobře všechny zmiňované jazyky – a IDE v tom
nehrálo žádnou roli.
A ještě jeden příklad z praxe – na semináři
o PHP byl představen framework Symfony – dva přednášející
začali výklad přehledem možností spouštění frameworku
z příkazové řádky, dál se vysvětlovala konfigurace v YAML souborech. To trvalo asi
45 minut – poté se někdo ze sálu zeptal jestli se při práci se
Symfony ještě taky vůbec programuje v PHP. Další připomínka byla,
že než se dostanu k psaní samotného kódu aplikace strávím několik
dní vytvářením konfigurace.
Je krásně vidět, že tazatelé ani v jednom případě nepochopili
výklad. YAML soubory nahrazují vlastní kód aplikace. Proč za každou cenu
kódovat podobný kus kódu znovu a znovu? Symfony obsahuje defaultní
konfiguraci a v té vygenerované jenom přepíšeme hodnoty, které chceme
v našem projektu změnit (convention over configuration). Ve druhém
případě tazatel nepochopil, že konfigurační soubory jsou vygenerovány
automaticky – a je zcela jedno jestli je vygenerován automaticky YAML
soubor nebo PHP třída. Co tím chci říct? Že i když se
přednášející snažili předvést sílu frameworku na jednoduchých
utilitách (příkazová řádka), tak to přesto nebylo částí obecentstva
pochopeno. Věřím tomu, že kdyby existovalo IDE s podporou Symfony, tak
by jeho skvělé schopnosti byly demonstrovatelné mnohém lépe – a
o to pří seznamování s novým frameworkem jde.
Závěr
Myslím, že (stejně jako v ostatních aspektů života) nemusíme mít
strach, že ke zlepšováním IDE nebude docházet. Pokrok a konkurence jsou
úžasně zdravá věc.
Celý článek 28. October 2007
Unikátní akce v českém PHP světě PHP
seminář podzim 2007 (PHP workshop autumn 2007) je již minulostí. Václav
Stoupa uspořádal k akci, na které bylo představeno několik PHP
frameworků:
Jsem nadšen tím, že jsem mohl PHP komunitu seznámit se Zend Frameworkem. Moje přednáška trvala
celkem 2,5 hodiny – trochu se protáhla z původně
plánovaných 50 minut (resp. 1,5 hodiny po odpadnutí přednášky
Michala Tilla).
Celé setkání trvalo od 9.00 do 19.00 a pokud mohu mluvit za sebe
myslím, že se jedná přesně o typ akce, která je pro českou PHP
komunitu hodně prospěšná.
Myslím, že by bylo dobré založit českou PHP user group
– sdružení lidí, kteří budou sdílet svoje znalosti i PHP.
Například ve světě Javy existuje od 12. září 2006 CZJUG (Česká komunita Java
programátorů).
Činnost user groupy by spočívala v tom, že by jednou měsíčně
uspořádala setkání, kde by proběhly dvě prezentace v trvání cca
2 hodin (dohromady).
Další možností je nahrávat PHP podcasty. Podcasty jsou zvukové
záznamy s nahrávkou rozhovoru odborníků na dané téma. Opět si sáhnu
pro příklad do českého javovského světa – CZ podcast volume #1 –
Vývojová prostředí v Javě.
Materiály ke stažení k přednášce o Zend Frameworku
Závěr
Pokud by měl někdo jakékoliv dotazy k příkladu nebo k ZF
samotnémá ať mě neváhá kontaktovat e-mailem nebo (ještě lépe) napsat
svůj dotaz jako komentář k článku.
Celý článek 28. October 2007
Mám to potěšení napsat pár řádků o knize od Kenta Becka
s názvem Programování
řízení testy (v anglickém originálu Test
Driven Development: By Example).
Každý programátor má své návyky, které aplikuje pří vývoji
softwaru. Klasický přístup vypadá tak, že identifikujete systém a jeho use
casy, naprogramujte část systému a pak vyzkoušíte zda se chová tak jak
má.
Odlišný přístup se jmenuje programování řízené
testy (test driven
development). Pracovní postup je zde odlišný – před psaním
samotnéhé kódu napíšete testy – sadu podmínek, které musí
výsledná aplikace splňovat.
Pokud tímto způsobem ještě neprogramujete může být pro váš těžké
si to představit v praxi. A právě k tomu je výborná kniha,
o níž pojednává tento článek.
Obsah knihy
Kniha je rozdělena na tři velké části:
Část první – Příklad s penězi
V této části, která tvoří polovinu celé knihy, autor prochází
od samého začátku příkladu s finančními operacimi ve více měnách.
Na začátku práce je virtuální list papíru, na který si píšeme
požadavky na výsledný program. Poté se započne s napsáním testu na
tu nejjednodušší funkčnost. Slyšíte správně – nepíšou se
žádné třídy – rovnou testy, ve kterých se s klidem odvoláváme
na neexistující třídy a metody.
Následuje spuštění testu – test samozřejmě neprojde. Dalším
krokem je sprovoznění testů – s nejmenším možným odporem.
Pokud tedy máme mít metodu na sčítání dvou čísel a test vypadá
takto:
public void testFoo() {
this.assertEquals(3, myClass.foo(1, 2);
}
Tak nejjednodušší implementace metody foo pro projití testem bude
vypadat:
public void foo(int a, int b) {
return 3;
}
Možná si řeknete, že je tento postup hloupý, ale jedním z pravidel
TDD je psát pouze kód,
který projde testy. Nic navíc. Když přidáte další testy bude samozřejmě
potřeba metodu foo
upravit. Vývoj pomocí TDD má následující
cykly:
- Napsání nového testu a jeho spuštění
- Úprava kódu programu tak, aby nový test prošel (a s ním
samozřejmě všechny předcházející)
- Refaktorizace kódu (např. kvůli odstranění duplicit)
V první části je v použit programovací jazyk Java.
Část druhá – Příklad s xUnit
xUnit je název pro testovaný rámec, který se v příkladu
vytváří. Tentokrát je použit jazyk Python. Obsah kapitoly je podobné té
první – opět návrh programu from scratch pomocí TDD.
Část třetí – Vzory pro vývoj řízený testy
V této části autor mluví o návrhových vzorech, refaktorizaci,
testovacích vzorech atd.
Na závěr krátký citát z knihy:
Jednou z velkých frustrací mého života mladého inženýra bylo
zahájit projekt s obrovským nadšením a pak sledovat, jak se kód během
doby hatí. O rok později jsem si už nepřál nic jiného, jen ten teď
už smradlavý kód zahodit a dostat nový projekt. TDD vám umožní získat
během času důvěru ve váš kód, Jak se testy hromadí (a vaše testování
zlepšuje), získáváte důvěru v chování systému. Jak vylepšujete
návrh, můžete dělat stále více a více změn. Mým cílem je, abych se po
roce cítil ohledně projektu lépe, než když jsem nadšeně začal
s růžovými brýlemi na nose.
Závěr
Věřím, že hodně z vás už tuto knihu četlo – často bývá
zmiňována jako základní publikace z této oblasti. Útlá knížečka
je psaná čtivým (a srozumitelným) jazykem. Je to čtení na pár
večerů.
Informace o knize
- Název
- Test Driven Development: By Example
- Autoři
- Kent Beck
- Vydal
- Addison-Wesley Proffesional
- ISBN
- 0321146530
- Datum vydání
- 2003
- Počet stran
- 204
Celý článek 11. October 2007
Architektura DynaTrace Diagnostics
Celý článek 11. October 2007
V našich PHP projektech s úspěchem používáme Zend Framework a také jeho část Zend_Config.
Zend_Config
je třída umožňující přístup
k konfiguračním souborům. Do něj je vhodné ukládat si například
nastavení databáze apod. V současnosti existují dvě implementaci
(adaptéry):
- Zend_Config_ini
- Slouží pro práci s konfiguračními daty, která jsou uložena a php ini
souboru.
- Zend_Config_Xml
- Slouží pro práci s konfiguračními daty, která jsou uložena XML
souboru.
Současná implementace Zend_Config neumožňuje používat proměnné
v konfiguračních souborech. Na příkladu vysvětlím o čem je
řeč:
[default]
foo = bar
foo2 = #foo#
var = World
foo3 = "Hello #var#"
Výše uvedený kód je ukázkou ini souboru, ktery lze načíst pomocí
Zend_Config_Ini
třídy. Použítí jenásledující
$config = new Zend_Config_Ini('config.ini', 'default');
$el = new Venturia_Config_ElEvaluator($config);
echo $config->foo; echo $config->foo2; echo $el->evaluate($config->foo2); echo $config->foo3; echo $el->evaluate($config->foo3);
Třídy Venturia_Config_ElEvaluator
tedy funguje tak, že
projde daný string a zamění výskyty znaku #nazev_promenne#
za
její skutečnou hodnotu (dělá to rekurzivně).
K napsání této třídy mě vedla skutečnost, že se hodnoty
různých proměnných opakovaly. Typicky to byla hodnota e-mailové adresy.
Závěr
Doufám, že tato triviální třída může někomu pomoci s lepším
uspořádám jeho konfiguračních souborů. Dříve než jsem se do jejího
psaní pustil pátral jsem po webu, ale nic podobného jsem nenašel…no
možná mě vyvedete z omylu.
Zde je odkaz na stažení třídy a testů – Venturia_Config_ElEvaluator
+ testy.
Celý článek 9. October 2007
Už delší dobu se chystám napsat tento článek a po přečtení článku
A zase freelancerem jsem
se konečně rozhoupal.
V následujících řádcích bych chtěl zhodnotit výhody a nevýhody
kontraktora a zaměstnance.
Kontraktor
Jako kontraktor pracuji už více než šest let. Zde jsou moje poznatky.
Výhody
- V naprosté většině případů máte mnohem volnější časový
fond než zaměstnanec
- Není problém si z práce (po dohodě) odskočit něco vyřídit.
Nemáte to sice zaplaceno, ale není to problém
- Jste placeni fixní hodinovou sazbou a tak nevznikají dohady zda vám
zaměstnavatel např. neproplatí přesčasy z důvodu vaší údajné
neschopnosti (měli jste to stihnout v pracovní době)
- Víte, že se s vámi firma může velmi rychle rozloučit, když
nebude s vašimi službami spokojena (tohle bych zařadil jednoznačně do
výhod). Už jsem slyšel o případech kdy není možné neschopného
zaměstnance vyhodit protože jednoduše výrazně neporušil pracovní kázeň
a svoje povinnosti nějak zvládá.
- Tím, že na sobě musíte sami pracovat, se učíte samostatně
uvažovat.
- Možnost pracovat z domova.
Nevýhody
- Nikam nepatříte (být zaměstnancem úspěšné firmy – cítit se
její součástí – může být velmi povznášející.
- Nemáte žádnou dovolenou.
- Menší jistota toho že budete mít stále práce.
- Musíte na sobě pořád makat – co se sami nenaučíte to neznáte.
Tím, že denně nesdílíte svoje zkušenosti s ostatními žijete
v částečné izolaci.
- Možnost poznat fungování více firem a odnést si z toho
zkušenosti.
Zaměstnanec
I se životem zaměstnaců mám svoje zkušenosti. Část z firem,
pro které jsem dělal (dělám) a zčásti od kamarádů programátorů.
Výhody
- Jak už jsem napsal výše – pocit že někam patříte, že jste
součástí špičkové firmy k oboru je k nezaplacení.
- Máte dovolenou a další výhody (bonusy, různé firemní spořící
programy).
- Pokud jste součástí skvělého kolektivu dává vám to úžasné
možnosti osobního růstu (mluvím o nabytých znalostech).
- Možnosti profesního růstu v rámci firmy.
Nevýhody
- Často nízká motivace zaměstnanců (setkal jsem se s tím, že je
v praxi úplně jedno, jestli zaměstnanec pracuje 2 nebo 8 hodin
denně (ano, mluvím o programátorovi) – nikdo ho
nekontroluje).
- Pokud nejste součástí prograsivního kolektivu (dynamické firmy)
znamená to pro vás profesní hrob – ustrnete na současných
znalostech.
Už jsem se setkal s několika nadanými programátory, které
nedostatek motivace dovedl k tomu, že tráví velkou část dne
bezcílným bloumáním po internetu a tu zbývající řečmi o
„gamesách“.
V současnosti se pohlížím po nové práci a moje zkušenost je
taková, že naprostá většina firem chce mít svoje zaměstnance místo lidí
na kontrakt. Má to svoje důvody – proč investovat (čas, peníze,
školení) do někoho, kdo nezůstane ve firmě delší dobu.
Závěr
Můj názor je, že jedinec nemůže nikdy v oblasti IT ničeho
významného dosáhnout. Ideální je podle mého názoru být zaměstnancem
v dynamickém kolektivu, který se nebojí zavádění nových věcí a
tvrdé práce. Že to zní jako klišé – máte pravdu:) A nebo je tu
vlastně ještě jedno řešení – otevřít si vlastní firmu, najmout
zaměstnance a dělat to podle svých představ.
Celý článek 8. October 2007