{"id":105,"date":"2007-03-13T21:51:14","date_gmt":"2007-03-13T20:51:14","guid":{"rendered":"http:\/\/eriz.pc-inside.org\/weblog\/zaby-na-aby-aby-a-rak-byle-jak-wspolczesny-programista-105.html"},"modified":"2007-04-23T14:59:17","modified_gmt":"2007-04-23T13:59:17","slug":"zaby-na-aby-aby-a-rak-byle-jak-wspolczesny-programista","status":"publish","type":"post","link":"https:\/\/eriz.pcinside.pl\/weblog\/zaby-na-aby-aby-a-rak-byle-jak-wspolczesny-programista-105.html","title":{"rendered":"\u017baby na &#8222;aby aby&#8221;, a rak &#8211; byle jak &#8211; wsp\u00f3\u0142czesny programista?"},"content":{"rendered":"<p>Programowanie, programowanie, programowanie&#8230; OK, znajomo\u015b\u0107 j\u0119zyka, to podstawa, algorytmy s\u0105 w\u0142a\u015bciwie najwa\u017cniejsze. Kiedy\u015b &#8211; assembler, kilkana\u015bcie KB (kilobajt\u00f3w) dost\u0119pnej pami\u0119ci, bezpo\u015bredni dost\u0119p do procesora. Dzisiaj &#8211; C#, C\/C++, Delphi, GB pami\u0119ci trwa\u0142ej i swobodnej. Same procki du\u017co szybsze od tych &#8222;pierwotnych&#8221;. Niby wszystko jest w porz\u0105dku, ale czy do ko\u0144ca?<\/p>\n<p><strong>Jak si\u0119 rozwin\u0119\u0142a osoba programisty?<\/strong><\/p>\n<p><!--more--><\/p>\n<p>Hmm&#8230; Dobre pytanie. Pocz\u0105tkowo &#8211; komputery istnia\u0142y jako zabawki (drogie zabawki) dla zapale\u0144c\u00f3w. Wtedy du\u017co pr\u0119\u017cniej funkcjonowa\u0142a tzw. scena komputerowa. Dzi\u015b r\u00f3wnie\u017c ma si\u0119 dobrze, ale nie o tym mowa. Mianowicie, w\u00f3wczas dysponowano, jak ju\u017c wspomnia\u0142em, stosunkowo sk\u0105pym sprz\u0119tem, na kt\u00f3rym liczy\u0142 si\u0119 dos\u0142ownie ka\u017cdy bajt. Co ciekawe, twory \u00f3wczesnych programist\u00f3w niejednokrotnie wprawia\u0142y w zachwyt pomimo sprz\u0119towej &#8222;biedy&#8221;. Obecnie mamy do dyspozycji mas\u0119 bibliotek, DirectX, OpenGL tyle, \u017ce g\u0142owa ma\u0142a.<\/p>\n<p>Do czego zmierzam? D\u0142ugi wst\u0119pniak, ale nie bez powodu. Do napisania tej notki zainspirowa\u0142 mnie <a href=\"http:\/\/0x1fff.com\/moje-spojrzenie-na-przyszlosc-pisania-aplikacji-2007.html\">wpis<\/a> Sinxa. Kiedy\u015b, przed umieszczeniem ka\u017cdej instrukcji, zastanawiano si\u0119 trzy razy, zanim dodano jak\u0105\u015b do kodu programu. Tak nawiasem, praktycznie wszystko by\u0142o pisane w assemblerze pod stare, dobre x86 (mam tu na my\u015bli 286, 386, 486, 486DX2 <img src=\"https:\/\/eriz.pcinside.pl\/weblog\/wp-includes\/images\/smilies\/e_laugh.png\" alt=\":D\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> &#8211; ten ostatni posiadam) dop\u00f3ki nie pojawi\u0142y si\u0119 nowe procesory (mam tu na my\u015bli Pentium, itp). Musz\u0119 tu wyrazi\u0107 swoje uznanie \u00f3wczesnym tw\u00f3rcom za posiadan\u0105 wiedz\u0119. \u017badn\u0105 rewelacj\u0105 by\u0142a sytuacja, w kt\u00f3rej trzynastoletni geecy znali na pami\u0119\u0107 wszystkie rejestry procesor\u00f3w i pok\u00e9monizm nie by\u0142 im w g\u0142owach. Blebleble, znowu off-top. Co mamy dzisiaj?<\/p>\n<p>Typowe podej\u015bcie wsp\u00f3\u0142czesnego programisty XXI wieku, to napisa\u0107, aby dzia\u0142a\u0142o. Walnie jak\u0105\u015b dodatkow\u0105 zmienn\u0105 w kodzie, bo tak \u0142atwiej; po co si\u0119 m\u0119czy\u0107, skoro jeszcze tyle pami\u0119ci pozosta\u0142o. Jak to mawiaj\u0105 <cite>&#8222;grosz do grosza, a b\u0119dzie kokosza&#8221;<\/cite> &#8211; zbierze si\u0119 wi\u0119cej takich zmiennych, a oka\u017ce si\u0119, \u017ce po\u0142owa zajmowanych zasob\u00f3w, to te &#8222;u\u0142atwiacze&#8221;. Jak to mo\u017ce si\u0119 odbi\u0107 na wydajno\u015bci? Prosty przyk\u0142ad &#8211; XGL vs. Aero.<\/p>\n<p>Pozornie mo\u017ce jest to z\u0142e por\u00f3wnanie, ale&#8230; Oba pakiety s\u0142u\u017c\u0105 do &#8222;wypasienia&#8221; \u015brodowiska pracy. XGL &#8211; w Pingwinku, Aero &#8211; M$ Vista. Co mamy? O tym, jak XGL jest przebajerzony, to chyba t\u0142umaczy\u0107 nie trzeba (a kto nie wie, niech <a href=\"http:\/\/youtube.com\/results?search_query=xgl&#038;search=Search\">sobie obejrzy<\/a> filmiki na YouTube). Aero &#8211; \u015blimak, \u017c\u00f3\u0142w czy co tam jeszcze nawet przy 1GB RAM-u. A XGL? Nawet przy 1\/8 tego, przy takim samym akceleratorze chodzi w miar\u0119 przyzwoicie. O czym my w og\u00f3le rozmawiamy? <cite>&#8222;Po co si\u0119 m\u0119czy\u0107? Mo\u017ce nikt nie zauwa\u017cy?&#8221;<\/cite> Ot, takie dziwne, <strong>IDIOTYCZNE<\/strong> podej\u015bcie.<\/p>\n<p>Co mnie popchn\u0119\u0142o do napisania tej notki? Do\u015bwiadczenia? Podej\u015bcie innych os\u00f3b? W\u0142a\u015bciwie, to jedno i drugie (a przede wszystkim drugie). Mia\u0142em nieszcz\u0119\u015bcie pracowa\u0107 z aplikacjami, kt\u00f3rych forma przerasta(\u0142a) tre\u015b\u0107. Wi\u0119kszo\u015b\u0107 z nich zamieni\u0142em na jakie\u015b l\u017cejsze odpowiedniki. Ale drugi aspekt &#8211; podej\u015bcie&#8230; W ci\u0105gu paru dni odby\u0142em kilka interesuj\u0105cych rozm\u00f3w czy te\u017c dyskusji.<\/p>\n<p>Najbardziej trzeba si\u0119 &#8222;przyczepi\u0107&#8221; do pocz\u0105tkuj\u0105cych, nie za sam fakt, i\u017c s\u0105 &#8222;zieloni&#8221;. Ka\u017cdy przecie\u017c nim by\u0142 albo jeszcze jest. Z racji zaj\u0119cia, najwi\u0119cej czasu po\u015bwi\u0119cam PHP, itp. Ot\u00f3\u017c, Rozmawiam z osobami, kt\u00f3re dopiero wkraczaj\u0105 w \u015awiat S\u0142onia (nie, nie aluzja do szybko\u015bci, tylko do logo :D). Te osoby zaczynaj\u0105 zazwyczaj (zawsze) od kurs\u00f3w opublikowanych w Sieci. Tylko jest jeden, ma\u0142y problem: manual &#8211; <cite>&#8222;co\u015b takiego jest&#8221;<\/cite>. W podr\u0119czniku PHP, opr\u00f3cz samych obja\u015bnie\u0144 dzia\u0142ania funkcji, mo\u017cna si\u0119 dosy\u0107 cz\u0119sto natkn\u0105\u0107 na uwagi redaktor\u00f3w dotycz\u0105ce wydajno\u015bci. Praktycznie zawsze jest wskazana wydajniejsza &#8222;alternatywa&#8221;. Nast\u0119pnie, komentarze pod w\u0142a\u015bciwym tekstem (dost\u0119pne tylko w bardziej <a href=\"http:\/\/pl2.php.net\/get\/php_manual_chm.zip\/from\/a\/mirror\">rozbudowanej, angielskiej wersji podr\u0119cznika w formacie CHM<\/a> lub w <a href=\"http:\/\/php.net\/docs.php\">manualu on-line<\/a>). Niby nic, ale cz\u0119sto s\u0105 tam bardzo warto\u015bciowe wskaz\u00f3wki. Do czego zmierzam &#8211; ludzi cechuje lenistwo, przede wszystkim &#8211; lenistwo i jeszcze raz lenistwo, kt\u00f3re objawia si\u0119 np. takimi kwiatkami:<\/p>\n<p><code lang=\"php\">$query = \"select * from dodaj\";<br \/>\n$result = mysql_query($query);<br \/>\n$num_results = mysql_num_rows($result);  <\/p>\n<p>print \"<\/p>\n<p>Ilo\u015b\u0107: \".$num_results.\"<\/p>\n<p>\";<br \/>\nfor ($i=0; $i <$num_results; $i++)  {  \n\t$row = mysql_fetch_array($result);    \n\tprint stripslashes($row[\"ID\"]);\n\tprint \". \"; \n\t$zmienna = stripslashes($row[\"ID\"]);\n\t?><br \/>\n\t<a href=\"plik.php?zmienna=<?PHP print($zmienna); ?>\"><br \/>\n\t<?\n\tprint stripslashes($row[\"nazwa\"]);\n\t?><\/a><br \/>\n\t <?    \n\tprint \"<br \/>\";<br \/>\n}<\/code><\/p>\n<p>Sprawdzamy stron\u0119 podr\u0119cznika dla funkcji <a href=\"http:\/\/php.net\/print\">print<\/a>. Co znajdujemy w komentarzach? Ano, kto\u015b pofatygowa\u0142 si\u0119 <a href=\"http:\/\/pl.php.net\/manual\/pl\/function.print.php#66392\">przetestowa\u0107 wydajno\u015b\u0107<\/a> poszczeg\u00f3lnych funkcji wykonuj\u0105cych w sumie to samo (w uog\u00f3lnieniu!).<\/p>\n<p>Wychodzenie z bloku PHP dla wypisania tylko trzech znak\u00f3w, dwukrotne przetwarzanie tej samej warto\u015bci, print zamiast echo, wyci\u0105ganie z bazy wszystkich p\u00f3l zamiast tylko dw\u00f3ch potrzebnych&#8230;<\/p>\n<p>Jak by to mog\u0142o wygl\u0105da\u0107?<\/p>\n<p><code lang=\"php\">$query = 'select `ID`, `nazwa` from dodaj';<br \/>\n$result = mysql_query($query);<br \/>\n$num_results = mysql_num_rows($result);  <\/p>\n<p>echo '<\/p>\n<p>Ilo\u015b\u0107: '.$num_results.'<\/p>\n<p>';<br \/>\nwhile($row = mysql_fetch_array($result)){<br \/>\n\techo $row['ID'].'. <a href=\"radio.php?zmienna='.$row['ID'].'\">'.$row['nazwa'].'<\/a><br \/>';<br \/>\n}<\/code><\/p>\n<p>Wida\u0107 r\u00f3\u017cnic\u0119? A co wystarczy\u0142o? Przede wszystkim, lektura manuala&#8230;<\/p>\n<p>Zerkam czasem na <a href=\"http:\/\/forum.php.pl\">Polskie Forum PHP<\/a> (poznasz kto jest kim po awatarze :)). Kilka dni temu powsta\u0142 <a href=\"http:\/\/forum.php.pl\/mysqlphp-Prosba-o-wytlumaczenie-dziaania-prostego-kodu-t63967.html\">w\u0105tek<\/a>, kt\u00f3rego autor prosi o wyt\u0142umaczenie pewnego kawa\u0142ka kodu. Gadka-szmatka, wskazanie odpowiednich stron w manualu. Par\u0119 post\u00f3w, temat zszed\u0142 na wydajno\u015b\u0107 i pewnym momencie, u\u015bwiadamiania owieczka napisa\u0142a:<\/p>\n<blockquote>\n<p>Dzieki za uwage, a nauczy\u0142 Mnie tak kurs php + mysql<\/p>\n<\/blockquote>\n<p>&#8230; &#8211; To jest m\u00f3j komentarz. Przepraszam, ale je\u015bli kto\u015b pisze np. prac\u0119 dyplomow\u0105, to opiera si\u0119 wy\u0142\u0105cznie na jednym \u017ar\u00f3dle (cho\u0107 mog\u0119 si\u0119 myli\u0107 ;P)? A g\u0142owa na karku, to co? Napisz\u0105 &#8222;skocz w ogie\u0144&#8221; i co wtedy?<\/p>\n<p>Ostatnio zapanowa\u0142a moda na pisanie o czym\u015b, o czym si\u0119 nie ma zielonego poj\u0119cia. Kolega <a href=\"michno.pc-inside.org\/blog\">Michno<\/a> rezyduje na <a href=\"http:\/\/webtips.pl\">forum webtips.pl<\/a>. Pewnego razu pojawi\u0142 si\u0119 <a href=\"http:\/\/www.webtips.pl\/index.php?showtopic=14671\">temat<\/a> o HTML-u. Okaza\u0142o si\u0119, \u017ce go\u015b\u0107 robi kurs, a nie ma poj\u0119cia o wr\u0119cz podstawowych rzeczach. Dzi\u0119ki takim przyk\u0142adom zaczynam si\u0119 coraz bardziej utwierdza\u0107 w przekonaniu, \u017ce trzeba wprowadzi\u0107 cenzur\u0119 w Internecie (mam na my\u015bli moderowanie tre\u015bci pod wzgl\u0119dem merytorycznym).<\/a><\/p>\n<p>Podejrzewam, \u017ce wspomniany przez autora tematu na <acronym title=\"Polskie Forum PHP\">PFP<\/acronym> kurs PHP by\u0142 podobnego pokroju. To, \u017ce internet zapewnia <strong>POZORN\u0104<\/strong> anonimowo\u015b\u0107 nie oznacza, \u017ce mo\u017cna od razu pisa\u0107 bzdury.<\/p>\n<p>Od\u0142amem jest r\u00f3wnie\u017c zjawisko, kt\u00f3re mo\u017cna opisa\u0107 mniej wi\u0119cej tak: &#8222;nie znam si\u0119 na samochodach, ale umiem robi\u0107 kotlety&#8221;:<br \/>\n<a href=\"http:\/\/www.webtips.pl\/index.php?showtopic=14671\">z webtips.pl<\/a> (kontekst znajomo\u015bci HTML-a):<\/p>\n<blockquote>\n<p>Sugeruje dowiedzie\u0107 si\u0119, \u017ce dobrze o tym wiem i znam dobrze php.<\/p>\n<\/blockquote>\n<p><a href=\"http:\/\/forum.php.pl\/index.php?s=&#038;showtopic=63967&#038;view=findpost&#038;p=339811\">z forum.php.pl<\/a><\/p>\n<blockquote>\n<p>Mo\u017ce do\u015bwiadczenie w PHP + MySQL mam niewielkie to fakt, beginner jestem w tych dziedzinach.<br \/>\nW ka\u017cdym razie na serwerach znam si\u0119 do\u015b\u0107 dobrze, jestem posiadaczem sieci osiedlowej 100 os\u00f3b i troche znam \u017cycie TCP\/IP<\/p>\n<\/blockquote>\n<p>Ale co ma, w tym wypadku, piernik do wiatraka?<\/p>\n<p>Powracaj\u0105c do g\u0142\u00f3wnego tematu:<\/p>\n<blockquote>\n<p>Tak, ale ja mialem na mysli, ze czas generowania strony, nie ma wiekszego znaczenia przy czasie przesy\u0142u danych.<\/p>\n<p>To tak jak masa elektronu do neutronu, ma tak niewielka, ze sie nawet nie liczy.<\/p>\n<\/blockquote>\n<blockquote>\n<p>Siedzimy Sobie przed kompem klikamy na jak\u0105\u015b strone w php. Ile czekamy?<\/p>\n<p>czas_oczekiwania = x + y + z <\/p>\n<p>x &#8211; czas przesy\u0142u zapytania od nas do serwera<br \/>\ny &#8211; czas generowania strony (zapytania do bazy etc.)<br \/>\nz &#8211; czas przesy\u0142u odpowiedzi od serwera do nas<\/p>\n<p>Gdzie &#8222;y&#8221; to warto\u015bci rz\u0119du setnych i tysi\u0105cznych sekundy, a &#8222;x&#8221; i &#8222;z&#8221; to juz zalezy od tego przez ile routerow przechodzi po\u0142\u0105czenie i jak\u0105 mamy pr\u0119dko\u015b\u0107 tego po\u0142\u0105czenia.<\/p>\n<\/blockquote>\n<p><strong>Mike_mech<\/strong> (spokojnie mog\u0119 powiedzie\u0107, \u017ce ekspert w dziedzinie projektowania aplikacji WWW w PHP) skwitowa\u0142:<\/p>\n<blockquote>\n<p>Najpro\u015bciej m\u00f3wi\u0105c: bardzo sie mylisz, dlatego, \u017ce bagatelizujesz bardzo wiele czynnik\u00f3w. B\u0105d\u017a po prostu ich nie znasz<\/p>\n<\/blockquote>\n<p>\u015awi\u0119te s\u0142owa, trzeba w ramki oprawi\u0107. Ale, szczerze m\u00f3wi\u0105c, nie rozumiem podej\u015bcia:<\/p>\n<blockquote>\n<p>Kurs, nie zmienie go, bo jest to kurs praktyczny i sa dosc ciekawe przyk\u0142ady. Nawyki z\u0142e i dobre zawsze mozna zmienic, wiec jakos dam rade.<\/p>\n<\/blockquote>\n<p>Tylko po co dwa razy traci\u0107 czas i walczy\u0107 p\u00f3\u017aniej z samym (sam\u0105) sob\u0105?&#8230; Wtedy, nie wszystkie nawyki uda si\u0119 zmieni\u0107&#8230;<\/p>\n<p>Kolejny cytat:<\/p>\n<blockquote>\n<p>Czas y jest zale\u017cny od kodu, jak i od maszyny fizycznej (serwera), kt\u00f3ra parsuje dany kod. Je\u017celi y by\u0142by rz\u0119du 5 sec, to nie znak, \u017ce kod \u017ale napisany (nie zawsze), tylko, \u017ce trzeba serwer lepszy kupi\u0107 i tyle.<\/p>\n<\/blockquote>\n<p>Najgorsze jest to, \u017ce takie podej\u015bcie reprezentuj\u0105 nie tylko pocz\u0105tkuj\u0105cy. Tych bardziej do\u015bwiadczonych r\u00f3wnie\u017c sta\u0107 na tego typu teksty. Rozbraja mnie podej\u015bcie: &#8222;Po co si\u0119 m\u0119czy\u0107, skoro co\u015b dzia\u0142a? Nie b\u0119d\u0119 marnowa\u0142(a) na to czasu.&#8221; Albo: &#8222;jak b\u0119dzie wolno chodzi\u0107, to si\u0119 zmieni\/ulepszy serwer&#8230;&#8221; Fakt, projekty, itp. wykonuje si\u0119 na czas. Ale czy nie mo\u017cna od pocz\u0105tku robi\u0107 jak trzeba? Owszem, wymaga to wi\u0119kszego samozaparcia, ale jest mo\u017cliwe. Powraca tu sytuacja tzw. kartki papieru: Co trzeba zrobi\u0107? Co mamy zrobi\u0107? Jakie jest najoptymalniejniesze rozwi\u0105zanie. Dlaczego kartka papieru? Kiedy\u015b pad\u0142o powiedzenie:<\/p>\n<blockquote>\n<p>Kartka papieru, to wynalazek przestarza\u0142y &#8211; nic si\u0119 samo nie policzy, nie mo\u017cna wyci\u0105\u0107 ani wklei\u0107. Ale ma jedn\u0105, wielk\u0105 zalet\u0119: posiada nieograniczone mo\u017cliwo\u015bci formatowania.<\/p>\n<\/blockquote>\n<p>Komputer, w tym wypadku, tylko pogorszy spraw\u0119. Rozrysowa\u0107, wybada\u0107, nie ba\u0107 si\u0119 pyta\u0107 o rady innych. Nawet najlepsi si\u0119 myl\u0105. Na pewno nie poruszy\u0142em wszystkich kwestii problemu. Ale mam nadzieje, i\u017c u\u015bwiadomi\u0142em cho\u0107by 1 (s\u0142ownie: jednej) osobie dlaczego tak, a nie inaczej&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Programowanie, programowanie, programowanie&#8230; OK, znajomo\u015b\u0107 j\u0119zyka, to podstawa, algorytmy s\u0105 w\u0142a\u015bciwie najwa\u017cniejsze. Kiedy\u015b &#8211; assembler, kilkana\u015bcie KB (kilobajt\u00f3w) dost\u0119pnej pami\u0119ci, bezpo\u015bredni dost\u0119p do procesora. Dzisiaj &#8211; C#, C\/C++, Delphi, GB pami\u0119ci trwa\u0142ej i swobodnej. Same procki du\u017co szybsze od tych &#8222;pierwotnych&#8221;. Niby wszystko jest w porz\u0105dku, ale czy do ko\u0144ca? Jak si\u0119 rozwin\u0119\u0142a osoba programisty?<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[43],"class_list":["post-105","post","type-post","status-publish","format-standard","hentry","category-tworzenie-www-php","tag-kodowanie"],"_links":{"self":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/comments?post=105"}],"version-history":[{"count":0,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/posts\/105\/revisions"}],"wp:attachment":[{"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/media?parent=105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/categories?post=105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eriz.pcinside.pl\/weblog\/wp-json\/wp\/v2\/tags?post=105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}