I do end up spending quite some time after work thinking what is it that makes a Software Developer great? Being a newbie in the craft this is a very pertinent question.
The starting point of course is my mentors. They just seem to get it, while I will take time to come to a solution, my experience has been whenever a codebase question pops up, all it takes is one glance or maybe two for them.
Next come Messrs Spolsky and Yegge. As far as dev potential goes, the Spolsky school of thought prefers the Smart and gets things done while the Yegge one is all out for the Done and gets things Smart. The latter is a recent discovery(for me) and I think the question now is How does one move from Smart and gets things Done to Done and gets things Smart.
Getting things smart, now that is something. Some of it is inbuilt agreed, but what we(newbie devs) do have in our control is deliberate practice. Being a follower of study hacks, we do want to keep learning new things which may be few in quantity but master them.
Some of the things I am working on:
1. Learn to type(fewer glances to the keyboard is a big win!).
2. Start off your day with a sort, flex those algorithmic muscles you have .
3. Read the reference,best practices, design patterns of your favorite language.
4. Open Course ware: Top universities have made entire Computer Science courses available online, see what piques your interest and go for it.
This is my favorite for data structures:
A lot of knowledge will be assimilated from your peers or mentors, that is the nature of Software. My understanding is there is no magic bullet, It is with time and sustained effort the top developers are truly great. Going through the pain as I am now, stumbling out from ignorance into light, I still have to discover what is it that constitutes the essence of a Software developer. For now I am hungry and foolish.