Its that time of year again – where has 2010 gone, where am I now and how do I get to where I want to be?! What do I need to do in 2011.
Just as I started considering this a very interesting Programmer Compentency Matrix started doing the rounds on various blogs, mailing lists and Twitter. Whilst I’m sure some of the actual ratings and some of the content could be questioned (and indeed has been on some mailing lists!), as a general rule of thumb it seems to cover most areas to a reasonable degree, and I’m planning on using it as the basis of this post to figure out:
a. Where I am in it
b. How to complete the sections I’m deficient in.
I’ve not come out too badly. I’ve tried to give an honest grading of where I sit, and I’ve stayed true to the I need to know everything in the base levels to be considered for higher levels – and some of these have limited from moving up due to not knowing a single item! But still…
Another brightside is nothing jumped out as me as what?!?! All the terms I’m aware off, without maybe not knowing exactly what they are.
What was a very good positive was that the areas I’ve excelled in are the areas I’ve really focussed my attentions on for the past 3-5 years – stuff like How to Programming, Object Orientated Design Principles, Clean Code, Refactoring and Test Driven Development. Its due to me immercising myself in these areas that I’ve probably disregarded or not had exposure to others on the sheet.
Discussion of the Action Plan
Without boringly going into all the details of where I’m deficient at this stage, heres a brief summary of what I need to focus on in the next 12 months plus.
Algorithms – This is stuff I vaguely remember from my Computer Science degree. Its stuff that I don’t believe I’ve used since, just purely because I haven’t (knowingly) had the need. On my shopping list is a book on Algorithms.
Systems Programming – I’m not sure how good my knowledge is in this area. I certainly recognise all the terminology used, but would perhaps struggle to explain to someone else. I’d also not be 100% confident in what I was saying was correct. This is probably just a case of revisting the terminology definitions and really grasping that understanding.
Source Code Version Control – I’m not bad in this area at all. I’ve been fortunate to have had it grounded into since being a graduate about the importance of Source Control, even if this was with Visual SourceSafe. I’ve since implemented version control at 2 seperate companies, and in the past 12 months have moved into the world of Subversion. I’ve heard alot about Git, but never used it – think I need to try it out and try and see what benefits that can bring.
Programming – the main downfall areas were Scripting and Databases. With scripting it is a case of googling each line as I want to write it. I’ve never taken the time out to really learn a scripting language, as I’ve simply not spent enough time scripting. Likewise with databases – I get by with the simple select, update and delete statements and then run to a DBA. Since doing my Post Graduate studies I’ve now got an understanding of database normalisation (although I had an understanding for it before, I didn’t know what the true technical term was!). However the more advanced queries and use of indexes still hasn’t been explored. Actions – I’ve got introduction books Perl and Python at home that I’ve never really studied properly. Perl seems to be most commonly used in the workplace so think it would be good to gain a proper grasp of that. I’m getting more exposure to Oracle databases and have a book on my reading list which will hopefully give me more exposure.
Experience – I’ve no idea about Functional Languages! Book…
Knowledge – I keep fairly abreast of the latest technologies, admittedly mainly via Blogs and Twitter. However I maybe don’t express enough of an interest as I should. For example I know Scott Hanselman’s Power Tool List, I’ve even read it in detail. However I’m not certain how many of the tools I’ve actually used. I really need to revisit this. I’m also poor at actually downloading and playing with upcoming releases of tools, and exploring what the new features are.
- Buy, read and understand an Algorithms Book.
- Systems Programming – revisit and gain better understanding of terminology.
- Read and experiment with git.
- Learn and find use for Perl (and/or Python).
- Continue enhancing understanding of Databases.
- Research and learn a functional language.
- Review Scott Hanselman’s Tool List and try to adopt some for day-to-day working.
- Be more active in using and exploring latest technology releases.