"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.
- 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...).
- 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.
- Understand the different phases of software design life cycle (SDLC - requirements, specification, architecture, design, construction…) and related methodologies/processes.
- 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.
- 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