You understand the syntax. You know how to get a computer to do what you want. Maybe you’ve even finished a few programs. Now what?
Reading a few key books and applying the knowledge will take you from an average programmer to an expert. Any programmer can solve a few problems, but expert programmers must be far-sighted. They must not only think about solving the current problem, but how the solution fits into the larger scheme. You must learn to design the overall project to be readable by humans, be general enough to avoid wasting time handling special cases, automatically test itself (so future changes will not invalidate previous work), and be organized into silo-ed files to avoid spaghetti code (messy code where debugging requires weaving through many files of unorganized code) and be prepared for future expansion. Knowing how to do things right the first time can save countless hours of misunderstanding, refactoring (rewriting large sections of code to allow for simpler code, less repeated code, or a new feature), and confusion.
The top three books I recommend are:
The Pragmatic Programmer: From Journeyman to Master – kindle, paperback, or online – generally accepted as one of the greatest books about programming. It’ll take you from being able to write single scripts to full functional software projects ready for future expansion. As a bonus, it’s easily readable through its great use of anecdotes.
Design Patterns: Elements of Reusable Object-Oriented Software – kindle, hardcover, or online – outlines several general programming problems and the optimal solutions that have been found to solve them. This will help you better think about how to address problems in re-usable ways.
Introduction to Computing Systems: From bits & gates to C & beyond –paperback or hardcover – the first book I read in college. This book will teach you how computers actually work. It’ll give you a leg up on other programmers through giving you a deeper understanding of the most efficient way to solve problems while others guess how long their code will take to compute.
Seriously, I cannot emphasize this enough. When you learn a new concept, are curious about a new design pattern, or just have a goofy idea, write a new program. Working on projects on your own time gives you more experience, builds your resume, and may even provide some income.
Go to hackathons
Hackathons allow you to travel all across the country (or even world), network with other passionate programmers, eat tons of junk food, get swag and enough t-shirts to fill your wardrobe, and potentially earn prizes. It’s a great time and it’s all free. They’re are fantastic opportunities for developers. If you can, I recommend checking out startup hackathons in particular. Building your coding skills is great, but learning the business side will round you out and improve the likelihood your future project launches are successful.
Coding challenges are another great way to further your skills, demonstrate your abilities, and have some fun.
HackerRank is a project where you can test your coding skills with a variety programming challenges directly in the browser. This one is great for beginners as you don’t need to set up your own environments (software and ofter tools necessary to turn code into a running program) and it runs a variety of tests for each problem that will force you to consider edge-cases (extreme input values causing unexpected results or crashes). CodeChef and TopCoder are other similar alternatives.
Project Euler will be particularly fun for the more mathematically-minded, but, as math is often key to the most efficient solutions, is good for everyone. The site has a constantly updated list of math problems that will take a computer program to solve. Brute-forcing (trying every possible combination and checking which one works) the solution can take days on a fast computer for some of the problems, so using both math and programming skills to minimize the potential solution set and making the code as efficient as possible is crucial.
All the challenges track of your progress amongst the top programming minds in the world, so you’ll know how you rank and be able to use these sites as proof of your ability.
Once you have a good idea what you’re doing, open-source projects are the next step. Open-sourced projects let you read code written by expert coders. You’ll be blown away by what they can do. Often, open-sourced projects allow anyone to contribute to the code as well. This will let you volunteer your time to a worthy cause and potentially get feedback down the road.
New coders are recommended to write comments (sections of the text that is not read by the computer and turned to code, but instead written to explain the surrounding code to fellow programmers). Everyone knows that writing comments in code is good practice, but even expert programmers are notoriously bad at it. By writing them, you’ll learn to read and interpret code quickly, get more exposure to well-written projects, and be helping out the same people you may want help from later on.
Join the community
Finally, get involved with the community. Teach others. Even when you’re just starting out, if you find a question you know the answer to, answer it. You’ll consolidate your learning, contribute back to the people that helped you, and develop a name for yourself as a knowledgeable individual. Stack overflow is a great place to get started. Beyond teaching, try to stay up to date with hacker news, /r/programming, and news sources, podcasts, and conferences specific to whatever specialty you develop, such as WWDC for Apple programmers or Rails Conf for Ruby on Rails programmers.
Did I missing something? Have your own tips for improvement you’d like to share? Maybe you just want to share some good ol’ programmer humor? Leave a comment and let me know!