learning to program is deceptively hard. First you think it hard, then you think its not, then you think its hard, then you think its not, ...