Tekst przeniesiony z like-a-geek.jogger.pl.

Po dość długiej przerwie wracam na chwilę do programowania. Fascynujące, jak szybko nauczyłem się czegoś nowego.

Jak część z Was wie, robię nową stronę, która ma mi zarobić na parówki. Jedną z funkcji będzie mapa, na której znajdą się punkty, w które można będzie kliknąć, żeby przejść na stronę opisującą to miejsce.

Taką mapę wykorzystam

Mapa od Bena, autora wtyczki o której mowa.

Dobry programista w kilka popołudni wstawi taką mapę na swoją stronę. Lepszy programista znajdzie w sieci gotowe, darmowe rozwiązanie i skorzysta z niego. Oczywiście jestem zbyt leniwy, żeby pisać coś, co jest już zrobione i przetestowane, więc skorzystam z gotowej wtyczki. Ma ona tylko jedną wadę: za parę miesięcy administrator serwera wyśle mi ostrzeżenie w postaci martwej ryby za zakatowanie serwera.

Jak to było na studiach

Na studiach bawiłem się w optymalizację kodu albo upychanie programu w jak najmniejszej liczbie znaków. Miałem wtedy dużo czasu i wrażenie, że dobry kod, to zoptymalizowany kod.

Na szczęście już mi przeszło.

Mieliśmy kiedyś zaimplementować stos w C++. Podczas gdy większość osób zaczęła dyskutować jak po zrzuceniu nowego elementu przesuwać te wredne wskaźniki, żeby nie trzeba było zbyt często alokować pamięci i [bla bla bla, dużo technobełkotu], znajomy – pracujący jako programista – oddał program składający się z jednej instrukcji:

stack<int> stos;

O rany! W C++ jest gotowy stos! Mam nawet wrażenie, że osoby odpowiedzialne za język mogły zaimplementować go lepiej niż grupa studentów podczas godzinnej laborki, a już na pewno przetestowały swoje rozwiązanie.

Prowadzący był ostro wkurzony. Zdaje się, że chciał wywalić autora programu z zajęć. No bo jak to? Przecież w tej gotowej wersji nie mamy kontroli nad pamięcią i na pewno wykonuje mnóstwo niepotrzebnego kodu, co spowalnia działanie stosu. Tak być nie może.

Wróćmy do mojej mapki

Gdybym miał spędzić kilka popołudni nad zrobieniem mojej mapy od początku, żeby tylko działała szybciej, mój czas kosztowałby co najmniej kilkaset złotych. To zwykłe marnowanie czasu. Tak się składa, że mógłbym za to kupić lepszy serwer, który poradzi sobie ze złą implementacją, w dodatku dopiero wtedy, kiedy faktycznie będzie już spory ruch. Do tego czasu niech działa w wersji na taśmę izolacyjną, a potem pomyślimy. Prowizoryczne rozwiązania sprawdzają się najlepiej.

Po zajrzeniu do kodu (bo dobrej dokumentacji brak) okazało się jednak, że działanie spowalnia algorytm, nie implementacja. Mapka przy każdym wyświetleniu każdej strony odczytuje z bazy wszystkie wpisy, żeby tylko pobrać z nich dwie liczby. Lepsza implementacja przyśpieszy działanie o kilkadziesiąt procent, podczas gdy każdy nowy odwiedzający i każdy nowy artykuł będzie znacznie szybciej zwiększał obciążenie serwera.

Żeby pozostać w klimatach studenckich, na koniec wnioski.

  1. są też źli programiści,

  2. prawdopodobnie nie chodzili na wykłady o złożoności obliczeniowej,

  3. najlepszy programista ukradnie program dobrego programisty, nie przypadkowego,

  4. gdybym miał wydać własne pieniądze na produkcję kodu, poważnie zastanowiłbym się nad Javą.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *