Walking away from the SDNUG meeting, and discussing life the universe and coding over a guiness with a co-worker, the conversation drifted to the standards of knowledge that developers aspire to in relation to their craft. What we really couldn’t wrap our heads around is how a lot of developers aren’t typically aware of where they are, (knowledge wise) relative to the top end of their industry and trying to continiously raise the bar for themselves.
Travelling home (a 40 minute train ride gives plenty of time to think!), I remembered that in a course somewhere that I attended a few years ago there was a slide that rated four different types of “competencies” that a person could have.
- Unconsciously Competent
- Consciously Competent
- Consciously Incompetent
- Unconsciously Incompetent
This led me to the conclusion that developers definatley fall into these four categories and the differences between an average developer and the good ones can be quite significant and very obvious once you have seen a great developer in action.
I am not just talking about ability to code here either, whilst knowledge of frameworks and programming concepts is important if not critical, knowing the role that you play as an individual developer on a project or team, and how you can affect the success or failure of the overall project or team is also a critical aspect of the developer who is “aware”. For example, the feature you are currently working on, are you developing on time, and on budget? Neither? Both? What is the impact to the overall project if you are late? Have you told the program manager that you will be late, the second that you know that you won’t hit the 5pm Friday deadline that everyone is expecting?
Some developers seem to be completely happy to Clock in at 9:05, surf the net for 1/2 the day, accept poor requirements, make inaccurate estimates, complain that there is not enough time, deliver code that is slow, buggy, unmaintainable and late. Whilst others are consciously on the road of self improvement.
So I pose the question, to ask yourself where do you sit on the scale, and are you investing enough in the corporation of one that is yourself?
Where can I start?
I think that everyone needs to ensure that they have a firm grasp of the basics. For the .net developer I would recommend the following as books that every developer should own, read and understand.
Code Complete
Rapid Development
Essential .Net Volume 1
The Software Engineering Body of Knowledge provides a framework for software engineering knowledge, and may also be worth a look.
Learning is important, but the biggest single thing that will influence the way you develop is your attitude. Even though you may not be the best at what you do today, chances are if you define some goals and work towards them, chances are you will reach them someday, and that day may come sooner than you think.