Mogłoby się wydawać, że nie ma nic prostszego niż pisanie stron WWW. Tak, są edytory WYSIWYG, PHP jest prosty i tak dalej. Sama przyjemność. Ostatnio uświadomiłem sobie, że programista WWW ma najtrudniej ze wszystkich programistów. Nie wystarczy znać jeden język, czy technologię, trzeba użerać się ze standardami, a właściwie ich niespełnianiem przez przeglądarki, nie można całego kodu debugować w jednym miejscu. Ale po kolei:
Programista WWW:
- musi znać:
- co najmniej jeden język server-side, na przykład PHP
- co najmniej jeden język client-side, choć w sumie można poprzestać na JavaScript
- HTML ze wszystkimi jego zawiłościami jak DOM i tak dalej
- CSS
- SQL aby móc coś z bazy danych wyciągnąć lub włożyć
- podstawy projektowania interfejsów
- różnice w interpretacji standardów przez przeglądarki
- powinien znać:
- technologie łączące serwer i klienta lub poszczególne moduły, takie jak:
- co najmniej dwa debugery i profilery: jeden dla serwera drugi dla klienta
- musi orientować się w:
- obsłudze baz danych aby móc bazę utworzyć
- najnowszych rozwiązania w tej dynamicznej dziedzinie
- konfiguracji serwera WWW
- konfiguracji serwera baz danych
- musi użerać się z:
- bełkotem marketingowym typu Web2.0
- tym cholernym IE
- tym nieszczęsnym FF
- tą dziwaczną Operą której nikt nie używa
- małym wyborem jeśli chodzi o dojrzałe narzędzia programistyczne
- że nie może debugować całej aplikacji w jednym miejscu, bo część się dzieje po stronie serwera, a część klienta, i nie są to te same języki
- standardy sobie, a przeglądarki sobie
- musi zdawać sobie sprawę, że:
- jego dzieło mogą zobaczyć miliony
- zawsze znajdą się malkontenci
- za pół roku wyjdzie nowa wersja przeglądarki i jego strona może nie działać
- zawsze znajdzie się przeglądarka na której coś nie działa jak powinno
Nie jest to pełna lista. To tylko te rzeczy jakie przyszły mi przed chwilą do głowy
Szczerze? Mamy przesrane….
Tak naprawdę “zaokrąglone rogi” są tylko pretekstem do tego posta. Ale zacznijmy od początku. W zeszłym tygodniu coś mi się ubzdurało, aby pewną aplikację internetową nad która pracuję ponad 2 lata troszkę odmłodzić i zrobić trendy. Innymi słowy dodać zaokrąglone rogi. Wiadomo, produkt sprzedają hasła typu “Web 2.0″ i inne tego typu marketingowe bzdury. Poczytałem, pobrałem bibliotekę JS Nifty i zabrałem się do roboty. Chwila błądzenia i proszę, div się ślicznie zaokrąglił… Super można by powiedzieć. Chwilę później zaokrąglił się kolejny div i tak dalej. Popatrzałem na to z dystansu, policzyłem ile czasu zajęłoby przerobienie całej aplikacji i przywróciłem poprzednią wersję z CVS. Może kiedyś wrócę do tego pomysłu, ale jeszcze nie teraz: za dużo “bierzączki” i za mało czasu.
Przechodzimy do sedna. Jeśli ktoś się nie interesował tym jak powstają zaokrąglone rogi na stronach WWW, to wyjaśniam: szkół jest kilka:
- z obrazkami
- z ręcznym dodawaniem elementów przed i po zaokrąglanym elementem, które to elementy mają inną szerokość i “udają” zaokrąglenie
- JavaScript automatycznie renderujący dodatkowe elementy po załadowaniu strony
- niestandardowe wpisy w CSS które działają tylko w wybranych przeglądarkach
- i pewnie coś innego też by się znalazło
Anyway… Tyle sposobów, a każdy mniej elegancki od poprzedniego. Pikanterii sprawie dodaje fakt, że sprawę zaokrąglonych rogów rozwiązuje CSS3. Ok, rozumiem, nie ma jeszcze wersji finalnej CSS3. Ale…. Założenia CSS3 to który rok? 2001? Przez te cholera jasna 7 lat przeglądarki mogłyby się dorobić obsługi zaokrąglonych rogów!! Skoro całość może załatwić kilka kilobajtów JavaScript, to jaki to problem przenieść to do silnika przeglądarki…. szkoda słów i tylko żal zadek ściska….
Tak się złożyło, że od prawie trzech lat jestem głównym programistą webowej części dość dużej aplikacji biznesowej silnie kastomizowanej pod klientów. Do lutego byłem też jedynym programistą webowym tej aplikacji. No i wiadomo jak to jest, gdy programista jest jeden, a pracy pełno i zwykle na wczoraj: kod ma powstać i działać! Może być bałaganiarski, brzydki. Grunt, że działa. No i kod działa.
Od lutego jest już nas dwóch i pół pracujących nad tą aplikacją: Grzegorz, Wojtek Praktykant i Ja. Pojawiły się dni bez nawału pracy, można więc trochę popracować nad kodem. I starym i nowym. I jakoś zeszło na programowanie obiektowe (większość kodu napisana strukturalnie, wiem, nie bić!). Z programowaniem obiektowym miałem styczność na studiach. Niestety tam nikt nie był na tyle dobrym nauczycielem, aby pokazać, że obiektowo może być lepiej niż strukturalnie (a strukturalnie programuję pół mojego życia i na studia poszedłem mają wyrobione nawyki w tej dziedzinie). No i pisałem strukturalnie. W zeszłym tygodniu coś mnie jednak tknęło, aby przypomnieć sobie obiektówkę. I był to strzał w dziesiątkę. Przez 4 dni opracowałem klasy bazowe dla kilku funkcji aplikacji i teraz dziwię się, czemu wcześniej nie pisałem obiektowo. To co przedtem powstawało w kilka dni teraz można zrobić w kilka godzin. Przykład: rejestr KP i KW. Funkcjonalnie to samo, tyle, że na odwrót. Raz plus, raz minus. KP powstały ze dwa lata temu, KW trzeba było dorobić teraz. W jeden dzień przerobiłem KP na klasy i nagle się okazało, że KW robi się w 15 minut. Wystarczy nadpisać kilka właściwości klasy bazowej i jedną metodę. Może odkrywam Amerykę, ale jak dla mnie rewelacja! Coś czuję, że więcej już nie będę pisał strukturalnie. Za dużo czasu można w tym stracić i za dużo bałaganu w kodzie wygenerować!
Jakoś tak się potoczyło moje życie, że skończyłem jako programista webowski. Ok, nie jest tak źle jak się może wydawać. Mam to szczęście, nie klepię stron internetowych (no dobra, czasami klepnę jakiś engine, ale tylko czasami, grafiki już nie ruszam) a “portale korporacyjne”, “aplikacje intranetowe” i inne takie. Czyli w zasadzie rzeczy które robią coś konkretnego i w jakiś tam sposób komuś pomagają w prowadzeniu biznesu. W sumie, to ostatnio nawet już coraz mniej programuję, mam od tego zespół, a coraz więcej czasu pochłania mi pisanie dokumentacji i zarządzanie zespołem.
Wracając do tematu. Już jakiś czas temu znalazłem gdzieś taki o to diagram:

I im dłużej na niego patrzę, tym bardziej dochodzę do wniosku, że osoba która go stworzyła starła zęby na tworzeniu stron WWW. Czysta prawda. W tym całym biznesie związanych w programowaniem WWW więcej czasu jest marnowane na głupoty i nieprzestrzeganie standardów W3C przez programistów przeglądarek niż na cokolwiek innego. Szczególnie tyczy się to IE. I pomyśleć, że ma wejść IE8 z 3 enginami renderującymi. Już się boję….