It’s not true that practice makes perfect.
It’s perfect practice that makes perfect.
If all you do is keep repeating the same bad practices again and again, all you’ll do is make it possible to create bad code faster.
By all means keep coding. But at the same time be critical of everything you do. Always have a jaundiced eye that looks for ways to do things better. Read widely to get new ideas. Talk to others about how they do things. Look at other people’s code, good and bad.
There’s no “sure” way to learn anything that I know of. If there was, anyone could master this.
All questions are rhetorical and meant to stimulate thought.
- Design Patterns – There are probably some specific to a domain but generally these are useful ways of starting parts of an application. Do you know MVC or MVP?
- Basic algorithm starting points – Divide and conquer, dynamic programming, recursion, creating special data types like a heap, being greedy, etc.
- Problem solving skills – How easily can you jump in and find where a bug is? Can you think of multiple solutions to the problem?
- Abstract modelling – How well can you picture things in your head in terms of code or classes when someone is describing a problem?
- High level versus low level – How well do you understand when one wants something high or low? This is just something I’d toss out there as these terms get through around a lot, like a high level view of something or a low level language.
- Agile – Do you know Scrum, XP, and other new approaches to managing software projects? How about principles like YAGNI, DRY and KISS? Or principles like SOLID? Ideas like Broken Windows?
- Developer Environment – How well do you know the IDE you use? Source Control? Continuous Integration? Do you know the bottle necks on your machine in terms of being productive?
- xDD – Do you know of TDD, BDD, and other developments driven from a paradigm?
- Refactoring – Do you go back over your old code and make it better or do you tend to write once and then abandon your code?
- Emotional Intelligence – Can be useful for presentations and working with others mostly.
- Passions/Motivation – Do you know what gets your juices flowing and just kick butt in terms of being productive? Do you know what you would like to do for many many years?