niedziela, 1 lutego 2009

Po czym poznac, że jesteś zbyt stary na SCJP?

Skończyłem właśnie czytać miłą książeczkę SCJP Sun Certified Programmer i chciałem się podzielić przemyśleniami (bo tak se czasem lubię trochę pomyśleć).

Optymistycznie nastroił mnie do niej fakt iż jej autorzy są współautorami lekkiej i przyjemniej (jednocześnie bardzo pouczającej) książeczki Head First Design Patterns - którą to na marginesie szczerze polecam. Jej komiksowa forma i humor osadzony w latach '50 może wydawać się dziecinna ale po przeczytaniu wstępu wszystko stanie się jasne - jeden z autorów zajmuje się neuropsychologią i kognitywistyką więc dobrze wiej jak powinno się uczyć dorosłych ludzi.

Z dorosłymi idzie ciężej niż z dziećmi bo zazwyczaj myślą samodzielnie - a czasem nawet krytycznie.


No ale wracając do SCJP... Do samej książki nic nie mam - autorzy starali się jak mogli aby czerstwy temat przedstawić w miarę przystępny sposób. Pozytywne są komentarze typu: "my jako autorzy mamy na ten temat inne zdanie, ale na potrzeby egzaminu musisz robić tak i tak". Każdy z 10 rozdziałów obejmuje pewne zagadnienie - na dosyć podstawowym poziomie, ale mimo tego czasem można dowiedzieć się czegoś nowego. Na zakończenie każdego z rozdziałów mamy pytania sprawdzające, które z założenia odpowiadają tym z właściwego egzaminu. Utrzymane są głównie w konwencji: masz tu kawałek "super-profesjonalnego" kodu, skompiluj w jednej półkuli mózgu i ew. uruchom w drugiej; możesz też jęknąć w razie wyjątku. Problem merytoryczny jest zwykle banalny a wręcz wypaczony, natomiast cały ciężar trudności leży po stronie składni upstrzonej kuriozalnymi identyfikatorami i perfidnych zagrywek służących odwróceniu uwagi.

Zacząłem się zastanawiać dla kogo i po co jest ten egzamin... Doszedłem do wniosku, że możesz być na niego zbyt stary gdy masz niektóre z poniższych objawów:




  • Zastanawiasz się gdzie są pogrubienia slow kluczowych - a nie ma...:P będziemy bawić się w sado-maso
  • Zastanawiasz się gdzie jest cholerny kompilator i podkreślenia błędów?!? - a nie ma...:P i nie będzie...:P już wiesz na czym ma polegać cała ta żałosna zabawa...
  • Zaczynasz się czuć jak student I roku na jakimś bezsensownym egzaminie z twierdzeń i ich dowodów
  • #$%^& idę pograć sobie na PS3
  • Zastanawiasz się gdzie jest dekiel który napisał ten kod? Tak się przecież nie programuje nawet w PHP w gimnazjum! Niech bym go tylko dostał w swoje ręce.
  • Zwolnic go natychmiast i zanotować nazwisko na liście ludzi, z którymi nigdy nie chcesz współpracować
  • Co to w ogóle za odpowiedź "G) Compilation fails"? To po cholerę komitujesz mi do poważnego testu niekompilujący się kod baranie jeden! W chyba każdej firmie dostałbyś po premii (a w pożądaj poleciałbyś na pysk) za choćby parę takich smrodków!
  • Tijaaa znowu pytanie z serii "wlałeś benzynę przez rurę wydechową. Co się stanie? Samochód pojedzie ale skręci w drzewo. Samochód nie odpali. Samochód wybuchnie." Nie wydurniaj się człowieku. No wlej tą benzynę jak biały człowiek do baku i nie zawracaj mi głowy zgadywanką co się stanie jak dodatkowo założsysz gacie przez głowę.
  • Zaczynasz rozumieć pojęcie "Code made in India"
  • Gryzie Cię poczucie tracenia czasu
  • Obawiasz się, ze jeszcze jeden rozdział i nabawisz się autyzmu
  • Zaczynasz żałować, ze nie masz tego autyzmu - wspaniałego schorzenia, które pozwala skupiać się godzinami na nieistotnych pierdołach i ignorować szerszy kontekst
  • Boisz się, ze nabyty autyzm mogą odziedziczyć Twoje dzieci (ku chwale wujka Suna)
  • Motyla noga! Gdybym był wzrokowcem a nie słuchowcem to może przynajmniej widziałbym te brakujące średniczki i nawiasiki:/
  • Dowiadujesz się, ze o wiele ważniejsze od projektowania i rozmyślania nad architekturą jest znajomość kolejności operatorów (nawiasy są dla cieniasów)
  • Dowiadujesz się, że enkapsulacja to jednak prywatne pola i publiczne gettery/settery
  • Dowiadujesz się, że w programowaniu współbieżnym najważniejsze jest kretyńskie zaprojektowanie wątków oraz to aby całość jakimś cudem się skompilowała. Teoria współbieżności jest dla dinozaurów programujących w ADA.
  • Zastanawiasz się jak mogłeś przez 6 lat programować w języku, którego jak się okazuje w ogóle nie znasz


//=====================

Jest tez druga strona medalu: możesz być zbyt młody na SCJP... Jeżeli dopiero zaczynasz przygodę z Javą to olej certyfikaty ciepłym moczem parabolicznym. Ciesz się życiem i programowaniem. Programowanie wcale nie musi być nudnym zajęciem polegającym na wyszukiwaniu literówek i analizowaniu jakiegoś gównianego kodu (no dobra, czasem jest). W tej zabawie chodzi na prawdę o coś zupełnie innego!

A jeżeli chcesz zwiększyć swojego skilla to przeczytaj sobie dwie doskonale książki:
- Efektywne programowanie w języku Java autorstwa samego Joshua Bloch - projektanta i autora dużej części klas biblioteki standardowej Java; książka o której to sam James Gosling powiedział, ze gdyby została napisane wcześniej to inaczej zaprojektowałby Javę;)
- Java. Potrzaski zestaw 50 na prawdę realistycznych i ważnych haczyków na które należy uważać (nie ma tam syfu typu brak średnika)

Jeżeli jeszcze Ci mało, to proszę:
- More Java pitfalls - druga część potrzasków
- interesuje cię programowanie współbieżne? bardzo dobra pozycja: Java. Współbieżność dla praktyków

Ucz się z tych pozycji, ale powtarzam: nie trać czasu na certyfikat! To w żaden sposób nie zrobi z Ciebie lepszego człowieka (ani programisty).

Później przyjdzie czas na ważniejsze zagadnienia: projektowanie (wzorce projektowe), architektura, analiza itd... Nie zapominaj też o takich "szczegółach" jak dogadywanie się z ludźmi (koledzy z teamu, klient). A średniki poprawia Eclipse;P

8 komentarzy:

Unknown pisze...

Generalnie masz racje, ale...

Są też pewne plusy tego całego zamieszania. Po pierwsze jak czytasz o wątkach, zawiłościach hashCode i equals, jak pierwszy raz uczysz sie wyrażen regularnych,których zawsze unikałeś, nie mogles zapamietac obslugi IO w Javie, to poniewaz bedziesz zdawac to na egzaminie uczysz sie tego dobrze.

Czytanie innych ksiazek, do poduszkki zawsze pozwala Ci pominać rozdział a tutaj nie ma wyboru :(... Trzeba przebrnąć przez to czego się zawsze unikało...

A generalnie są to podstawy i co do pożyteczności ten wiedzy nie ma wątpliwości.

Ale oczywiście zgadzam się, że od poprawiania błędów kompilacji jest eclipse;).

Sławek Sobótka pisze...

ok, jezeli wyniknie z tego pozytek polegajacy na tym, ze zobaczysz to czego do tej pory unikales to bardzo fajnie.

Jednak jest to wiedza bardzo powiezchowna poniewaz (odnoszac sie do przykladow):
- o watkach dowiesz sie tyle ze jest klasa Thread, slowko synchronized i metody wait/notify. Bez znajmosci podstaw spolbieznosci po prostu nie nalezy uzywac watkow i już.
- equals i hashcode: i tak nie bedziesz wiedzial jak poprawnie je implementowac (musisz tylko rozpoznac dopuszczalne implementacje - mimo ze bezsensowne)
- io - i tak nie bedziesz wiedzial, ze calosc opiera sie na wzorcu dekoratora oraz i tak nie bedziesz wiedzial jak optymlanie dekorowac strumienie.

Wiec jezeli ktos unikal tego typu podstaw to certyfikat da mu jedynie złudzenie i pozorną, powiezchowną wiedzę:/

Lasu aka Marek Kozieł pisze...

To jest generalny powód dla którego preferuje sprawdzanie się w akcji nad testami.

Ale lepiej nie generalizować.
Zdarzają się sensowniejsze zadania testowe.

Niestety po przeczytaniu tego postu przypomniało mi się jak próbowałem przez bite 2 dni (studia) nauczyć się które to rekursja a które rekurencja :/. Bez zbytniego powodzenia.

Unknown pisze...

heh,
i dlaczego na w polskiej wersji Effective Java jest HTML??!!
:)

Sławek Sobótka pisze...

HTML jest na okladce, ale pewnie dlatego ze helion jak zwykle pozluzyl sie superprofesjonalnym grafikiem do zrobienia okładki (a grafik pewnie wczesniej robil jakas oklade do ksaizki o javascript wiec ze mu zbywala to sobie ją sprzedal do ksiazki o javie - przeciez to musi byc to samo skoro nazwa podobna;)

Unknown pisze...

Mam podobne odczucia na temat SCJP co autor tego posta. Fakt że ktoś zna kolejność operatorów i wie czym się różni "&" od "&&" nie świadczy o tym że jest dobrym programistą javy. Dziwi mnie to że pracodawcy tak zwracają uwagę na SCJP - podobno podnosi wynagrodzenie średnio o 10% :)

Piotr Paradzinski pisze...

"Dziwi mnie to że pracodawcy tak zwracają uwagę na SCJP"

pewnie by nie zwracali ale to ułatwia wygrywanie przetargów więc zwracają ... i doceniają finansowo

szkolenia oracle pisze...

Inżynieria oprogramowania ma ciekawą i barwną historię. Znam na pamięć historię JS i C++ i przyznam, że miały rewelacyjną ścieżkę.