Five people in suits looking at a laptop all business-like.

Learning programming during virus season

During virus season I’ve gone through the same emotional journey as everyone else in the world — worry, anxiety, loneliness, grief — all too familiar to us all now. I’ve spent a really long time wondering how I can use my skills to help people through this time.

From speaking to friends, it seems a lot of us are trying to channel excess time and nervous energy into something productive. For some folks, this will include learning new skills. Many of us still aren’t able to physically return to a workplace, and are looking to level up during this time.

As someone who’s passionate about coding, and furthermore, as someone who has learned a lot through self-study, I wanted to share some of the things I’ve found most helpful in my own journey towards learning coding. If you’re researching which direction to focus on first, here’s my two cents on the five programming languages that are most useful to know. And below are some tips on learning to code that I’ve put together from my own experience. These may not be helpful to everyone, but I hope you get something from reading this. Don’t hesitate to reach out if you have questions — I’m happy to help curious minds grow!

Build things

So, build some stuff.

Then build some more stuff. And when you’re done with that?

Build again.

Looking for ideas on what to build? Raji Ayinla has some great suggestions for how to get practise projects under your belt. The more hours you spend actually coding over the course of your career the better you will be. Most importantly, know at the outset that you will make mistakes. Your first code will be glitchy and bug-ridden. Don’t sweat it!

Keep pushing, and don’t fall into the trap of comfort-coding things you’re familiar with.

Avoid things that you know are within your skill-set (unless you really need a pick-me-up). Challenge yourself with projects that stretch your abilities. Be relentless, learn everything you can to up-level yourself and ultimately build the thing. Use a tool you haven’t used before, develop for a new platform, write code in a new language.

Remember, you don’t have to publish what you’ve built or show it to anyone, you just have to build.

If you build, here’s what’s going to happen:

Sharpen your skills

To be great at programming, you need to know:

  • how to invent effective abstractions;
  • how to debug complicated issues when they arise;
  • the quirks of the platform (web, iOS, Android, HTTP, SQL, etc.) you’re writing for inside-out;
  • the ecosystem of tools available to you for solving a problem, and
  • how all the pieces fit together to form a system.

Some of this simply cannot be taught. You need to spend intentional time in code that is designed to push your limits. If you persevere (I know you can) you’ll see your programming skills sharpen over time.

Find your flow

For the best programmers I know, a normal weekday looks like this: 4 hours of meetings, 3 hours of code, 1 hour of lunch/misc. Then they go home and spend time with their cats (or kids). In those 15 concentrated programming hours in a week, these programmers can produce incredibly impressive software that meaningfully moves the business forward.

How is this possible?

When working, these programmers enter a state of “flow” where they’re fully focused and time flies by. During this entire time they’re energized, their brains are fully focused on the problem, and at risk of sounding incredibly cheesy — they’re at one with the computer. Try finding your own flow state — there’s no better time to do so than now, when we’re all still at home. Put on some music (past few weeks for me has been Dedicated Side B), start coding, and keep going.

If you find you’ve been coding for three hours without interruption and barely realized it, that’s flow.

Expand your tool chest

And here’s the super-cool part: the more tools you develop familiarity with, the faster you’ll be able to learn other, even newer tools. And that is a vital skill in the continuously changing landscape of coding.

Become a self-sufficient systems architect

Build a portfolio

And hey, I know firsthand how disheartening it can be sometimes. I’ve had builds go so badly I wanted nothing to do with them after a few months, let alone including them in my portfolio. It’s hard to put aside projects that have turned time and devotion into disappointment. We all have those builds. And for each one of those nightmare projects, take the time to understand what you’ve learned from your mistakes, and then move on to the next. At this stage you want to optimize for learning, not for results. Move fast by moving on quickly. Each failure teaches you something, and bringing those learned skills to the forefront is what will bring you success in this beautiful, complicated, career path.

Product engineer at Airtable. Previously Facebook. @calebmer on Twitter