Vandaag leerde ik iets nieuws over Java, een programmeertaal waar ik vijf jaar in gewerkt heb (al is dat al een tijdje geleden). En kort nadat ik het leerde leerde iedereen in mijn bedrijf iets nieuws over Java, want niemand wist het en ik heb het ze verteld.
Voor de liefhebbers die ook iets nieuws willen leren zal ik het onderaan dit stukje toevoegen, maar wat ik interessanter vond is wat ik over mezelf moest leren om dit te kunnen leren. Want waarom kende niemand in mijn bedrijf vol alleszins capabele softwareontwikkelaars deze eigenschap van Java?
Omdat het alleen relevant is als je slechte code typt.
Dat doen wij niet. Dus voor ons is het niet relevant.
Waarom moet ik het van mijn alleszins capabele docent “Geavanceerd objectgeoriënteerd programmeren” dan alsnog kunnen? Omdat als je dit snapt, je precies snapt in welke volgorde Java bepaalde dingen doet. Ook als je goede code typt.
Tot voor kort liep ik enorm vast op dit soort didactische trucs. Ik ben namelijk afgericht om diep ongelukkig te worden van slechte code. Dan krijg je het bij dit soort cursussen wel moeilijk. Nu vertel ik mezelf periodiek HET IS VOOR HET LEEREFFECT en dan lukt het wel. Tenzij ik het vergeet, dan heb ik een paar mensen klaarstaan die het tegen me roepen als ik bij ze kom klagen.
Op de een of andere manier is dit essentieel voor mij om dingen te leren die niet objectief geweldig zijn (zoals logica en lineaire algebra 😍😍😍). En ik ben erg blij dat ik dit nu geleerd heb, want het maakt nieuwe dingen leren ontzettend veel makkelijker.
(Overigens zou ik het waarderen als ze ook in de cursus zouden zeggen “deze code is superkut, niet gebruiken”. Al staat er gelukkig af en toe wel iets als “De nadruk ligt op het bestendigen van de theorie en niet de toepassingen als zodanig”.)
Bijlage voor de liefhebbers: wat is de output van main() (in class B)?
Of, de eigenlijke relevante vraag: wat is de waarde van B.b direct nadat B geïnitialiseerd is?
public class A { protected int a = 5; public A() { System.out.println("constructor A: a = " + a); a = 7; } public int getA() { return a; } } public class B extends A { private int b = a + 10; public B() { a = 2; System.out.println("constructor B: a = " + a + ", b = " + b); } public int getB() { return b; } public static void main(String[] args) { B b = new B(); System.out.println("main: a = " + b.getA() + ", b = " + b.getB()); } }