If that’s what being a developer is, what makes someone really great at this? First, a great developer is someone who is exceptionally good at analytical and abstract thinking. You need to be able to take a system apart, analyze each piece and figure out how it all fits together. If you’re the kind of person who even thinks about being a developer, you’ve probably done this from an early age. Growing up, David here would spend hours in his best friend’s garage taking things apart, computers, vacuum cleaners, TVs, whatever they could get their hands on. If analytical thinking is at the core of being a developer, how do you get better at it? Simple, by finding ways to feed the analytical side of your brain. Study math, science, logic, proofs, even puzzles, anything that emphasizes understanding and applying concepts rather than just memorizing facts and figures. Dive into existing systems and figure out how they work. Ask yourself what problems the designers were trying to solve here and why they solved it the way they did. Take things apart and put them back together, literally and metaphorically.
Analyze the games you play and the software you use to figure out what makes them work, why did the designers did it the way the did, how they could’ve done it better. All of these things will build up your analytical thinking and make you a better developer. This touches on the second most important trait of a developer. Every developer has to solve problems but what separates good ones from great ones is their ability to solve them quickly and elegantly and often what makes the different there is having a wide body of tools and experience to draw from. Think of it this way, I’m pretty sure that if you gave me the tools, I could make something resembling a tree house. Now give those same tools to a real carpenter, and he would do it much faster and end up with something much less likely to kill you. The different between me and the professional is that the professional knows what tools to use for each job, specific techniques for solving problems he’s seen before and a whole lot more about what needs to be done. The same applies to programming. What separates the experts from the novices is a wide knowledge of what tools and techniques exist and a deep knowledge of when and how to apply them.
How do you get better at this? By being an explorer. Computer programming may have been around a while, but it’s still very much in its infancy. New techniques and approaches are being developed all the time. If you want to be a great developer, you need to stay on top of these changes. When new languages, frameworks, techniques or methodologies surface, explore them and see what they can tech you. Don’t just read about them, get your hands dirty and write some code. You may find a new tool that’ll be perfect for a job someday or a new library that does exactly what you need, a language that’s tailor made for particular problems, or you may just learn a new approach to solving problems. The goal is to accumulate as many tools on your tool belt as possible so that when the time comes, you’ll know exactly what to use. Unfortunately, exploration is generally discouraged in the workplace often for good reason. Your boss doesn’t want you to be constantly trying out the latest technique or language on a critical production system, so most of your exploration will happen on side projects outside of work, and that’s just part of being a good developer.
The best developers are constantly writing code and exploring new tools and techniques in and out of work. Of course, exploration also means learning from other people. Everybody approaches problems differently so looking at how other people solve problems is essential to widening your perspective and learning to be a better developer. There are a few different ways to do this. First, read other people’s code. There’s a wealth of sample and open source code available on the Internet. Don’t be afraid to take an existing project apart and see how it works. You’ll learn how they structure the project, how they solve particular problems and probably what they could’ve done better. Second, find smart developers to work with. If you’re a student, try to get an internship at a company where you’ll be writing production code. Find an open source project that interests you and start submitting fixes and suggestions. When you’re on a team, seek out the more experienced developers. Look at their code and ask them to critique yours.
Finally, get involved in the broader community. There are a dozen places to do this online, Hacker News, GitHub, IRC, even good old Slashdot or Stack Overflow. Better yet, get involved in open source and give back to the community. If you’re in a major city, find a local developer group to meet up with. All of these will help you to explore the wide, wide world of programming. They’ll teach you new ideas, new techniques and new ways to solve problems. That’s it for part one. Next week we’ll be back to talk about the importance of communication, as well as many other skills a developer needs.