Home > Programowanie, Recenzje > Javarsowia a i++ czy ++i

Javarsowia a i++ czy ++i

W sobotę odbyła się konferencja Javarsowia. Darmowa warszawska konferencja była naprawdę znakomicie zorganizowana i niczym nie ustępowała płatnej krakowskiej konferencji JDD. Wykłady, materiały, prezenty i jedzenie – które wygłodniali informatycy wyskrobywali z garnków – wszystko było na bardzo dobrym poziomie. Mi najbardziej spodobał się wygład Pawła Szulca o Apache Wicket. Dziękuje organizatorom, wykładowcom i sponsorom!!!

Zauważyłem, że ostatnio na konferencjach Java pojawił się trend na konkursy. Konkursy są najzupełniej w porządku, jednak nie podobają mi się pytania konkursowe. Uważam je za głupie. Nie chciałem brać udziału w tych konkursach, ale zobaczyłem małe czarne pudełeczka z tajemniczą nagrodą. Nie wytrzymałem, spróbowałem i nie rozwiązałem poprawnie. Na szczęście – dwa małe czarne pudełeczka udało mi się i tak dostać. Dzięki!!! Oto konkurs.

Metoda main wypisze: “Koń… Krowa, kura, kaczka… Kura, kaczka, drób…(…) O! Jest! Widzę! Droga…“. “Głupota – niedostatek rozumu przejawiający nieumiejętnością rozpoznawania istoty rzeczy“. To nie jest istota programowania. Tak precyzyjna wiedza o klasach, dziedziczeniu i przysłanianiu metod jest konieczna tylko dla programistów maszyny wirtualnej Java – którzy muszą trzymać się standardów. Programiści Java – nie powinni nigdy w życiu napisać takiego kodu. Programiści Java, gdy zobaczą taki kod powinni zaalarmować. Przypomina mi to trochę Perlowego Golfa. Jednak pomiędzy Perlowym Golfem a takim konkursami jest pewna różnica – Perlowy Golf polega na napisaniu najkrótszego programu co samo w sobie może być pewnym celem. Tymczasem celem tego programiku, zagadki – jest wyłącznie zagmatwanie. Nie o to chodzi. To nie jest istota programowania. W programowaniu nie chodzi o to żeby zagmatwać, ale żeby zarządzać informacją. ++i lub i++.

Krytykując, zawsze należy podać alternatywę. Jak napisałem wcześniej, konkursy uważam za fajne. Jednak takie pytania uważam za uwłaczający godności programistów. Moją godność kupili czarnymi pudełeczkami… No cóż… O co więc należy pytać na konferencjach, żeby nie obrażać uczestników? O istotę rzeczy!!! Na przykład styl kodowania: if(coś.equals("Antek")) czy if("Antek".eqauls(coś)) lub if(coś==null) czy if(null==coś). W tych dwóch króciutkich pytaniach prawidłowy jest tylko jeden styl kodowania – czy wiecie który i czy wiecie czemu? O co jeszcze można pytać na konferencjach. Na przykład o bardzo ważna metodę "equals" – gdyż pisząc ją łatwo jest się pomylić.

Istotą programowania nie jest wiedza, jaka jest różnica pomiędzy i++ czy ++i. Dobry programista nie musi tego wiedzieć. Dobry programista musi wiedzieć natomiast to, że inni mogą nie wiedzieć. Programowanie, to język który wykonują maszyny. Programowanie to język który muszą zrozumieć ludzie. Dlatego istotą programowania nie jest zapis if(7==i++) ale zapis: i++;if(7==i). Istotą programowania jest taki zapis myśli, aby ludzie mogli go odczytać a maszyny wykonać.

Chodzi mi tylko o to, aby ludzie którzy przyjdą na konferencje, którzy wystartują w konkursie i którzy dostaną czarne pudełeczko, nauczyli się przy okazji czegoś pożytecznego.

Programista to taki informatyk. Informatyka to zarządzanie wiedzą. Zarządzanie wiedzą to umiejętność rozpoznania istoty wiedzy. Skończmy z głupimi konkursami. Czas na dobre konkursy. Czekam na Wasze przykłady…

 

Categories: Programowanie, Recenzje Tags:
  1. July 6th, 2009 at 17:19 | #1

    Co do głupich konkursów to zgadzam się w zupełności. A co do dobrych konkursów to skojarzyły mi się dwa ogłoszenia o pracę na blogu http://mojstartup.pl, w których jako dodatek do CV pojawiła się prośba o rozwiązanie zadań algorytmicznych. Nie jakichś super trudnych, ale i nie trywialnych. Myślę, że “dobre konkursy” powinny właśnie iść w tą stronę, a nie sprawdzać jaka część naszego jestestwa to kompilator :)

  2. July 8th, 2009 at 21:01 | #2

    Rzeczywiście, same głupie konkursy są organizowane. Sam zresztą czytałeś i komentowałeś mój wpis o konkursie Sygnity w takiej samej formie. Widzę, że teraz przekroczyłeś masę krytyczną i musiałeś napisać coś od siebie na ten temat :-) Oczywiście zgadzam się z tym w zupełności.

    Nawiązując do Twojego pytania o styl kodowania, to wydaje się, że zapis if (null == coś) jest bezpieczniejsze od if (coś == null). Jednak, prawdę mówiąc, już długo klepię i nie zdarzyło mi się popełnić ani razu takiego błędu.

  3. July 8th, 2009 at 21:02 | #3

    Oczywiście mówiąc “takiego błędu” mam na myśli przypadkowe przypisania wartości do zmiennej. W chwili pisania było to dla mnie oczywiste, jednak czytając drugi raz komentarz – już nie tak bardzo :)

  4. July 8th, 2009 at 22:04 | #4

    @Nowaker Dokładnie – zapis stała == zmienna jest może mniej intuicyjny – ale pozwala uniknąć przypadkowej pomyłki.
    Znacznie ważniejsze jest jednak pamiętać o tym, żeby pisać “stala”.equals a nie na odwrót. Oczywiście intuicyjne jest pisanie zmienna.equals(stala) – ale tu bardzo łatwo zrobić NullPointerException.
    Myślę, że takich przykładów kodowanie jest dużo więcej, czasami chodzi o czytelność kodu – i to jest dyskusyjne – a czasami o bezpieczeństwo.

  5. July 9th, 2009 at 17:39 | #5

    Zapis “string”.equals(s) wygląda dla mnie tak pokracznie, że stokroć wolę użyć org.apache.commons.lang.StringUtils#equals, czy nawet podwójnego warunku. A przypisanie w warunku if powinno być sygnalizowane co najmniej ostrzeżeniem w Naszym Ukochanym IDE.

    Co do zadania powyżej – połowa skądinąd szanowanej książki “Java Puzzlers” skupia się na takich szczególikach. Cóż – tym gorzej dla niej…

  6. July 9th, 2009 at 20:28 | #6

    Zapis “string”.equals(zmienna) jest pokraczny ale jest najpoprawniejszy na świecie – właśnie dzięki temu że unika się podwójnych warunków – po prostu trzeba się do niego przyzwyczaić.

  7. Student
    July 9th, 2009 at 22:23 | #7

    A gdzie można znaleźć więcej takich fajnych ciekawostek? ;> Bo jednak większość książek do Javy, jak już podaje jakieś przykłady to zwykle bardziej podobne do zadania z konkursu niż do “string”.equals(zmienna) vs zmienna.equals(“string”)? ;>

    Z góry dzięki za pomoc początkującemu programiście ;)

  8. July 9th, 2009 at 22:32 | #8

    @Student – niestety nie pamiętam. Być może “Head First Java” ale nie mam tej książki pod ręką by sprawdzić… W każdym bądź razie “Head First” przyjemnie się czyta.

  1. July 25th, 2009 at 08:24 | #1
  2. July 31st, 2009 at 08:02 | #2
  3. November 9th, 2009 at 18:26 | #3

Subscribe without commenting