Understand and respect your users
You are building something for someone. Whether that someone are other people just like you, people mostly like you, or people completely different from you, you need to understand your user. This also means that being a better developer isn't a once-and-done event. It's something you have to constant work at.
So, next time you get a project, care about the user. Understand the user, and make sure the software is the best possible product you can create for that user.
We easily forget how even the simplest of things that we can do are magic to so many others. That means we can't just make them happy. We can't just give them what they want. We have to give them the best experience we can. Great programmers can do that. They know their audience, they know the needs of the users, and they work hard to give them the best experience.
This is true for both GUI applications and libraries and frameworks. We've all had the joy of working with code that that was elegant to use and well documented. A well defined interface with solid documentation is a developer caring about his user: other programmers.
So, care about your users, whether they be other programmers or people who don't know what a browser is.
Know your limitations
The best developers know they can't do everything, and they also know what they don't know. They aren't afraid to ask for help, or to talk things over. Those great developers you know discuss and plan, and rely on a great team. If you want to become a better developer, you need to be willing to admit when you don't know something.
This means asking questions when you are unsure. Checking your ego at the door, and being comfortable saying "I don't know" or "I'm not sure."
One of the hardest things for me to do is to ask for help. Which is silly, of course, because whenever I've asked for help, those I've asked have been more than willing to help. What I'm really afraid of is looking weak, like I don't know what I'm doing, as if I don't belong. It takes a real effort to remind myself that it's okay to ask for help. That I don't always have to have all the answers. That the best solutions I've ever come up with have been when discussing the topic with others.
This also means letting someone else take they lead when they are clearly better with a certain skill-set, and learning from that person. I don't mean that you pass the problem off to them. What I mean is, don't be afraid to adopt someone else's solution. A part of you might think that it will highlight the fact that your solution wasn't as good. What really happens is that you recognized that your solution could be better, and because you were stuck, you sought a better solution. And now you get to implement a better solution. And that better solution makes for a better experience for your end user.
And in the end, that's what matters.
Challenge your limitation
Once you know your limitations, it's important to try and break through those limitations. The obvious solution is to learn what you don't know, and I cover that next. However, not all things are as simple as reading a book, finding an answer on StackOverflow, or finding some article on a blog.
In many cases, it's doing things. Later, I talk about teaching. However, if you are afraid of speaking in front of people, or you aren't comfortable doing it, you'll be less likely to teach people. Granted, you could go the route of doing it from the comfort of your own blog, but you'll be living within your self-imposed limits.
This means never saying you can't. It's fine to say you don't know how, or you've never done something. And the more you do, the harder things will get (because I assume that you've tackled a lot of easier things along the way). But challenges and difficulties shouldn't stop you. You should look at every challenge and difficulty as an opportunity. Treating them as opportunities puts you in the right frame of mind. One of overcoming those challenges and limitations.
This should come as no surprise, but at the end of the day, you also need to keep learning new things. There are many professions were constantly learning is the norm, and programming is one of them. You can, of course, stagnate, and not learn new languages or tools. You can allow yourself to fall behind the curve. But sooner or later, those new tools will become the norm, and you'll be playing catch up.
This doesn't mean you invest equally into all new languages and tools. You have to pick and choose what you are investing your time in. There are far too many new technologies coming out these days for you keep up to date on everything. However, many of these technologies are based around well-established principals.
The mobile-side should be equally obvious. These are two areas that are growing, and as we see wearable technologies come out from Google, eventually Apple, and others, we'll see an increase in the demand for knowing how to work on these mobile platforms. iOS and Android aren't going away anytime soon, and knowing how to write applications for them will only make you a better developer.
It's equally important to teach others. I've covered this briefly in my article on the benefits of speaking, but teaching forces you to learn the topic well enough that you can teach it to others so that they can make use of it.
As a developer, you might know a lot of frameworks and how to use various languages and editors, tools and systems to make yourself more productive. But until you've actually taught people how to use these tools, can you really say you know them? After all, at the comfort of your desk, you have Google and StackOverflow at hand to handle any problems you might run into. You can stop to check email, go get some coffee, and otherwise ponder what to do next.
But when you are teaching, you really are on the spot. Every eye is on you, and when someone asks a question, you either know it or you don't. There is no harm in not knowing an answer to a question. But you have to admit it, and quickly. You have to humble yourself, because to give the wrong answer is the absolutely wrong thing to do at that point.
Is that all?
I'm not going to pretend this covers everything you can possibly do to become a better developer. However, I do know that these are things we should always be practicing. I'm curious if you have other things developers can do to better themselves.