Personal Blog of Rob Sayers

Advice to young programmers

Last year I had the opportunity to speak to some young people who were taking part in a coding summer camp. It was a Q&A session where I was asked a variety of things, including “Vim or Emacs”, to my surprise, but a lot of good questions about dealing with teams and what technologies to learn. This experience got me thinking about things I would tell myself if I could go back in time and meet the teenage version of me.

I'm not a fan of the many “expert” blogs out there claiming to give great advice on this topic or the next. Be clear that I'm no expert, and am possibly full of it. But I've been coding since the age of 12, and professionally since 18. Now at the grand age of 35, I feel like I have at least a few tidbits of information to pass along. Please, however, take it all with a grain of salt.

Don't sweat your language choice

One of the questions you see most frequently on forums is what language to pick. This question is rooted in sound thought. You want to make sure you invest your time learning something that will be lucrative, enjoyable, and have a long future.

Instead I would advise you to pick a language with which you are already familiar and work on projects and solving problems in that. With few exceptions, there is little that is fundamentally different between languages. What you really need to focus on is getting better at concepts. When to use loops, how to implement different algorithms, etc. are all concepts that are independent of language. Once you can solve a problem in Java, you'll know what you need to look for to do the same in Python. Once you have some experience under your belt, switching languages becomes much easier.

Experiment with different languages

Above I said that most languages do common things the same way. This is mostly true. However, there are some which are radically different. Playing with these will expand your tool set and cause you to think of problems differently. I recommend the following:

Think of yourself as an engineer.

Professional programmers can be found with a wide variety of titles. Programmer, developer, engineer, architect, etc. Of all these, I tend to prefer software engineer. I think this gets you in the mindset of what it is we really do: Use our knowledge of software and related systems to solve real world problems. In my opinion this also creates a mindset where you try to use the most effective tool for the job rather than what you tend to favor most.

Always have side projects

Always have something in the works. Even if you don't finish a single one, it's good practice to code outside of work. It can be as easy as a script to automate a task you frequently do, or something as complex as a video game. Aim high, get out of your comfort zone, and get used to jumping into a project without all the information. Truth be told, that will be the case most of your professional life. Your side projects are great practice, and they also let you work with technologies that you might not get to use at work. Are you stuck in a PHP gig and long to work at a Ruby shop? Start working on some projects in Ruby to gain that experience. I once applied for a job as a Java developer, and my experience with Ruby helped me land the position as they also had some Ruby code that needed maintenance. Even though it was outside of the job description, and none of my Ruby experience was professional at that point, the years of hobby programming I had done paid off for me.

Learn your tools and learn them well

There are a lot of tools that surround the act of programming. Compilers, package managers, build systems, editors and IDEs. Learning your language should obviously be key, but take the time to learn how all the other tools in your ecosystem work and learn them well. Of these items, I would say your programming environment is the most important. Learn this inside and out. I can not even begin to count the hours I've saved because of the ability to record macros in Emacs, or the refactoring capabilities of IntelliJ. Whatever editor you use, find blogs, Reddit communities, books, etc and read all you can. You'll find the investment you make in learning your toolset will pay off many times over as you progress.

Read, Read, and Read More

When I started programming, books were still the best way to self-learn software. I was learning programming for about 3 years before I ever touched the Internet. I only had a short stack of books on BASIC programming. Had I been born later, I would have started my path surrounded by an endless supply of examples, advice, tutorials, screencasts and more. I still think books are a good way to get some foundational knowledge. I recently decided to learn Rust, and after scanning some basic material on the web site, I went ahead and purchased Programming Rust which is a pretty comprehensive guide to the language. Beyond that I can also browse /r/rust and Stack Overflow's most frequent questions to get more real world information. Finding source code is also easier than ever thanks to sites like GitHub.

Beyond finding information for specific languages and topics, I also follow /r/programming and Hacker News which are both great sources of varied programming content. I find lots of articles about topics I would not have thought to search for on my own, and often find languages, libraries or projects that pique my interest and get me started learning something completely new. It's a fantastic way to keep your skills sharp and supports all the other topics I've listed above.