Warning, today’s blog update is mainly geared towards programmers. You have been warned:
I’ve been programming now for just over 10 years. Just today I had an epiphany, on the 4 stages of programming:
Stage 1 – Beginner
Everybody starts here. Your main goal is to get the code to compile. Every time it does you do a little jig. Then you struggle, and Google, and struggle until finally the code does what it’s meant to do…oh also, it compiles! If there happens to be bugs in what you did, you add more if statements and conditional checks, since that’s what they are for right? You can recognise code written by Stage 1 programmers because it’s generally in massive methods, with more nested ifs than yo mamma.
Stage 2 – Amateur
At this level you no longer struggle to get your code to compile. You now start splitting your code up into logical methods and classes and you start playing with some of the more advanced features of your chosen language. You look back at Stage 1 of your coding and laugh at how stupid you once were.
Stage 3 – Perceived Master
At this level you now feel you know everything in and out. You create an abstraction for almost anything that moves, you use interfaces, if your language supports it you’re rocking the generics. Every class you create comes from a factory, why you’ve even got factories that create your factories. Your code is so loosely coupled it hurts. Your unit tests have unit tests. You think your code is the bees knees, the ducks nuts, a shining example of how to do things. It’s so well architected that any minute you expect I.M. Pei to come and congratulate you on it. You look back at Stage 2 of your coding and laugh at how stupid you once were.
Stage 4 – Face Palm
At this level you’ve finally realised that you’ve been an idiot all along. You now write simple, easy to read code. When people see it they say things like ‘huh. makes sense. simple really’. You don’t feel the need to prove yourself, or to make super fancy constructs anymore. You shy away from using every available language feature just because you can, and stick to just making stuff work. You realise that if it makes the code simpler and cuts development time there’s no great harm in making assumptions like what O/S you run on, and what database you use. You even learn a few new languages, recognising that every language has something different to offer. You look back at most things you’ve done in the past and laugh at how stupid you once were, and you will again in 6 months time.
So which stage are you currently at? Anecdotally I find most Java programmers get stuck at Level 3 forever 😉