Justin Etheredge recently posted Being Smart Does Not a Good Developer Make, in which he offers several important perspectives in his usual good-hearted way; the one that sparked my neurons was that drive and curiosity are more valuable than raw knowledge to becoming a "good developer."
I whole-heartedly share this perspective. This is probably due to the fact that I've painted myself into a professional corner in many respects. I have no formal education in my chosen profession of software engineering, which has historically put me at a disadvantage in job interviews, when I push to lead a project, and in a lot of interaction with my peers. Nevertheless, I've been able to land the jobs, get the project leads when I want them, and feel confident - if reservedly so - talking with my fellow engineers without sounding like a total poser.
I attribute my success to three things:
-
I've been pretty lucky with my opportunities;
-
I'm insatiably curious about most things;
-
I have two degrees in psychology.
Justin calls software engineering a meta-industry; likewise, psychology is probably the second-best example of a meta-science I can think of (with first place going to cryptography). Digesting all that research on learning, perception, and memory has given me a significant leg-up when it comes to learning new things, understanding someone else's perspective, and communication.
I honestly believe that having and honing these skills is what keeps me employed as a software engineer.
If it was possible for me to add any value to Justin's post, it would be to not limit your exploration to your career. Learning is an active, forceful process - go find something that interests you and relate it back to software design and engineering. Psychology may not be your bag, but learning opportunities abound. Here are two ideas I've taken from my own personal history:
Design and build a birdhouse (or, if you have some modest woodworking skills, a tree house or bookshelf). If you really want a challenge, have someone else design it. What sort of problems did you hit during design vs. construction? How well did you estimate your materials? What sort of mistakes ended up in the final product, and how would you avoid them next time?
Cook a menu by a fickle four-year-old. This is a great exercise in communicating across domains of expertise: you could be a Master Chef, but you'll have no idea how to make Glittery Rainbow Unicorn Fishsticks or Chocolate Marshmallow Beans and Rice without some discussion. Moreover, try explaining to them why their culinary delights don't taste as delightful as they expected. Work with them to hone their ideas and produce something palatable. Think about the communication problems you experienced and how you worked around them - they have a lot in common with communication problems you experience at work.