My Advice to New Developers

February 8, 2019

My Advice to New Developers

I recently read another post like this, and out of the 7 points in it, I only thought 2 of them were really sensible, so I thought being an experienced engineer, I might drop a little bit of my own advice.

#1: Learn the tools native to your primary production and development environments, in that order

If you’re in Windows, then learn PowerShell and the most common commandlets and aliases. Learn how the registry works. Learn about WinDbg, performance counters, and some basics of .NET (unless you’re a .NET developer, then learn all about .NET inside and out).

If you’re in Linux, learn Bourne Again Shell (bash). Learn the most common utilities and how to pipeline output into xargs or grep. Learn about the posix API. Learn how the library loader works, how init works, and how your system daemon/service control works (and firstly, which one it is). Learn how to use gdb (or lldb).

If you’re in macOS, learn most of the same stuff as Linux, but also the macOS configuration system, some major parts of which are very different than in Linux.

#2: Run, do not walk, toward learning functional programming of some kind.

Even if you don’t use a real functional language in your day-to-day job-related duties, you really need to learn the basics of the functional programming paradigm. Function composition, immutability, monads (yes, monads - or at least monadic concepts like “bind”, “map”, etc). This is a deep rabbit hole, but start exploring it sooner rather than later.

If you find that FP is really not your cup of tea, then find another paradigm to explore. I just think FP is perfectly positioned for new folks in particular.

#3 Learn your version control system inside and out.

For nearly anyone who might read this, this means Git. And I don’t mean GitHub, I mean Git. Learn how the repository is constructed. Learn at least all the high-level, user-friendly commands, and at least a handful of the low-level ones.

#4 Write apposite commits and good commit messages

I coined this term a lot of years ago, but nobody uses it. An “apposite commit” is one that is self-contained and self-germane. None of the code in an apposite commit should be unrelated to the other code in that commit, and nothing related to the changes in your commit should be outside of your commit.

Once you have that, it should be simple enough to write a concise but descriptive commit message so that anyone coming behind you later can make sense of what you were doing and thinking, including yourself.

#5 Level up in SQL

Somewhere along the way in your career, you’re going to be asked to write SQL — either by a person or by circumstances — and being able to jump right in when called upon is a big advantage. Also, it’s good to be able to think about what is happening in the persistence layer of your app, and despite the proliferation of NoSQL data stores, the reality is that some sort of relational database (which implies SQL) is still a core part of almost any modern app interesting enough to care about. Even desktop and mobile apps often use embedded relational databases that are queried with SQL.

#6 The most important traits you need to develop aren’t technical.

As you gain experience, your technical abilities will grow. You’ll learn things as you do them, and if you’re reading this list, you’re probably also going to be habitually looking for ways to enhance your technical skills. That’s good! It’s important to know, though, that over the course of your career, it will probably not be your technical skills that really make the biggest difference in your success. There are outliers; real prodigies that can do things that other people can’t do exist, although exceedingly rare. For everyone else, skills that matter more in the long run include:

  • Being able to write clearly. People who can take what’s in their minds and articulate it such that other people are highly likely to understand can collaborate more effectively than those who can’t.
  • Relational skills. This is a large topic that I can’t survey here, but suffice it to say: learning how to relate to and empathize with other people goes a very long way to easing the burdens of working with others. You may even find that you enjoy your coworkers more when you value them and can relate to them.
  • Understanding what’s important to your company. The latest JavaScript framework is probably not interesting or important to your company. What your company is interested in is how to solve problems that are so painful that your customers are willing to pay for them to be solved. This means understanding your customers needs, and figuring out how to meet them by applying your technical skills in a way that is cost-effective for your company and still worth it to its customers.
  • Political savvy. Your company is political, unless you work as an independent contractor (and even then, your clients are political). It is an intrinsic part of the human condition for there to be a political dynamic when groups of people do things together to accomplish some goal. Some people in the group become more influential than others. Understanding the dynamics in your group of people can help you navigate how to have an influence on the things you’re working on, as well as being a part of the set of relational skills that can help you collaborate effectively with people.