Saturday, 22 March 2014

Fresher Software Developer - What to learn/know for better career growth?

"I am a fresher (or trainee) software developer, can you please advise - what should I learn/know for better career growth?" --- Trainee or fresher developers ask me such question many times and also I see similar questions asked in many forums. So I decided to publish my quick thoughts along with below mind mapping diagram.

This post is most relevant to entry level programmer (of Java or other OOP languages). 


(Right click the image - Open in New Window - Zoom it)

My Thoughts

As a matter of fact, just being expert in coding skills would not be sufficient to grow the career in software application development and maintenance. To explain it further, below are generic thoughts, but examples are given with respect to Java platform.

  1. Certainly the most important parameter is to be efficient in the selected programing language and related standards/frameworks/servers/IDEs (e.g. Java, J2EE, Spring, Hibernate, jUnit/TestNG, Tomcat, jBoss, Eclipse...).

  1. Apart from coding, you must have knowledge or awareness of standard practices or techniques for the code review (meet your friends - static code analyzer tools), unit testing (e.g. TDD, BDD), source code versioning (e.g. CVS, SVN, Git), build tool (e.g. Ant, Maven, Gradle), code reverse engineering, code refactoring, etc.

  1. Understand the different phases of software design life cycle (SDLC - requirements, specification, architecture, design, construction…) and related methodologies/processes.

  1. Build strong knowledge in object oriented programming and design. Apply OO fundamentals, Design principles (SOLID, GRASP), Design patterns  and Anti-patterns in coding as applicable.

  1. Know the guidelines of effective API design & used architectural styles and patterns in the project.

Final Summary

When you start the career,

Spend your 80% time --- for building coding expertise in chosen programming language and related standards / frameworks.

In the remaining 20% time on regular basis --- you should explore other software development and design related areas such as -
  • Standard practices or techniques for code review, unit testing, source code versioning, build process, code refactoring, reverse engineering…
  • Software development methodologies / processes
  • OOP concepts, Design principles, Design patterns, Anti-patterns
  • Design effective APIs
  • Architectural styles and patters

As you grow your experience, gradually you should swap above mentioned time spending ratio in reverse way. 

Disclaimer 

I have not mentioned the importance of required soft-skills / non-technical skills as part of this post. 

No comments:

Post a Comment