For the past two years I have been striving to become a “Software Craftsman“, this has taken re-education on how I approach programming. It has been a roller coaster ride, learning about programming patterns and disciplines, but there is one thing that I have been overlooking. The foundations of programming, maths and simple logic.
With that in mind I started playing around with some Pseudo Code and it quickly became evident that I was very rusty. Things like truth tables and looping through collections (no IEnumerable here), I was having trouble with, not to mention if you asked me to do a double differentiation now days I will just laugh at you. I understand these concepts, it’s that it was taking time to pull them out from long term memory or working them out on the fly, when it should just be second nature.
I have been in interviews in the past where you needed these fundamental skills to get to the next round, in one case I sat a two hour test entirely on simple algorithms. One of the candidates got up after the first section and walked out saying that his head had been in .NET too long and this job was not for them, even though it was for a .NET position. I might agree that a two hour test was a bit over the top, but this was a bit of a cop out if you can’t work through a test in simple Pseudo Code.
The Test was out of 25 and you needed to get 20 to proceed to the next round, I scored 18 so just missed out. Even though I don’t know what others scored, when I last checked they were still looking for someone to fill the position so I guess few if any scored the required mark?
A two hour test is not a good interview technique in my opinion, by all means I will prove to you that I can program, but a written test? Come on, I work on a computer all day, and don’t remember the last time I used a pen ;). Maybe a question where you use a white board to demonstrate your thought process for solving problems or a discussion about different programming patterns.
The sad thing is that it is required for candidates to prove they can program. After reading a blog post on Coding Horror titled: Why Can't Programmers.. Program? I understood this, and I was worried that I could be one of these people? This alarmed me as I am trying to make programming my Craft, so I sat down and completed the FizzBuzz exercise outlined in the post. I was relieved that I was able to create a solution in five minutes, but this is an area I can improve on.
There are things you can do to help with these simple skills, Code Kata is one thing that comes to mind. Code Kata helps to push these things into mussel memory making them ingrained, like how driving becomes automatic after a few years. The point of this post is: get a good grip on the advanced concepts of software development, also don't forget or become out of practice with the foundations. I think I am going to take the Math for Programmers Pluralsight course and commit myself more to doing Code Katas, and hopefully this will address my concerns.