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!
The most valuable thing you can do, especially while learning, is to build. Coding is a practical skill, so all the theoretical knowledge in the world won’t refine your abilities more than simply practising.
So, build some stuff.
Then build some more stuff. And when you’re done with that?
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
There’s so much more to writing good code than just knowing a programming language.
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
Some of the most impressive programmers I know can crank out high-quality code by the bucketload (yes, this is a highly technical term all programmers use). You may have seen the 10x programmer meme which appears in the TV show Silicon Valley from time to time. There’s no such thing as a 10x programmer but I do know a couple 2–3x programmers. And do you know how they do that? With perfectly normal and reasonable 40-hour work weeks.
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
There are many tools you can use while programming, e.g. languages, libraries, frameworks, databases, code editors, and command-line tools. You don’t need to know all of them in-depth to be a successful programmer. Instead, focus your approach so you know a little about many of them and a lot about a few of them (Pop Psychology calls this concept the “T-Shaped Skill Set”).
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
The most valuable programmers in the business are those who can take thorny business problems and construct full-system solutions to those problems, both frontend and backend. Starting from scratch to build your own projects forces you to consider both the frontend and the backend, thereby training this muscle.
Build a portfolio
Having a portfolio of your own projects is sometimes useful when you’re interviewing for your first job, or changing careers. If you finish a project (optional) you can put it into your portfolio. Finishing projects is less important than…starting your next project. 🙂
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.