8 paź 2008

Sprawny Inżynier?

W sierpniu na konferencji Agile 2008 Robert C. Martin (aka Uncle Bob) zaproponował dodanie do Manifestu Agile jeszcze jednego elementu:
Craftsmanship over Crap
Nasza dziedzina (przynajmniej światek javowy, który oglądam na co dzień) pogrążona jest w odmętach totalnego braku profesjonalizmu. Mamy masę nowoczesnych technologii (bibliotek, frameworków), masę mądrych ludzi dookoła, setki publikacji, jesteśmy bodajże najnowocześniejszą z wszystkich grup zawodowych, a przy tym jesteśmy całkowicie nieprofesjonalni.

Studenci medycyny słyszą od pierwszego roku, że ich błąd może kosztować kogoś życie. Co więcej za błędy mogą znaleźć się w więzieniu. Podobnie z prawnikami - za błędy mogą odpowiadać przed sądem i płacić za nie własnym majątkiem. A czy ktoś słyszał o programiście skazanym za:
try {
....
} catch (SQLException e) {
// maaaan! this can neeeever happen!
}
Audytowałem kiedyś aplikację e-bankingową. Paręnaście tysięcy klas. Prawie wszystkie dziedziczyły po
org.apache.struts.action.Action

Proponuję 3 lata więzienia.

Innym razem przepisywałem system przetwarzający SMSy. W oryginalnym kodzie roiło się od takich linii:
Thread.sleep(375);
Potem autor tłumaczył, że sprawdził, że jak te wątki czekają odpowiednią liczbę ms to aplikacja działa...
Rok w celi.

Znowu: klasa 1500 linii kodu. Maszyna stanowa (ponad 20 stanów) zrealizowana za pomocą jednego switch.
3 miesiące.
(Oj, nie! To mój kod akurat był...)

Właśnie - dlaczego na uczelniach uczą nas raytraycingu, drzew patricia, czy algorytmów mrówkowych a nikt nie robi ćwiczeń z projektowania kodu. Dlaczego nikt nie powiedział, że kod lepiej się pisze i jest się go pewniejszym (i jeszcze na dodatek jest utrzymywalny!) jak zacznie się od testów? (ktoś w ogóle słyszał słowo test na uczelni?) Czemu napalonym na kodowanie 20-latkom nie mówią, że nie jest fajny konkurs na najmniej czytelny kod w C/Perlu?


Agile Software Engineering - Sprawna Inżynieria Oprogramowania, czy Inżynieria Sprawnego Oprogramowania?
sprawny (za SJP PWN)
1. «dobrze wyćwiczony fizycznie, zręczny w ruchach, w wykonywaniu czegoś; też: będący objawem, dowodem czyjejś zręczności»
2. «świadczący o dobrym opanowaniu przez kogoś jakiejś umiejętności»
3. «właściwie urządzony, zorganizowany»
4. «o urządzeniu: dobrze działający, funkcjonujący»
Czy odnosi się to do mnie i do mojego kodu?

Jeżeli inżynieria, to najpierw rzemiosło! Tak więc proponuję zacząć od terminowania. Najpierw zostań czeladnikiem, na sztukę nadejdzie czas (może...) Wolałbym być operowany przez sprawnego chirurga, niż chirurga artystę :)

Taki jest plan na ten blog - krzewienie wiedzy (również własnej) w zakresie inżynierii oprogramowania. Nie chcę nigdy wstydzić się swojego kodu.

5 komentarzy:

Jacek Zawłocki pisze...

O ile się nie mylę, to dodatkowy punkt manifestu brzmiał "Craftsmanship over execution", czyli jak ja to rozumiem "Kunszt/sztuka stawiana ponad tylko działającą aplikacją". Poza tym oczywiście zgoda - programiści to jedna z najmniej profesjonalnych grup zawodowych. Bo przecież jak działa i faktura jest, to wszyscy są szczęśliwi, a potem przejdziemy do kolejnej firmy i kontynuujemy błyskotliwą karierę. Pozdrawiam,
Jacek

Paweł Zubkiewicz pisze...

Bardzo mi się podoba Twoje podejście do zawodu. Sam staram się wyrobić w sobie podobne nawyki i zachowania o których piszesz, a zainspirowane pewnie były - popraw mnie jeśli się myle - przez ksiażę Martina "Clean Code".


@Jacek. Masz racje,'crap' był użyty w pierwszej wersji, a potem został zmieniony na 'execution'. Więcej można przeczytać tutaj http://www.infoq.com/news/2008/08/manifesto-fifth-craftsmanship

Paweł Lipiński pisze...

Clean Code jeszcze nie czytałem :)
Ale z pewnością jest na liście na ten rok.

Paweł Zubkiewicz pisze...

Aha, w takim razie bardzo ja polecem. Również Implementation Patterns Kenta Becka. W paru słowach napisałem o tych książkach tutaj: http://pawelzubkiewicz.blogspot.com/2008/11/clean-code.html

;-)

ToJaJarek pisze...

Niniejszym ciesze się, że tu trafiłe, oswiadczam także, że analityk tu także czyta i się uczy ... programistów :)