March 26, 2020

The Top 5 Software Developer Skills

What skills regardless of what type of programmer are important and will give you a ton of leverage in your career multiplying your productivity results and the quality of everything that you do?

Here we're going to cover the top five skills for programmers that too many people overlook if they're focused on the latest trendy languages or frameworks.  But the truth is you're really gonna have a bad time if you overlook any one of these. I'll give you some specific examples from my four-year career as a developer.

Why Listen to Me? I'm a Self Taught Developer

If you're new here I'm Aaron Jack. I went from broke English teacher to San Francisco software developer and left that 200k job at Uber company behind for my freedom to become a freelance developer I'm also the founder of Freemote the freelance developer Bootcamp which takes you from zero to a profitable freelance developer.

1. Keyboard mastery

The first skill of five is keyboard mastery. What does keyboard mastery mean? Well it means three different things:

  • The most important part is getting down-touch typing that is typing on your keyboard without needing to look at it for the longest time.

I actually thought everyone could do this but then I realised I just played a lot of World of Warcraft when I was a kid.  This might seem like a small thing but it's really not all those milliseconds where you're looking down and then looking back up and looking back down again is costing you a fortune of time in the long term.

These little delays are limiting the bandwidth between your brain and what you put on the screen so you're creating a limitation or the bottleneck for yourself by not transferring these ideas faster.

if you can't do touch typing you should really learn how to do it today

  • Once you've got that down the next part of the keyboard is the learning of shortcuts whether in your code editor or on your operating system.

It's actually true that how fast you can type doesn't matter as much as how fast you can navigate knowing just one small shortcut like ''command+tab" to switch programs on Mac or ''alt+tab" on Windows can save you hundreds and hundreds of hours over your career within a code editor like VS code.

This can be "command+p" to open a different file rather than looking in the file browser. "Command+arrow" to go to the end of the line. "Command+backspace" to delete the whole line.
And here's a little bonus trick. To navigate around your editor faster you can decrease the key repeat delay and increase the key repeat speed to the maximum.
keyboard setting on Mac

Once you have the touch typing and the shortcuts down you can then focus on your raw typing speed which you can always make faster. It's pretty obvious this is also going to speed things up whether you're writing code comments or entire docs which unfortunately is a part of being a software engineer. With all this together we could say that typing speed is the constant shortcut of the multiplier and touch typing is like an exponent going from one to two.

2. Debugging

Debugging sounds boring like it's not as important as sexy topics like system design code syntax but not to me. That's kind of crazy because it's so damn important as someone who talks with relatively new programmers every single day you would be shocked how many people say "It doesn't work!" and "I don't know why?".  To all these questions I just say "Did you try printing out the value?". And the response is then "Oh, I'll try".

If you are in doubt print it out,  print the values inside of a loop, a value before and after a function. Just print everything! This is a simple and effective form of debugging adding some additional tweaks to your debugging workflow on top of this can have major implications for your productivity too.

I'll use myself as an example. Here are things I should have been doing for months and years before I actually started doing them. Let's say I was having issues with CSS on the Front-End now for the longest time I was just randomly changing things until something magically worked. In other words taking the brute force approach but what I really should have been doing from the beginning was looking in the Chrome console and going to both the style and the computed tabs you can see not only which styles are being applied but also what specific file and what place in that file they're coming from.

It was the same with network requests and javascript I'd write a bunch of error handling code just to print out my error response in body but that information is right in the network tab if you just click on the request for back-end debugging. It was absolutely terrible I would just put print statements everywhere, recompile, rerun them over and over and over again. What I should have been doing was just use built-in debuggers to step through each line one at a time and you can see the values of all the variables.

Python for example has PDB. The Python debugger you just import it and you can step through. Also, built-in debugger interfaces that are really nice like GoLand Pycharm and so.

When I started using these to write production code my life changed forever.

3. To learn the new syntax

Skill number three is skimming through the text. Sounds cliche but the Internet really is your second brain and you need to learn the new syntax constantly, parse through articles for the most important info, read docs and forums to solve issues, and get specific code snippets.

99% of what's out there is just noise and you have to be able to filter through it fast.

I would even say that you don't have to remember anything when you get good at it.  This is anything like a hash table you just has the key or the search term in your head and you can retrieve the value from Google.

For example, I'm not ashamed to admit that I've been writing HTML for over four years and I still google input element every time I create one. Even though I'm 99.9% sure how to do it I just like to be 100%.

So it's applicable for you here are some specific examples or skimming tricks in Mozilla MDN or any other type of docs if you more or less know what the code does but forget how to write it you can skip the description or top section and just skip down to the exact example.

If you need the way I search through stack overflow is by always skipping the answer going straight down to the questions.

You can try a few in rapid succession if you're not exactly sure what you're looking for or what like to call a "close proximity" term for example. In the jQuery docs, you might forget what the toggle method is called it adds and then removes a class depending on the state of that element. You know add a class is a similar method so you can just search for ''add class'' and then you know that'll bring you at least near "toggle".

4. Time optimisation

Skill number four is time optimisation. What is it that separates a 1x developer from a 10x developer from a 1000x developer like John Carmack,  Notch, or Satoshi Nakamoto?

In other words, what drives developer productivity to be such intense different orders of magnitude. Well, it's by focusing your limited time in a day on where you have the most leverage through micro and macro time optimisations.

You have to ask yourself continuously at short intervals is "What I'm doing right now the highest leverage activity?".

New developers get tripped up so much on small details creating unnecessary functions, classes, and abstractions and going down the rabbit hole on things that don't even make a difference. They say with creative writing to write drunk and edit sober. I say code drunk or rather code like you're drunk get it working and then clean it up later!

Here are some specific time optimisation tricks:

  • Timeboxing set -  a fixed amount of time to work on something. For example, 30 minutes which does a couple of things you won't get stuck trying to center a div all day and it motivates you to find a good enough solution that you can optimise if you have extra time.
  • Tuning out all distractions. If I'm with someone and I hear their phone vibrating on the table with notifications popping up I just know they don't get much done. All my notifications on my phone are off.  I check them when I choose to check them.
  • Reuse code that could be a library a snippet from codepen or so on. Just don't reinvent the wheel and lastly get help when necessary a minute of your mentor's time could actually save you hours of being stuck.

5. Think two steps ahead to build your App

You have to be able to predict the best and the worst-case scenarios. There's something called the happy path in the developing world this is the way your app would work if your users were perfect angels. They use the same browser screen size and operating system as you, clicking only on the exact things you want, in the right order with the right inputs.

Now, this is of course not how things are in reality. You have to be able to predict all the paths not just the happy path. Users doing the most terrible things imaginable to your dear app. Having this foresight allows you to write what we call robust apps that can handle any error and even the most hideous browser.

This foresight can also mean creating an admin dashboard or ongoing support for your users you also have to be able to predict how long your own deadlines will take.  Because your team members, your clients, and your manager will all be counting on you. Of course, you want to be realistic but you also want to be optimistic while factoring in those unknown things because it will pop up that you can't yet imagine.

And lastly, for foresight, you need it for your own career as a developer you have to base your learning and career path on not only what's popular now but what's probably gonna be popular in the next five to ten years

I don't want to brag but back when everyone was saying what is better React, Angular or View I was saying React. Just go React 100%! And I was actually right.

Now my prediction is since the economy is getting more globalised things are shifting towards decentralised labor.

The best-equipped developers are going to have freelancing capabilities and my recommendation for freelance is to learn e-commerce development.