How to become a professional developer
I’ve got an eMail today. The sender wanted to let me know that he was impressed by the clarity of one my answers on Stack Overflow. I admit I am flattered each time this happens, because knowing that my contribution helped someone feels good.
He then asked me whether there was any general advice I’d like to pass on to a young developer. That was a rather difficult question for me, because answering concrete questions on Stack Overflow is quite different from giving general advice to an aspiring developer.
General advice is hard. Basically, if you are too prescriptive, you sound like an elitist bigot. But when you are new to something, concrete advice might be more helpful.
So I chose to do both, explain the things I learned to value in my career, as well as offering some reading I know most of my fellow developers would agree is worth learning.
After I had send my reply, he wrote again stating that this was exactly what he was hoping for, which obviously made me happy again.
Now I figured if he found my advice useful, someone else might find, too. So I am sharing my reply here:
Hi [name redacted],
thanks for your message. I am happy that you like my posts.
I can offer some general advice. I don’t know if it turns out to be useful to you, but here is some things I learned about software development throughout my career.
Long to be professional. That means identifying what it means to be a professional and then try to act like one. If you don’t want to be a professional, you can just as well abandon the entire journey.
Challenge yourself and your ideas frequently. Don’t be afraid to fail. See failure as an opportunity to learn from failures. Obviously, you shouldn’t be reckless when trying things, but try them you must.
Stand on the shoulders of giants. It may be more interesting to only look at the newest and hippest technology, but it is foolish to ignore the wisdom of the past. Current material is often distilled knowledge. Digging in the past can help you make more sense of it and connect the dots.
Focus on concepts, not on Tools. Tools are realizations of concepts and they sure do make our life easier, but they are just tools and they will go away eventually as new and better tools emerge. Your single most useful tool is your brain.
Look outside the box. It’s easy to just focus on the technical side of software development, but software development is essentially a people activity. Delivering successful software is a team effort. Learn how to improve yourself as a team player.
Socialize. Go to conferences, meet-ups and user groups and other places where developers are and talk to them. Having a discussion that forces you to express and argue your theories about programming is a great way to make you more certain about or reject your opinions.
Now I am not sure if this is what you were looking for in general advice and since you asked for reference, I’ll give you some more concrete pointers below.
The first ten books in my reading list at http://careers.stackoverflow.com/gordon really shaped how I approach and view software development. In general, the Addison Wesley Signature Series books are all quite good. It cannot hurt to also get a decent book about Software Engineering (try Pressman), but expect very dry reads.
There is also a book called Apprenticeship Patterns by O’Reilly collecting good advice to guide you on your way to Software Craftsmanship, the latter being a movement you want to check out, too.
You definitely want to google SOLID and GRASP if you are doing object-oriented programming. There is also the Google Clean Code talks by Misko Hevery worth checking out to help you with writing testable code.
Anyway, if you just got started, this is all an awful lot to consider. But it’s a journey and it takes time and you need patience and you need the dedication. But you know what: if in five to ten years from now, you’ll open your inbox and find a guy telling you how you impressed him and he’s asking your for guidance, you’ll know it was totally worth it. So thank you for making my journey worth it.
And that’s it. Obviously, this list and advice does not pretend to be complete or correct. Like I said, this is the things I came to value from when I started my own (still unfinished) journey up to now. What are yours?