Teoria a praktyka
Autor: Konrad, Opublikowano: 21/12/2009Ostatnio sporo czau poświęcam na poszerzanie swojego horyzontu postrzegania zagadnień związanych z programowaniem. Oprócz poznawania kolejnych języków (Java, Python i inne) przyglądam się wytwarzaniu różnego typu oprogramowania w różnych warunkach. Z racji, że sięgam zarówno po źródła naukowe i stworzone przez praktyków, widzę rosnący kontrast pomiędzy tymi rzeczywistościami. Przyznam, że co jakiś czas pojawiają się osoby łączące te dwie drogi, ale przeważają rozmyślania rozwijające dziedziny nie zweryfikowane – czy to w formie badań naukowych, czy komercyjnych projektów. Dużo osób teoretyzuje zamiast szukać kompromisu. Wieżą, że skoro model, który stosują (w większości przypadków) sprawdza się, to model będący rozwinięciem ich wiedzy i przeczuć, też będzie się sprawdzał. Narzucają swoją wizję, zamiast znaleźć partnera z drugiej strony i wspólnie przetestować pomysły. Każda ze stron ma coś cennego do zaproponowania, ale również zbyt wielkie zadufanie związane ze swoimi osiągnięciami. Gdy dorzucę trzecią grupę, o której większość nie myśli, a od której wszystko zależy, powinno stać się jasne dlaczego obecny stan jest nieciekawy. Tą grupą są inwestorzy – zarówno inwestujący swój czas, jak i pieniądze. Inwestorami jesteśmy również my – programiści. Rozwijamy się aby realizować coraz bardziej złożone zadania i decydujemy się na korzystanie z określonych technologii. Technologia, za którą stoją zwolennicy ma większa siłę głosu i zwracania uwagi inwestorów z kapitałem. Przekłada się to na pracę, lepsze narzędzia, ciekawe projekty, itd. Gdy technologia nas zawiedzie, bo jej kolejny krok oparty o wiedzę i przeczucie, okaże się (choćby zaledwie) nie tyle skuteczny co rozwiązania już wykorzystywane, następuje zniechęcenie i różnica między oczekiwaniami a rzeczywistością. Różnica ta przekłada się na kapitał stojący za technologią. Spróbuje to lepiej zobrazować. Obecnie sytuacja wygląda tak (pozwolę sobie pominąć szeroko rozumianych monopolistów i użyć porównania do dwóch kostek): technologie powinny mieć za sobą mocny stały kapitał i tym samym niewielkie wahania w kapitale dodatkowym. Czyli kostkę kapitału stałego oraz kostkę wahań. Powinniśmy doprowadzić do sytuacji, gdy rzucamy pierwszą kostką tylko wtedy, gdy wiemy, że przyniesie to wzrost wartości wylosowanej - zwłaszcza w sytuacji, kiedy nie możemy przewidywać kolejnych okazji do rzutu. Drugą kostką wykonywane są rzuty niezależnie od naszej woli i zazwyczaj przynoszą efekt przeciwny do naszych oczekiwań – można ją nazwać kostką hazardzisty. Większość osób widzi tylko sumę oczek z dwóch kostek – nie widzi podziału. Inwestorzy (z kapitałem) widzą natomiast dwie. Dla branży IT często na pierwszej kostce jest niska wartość, a na drugiej częsta zmiana. Tym trudniej jest zdecydować się na inwestycję, gdyż rzuty są nieprzewidywalne. Wprowadzenie dialogu pozwoli doprowadzić do sytuacji, gdzie będziemy mogli pierwszą kostkę zastąpić kilkoma. Jedną rzucać i samemu ustawiać wynik na pozostałych. Ile sprawnych kompromisów tyle dodatkowych kostek. Oczywiście kostki mają taką samą ilość ścian. Tym samym zmniejsza się znaczenie kostki hazardu.
Obrazując:
kostki kapitału stałego: maksimum (pełne porozumienie), 3/4 maksimum, 5/6 maksimum, losowa wartość;
kostka wahań: wartość losowa;
Jak to się ma w skali mikro – czyli nas programistów. Im lepszy dialog, tym mniejsze rozczarowanie, że rozwiązanie, które poznawaliśmy przez n-lat zablokuje nasz rozwój na kolejne lata. Najgorszy scenariusz, że po prostu umrze zastąpione przez inne. Mniejszy codzienny, że obiecując wykonanie zadania, nie będziemy siedzieć po godzinach zwalczając niespodziewane ficzery. Mając gwarancję dialogu, mamy pewność, że jakiekolwiek powstaną zagrożenia, nasz język i my sami im sprostamy – będzie się rozwijał z naukowym pomysłem i miał uzasadnienie powody biznesowe do użycia. Wybór (np.) języka nie będzie niósł za sobą ryzyka, a możliwość dostosowania narzędzi pod własne preferencje. Na koniec, tak do przemyślenia, chciałbym trochę uciec od języka do szerszego ujęcia. Chciałbym, aby każdy porównał otaczającą go rzeczywistość z tą teoretyczną (przykład poniżej). Czy w Twoim środowisku tłumaczone są różnice. Wiesz z czego wynikają? Co jest ich konsekwencją? Zachęcam do przemyślenia i dzielenia się własnymi przemyśleniami z innymi – to jedyna droga abyśmy pracowali w warunkach o jakich marzymy.
Role i skład zespołu projektowego:
Kierownik projektu
Kierownik projektu jest osobą, która czuwa nad całością projektu, a jej najważniejszym zdaniem jest organizowanie i kontrolowanie pracy zespołu, kontaktowanie się z klientem oraz sprawdzanie czy „wszystko idzie dobrze”.
Analityk
Głównym zadaniem analityka jest zbudowanie modelu analitycznego (konceptualnego) systemu. W tym celu musi on stale kontaktować się z klientem, dla którego budowane jest oprogramowanie oraz dobrze zrozumieć jego potrzeby i orientować się w dziedzinie problemowej, której dotyczy system. Z całą pewnością nie jest to zadanie łatwe i oprócz rozległej wiedzy wymaga odpowiedniego doświadczenia i umiejętności pracy z ludźmi. Dobrze wykonany model analityczny ma kluczowe znaczenie dla powodzenia całego projektu. Błędy popełnione na tym etapie są później trudne do usunięcia i zazwyczaj bardzo kosztowne.
Projektant
Zadaniem projektanta jest zbudowanie projektu systemu. Projekt systemu jest kolejnym modelem systemu, ale na innym poziomie szczegółowości niż projekt wykonany przez analityka. Zawiera on bowiem informacje o szczegółach implementacyjnych systemu. Projektant musi wobec tego mieć odpowiednią wiedzę na temat systemu na którym będzie implementowana aplikacja i narzędzi, które zostaną wykorzystane do jej budowy.
Programista
Zadaniem programisty jest zakodowanie projektu opracowanego przez projektanta.
Tester
Zadaniem testera jest przeprowadzenie różnorodnych testów aplikacji zanim trafi ona do klienta.
Wdrożeniowiec
Wdrożeniowiec jest osobą, która przeprowadza uruchomienie (wdrożenie) aplikacji u klienta. Powinien on również umieć przeszkolić użytkownika w użytkowaniu produktu, a często jest też twórcą dokumentacji dla użytkownika.
Akademickie Podręczniki Multimedialne – Bazy Danych, Włodzimierz Dąbrowski, Paweł Potasiński, Wydanie B, Warszawa 2004.


