You are on page 1of 3

The Core Skills All Software Developers Need Basil Vandegriend: Pro...

http://www.basilv.com/psd/blog/2009/the-core-skills-all-software-develo...

BASIL VANDEGRIEND: PROFESSIONAL SOFTWARE DEVELOPMENT


The Core Skills All Software Developers Need
Posted by Basil Vandegriend on April 10th, 2009. Categories: learning Tags: learning, software development Software development spans a wide gamut of technologies (e.g. C, Java, and Ruby) and environments (e.g. embedded, desktop, enterprise, web, computing infrastructure, and scientific). Despite all the variation, I believe there are core software development skills that you must possess in order to be an effective developer across most, if not all, of these different scenarios. More specifically, I believe that your level of ability as a software developer is in large part determined by your mastery of these core skills. Intermediate-level developers should have used all of these core skills and be competent in most of them. More junior developers will likely have gaps where they lack familiarity with some of these core skills and need to increase their competency with the others. Senior developers should have achieved mastery of most of these skills, be competent in using the remainder, and should be able to coach less experienced developers in the use of these core skills. These core skills can be used both as an evaluation tool and as a professional development guide. Obviously these skills should be assessed in job interviews, but I also find it beneficial to assess developers joining the team, especially the more junior, and assign tasks and provide training opportunities based on this assessment. The core skills needed by all software developers are: Core Skill Read Code Write Code Design Software Awareness of the Software Development Life Cycle Use of Libraries and Frameworks Debugging Use of Integrated Development Environments Use of Version Control Automated Unit Testing Refactoring Description The ability to understand an existing code base in order to analyze its behavior and make fixes or enhancements to it. This does not include any significant amount of design just the basics of coding. An example is being able to write a method given the desired behavior (inputs, outputs, pre-conditions and post-conditions). The ability to determine what code is necessary to achieve some specified functionality, particularly the higher-level structure or organization of the code. This is an awareness of the 'big picture' of software development beyond just writing code - how the other life cycle stages (requirements, design, testing, and maintenance) impact coding and vice-versa. This includes an understanding of the types of methodologies (e.g. Agile or Waterfall) that can be used to progress through this cycle. This skill could also be called "Reuse Existing Code". This skill includes the ability to search for and evaluate libraries and frameworks based on how effectively they meet your needs and the ability to integrate the chosen package into the software you are writing. The ability to analyze the behavior of code to diagnose a problem and find the underlying cause. This includes but is not limited to using a debugger. The ability to effectively use modern IDEs and an understanding of their strengths and weaknesses. This skill includes basic use of a version control tool as well as a general understanding of software configuration management. This is the ability to unit test code by writing automated tests. The ability to revise existing code without impacting its functional behavior.

This goes beyond simply writing a build script to include other related automation like continuous integration, Use of Build Automation automated deployments, and static code analysis tools. I have deliberately excluded skills that are not specifically about software development. Some of these general skills are very important to software developers (as well as other professions) and are necessary in order to excel as a developer. Examples of such skills include the ability to communicate verbally and in writing, the ability to work well with others in a team setting, self-discipline, and personal organization. I expect this list to be contentious. I may have missed a few skills you feel are core or may have included skills that you feel do not belong. Let me know via a comment below what skills you feel should or should not be core. Update: I revised the description of the skill "Debugging" based on Jacob's comment below.
Tweet

18 Comments on The Core Skills All Software Developers Need 1. Jacob says:
April 10, 2009 at 6:24 pm

The only thing I would disagree with is that I think the skill of debugging (which is certainly core) need not have anything to do with using a debugger. Debugging is the skill of quickly searching out and fixing bugs the most important part of that skill is being able to rapidly isolate (based on the context and the bug description) what component is causing the bug. The debugger can be a useful tool but a senior developer should not be dependent on it. Just my opinion of course.

1 of 3

2/16/2013 4:48 PM

The Core Skills All Software Developers Need Basil Vandegriend: Pro...

http://www.basilv.com/psd/blog/2009/the-core-skills-all-software-develo...

Id also make a broader argument that in many cases what makes a senior developer is not skill but habit sure, its important to know how to write unit tests, but its far more important to _actually do it_, for every unit that makes sense to test. Similarly, refactoring is not simply an ability but a habit; the tendency to always leave code better than you found it. You cant have (and shouldnt have) the habit without the ability, but the ability by itself doesnt help much. 2. Basil Vandegriend says:
April 10, 2009 at 9:22 pm

Great points, Jacob. Im going to change the definition of debugging in my article as a result. I particularly like your point about habit being key, although I prefer the term disciplined. 3. Danny says:
February 1, 2010 at 8:44 am

Excellent comments Basil Vandegriend. Im a Computer Science student in my 2nd year and I found your comments very useful. 4. YongYong says:
June 27, 2010 at 10:41 am

This is Brilliant! I am from Electronics Engineering and doing a Final Year Project on the Computer Engineering. The lack of many skills mentioned made my progress very very slow. Thanks a lot. 5. Wojciech Markowski says:
November 3, 2010 at 4:50 pm

Post over a year old and Im still finding it the best point to start self-assessment. Im quite experienced programmer and found it extremely difficult to evaluate myself as software developer. Your post made me aware of my weaknesses and strengths. I cant wait to share the link with my team. Man, I wish I knew this all 5 years ago! Many Thanks. 6. Basil Vandegriend says:
November 3, 2010 at 8:13 pm

Hi Wojciech. Im really happy you found this useful and I appreciate the kind words. Best of luck in applying this. 7. Jim says:
January 22, 2011 at 10:19 am

Technical skills are important in the software development industry. I think the desire to constantly learn is even more important. I wrote a post about it on my own blog after read this post and a few others. For all that are interested: http://www.theblogaholic.com/2011/01/22/mostimportant-software-development-skills/ 8. younis says:
February 11, 2011 at 12:24 pm

Very good article indeed and a very nice comment by Mr. Jacob, and mr. Jim Hats off 9. Parthi says:
July 6, 2011 at 8:31 am

I am having all those skills(I am B.E Computer Science Graduate)but not in good job, still I am lacking. 10. krisinte guido says:
July 28, 2011 at 11:45 am

Found your article the most helpful one of the 20 I reviewed. I do not have a technical background, but needed to help a client with a job description for software developers. Your article was great for that purpose. Thank you. I also quoted your website as the source on what I provided to my client. 11. Krishan says:
October 1, 2011 at 3:49 am

Very clearly mentioned basil. I am a software developer and have started working since few months only. I knew just coding wont be enough and to excel as a software engineer you need to be good in everything related to software develepement. Most of the stuffs mentioned are helpful. Understanding old code is kinda boring though and working with tools like ut automation tools, new compilers and searching for existing library functions always play with my patience.

2 of 3

2/16/2013 4:48 PM

The Core Skills All Software Developers Need Basil Vandegriend: Pro...

http://www.basilv.com/psd/blog/2009/the-core-skills-all-software-develo...

But these things need to be improved. Thnx a lot! 12. Habib says:
December 5, 2011 at 10:39 am

Very helpful. I think you have covered the core. I was self-assessing my skills as developer and your article allowed me to pinpoint improvement area thanks 13. alex says:
April 14, 2012 at 12:01 pm

Isnt having strong math skills a strong requirement? 14. Basil Vandegriend says:
April 15, 2012 at 4:39 pm

@alex, it helps but I wouldnt call it a requirement. Strong analytical / logical thinking abilities are more important. 15. disha says:
May 14, 2012 at 2:42 am

My logical skills are good but my analytical thinking isnt that great so is it ok for me to pursue a career in software development? Please help. 16. Basil Vandegriend says:
May 15, 2012 at 9:03 pm

@Disha, if it is something that really interests you then give it a try. Analytical thinking skills will improve with experience. 17. Ebenezer says:
May 23, 2012 at 7:40 pm

Excellent post. you really cleared my doubts. i am a third year student in computer science and Engineering. Will be chosen my stream from next academic session. This has really helped me now my strengths and weaknesses when it comes to software development. 18. Riyaz shaikh says:
October 18, 2012 at 8:04 pm

nice 1 for those who just begin to study of software developement Leave a Reply Name: Email: Website: (Not displayed)

Basil Vandegriend: Professional Software Development Copyright 2005-2012 by Basil Vandegriend. All Rights Reserved.

3 of 3

2/16/2013 4:48 PM

You might also like