How to become a better software developer
1. Know your language
A language is more than its syntax. It's also a set of best practices, there is an idea behind it, and it's a lot of dos and don'ts. You have to know them as well. Otherwise, you'll end up with code others won't understand and code that will not leverage the true powers of the languages.
That said, you need to know the syntax as well. Otherwise, you will miss out on opportunities to write better code.
2. Limit dependencies to external libraries and know those libaries you do choose very well
There are many external libraries that are helpful. However, you all have to know and learn them. Also, every time one gets updated. Not only do you need to know them, but also every new hire. Often, these helpful extras are already embedded in the default APIs of the programming language you work with.
Do yourself a favor, be very conservative in accepting new, or holding on to existing external libraries. Those you do choose, however, know them very well. For yourself, but also for any new hire.
Document everything. Both your code and any decision you made. It will help others, the future you, and even the current you, since explaining what you do is the best way to verify if you truly thought well about it.
You may often feel that documenting the obvious is something you can leave out, but it is always better to document too much than not enough.
4. Work with people better then you
So you can learn from the best. This means you also have to review each other work. Otherwise, you're not truly working with other people.
5. Train new people
Because the best education is to educate others.
6. Test everything and test it well
Writing automated tests means verifying your assumptions. It also serves as another layer of documentation. Measure your test coverage, and make sure you test any boundary on any parameters (like maximum values, maximum values + 1, empty values, and so on).
Write your test code while writing the production code. I like to split the screen, so I have my production code at the left and the test code at the right.
7. Make it smaller
Don't do a gazillion things at a single piece in your code. Write a function for every logical step, so your code stays readable and maintainable. Also, know your design patterns, but don't overdo them.
8. Don't be too smart
Writing very generic code is a fun thing to do and can make you feel really smart. However, generic code is difficult to understand later on. Also, while the idea of generic code is to be adaptable to change, as soon as the change is slightly different than anticipated, it often becomes something monstrous.
Don't be that smart-ass, just keep your code understandable. Understandable code is also very easy to refactor, so don't worry too much about change. Just follow the best practices and you'll be fine.
9. Limit functionality and build it well
No matter how beautiful your code is, if it's a feature no one needs, it's the wrong code. Always make sure you are building the right thing, that it is something people actually need, then start building.
10. Keep learning
The world of software never keeps the same. Always keep learning. Most technologies I use today are only 4 to 5 years old.