EffectiveJava learn notes