środa, lutego 27, 2008

My - Niedouczeni ;-)

Już w trakcie przygotowań do SCJP nachodziły mnie pewne refleksje co do tego co wypadałoby wiedzieć by programować w danym języku, a co zwykle się wie. Teraz w trakcie nauki do SCWCD utwierdzam się w swoich wnioskach.

Jako programiści w ogólności jesteśmy niedouczeni ;-)

Latami można pisać w Java'ie nie wiedząc dlaczego to:

public class A {
public static void a(String str) { System.out.println("String"); }
public static void a(Object str) { System.out.println("Object"); }

public static void main(String[] args) {
a(null);
}

się skompiluje i wypisze String, a to:

public class A {
public static void a(String str) { System.out.println("String"); }
public static void a(Integer str) { System.out.println("Integer"); }

public static void main(String[] args) {
a(null);
}

się nie skompiluje bez rzutowania null na String lub Integer.

Większość programów można stworzyć w Java'ie czy dowolnym innym języku obiektowym nie mając pojęcia co to jest polimorfizm i o co w nim chodzi ;-)

Wbrew pozorom to niedouczenie nie jest do końca takie złe. Zwykle z niewiedzy biorą się eksperymenty, a z eksperymentów powstaje prawdziwa wiedza i często nowe pomysły :-)

Jednak czasem to denerwuje ;-)

Choć chyba mniej niż ortodoksja. Hasła w stylu "instanceof jest zły", albo "wszystko musi być obiektem" brzmią świetnie w trakcie dyskusji, ale w praktyce bywa różnie ;-) Nie znoszę sterownia przepływem przy pomocy wyjątków, ale sam w kodzie OOo2GD mam kawałki jak ten:

private boolean storeToDisk() {
// OK, here we will have small sample of wrong behavior, this means exception driven control flow... but it's easier ;p
boolean result = true;
XStorable storable = (XStorable) UnoRuntime.queryInterface(
XStorable.class, m_xFrame.getController().getModel()) ;
try {
storable.store();
} catch (IOException ioe) {
result = false;
}
return result;
}

a to i tak delikatny przykład, który się nie liczy ;-)

Ale w ogólności i masie jesteśmy niedouczeni... awangarda nowoczesnej technologii, z tym, że zamiast szczegółów zna ogólne mechanizmy ;-) trochę to przerażające ;-)

Ciekawe jest to, że w trakcie rekrutacji często wymagana jest znajomość pewnych specjalizowanych technologii i często przyjmuje się kogoś bo dużo umie, po czym zapada decyzja, że ten ktoś ma tworzyć oprogramowanie w języku którego nie zna ;-)
Często dlatego wybrano taki język bo "na etapie projektowania" zdecydowano, że to będzie najlepsza opcja.... co oznacza zwykle - bo mamy przykłady ;-)

W tym miejscu inne jest Google, które podobno bardziej ceni umiejętność nauki niż samą wiedzę.... choć z drugiej strony dobrze wtedy mieć rachunek prawdopodobieństwa w małym palcu, tak jak i być świetnym z algorytmiki ;-)

Banda niedouczonych kombinatorów z nas po prostu jest ;-)
Dlatego warto zdobywać certyfikaty, chociaż mamy papier, że byliśmy w stanie na czas egzaminu opanować rozsądne podstawy ;-)


Podobne postybeta
Sztuczki tropiciela błędów, part 4
Java 8 nadchodzi....
clone() i Cloneable się mszczą ;-)
Sztuczki tropiciela błędów ;-)
Ile to jest 1+1 w Java'ie?