Recently I was watching a video by John Carmack the creator of Quake and Doom on the process of software development. He has has been developing software for over 20 years and is at the top of his game. And yet he claimed that he’s learning a lot recently. Learning? You would think that he knew everything already. He is the grand daddy of game engines. What can anyone teach him?
That’s the beauty of being a developer. You never stop learning and the minute that you do, you stagnate; you get stuck in a project or a job that you end up hating. Or it causes your eventual burnout. Change is constant, as a software developer if you don’t embrace change then it ends up being your worst enemy. There are some virtues that make a developer stand out amongst the rest. It doesn’t mean that he’s a ninja or rockstar or whatever label you want to put on this kind of developer. It simply means that he’s honed his craft and has come to respect and embrace all that comes with the territory.
This should be a universal virtue of any human being and not just software developers. Although, for a software developer it means that he must keep learning new languages, frameworks, design patterns, or algorithms. If you don’t, then how can you to tell the good from the bad? How do you know which tool is right for the job. It’s like a painter only using a thick brush throughout his life. Or a photographer taking pictures with just one lens. Would you want to be stuck using a language or framework that’s been obsolete for 8 years? Do you want to be the last one providing support for something obsolete? Probably not, you want to keep your skills sharp so you can work on the next generation solutions to existing problems.
Part of learning is challenging yourself to get out of your comfort zone. Part of that learning is also putting what you learned to practice. Build something with what you learned and only then will it stick. When Apple released Swift, I started reading and watching everything that came my way. Sometimes it felt like my brain was going to explode. Not until I started building apps with Swift that it all started to make sense. I began with a simple FizzBuzz example then made a silly little game. Next up, I am re-writing an old app with a lot of moving parts. Until I figure out how to tackle problems head-on with this new tool no amount of reading is going to do me any good. It’s like a carpenter with a new power tool, just reading the manual is not going to cut it. He needs to get into his shop and make something and it doesn’t matter what he makes.
Refactor Your Code
Have you ever hacked code together from bits and pieces found on the web only to serve a piping hot mess? Yeah, we have all done it and we’ve had great reason for doing it. Deadlines make us do things that we would normally not do if we were given the time to craft a masterpiece. I’m not talking about perfection. I don’t think code is ever perfect but I do think code can be elegant. It’s about accepting that you wrote terrible code and being brave enough to throw it away and start from scratch. Maybe not all the code, maybe just a part of it that will make more sense later when you come back to it. Some code lives for a really long time. Think about the people that would have to maintain it long after you have moved on.
The best way to learn is when you need to explain a concept to another. It forces you gain an understanding of the topic or concept in a way that would have never made sense if were just trying to learn. You don’t necessarily have to address a large audience it could simply be a friend. Teaching comes in a variety of forms such as: writing a blog post, presenting at a local meetup, doing a code review or answering a question on a forum.
Trend is not a Friend
Don’t get caught up in the latest trends. There is a lot of debate raging about which are the best framework or which is the hottest language. Certainly, take the time to learn them but don’t get caught up in taking sides of an argument or allying with a piece of technology because what’s hot today maybe not be tomorrow. Pick the tool that is right for the job that makes the most sense for your project and team.
None of these virtues come with a money back guarantee but if you make this part of your philosphy then you will be better off in the long run.