Philosophies programming

(Pictures on the way)

What makes a good programmer? Well that can probably be discussed forever. What I bring here is my opinion on the matter and it’s ideals I try to follow to the point where I feel it makes sense (everything can also be over done :) ).

Perhaps the most important thing is the ability and willingness to learn. I firmly believe that what makes a person a truly good programmer is not what he knows (to a limit of course) but what he can learn.

Scott Hanselman from Microsoft have a good part about this and some good points about improving as a programmer on his page in the blog post: Brain, Bytes, Back, Buns – The Programmer’s Priorities

For instance I often see companies that hire people that have a requirement such as knowing “WCF” (Windows Communication Framework). Technically I don’t qualify for this requirement, since I’ve never used it. Practically I’m probably better than most of the people who apply for it.

Why? Because I’ve been using other RPC-frameworks for years. I know most of the troubles that you can run in to by heart. Learning a new API or framework is usually no problem at all, especially if you have a lot of experience with similar frameworks.

The agile methodologies is another thing I firmly believe in. Especially the point of looking at software from the peoples perspective, trying to improve customer collaboration and responding to changes is very important in successful software development. How many times haven’t we seen things such as software that responds to needs a company had 3 years ago or software that is partly useless due to the lack of proper communication with the customers.

Especially eXtreme Programming (XP) has my interest. The idea of providing a working piece of software every week or two, where the users tell what they want to the next time is an interesting philosophy. Not only does the software start to provide business value fast, but also gives the user more or less full control of what is going to happen. Personally I believe this will deliver really good software, if it’s used correctly.

Methodologies such as Scrum, Crystal and Kanban also seems really interesting to me. In these I’m really fond of both the structures and their scalability. Combining Scrum and Kanban with XP seems like an interesting possibility too.

Know your tools. Although tools are not everything you still need to invest some time in them. This counts for both the methodologies and the software you use. Using a version control system is only good if you actually know how to use it.

Keep a look at new APIs, tools etc. that are likely to make your life easier, but remember to be productive too. If you are unsure it is no sin to use 30 minutes to read about a tool to get an idea of if it is worth to invest more time in.

Unfortunately a lot of companies have policies or people that can prevent progress. Things like refusing to change tools with arguments such as “This is what we use” or “We only use tools from {insert company name}” is a good sign of this.

For instance using .NET is often good. Visual Studio is a really good development environment. But locking yourself to only .NET is bad, even if it’s best at 95% of all tasks, because then you deliberately refuse to use what’s better for the last 5% of the tasks. Also you are on the first step to the path of refusing to improve (which leads back to my first point ability and willingness to learn).

Know what’s happening in the communities, this leads back to both learning and knowing your tools. Although some trends are just hypes it is really important to be a step ahead. Even if you just have a vague idea of what a lot of things is, it will help you to chose if you need to dig further into the topic for certain projects.

How you keep up to the beat is a minor detail. There is a lot of ways to get that knowledge, it can be everything from following blogs, following the right people on twitter, to reading the proper magazines and watching the right podcasts and Youtube videos. Again what you use isn’t that important, just as long as you do it.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>