W wielu różnych kursach programowania, pierwszym przykładowym programem jest program „Hello world”. Celem tego programu jest po prostu wyświetlenie tekstu na ekranie. Na tej stronie można znaleźć „Hello world” napisane w ponad 400 różnych językach programowania, wliczając w to Brainfuck oraz Whitespace… Ale tak naprawdę to, jak napiszemy ten program, zależy nie tylko od języka programowania – zależy to również od osoby, która go pisze. W praktyce wiele osób podchodzi do pisania „Hello world” – a także do pisania wielu innych, bardziej poważnych programów… – na wiele, kompletnie od siebie różnych, sposobów.
Zobaczmy, jak to tej pracy zabiera się kilka różnych osób…
Architekt Teoretyk. Wykonuje studium porównujące plusy i minusy napisania „Hello world” w dwunastu różnych technologiach. Wybiera teoretycznie najlepszy język i framework. Udowadnia dlaczego ta właśnie technologia będzie najlepsza. Ale samo napisanie tego programu zostawia już innym, bo to zadanie trywialne i kompletnie nieinteresujące.
Przecieracz Szlaku. Zabiera się do pracy z wielkim entuzjazmem i tworzy prototyp „Hello world”, który wypisuje na konsoli tekstowej „h. w.” (bo przecież szczegóły się uzupełni później…), stwierdza że program działa – i w tym momencie traci wszelkie zainteresowanie tym zadaniem. Być może uda się go zmusić do skończenia pracy, ale najchętniej odda wykończenie szczegółów innym.
Upiorny Analityk. Przed rozpoczęciem pracy technicznej musi zebrać wszystkie szczegóły dotyczące wymagań użytkownika („Czy słowo Hello ma być z wielkiej litery?”, „Czy między Hello a World powinien być przecinek?”). Dopiero kiedy ma już komplet informacji zabiera się za pracę.
Jeszcze Upiorniejszy Analityk. Nie chce popełniać błędów upiornego analityka i wyobraża sobie system po pierwszych, zasłyszanych zarysach wymagań – bez ich zrozumienia. Zamiast „wyświetla napis Hello World” usłyszał akurat „wysyła do świata Hello”. Po kilku tygodniach wraca do ciebie z gotowym programem, który potrzebuje jedynie wprowadzenia bazy adresów wszystkich ludzi na świecie, którym chcesz wysłać Hello. To nic, że wcale nie chciałeś. Kiedy mówisz, że wcale nie chciałeś takiego programu, to stajesz się (dla owego „analityka”) najgorszym klientem / PM’em na świecie, który nie wie czego chce i ciągle zmienia zdanie.
Wieczny Optymalizator. Napisał program. Program działa. Ale jeszcze zmienia parametry kompilacji, żeby program wykonywał się o 0,004 sek szybciej. Poprawia formatowanie. Dodaje komentarze. Robi refaktoryzację. Przepisuje komentarze na angielski. Zmienia formatowanie na zgodne z ostatnim style guide’m. I będzie kontynuował te poprawki, dopóki ktoś zleci mu innego zadania.
Ekspert Od Współbieżności. Wyświetlenie dwóch wyrazów można spokojnie rozbić na dwa niezależne zadania. Wyświetlenie danego wyrazu również można rozbić na wiele małych zadań odpowiedzialnych za litery. Ponieważ żyjemy w erze współbieżności to TRZEBA to zrobić. Po kilku dniach pracy program jest gotowy i w dodatku świetnie używa wszystkie rdzenie procesora. Niestety po wdrożeniu u niektórych klientów pojawia się „world Hello”, a u jednego (z naprawdę silnym serwerem) co jakiś czas pojawia się coś w stylu „eH wolll odr”. Rozwiązanie problemu zajmuje 5 razy tyle ile stworzenie programu.
Wierny Utrzymaniowec. Sam ma problemy z napisaniem „Hello world” i prosi o pomoc kolegę. Ale po tym, jak program już powstanie, czuje się za niego odpowiedzialny – poprawia wszystkie błędy i wykonuje wszystkie poprawki w tym programie. Zna na pamięć wszystkie szczegóły dotyczące tego programu i jest w stanie wykonać żądaną poprawkę o każdej porze dnia i nocy.
Optymalizator Pracy. Choć pracuje jako programista, to ma dużo błyskotliwych pomysłów jak poprawić funkcjonowanie samego projektu. W różnych losowych momentach, zamiast implementować „Hello world”, zajmuje się konfiguracją nowego, rozproszonego systemu kontroli wersji, instaluję system ciągłej integracji albo system do prowadzenia code-reviews. Pisze też serię automatów, które będą instalować system na różnych środowiskach testowych lub budować gotowe paczki instalacyjne. Po dłuższym czasie jego system czasem potrafi napisać tylko „Hello”, ale z to można go zbudować i zainstalować jednym kliknięciem w telefon z Androidem, no i kod źródłowych jest backup’owany w 12 lokalizacjach na świecie i podpisany cyfrowo..
Prawdziwy Tester. Słyszał kiedyś o TDD (test-driven development), ale stwierdził, że to nieco zbyt mało radykalne podejście. Oprogramowanie może mieć dowolnie dużo błędów – wobec czego trzeba naprawdę przyłożyć się do testów. Zaskakuje cię więc informacją, że dla tego programu można przeprowadzić aż 73 różne rodzaje testów, z czego ponad połowa daje się zautomatyzować. Oczywiście wymaga to sporych inwestycji czasu i pieniędzy oraz kompletnego przeprojektowania aplikacji. Ale warto. Testowanie staje się celem samym w sobie i albo rozwiązanie jest „testowalne” albo jest złe. W rezultacie został stworzony program przeciętnej jakości z bardzo bogatym zestawem testów przerastających zdecydowanie samo rozwiązanie.
Projektant Korporacyjny. Choć „Hello world” wydaje się prostym zagadnieniem, on w jakiś niebywały sposób widzi w tym masę komplikacji. Bardzo szybko dochodzi do wniosku, że nie da rady napisać tego samemu od zera. Trzeba skorzystać z gotowych elementów. Szybko decyduje się na oparcie rozwiązania o komercyjnym silniku BPEL, stawia kilka pomocniczych baz danych i na koniec planuje wdrożenie wszystkiego w chmurze. Choć początkowo była mowa o programowaniu, okazuje się, że tak naprawdę wszystko można kliknąć w konsoli administracyjnej. Przy wdrożeniu – po kliknięciu magicznego przycisku pojawia się napis „Fatal Exception #2398432094832”. Jedynym rozwiązaniem okazuje się kontakt z call-centre, które akurat nie działa z uwagi na święto narodowe w Indiach. Nie jest to jednak wielki problem, bo przecież projekt i tak już opóźnił się o 2 lata, więc kilka dni nic nie zmieni.
Oczywiście sam przykład programu jest przesadnie banalny, a postawy przejaskrawione… Natomiast takie postawy występują w rzeczywistych projektach i powodują, że różne osoby wykonują zadania na różne sposoby. Powodują również, iż dobranie odpowiedniej osoby do zadania często może zadecydować o sukcesie lub porażce projektu.
A Ty? Jak napiszesz/zaprojektujesz „Hello world”?
Ten wpis jest kolejną pracą zbiorową – Stasiu wystąpił w roli Przecieracza Szlaku,
Witek w roli Dodawacza Opisów Przypadków.
W sumie nie spodziewaliśmy się tego zupełnie, ale do naszej kolekcji dołącza „Programista Google Dart”, który pisze Hello World w nowym języku Dart i kompiluje go do JS.
Nie widzisz w tym nic śmiesznego? To sprawdź to: https://gist.github.com/1277224 – kod „hello world” po kompilacji Dart->Javascript z opcją „VMOptions=–compile_all” ma dokładnie 17259 linii!
To jest dopiero osiągnięcie! :)
Jeszcze jest zapalony „agilowiec”, który będzie robił to w sprintach :) A tak na poważnie to takie przykłady można przedstawiać nawiedzonym PMom i innym osobom decyzyjnym, co by nie strzelać z armaty do wróbla.