Wczoraj były urodziny mojego syna Patryka, więc postanowiłem zaskoczyć moje dzieciaki czymś niezwykłym po ich powrocie ze szkoły. Postanowiłem zaskoczyć ich zapiekankami! Podczas ich przygotywania (ze składników, nie gotowce!) doszukałem się ciekawej zbieżności między przygotowywaniem posiłków a...programowaniem. Ile to razy moja żona powtarzała mi, że kiedy przygotowuję spagetti (czy jakiekolwiek inne danie) to ma to być spagetti, a nie zbiór wszystkiego, co nawinie mi się pod rękę. Nawet pizza, która słynie z bogactwa składników, w moich pierwszych wydaniach nie przypominała jej wcale, gdyż skala różnorodności przesunęła się znacznie bliżej nieskończoności, jeśli chodzi o ich liczność. I tak przygotowując zapiekanki pomyślałem sobie, aby poza szynką, pieczarkami, dymką, serem i oregano dodać coś jeszcze. I tutaj właśnie nastąpił ten moment, kiedy przypomniałem sobie słowa mojej żony, aby nie przekombinowywać i po prostu zrobić te zapiekanki. To mają być zapiekanki, a nie przypominać zapiekanki i to w najgorszym wydaniu. Czy nie przypomina to zasady KISS (Keep It Simple, Stupid), którą próbujemy stosować przy każdej nadarzającej się okazji podczas programowania? Za pomocą zasady KISS próbujemy utrzymać w ryzach nasze pożądania technologiczne i podejmujemy decyzje niezbędne do realizacji zadania, a nie tracimy czas na rzeczy wokół, które nie prowadzą do celu, a nawet mogą go oddalić. Czy nie jest tak, że wielu z nas wręcz lubuje się w KISS w ramach programowania, a kiedy przyjdzie zrobić coś poza programowaniem, komplikujemy sobie życie do przesady?! Szukając owych podobieństw między naszym warsztatem programistycznym, pełnym zasad i reguł podnoszących jakość naszego produktu, kiedy przyjdzie nam do przygotowania jedzenia, to wielu z nas kończy na jajecznicy, pizzy ze sklepu bądź zamówioną, bądź cokolwiek, co podpadnie pod rękę. Nic twórczego, po prostu pustynia kucharska (!) Nie chcemy tracić cennego czasu na przygotowanie jedzenia, bo wydaje się, że jest za trudne. Zadowalamy się czymkolwiek. Czy z naszym programowaniem nie jest podobnie?! Widzę tutaj podobieństwo graniczące z dokładnością. Wystarczy zamiast soli i pieprzu dodać majeranku, bazylii czy oregano i nasze potrawy nabierają niepowtarzalnego blasku. Zamiast ketchupu skorzystajmy z przyrządzonego dipu (jogurt naturalny, czosnek, bazylia, sól i pieprz) i voila - potrawa od razu smakuje inaczej. Dokładnie tak jak z naszymi projektami. Wszyscy wokoło stosują Hibernate i Spring (to taki popularny duet, że nie mogłem oprzeć się, aby go nie przytoczyć). Ale czy ktokolwiek zadał sobie trudu, aby skorzystać z innych rozwiązań, które potencjalnie dla wybranego projektu będą bardziej adekwatne i dopasowane?! Wielu z nas wręcz szczyci się tym "spustoszeniem" wprowadzonym przez Springa w naszych głowach, gdzie nic poza Spring+Hibernate nie można znaleźć i jeśli nie Spring+Hibernate to passe. A wystarczy zamiast soli i pieprzu zastosować bazylię czy oregano, albo curry a nasze postrzeganie lekkości smaku odmieni się diametralnie. Może zamiast Springa wystarczy Google Guice albo HiveMind?! Może zamiast Hibernate skorzystać z JPA z Apache OpenJPA czy EclipseLink?! A może po prostu skorzystać ze Springa i Hibernate, ale dodać do nich odrobiny nowego smaku, np. Wicket czy OSGi? Zalety niekoniecznie mogą być widoczne od razu, podobnie jak z wyczuciem smaku, ale z czasem nasze podniebienie stanie się bardziej wyrafinowane i podobnie jak nasz warsztat programistyczny nabierze rumieńców. I tak zapiekanki gotowe!
A tak bardziej technicznie, to Eclipse Ganymede RC3 gotowy do pobrania i czeka na ewaluację. Zabrałem się za wersję Eclipse IDE for Java EE Developers licząc na poprawki, które sprawią, że najnowsze wydanie wtyczki Geronimo Eclipse Plugin 2.1.1 (zbudowane ze źródeł) zacznie poprawnie funkcjonować w tym środowisku. Nie pomyliłem się! Wtyczka jest poprawnie rozpoznana i działa!
Cześć Jacek
OdpowiedzUsuńJestem klinicznym przypadkiem osoby, która (w obecnym projekcie) zastosowała Google Guice (zamiast rzeczonego Spring) ;) Nie zastosowałem Spring chociażby dlatego, że Spring-a ... nie znam ;) Tak - jak widać, są jeszcze tacy (znam tylko generalne założenia Spring, ale jakoś bliżej mi do EJB3).
Wywołałeś również temat ORM-ów (Hibernate, OpenJPA). To trochę mój konik jest i się przy tym temacie ożywiam ;) Od ponad dwóch lat używam Hibernate i sobie chwalę. Za to widać, że w sieci przetaczają się niezliczone flamewars, w których ścierają się zwolennicy różnych ORM. Najczęściej naprzeciw siebie stają zwolennicy (wyznawcy?;) Hibernate i TopLink. Nie razy myślałem, że dobrze byłoby te dyskusje jakoś zakończyć, a wszystkie w tych dyskusjach uwagi i obserwacje skanalizować w jednym miejscu. Mam na myśli, że mogłoby być w sieci jakieś miejsce, gdzie można byłoby zobaczyć "feature matrix" rzeczonych (jak i innych) ORM-ów, gdzie każdy feature danego ORM-a byłby okraszony kawałkiem kodu, aby ktoś - patrząc na kod - od razu poczuł, jak do danego tematu podchodzi dany ORM.
btw:
Blogger trochę nie po polsku datuje daty postów, np. 14 *czerwiec*. Ale to szczegół.
A propos koników, a właściwie koni, do tego martwych. Znasz ten tekst? ;)
http://www.tjn.sic.pl/forum/viewtopic.php?p=147&sid=bce64a7bd212fefb9d0def06cebdedcb
Pozdrawiam,
Adam
czerwiec