© 2013 All rights reserved.
21

Programátor vs. Programátor

Existuje celá řada programátorů, kteří něco dokázali a jsou na svoji práci hrdí. Stejně tak existuje celá řada programátorů, kteří jsou sice hrdí, ale v životě nic nedokázali a většinou ani nedokážou. Schopnosti některých programátorů mě někdy udivují.

Je to už nějaký čas, kdy se na mě obrátil jede zákazník, zda bych mu nemohl udělat analýzu zabezpečení jeho webové presentace a zda bych mu nemohl poradit co kde vylepšit. Analýza se týkala předně zabezpečení a optimalizace pro SEO.

Jednalo se o internetový obchod, za který zákazník zaplatil nelidovou cenu (několik set tisíc korun českých). Bohužel cena daleko předčila kvalitu webu a osobně bych chtěl potkat programátora (popřípadě team programátorů), který systém programoval.

Za cenu kterou zákazník zaplatil bych očekával precizní prácí, bohužel tomu tak nebylo a řekl bych že zákazník koupil zajíce v pytli.

Struktura kódu

Celý systém je naprogramován v PHP s podporou databáze MySQL. Bohužel bych řekl, že pan programátor si přečetl několik stránek z některé levné publikace a pustil se do programování.

V podstatě celý systém stojí na podmínce IF, kterých je v každém .php souboru kvanta, někdy i několik stovek, takže struktura kódu většinou vypadá takto:

To je jenom slabý nástin toho jak kód vypadá. Celý systém obsahuje cca 600 souborů .php, ve kterých je většinou spleteno HTML spolu s PHP a dohromady to tvoří neuvěřitelnou omáčku, která nejde ani číst, natož sem něco doprogramovat, jak bylo domluvené se zákazníkem.

Každý ze souborů obsahuje blok pro připojení k databázi, což je řešeno příkazem MySQL_Connect a zadáním údajů. Osobně bych chtěl vidět, co by se stalo, kdyby se změnily údaje pro připojení k databázi a zákazník musel tyto data měnit.

No zkrátka celá struktura kódu je velice podivná a už po nahlédnutí do některých souborů mě přecházela nálada něco v tomto systému dodělávat.

Více Administrátorů? Není problém

Kupodivu mi bylo sděleno, že systém obsahuje více administrátorů a každý má své práva. Zákazník potřeboval tyto práva u některých administrátorů změnit. Myslel jsem si že mě v systému nemůže nic překvapit a tak jsem začal zkoumat, jak jsou řešeni admini.

Bohužel jsem se spletl a překvapen jsem byl.

Systém obsahuje 11 administrátorů a pro každého je zvlášť vytvořen adresář (admin_1, admin_2, … admin_11). Každý adresář obsahuje několik desítek souborů podobné struktury jako celý systém a navíc zabezpečení heslem, které vypadá asi takto:

No tak o už bylo i na mě moc a ztrácel jsem naději, že by se se systémem dalo v budoucnu něco dělat.

SEO

Další z požadavků byl optimalizace pro SEO. Bohužel jsem opět zjistil, že tento požadavek je nesplnitelný. V celém systému jsem nenašel ani jeden (ani jeden jedinný) nadpis typu H, ale pouze tagy font, ve kterých bylo upraveno písmo.

Navíc většina souborů obsahuje několikrát vloženou hlavičku stránky, čili úpravy alespoň pro základní optimalizaci by zabrali nehorázně mnoho času.

Struktura SQL

O SQL toho programátor asi taky moc nevěděl. Struktura SQL dotazů by potřebovala v celém systému velké změny. Počínaje výběrem z databáze, kdy programátor používá zcela zásadně SELECT * FROM, končeje vkládáním proměnných do dotazů. Ani v jednom dotazu jsem nenašel alespoň náznak zabezpečení a ošetření vstupní proměnné. Stačilo by alespoň jedno použití funkce HtmlSpecialChars, nebo AddSlashes, ale ne. Vůbec nic.

Bezpečnost systému

Bezpečnost systému je kapitola sama o sobě. Vcelku se divím tomu že obchod vůbec funguje, v takovém stavu jak je napsaný.

Co se týká základů, jsem nastínil u struktury SQL. Dotazy jsou neošetřené a téměř všechny obsahují SQL Injection chyby a XSS se vyskytuje všude kam jsem se jenom podíval.
Nebyl pro mě vůbec problém zjistit si emaily všech registrovaných uživatelů a přes administrační rozhraní jim bez přihlášení například poslat email a to je opět jenom hrubý nástin toho jak to vypadá.

Závěrem

Tabulkovy layout celého webu je nepoužitelný a někdy trvá i několik vteřin než je stránka vykreslena prohlížečem.

Pro přístup k výsledkům z databáze se používá zásadně Mysql_Result, které jsou psány způsobem @mysql_result();

Spojeni PHP a HTML je kodu je velice špatné a je na úrovni školáka na střední škole.

Špatné používání Ifů v celém kódu, kdy nebyl programátor schopen nahradit jednoduchý kód například příkazem Switch:

Při výběrech z databáze je zásadně vybíráno pomocí příkazu LIKE, který je velice pomalý.
Databáze, která by obsahuje několik tisíc záznamů (tudíž není velká) má objem několik desítek mega.

Proč jsem tohle všechno popisoval?

Je až zarážející, jak neschopní lidi mohou dělat u velkých společností (nebudu jmenovat) a z toho se potom odvíjí kvalita zpracování presentací, nebo nedej bože složitějších aplikací.
Konkrétně PHP je jazyk, který je se schopný naučit každý puberťák během několika týdnů a své získané znalosti se snaží na internetu zúročovat. Stoupá mu Ego a říká si programátor.
Takový programátor nedokáže používat základy algoritmizace, nedokáže řešit jednoduché problémy a když je vyřeší tak na úkor efektivitě výsledků práce.

Říkat si PHP programátor a neznát alespoň základní rozdíly mezi PHP4.x a PHP5.x neznát základy databázi, nevědět co je to httpd.conf, nevědět co je to Register_Globals?

Tomu já neříkám programátor a osobně takové lidi nesnáším, nebo jimi spíše opovrhuji. A to se netýká pouze PHP, ale i dalších programovacích jazyků.

Jazyk PHP je krásný jazyk, ve kterém lze snadno a během krátké doby vytvořit efektivní internetové aplikace, ale nikdy se základními znalostmi.

Schopný programátor musí umět číst manuál, musí se v problematice vyznat a ne napsat tisíce řádků kódu a až potom přemýšlet zda by to mohlo fungovat. Důležitá je analýza, ale ne až po vyřešení problému, ale před jeho samotným řešením.

Programátor si před řešením problému vezme do ruky papír a tužku a zkoumá okolnosti, analyzuje, řeší problém.

Comments are closed for this page

Bohužel znám taky jednoho podobného člověka. Říká si programátor. Donedávna programoval internetové stránky v nějakém programu od Microsoftu a jeho jediné umění bylo, že kliknul na tag myší a dopsal text, co se má zobrazit. Nyní se bohužel ještě začal "věnovat" CSS a PHP a tak začala noční můra. Jeho ego stoupá a doufá, že bude dělat nějaké velké zakázky a cosi kdesi….

Jo. Ten microsofťácký program byl FrontPage – nějak jsem si nemohl vzpomenout.

K obsahu a rozčarování nad úrovní práce asi není co dodat.. Jenom mě v závěru upoutalo, že by se mělo jednat o výtvor nějaké větší firmy? Každopádně problém je také v tom, že stále velké procento firem při výběru dodavatele hledí především na cenu. Pak tedy mají řešení, jaké si vybrali, zaplatili, převzali – zaslouží. Nevím, jestli článek měl vyznít jako posměšek programátorovi – mě to tak místy přišlo.. Pak by měl patřit taky samotný firmě, která toto dílo provozuje – business je o rozhodnutích, pokud někdo chce podnikat na webu a nic o tom neví, nemůže očekávat úspěch a měl by pracovat sám na sobě.

článek není určitě posměškem nad samotným programátorem, ale spíše by měl vyjádřit můj údiv nad prací, jakou jsou schopni někteřé společnosti prodávat.
Pokud se podívám na reference firmy, tak je jich opravdu dost, a když si představím, že jsou všechny ve stejném stavu, tak je mi spíše líto těch zákazníků, ale bohužel s tim nic neudělám.

jen drobnost, změň "by jsem" na "bych", vypadá to nehezky 😉

ja som len nepochopil, vyhodu pouzitia switch, namiesto tych par ifov za sebou? tiez robim pre velku spolocnost, takze chcem sa zlepsit 🙂

Napsal jsi "pekny" clanek o tom, ze "programatori" i "pisalkove" muzou byt dost neschopni. Co vic by jsem ti na to jenom mohl rict? 😉

Nebyt bezpecnostnich chyb a par dalsich "drobnosti", dalo by se rici, ze pouzili kvalitni a hlavne, jak je videt, funkcni obfuskator 🙂

No a to je prave ta algoritmizace o ktere jsem psal.
Pokud napises hromadu Ifů za sebou musí parser, který stránku zpracuje při každém jejím načtení, projít všechny tvé podmínky a všechny podmínky vyhodnotit. Popřípadě, alespoń kdyby byly použity cykly s Elese IF, tak by to možna bylo trochu rychlejši.
Narozdil od toho Switch je přímo optimalizovaný pro situaci, kdy může nabívat jedna proměnná více hodnot a je schopný v mnohem kratší době tuto podmínku vyhodnotit.
Schválně si zkus napsat příklad, kdy budeš vyhodnocovat několik za sebou jdoucích Ifů. Tuto podmínku si provedeš třeba 10 000x za sebou a zjisti si jak dlouho to trvalo.
Potom si udělej to stejné s použítím příkazu Switch. Dostaneš se na čas maximálně jedné pětiny (zkoušel jsem to na localhostu) z předchozího času.
Jak jsem psal, není důležité napsat kvanta zdrojového kódu, ale přemýšlet u jeho psaní.

Diky, opraveno. Čeština a já, no 🙂

Uprimne zrovna kvuli pouziti switch si nedelam nasili hlavne kvuli prehlednosti, ta syntaxe s break mi prijde jako z Basicu. Rozdil zpracovani neni petinovy, ale pouze tretinovy a v obou pripadech se jedna o desetitisiciny mikrosekundy. Mnohem dulezitejsi je optimalizace MySQL dotazu (treba i na Netagent.cz jim nevadi cas selektu radove v sekundach) nez nejaky switch nebo if.

sorry, melo tam byt jedno nebo druhe. Asi ty mikrosekundy…

ahoj, mas tu fajn clanky, tento nie je vynimkou. stale si pri takychto clankoch hovorim, ze preco nepracujem v nejakej velkej spolocnosti, ked take individua zjavne pracuju (jo, dokonca pouzivam oop v php obcas, ci join v mysql 🙂 ).

vdaka za clanky!

Jo jo, mas pravdu, jsou to male cisla, ale představ si že takových bloků kódu je v každém souboru několik desítek a to už se potom ve výsledku taky projevuje.
Do toho cyklu IF se porad navážím z toho důvodu, že ve zdrojovém kódu taky pomalu nic jiného nenajdete.

Mám podobnou zkušenost – zákazník chtěl upravit eshop, kde předchozí patlal pro vyber třeba 100 polozek z databaze používal tuto kontrukci:
for($i=0;$i<100;$i++) {
mysql pripojeni;
mysql dotaz na jednu položku (limit $i, 1);
vykresleni html, table
}


bohužel je to časté. Občas se stane že převezmete právě takovou práci a čerte raď 🙁

omg tak to je neuveritelne 😀 inac dobry clanok

Otázka je zda takovou práci můžete převzít. Teď nemám na mysli gumové rukavice ale autorská práva. To že je v PHP otevřený kód ještě neznamená že si s ním můžete dělat co chcete.

Vsadim se s vami o co si reknete (!) ze ti neschopni patlalove pisici scripty derave jak reseto a neznajici absolutne nic jsou UZIVATELE WINDOWS, zatimco ti schopni profesionalove (jako jsem ja) uzivaji GNU/Linux =)

Windows -> make yourself think like the retarded idiot, click, click, …

Nebo lidi, kteří rádi hrají…..

Tak to máš asi v hlavě rybičku – wůbec netuším, proč existůjí tábory windows vs. Linux – to je jako kdybych řekl, že ridiči, kteří jezdí ve škodovkách nemůžou být profesionálními řidiči oproti řidičům, kteří pilotují BMW… snad každý je odborník na něco, ne?

Další z nadrženejch zoofilů Linuxu.
A zaachi to asi taky nemá v hlavě v pořádku, taky někdy začínal a taky jeho kód stál za 2 kuloví a pochybuji, že když dostal první kačku za svou aplikačku, že to bylo v době, když už o sobě mohl tvrdit, že je programátor – tedy po několika letech…

Na druhou stranu, pan majitel firmy ať nedělá businnes, když to neumí – koho si vybral – toho si vybral…

Fakt nesnáším machry "programátory", kteří se povyšují nad m=ně zkušenými a přitom nebyli o nic lepší – milí kolegové – simpatizujete s tímto článkem => hnusíte se mi i pochybuj te o své zdravé mysli…

Tak tohle je opravdu už extrém – no, ten člověk co to psal asi neměl moc potuchy o nějaké architektuře aplikačce 😉

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836