Cayman Islander | Diary of a Freelance Programmer traveling the world

Cayman Islander's blog - Diary of Freelance Programmer

Je potřeba umět HTML, CSS, JavaScript, PHP, ASP,... pri tvorbě aplikací nebo Web stránek?

Be the First and Win a fortressUž vidím ty reakce na tuhle otázku, zamyslete se ale, prosím, než budete komentovat. Je to totiž podobné jako otázka, zda je nutno umět vyvolávat fotky a rozumět chemickému procesu při ručním zpracování fotografií ve vývojce, či ustalovači, když chci jen dělat technicky kvalitní a kompozičně dobré fotografie, které někomu něco říkají.

Budu ale muset asi přestat číst některé blogy, které píšou programátoři všeho možného, neboť někdy jsem naprosto mimo. Někdy totiž vůbec nechápu, o čem píšou, proč o tom píšou, proč nějakými drobnostmi někdo ztrácí čas. A to o mně pár lidí říká, že jsem prý dobrý programátor ;-)

"Dobře utajenou novinkou PHP 5.3 je řetězení výjimek (exception chaining). Tuto vlastnost můžete znát třeba z Javy (caused exception) nebo ASP.NET (inner exception). O co jde? Každá vyhozená výjimka se může odkazovat na jinou výjimku, která její vznik zapříčinila. Jinými slovy, je možné zachycenou výjimku zabalit do obecnější výjimky."

Tak třeba to "řetězení výjimek" jsem nikdy v životě nepoužil a nikdy ani nepoužiju. To slibuji jako jiskra jasná :-)


Není programátor jako programátor...

Jsem divný programátor, já vím, vydělal jsem stovky tisíc dolarů tvorbou nativních desktop aplikací ve file-server i client-server konfiguraci, vytvořil jsem plno databázových Web aplikací, umím vytvářet programy pro různé operační systémy, s lokální nebo vzdálenou databází, single- nebo multi-user v heterogenních sítích s tisíci současně připojených uživatelů.

Znám několik databázových serverů, dokážu vytvořit i databázově nezávislé aplikace, kdy databáze se dá měnit za chodu, umím aplikace s dynamickými knihovnami nebo přímo nativní .EXE aplikace pro různé databázové i aplikační servery.

Stejně mám ale stále pocit, že tomu programování nějak moc nerozumím ;-)

Musím říci, že dnes už neumím z hlavy napsat ani jednoduchý JavaScript kód na kontrolu formulářových položek (kód se mi totiž generuje automaticky), neumím z hlavy definovat ani CSS soubor (mám na to CSS Builder), strukturu různých databází už také nejsem schopen napsat z hlavy (SQL Developer nebo CASE Studio to dělají za mě).


Jsem tedy vůbec programátor?

Ano, "myslím, tedy jsem". Kdysi jsem sice uměl psát kód ručně, dnes taky někdy sednu a nic jiného mi nezbývá. Z poslední doby mě třeba napadá, že jsem musel ručně doplnit kód do databázové Web aplikace, kdy na stisknutí tlačítka v tabulce se seznamem serverů jsem chtěl otevřít Unix terminál a připojit se s předvolenými parametry přímo na Unix server.

Jsou tedy věci, které se musí opravdu ručně naprogramovat, takže se někdy vybičuji k výkonu, přemýšlení a ruční práci ;-)

Ne, nejsem, neboť neumím ani vytvořit základní Web šablonu nějaké Web stránky (používám zabudované šablony v RAD Tools). Jako líný programátor totiž nechápu, proč bych měl ztrácet čas něčím, co je již hotovo. Stačí přece jen vzít jednu ze stovek nabízených šablon v mém oblíbeném toolu na tvorbu Web stránek, upravit lehce design a rozložení v grafickém návrháři, definovat nový styl menu a submenu, zafajfkovat, že kromě grafického nebo animovaného menu chci i automatické textové menu v patičce stránek a k tomu i generovanou Site-map stránek, no a Web aplikace je na světě i bez kódování.

Takže, vlastně "ano", asi jsem programátor, neboť výsledkem mé práce jsou někdy i fungující aplikace a to neprogramuji v Excelu ;-)


CASE & RAD Tools jsou základem produktivní práce!

Ruční psaní řádků nějakého kódu jsem opustil asi před 5-10 lety, kdy jsem to všechno snad i uměl a psal veškerý kód ručně v editoru. Jak šel ale čas, tak mě to ruční psaní nebavilo a začal jsem používat nějaké předdefinované templates, které se jen lehce upravily. Poté mě ale přestala bavit i tato "ruční" práce a hledal jsem lepší RAD nástroje, které pomůžou zrychlit vývoj a hlavně, pomůžou mi zbavit se té nudné programátorské rutiny.

Jsem totiž totálně neschopný (líný) napsat řádek PHP nebo ASP kódu, neboť vše potřebné mi nabízejí knihovny funkcí v RAD nástrojích, které stačí jen zahrnout, upravit a použít, ať už se to týká designu, validace položek ve formulářích, automatických funkcí po stisknutí tlačítka, volání procedur a funkcí, odesílání emailů, kontroly hesel, všech databázových operací, či low-level TCP/IP komunikace...


Jaký programovací jazyk nebo vývojové prostředí?

Na tohle téma se ve světě diskutovalo už mnohokrát. Ve své podstatě je to každému zákazníkovi jedno, neboť základem je dodat funkční řešení ve slíbeném termínu, být schopen rychle upravovat řešení dle potřeb a požadavků na změny a nové funkce. Kdo na toto téma stále ještě diskutuje, tak je jen skupina technologických zaslepenců, kteří obhajují svůj preferovaný jazyk, framework nebo RAD tool.

Všem ostatním je to úplně jedno, ale já osobně preferuji před nějakým jazykem spíše dobré vývojové prostředí, které mi pomůže zbavit se rutinních kroků a umožní mi soustředit se na více podstatné věci ve vývojovém cyklu, tj. logický / procesní model, struktura aplikace / databáze, uživatelská přívětivost, funkčnost, jednoduchost implementace a následných úprav, to vše bez ohledu na osobu autora.

Nejhorší je totiž dokonalý kód v dokonalém programovacím jazyce od dokonalého programátora, ve kterém aby se prase vyznalo.

Jediné, co snad rozhoduje, je rychlost, tj. produktivita (cena) vývoje, kdy mě napadá, že by nebylo vůbec špatné uspořádat u nás nějakou vývojářskou soutěž o hodnotné ceny na předem neznámé téma, kdy jednotlivci nebo vývojové týmy by se ráno sešli na jednom místě se svými vývojářskými nástroji, dostali by stejné zadání, no a večer by měli předvést výsledek odborné porotě.

Vítězem soutěže by byl kdo? Asi nikdo, neboť v čemkoliv se dnes dá rychle udělat cokoliv, ale ze sponzorů by se mohlo vytáhnout pár korun na pořádnou after-party ;-)

26 comments :

Anonymní řekl(a)...

druhy pokus, ta chyba pri komentovani este stale nieje opravena... vid: http://img142.imageshack.us/my.php?image=commenterrorzk3.jpg
- amater, vyzna sa v Excel/ Access a chce urobit web aplikaciu pre cca 5 ludi umiestnenu na lokalnom serveri. Ide o rozsireny zoznam a zopar tabuliek atd.
Co ma pouzit?
Vdaka za radu
CHP

George řekl(a)...

Stejně je to k ničemu. Mám doma hromadu knih o programování a pokud bych u webdesignu neměl TopStyle s PsPadem, tak si ani neškrtnu. :-)

Ve škole děláme v Borland Delphi 7 a tam to stojí za starou belu, poněvadž se vše dodává ve starém stylu a maximálně zpaměti napíšu výpis do Memo. ;-)

Souhlasím s tímto článkem, i když nejsem odborník

David Filip řekl(a)...

Anonym: zalezi co ma ta web aplikace delat, zejo. Nejlepe se porozhlednout jestli podobna aplikace existuje (coz nejspise ano) a pak bud zakoupit nebo pokud bude zdarma (coz je dost pravdepodobne) tak stahnout a nasadit. Pripadne si sehnat nejakeho programatora, ktery tam dodela nejake upravy.

Lepsi nez neco matlat doma na kolene, navic rychlejsi a v konecnem dusledku i levnejsi.

John Vanhara řekl(a)...

A neni v tom rozdil mezi profesionalem a amaterem? Amater vyvolava fotky, udela je rychle, ale nema tuseni jak to vlastne v pozadi funguje (chemicke procesy). V 99% pripadu je to jedno, ale pak nastane problem kdy se ta znalost vsech procesu vyplati.

Stejne tak to vidim ve vsech ostatnich oborech.

Kuchar muze varit podle receptu a varit dobre. Ale kdyz nechape procesy co se s jidlem deje pri vareni a jaka prisada udela jakou reakci.. tak proste nikdy pro me neni skutecne dobry kuchar. Muze treba nahazet plechovky jidla dohromady, je to rychle a levne. Ale treba umet udelat vsechno pouze ze zakladnich surovin povazuji za umeni. Nerikam, ze to tak musi vzdy delat, ale umet to.

minority řekl(a)...

Dovolím si tady vyjádřit takovou teorii. Velice mě připomínáš pár lidí, které jsem v životě potkal a teď by to určitě nemělo vyznít nijak špatně.

Ty jsi ten typ programátor, který jde za cílem a v podstatě mu je jedno jakou cestu si vybere, ale důležité je, že to musí končit funkčním výsledkem. Určitě to bude tím, že jsi freelancer, tzn. máš menší konfrontaci s kolegy než běžní programátoři v teamu a tudíž si můžeš dovolit zvolit tento přístup. Na druhé straně je to také dané tím, že děláš zakázkový vývoj. Setkal jsem se s tím také, když jsem dělal kontraktora. Čím menší zákazník tím to bylo horší.

Naopak pokud jsi programátor tělem i duší, snažíš se chápat věci v širším kontextu. Nejde ti jen o to splnit cíl, ale jde ti i o cestu jakou k tomu cíli dojdeš. Už neděláš stylem po mě potopa jako většina kontraktorů a obecně vývojářů v oblasti zakázkového vývoje.

Pokud děláš jeden produkt, který tě třeba řadu let živý, pak máš našlápnuto stát se takovým programátorem.

Dále to je také tím, že dnešní svět PHPek apod. už je trochu jinde než je třeba svět C programátorů. To teď nemyslím nijak zle, je to prostě realita. A proto třeba ono zřetězení výjimek je zcela běžná věc v jazycích podporující výjimky a i docela užitečná věc hlavně pro hledání chyb když ti přijde log od zákazníka.

minority řekl(a)...

Podílel jsem se např. na vývoji software v jedné společnosti, která je dnes světovým leaderem na svém trhu a rozhodně to je velmi lukrativní trh a lidé jako ty s tímto produktem dnes staví řešení. Ano, už ho staví stylem o kterým píšeš.

Ale vytvořit ten produkt znamenalo opravdu znát souvislosti a tvořit ho tak, aby se dal rozvíjet řadu let. Jen pro zajímavost je to software, který v podstatě vznikl tak, že všechno je tam psané svépomocí, tzn. nutná znalost jak fungují souborové systémy, vykreslovaní fontů, TCP/IP apod. Může se to zdát v dnešní době neefektivní, ale díky tomuto přístupu dnes ten systém je schopen běžet i na telefonu, na každém OS má naprosto nativní rozhraní (ne jako Java programy) apod. A díky tomu v podstatě vytlačuje dost zásadně konkurenci.

Chci tím jen říct, že v dnešní době se hodně rozevírají ony pomyslné nůžky mezi programátory a programátory. A ani na jedné skupině není nic špatného.

Snad jsem to vyjádřil srozumitelně :-)

Cayman řekl(a)...

2John: Pěkné a trefné přirovnání s tím kuchařem. Vem si ale, že máš šéf - kuchaře (dobrého programátora), který všemu podrobně rozumí po letech své praxe, ale osobně už nekrájí cibuli ani neloupe brambory, neboť na to má lidi a věnuje se spíše koncepci celého jídelníčku, výběru kvalitních surovin a závěrečnému designu, aby i nejnáročnější zákazník byl spokojen :-)

Samozřejmě, že takový šéf-kuchař musí být schopen v případě potřeby i sám tu cibuli nakrájet, ale nemusí to dělat od rána do večera.

Podobné to může být i u toho fotografa - profesionála, který začínal tak, že si sám vyvolával negativy a zvětšoval fotky. Po čase si na to ale najme lidi a při focení má i asistenta, který mu vyměňuje film nebo objektivy ve foťáku.

Cayman řekl(a)...

2minority: Dík za komentář a zde pár výsvětlení k některým tvým myšlenkám:

"...jsi freelancer, tzn. máš menší konfrontaci s kolegy než běžní programátoři v teamu..."

Mám možná větší konfrontaci s kolegy, neboť obvykle pracuji ve větším týmu buď jako specialista na nějakou oblast nebo jako vedoucí projektu, příp. jako dodavatel řešení, na kterém pracuje více firem, či týmů, z celého světa.

Právě při takové týmové spolupráci se nejvíce ověří opravdová schopnost práce v týmu, vytváření logického řešení, schopnosti, odpovědnost a profesionalita všech jednotlivců, na kterých závisí celková kvalita.

"...jde ti i o cestu jakou k tomu cíli dojdeš. Už neděláš stylem po mě potopa jako většina kontraktorů..."

O cestu a kvalitu řešení mi jde především a rčení "po mě potopa" opravdu neznám, neboť dodávkou nějaké práce teprve všechno začíná. Jistě víš, že na každé dobré řešení musí navazovat profesionální support, podpora, nové verze.

Chápu ale jak to myslíš, plno takových rádoby "kontraktorů" jsem také potkal, ale od těch tedy opravdu dál ;-)

"...zřetězení výjimek je zcela běžná věc v jazycích podporující výjimky a i docela užitečná věc hlavně pro hledání chyb..."

Jo, to chce tvořit aplikace bez chyb, což je možno právě jen, když se omezí to ruční psaní kódu, plně se využívají schopnosti aplikačního nebo databázového serveru, kdy většina aplikací jsou pak jen takovým "ksichtem" pro uživatele. Nic ve zlém ;-)

Šlo mi hlavně o to, že mnoho programátorů i celým týmů se často zabývá "drobnostmi" a svým "dokonalým" kódem, že pro třísky nevidí celý les, což se pak projevuje ve špatném řešení a třeba i v předčasném ukončení projektu.

minority řekl(a)...

Jo, to chce tvořit aplikace bez chyb

Ty to umíš? Tak už asi chápu proč vyděláváš takové množství dolarů. Přiznám se, že já to neumím a nesetkal jsem se upřímně s nikým kdo by to uměl.

Nejsem příliš znalý generátorů kódů, takže možná teď jen mluvím nesmysli dané mou neznalostí problematiky. Ale nesetkal jsem se ještě s něčím co by mě dokázalo vygenerovat aplikaci jenom tím, že se v ní naklikám co potřebuji. Ani kdybych to psal v nějakém metajazyku, který by měl větší vyjadřovací schopnost, tak si to neumím představit.

To lze například takto vygenerovat internetové bankovnictví? Aplikaci na mobil, i takovou jednoduchou věc jakou je editor blogů? A co třeba když potřebuji portovat aplikaci z Windows na MacOS X se zachováním nativních rozhraních dané platformy?

Protože pokud ne, tak zákonitě musí někde vzniknout chyba. A pak jsem zase na začátku, vůbec nerozumím tomu o čem píšeš.

Cayman řekl(a)...

Musím neskromně říci, že "tvořit aplikace bez chyb" umím. Nemyslím teď nějaké překlepy nebo drobnosti, co se opraví hned po první kompilaci, ale většinou mi vše funguje od prvního zmáčknutí "Compile". Debugger jsem např. naposledy použil asi opravdu před 10ti lety ;-)

Díky praxi v cizině jsem přišel asi na dobré nástroje (rozepíšu se o něčem základním v dalších článcích), používám také již dlouho metody Extreme Programming nebo Agile Modeling a veškerá eliminace chyb nastává již při analýze.

Připravuji např. recenzi nástroje, kde si uděláš obecný návrh aplikace včetně obecné databáze, no a teprve před generováním výstupu se rozhodneš, zda chceš výsledný kód mít v optimalizovaném .exe, .exe + dll, či Web verzi .dll, příp. PHP, ASP, NET, nebo třeba v Javě, kdy stačí nahrát do mobilu a je to.

Ten extrém, který zmiňuješ, tj. "portovat aplikaci z Windows na MacOS X se zachováním nativních rozhraních dané platformy" to tedy opravdu neumí a neznám nic, co by to zvládalo.

Je to ale jen proto, že 99% uživatelů na světě MacOS nepoužívá, takže tohle nikomu za nějakou prioritu nestojí ;-)

minority řekl(a)...

Aha, už jsem to pochopil. Ty si ze mě děláš srandu :-)) A já blb jsem si myslel, že to je vážná debata.

BTW: Co třeba děláš za aplikace? Je něco veřejně dostupné z toho na čem jsi dělal?

Cayman řekl(a)...

2minority: Proč srandu? S tím MacOS nebo že existují nástroje, co dokážou generovat více druhů aplikací z jednoho návrhu?

Co jsem dělal za aplikace? Z posledních třeba CRM a DW nadstavbu bankovního systému pro jednu americkou banku, portálové řešení pro speciální školy v USA, systém pro obchodování na NY Exchange, či z posledních např. grafickou Unix nadstavbu pro PuTTy, F-Secure, či ReflectionX. To jsou všechno US firemní projekty, které nepotřebuji propagovat ani se jimi chlubit.

Poslední osobní projekty dokončuji a až budou na Webu, tak o tom napíšu.

minority řekl(a)...

Předpokládám, že o firemních projektech asi nemůžeš hovořit, ale mě strašně zaujala grafická Unix nadstavba pro PuTTy. Myslíme oba to samé, tzn. SSH klienta pro Windows?

Proč se na to ptám. Kromě faktu, že mě uniká význam proč dělat grafickou nadstavbu nad Putty pro Unix, tak mě to přijde jako zajímavý technický projekt. Mohl by jsi mě na tomto příkladu trochu naznačit jaký nástroj pro generování kódu se dá použít? PuTTy už je koukám i pro Unix, takže portování si asi nedělal, ale to UI by mě zajímalo.

Cayman řekl(a)...

Ta grafická nadstavba spočívá v tom, že umožňuje správu databáze zákazníků v různých lokalitách, se seznamem všech jejich serverů a konfigurací, dle výběru otevře všechna potřebná okna na všech serverech naráz s předdefinovanými profily z dB, a umožňuje automatické provádění obecných akcí (opět definovaných v dB) na Unixu, otvírá i potřebné Web stránky na jednotlivých zákaznických portálech a automaticky vyplňuje formuláře a provádí nějaké hromadné akce, co nejdou dělat přes terminál.

Ořezanou verzi (bez těch interních zákazníkových funkcí) chci uvolnit jako obecný Freeware, tak vydrž, teď se mi toho nakupilo nějak moc k dokončení. Což je stejné jako množství rozepsaných článků zde - např. o všech těch RAD tools, co používám ;-)

Anonymní řekl(a)...

RAD tools by mě také zajímaly a našel jsem tady jen Iron Speed a asi to není všechno, co používáš? Děkuji za nějaké pokračování.
Marek

minority řekl(a)...

Uf, vůbec jsem nepochopil oč se jedná v té grafické nadstavbě nad SSH respektive PuTTy, takže se moc těším až to zveřejníš, abych se mohl případně poučit. Přečetl jsem si to totiž několikrát, ale nepřišel jsem na to jakou roli tam vlastně hraje PuTTy a proč jsi to nazval grafická nadstavba nad PuTTy :-)

To, že jsi mě neodpověděl na to nejdůležitější přikládám tomu, že to asi bude obsáhlejší, takže se těším na článek.

Cayman řekl(a)...

Vydrž, prosím, na extra příspěvek, chci tomu dát nejprve trochu kulturu, screenshots apod.

rony řekl(a)...

to bude otazka ucelu:

ak idem robit cojaviem konkurenta twitteru, tak "retezeni podminek" v PHP zrejme by som mal poznat.

ak vsak idem urobit pre firmu aplikaciu na spracovanie casti databazy, tak ocenim "rychlotvorbu".

cize vsetko je v cieli - u toho twitteru mozem ist cestou "naplacat" to rychlo ale casom dospejem k veciam, o ktorych pise misantrop (v suvislosti s bloguje), ze nakoniec nie je dolezity iba vysledok ale aj to, ci je dostatocne odolny a "odolnost" tomu dodava technikami, ktore za inych okolnosti nemusis pouzit.

naproti tomu uloha "nasosaj data, poprehadzuj ich a vyhod to ako jednoduchu tabulku + posli manazerovi" nemusi programator bojovat s eventualitami ako v prvom pripade ale ma miesto toho ine prekazky :-)

Cayman řekl(a)...

2rony: Naprosto přesné hodnocení. Je samozřejmě rozdíl, čemu se daný programátor věnuje, zda tvoří GUI pro databázi, komplexní IS, či navrhuje vývojové nástroje pro jiné programátory. To jsem měl zmínit, takže díky za doplnění.

John řekl(a)...

Takze to retezeni podminek v PHP je neco jako krajeni cibule:-)))))))

Arthur Dent řekl(a)...

Detail: To řetězení podmínek je ve skutečnosti "řetězení výjimek" a není to v zásadě nic jiného než "mírně vylepšené trasování chyb". Na to, abych v PHP udělal diskusní fórum a posílání vzkazů pro Truhlářství Pařez, na to to opravdu znát nemusím. Dokonce ani pro běžnou práci to znát nemusím. Je to z rodu oněch vlastností, co se jednou, po letech, objeví ve chvíli, ky si člověk říká: Sakra, jak tohle udělat? :)

Caymane, nemyslíš tím "nástrojem" něco jako Enterprise Architect? Moc hezká věc - nakreslím si, jak má aplikace vypadat, nadefinuju databáze, třídy, objekty - a až nakonec řeknu, jaká konkrétní DB to bude a v jakém jazyku to chci. No a za pár minut mám v jednom adresáři kostru aplikace v daném jazyce a v druhém technickou dokumentaci. ;)

Cayman řekl(a)...

Díky za vysvětlení, čím krájet tu cibuli :-) Ten Enterprise Architect je jeden z těch dobrých nástrojů, ale ještě mám něco lepšího v záloze, o čem chci napsat. Jen toho času je tak málo, což asi také znáš.

john řekl(a)...

Ja tu cibuli krajim porad nozem a porad me to bavim. Nikoho jineho bych to nenechal delat a jinak nez nozem taky ne.. ale videl jsem v televizi ruzne pomucky... ale sorry..za off topic uz se jen tak bavim na konci tydne:-)

minority řekl(a)...

Enterprise Architect je bezesporu dobrý nástroj, ale aplikaci s ním nevytvoříš. Stejně do toho kódu musíš sáhnout. A tudíž potenciální zanesení chyby ;-)

Komár řekl(a)...

Nevím jak je na tom enterprise architekt s podporou framewroků a workflow toolů, ale pokud si namaluju strukturu a workflow a to vygeneruju. Mám hodně velkou množinu aplikací pokrytu.
Repsktive většinu informačních systémů. Nepočítaje v to reporting, ale na ten jsou taky nástroje.
Velmi mocný je taky Sybase Power Designer, ale taky tomu odpovídá cena.

Anonymní řekl(a)...

Caymane, mohl bys sem prosím napsat těch Tvých 10 TOP RAD nástrojů? Zatím jsem zaznamenal na tomhle blogu konkrétní 4 a rád bych se seznámil i s ostatními. Díky.

Okomentovat