Software Development is no longer considered as an art. But it was made as an engineering practice. A successful software developer is a person who is able to write each line of code with passion. And passion cannot be obtained by any software engineering degree, it must come from within yourself.
Choose one language and learn the basics
Too many beginning programmers try and jump into everything all at once and don’t have the patience to learn a single programming language before moving forward. They think that they have to know all the hot new technologies in order to get a programming job. While it is true that you need to know more than just the basics of a single programming language that you think you would be likely to base your career around. The programming language itself doesn’t matter all that much, since you should be thinking for the long term here. What I mean is you shouldn’t try and learn an “easy” programming language to start.
Aspects of developer’s job may include:
- Software design
- Actual core implementation (programming which is often the most important portion of software development)
- Other required implementations (e.g. installation, configuration, customization, integration, data migration)
- Participation in software product definition, including business caseor gap analysis
- Requirements analysis
- Development and refinement of throw-away simulations or prototypes to confirm requirements
- Feasibility and cost–benefit analysis, including the choice of application architecture and framework, leading to the budget and schedule for the project
- Authoring of by users and implementation partners etc.
- Testing, including defining/supporting acceptance testing and gathering feedback from pre-release testers
- Participation in software release and post-release activities, including support for product launch evangelism (e.g. developing demonstrations and/or samples) and competitive analysis for subsequent product build/release cycles
In a large company, there may be employees whose sole responsibility may consist of only one of the phases above. In smaller development environments, a few, or even a single individual might handle the complete process.
Build something small
Now that you have a basic understanding of a single programming language, it’s time to put that understanding to work and find out where your gaps are. The best way to do this is to try and build something.
Don’t get too ambitious at this point–but also don’t be too timid. Pick an idea for an application that is simple enough that you can do it with some effort, but nothing that will take months to complete. Try to confine it to just the programming language as much as possible. Don’t try to do something full stack (meaning, using all the technologies from user interfaces all the way to databases)–although you’ll probably need to utilize some kind of existing framework or APIs.
For your first real project you might want to consider copying something simple that already exists. Look for a simple application, like a To-Do list app and straight out try to copy it. Don’t let your design skills stand in the way of learning to code.
Learn a framework
Now it’s time to actually focus on a framework. By now you should have a decent grasp of at least one programming language and have some experience working with a framework for mobile or web applications.Try to go deep with your knowledge of the framework. This will take time, but invest the time to learn whatever framework you are using well. Don’t try to learn multiple frameworks right now–it will only split your focus. Think about learning the skills you need for a very specific job that you will get that will use that framework and the programming language you are learning.
Learn design best practices
Now it’s time to go from junior developer to senior developer. Junior developers maintain systems, senior developers build and design them. (This is a generalization, obviously. Some senior developers maintain systems.)
You should be ready to build systems by now, but now you need to learn how to design them.
You should focus your studies on design best practices and some advanced topics like:
- Design patterns
- Inversion of Control (IOC)
- Test Driven Development (TDD)
- Behavior Driven Development (BDD)
- Software development methodologies like: Agile, SCRUM, etc
- Message buses and integration patterns
Learn a database technology
Most software developers will need to know some database technology as most series applications have a back-end database. So, make sure you do not neglect investing in this area.
You will probably see the biggest benefit if you learn SQL–even if you plan on working with NoSQL database like MongoDB or Raven, learning SQL will give you a better base to work from. There are many more jobs out there that require knowledge of SQL than NoSQL.
You have sufficient knowledge of SQL when you can:
- Create tables
- Perform basics queries
- Join tables together to get data
- Understand the basics of how indexes work
- Insert, update and delete data
Practice Coding best practices
When you are writing code, try to make sure you understand what every line of code you write does. The same goes for any code you read. If you are exposed to code, slow down and make sure you understand it. Whatever you don’t understand, look up. Take the time to do this and you will not feel lost and confused all the time.
- Code Complete
- Clean Code
- Error Solving