How I am learning to code

Since quitting college to go all in on freelancing I've been obsessed with two things; growing my freelance business and developing my design + webflow skills.

January 6, 2022

For the last 4 years, I've focused on becoming a great designer, now I want to become a great developer.

Since quitting college to go all in on freelancing I've been obsessed with two things; growing my freelance business and developing my design + webflow skills.

Now that I feel I'm pretty good at both It's time to turn my attention to programming.

Knowing how to code is useful for the freelance business, as whenever you need to go beyond the native capabilities of Webflow you use snippets of HTML, CSS & Javascript.

But my reason for learning how to code are not 'to become a better freelancer', instead I want to build my own software.

I want to become an indie maker/ indie entrepreneur. Specifically, I want to utilise two things to make a living on the internet:

  1. Media - Things like blog posts, YouTube videos and tweets
  2. Code -  The ability to build products and tools

Media and code are special on the internet because they have little to no marginal cost of production. Meaning that the amount of effort I put into this blog post will not change whether 10 or 10,000 people read it.

This ability to infinitely scale while keeping a small nimble team is what appeals to me.

Over the last few years, there are countless stories of small teams making a big impact building their own tools and creating 'content'.

People like Pieter Levels, Dan Rowden,  Anne-Laure, Daniel Vassalo and Paul Jarvis all run some form of media and/or code-based small company making a big impact.

Now learning to code is daunting, there are so many different languages, frameworks, courses and books it can make it tricky to even get started.

I've started to learn programming in the past but every time I let it fall away without ever making any real progress.

In this article, I'm going to share with you exactly how I'm approaching learning to code to ensure that this time I make it stick.

The Languages

A lot of people get caught up on what language to learn, every side has strong opinions but there are no right or wrong answers. The best decision is to choose whatever works for you and stick with it.

You're better off mastering 1-2 languages than knowing a little about a lot.

Indie Maker, Pieter Levels has built multiple million-dollar software businesses writing in a single PHP file for each project. Most developers tell him what languages and frameworks he 'should' use but they've never built anything, they're too busy gatekeeping.

I'm not worrying about my 'stack' of languages because I'm not looking to land a job as a developer. I'm looking to build things of value. You'd be surprised how often great tools start out with some janky code that gets the job done.

Founder of Gumroad Sahil Lavingia designed and coded the early version on Gumroad in a weekend, it wasn't perfect but it didn't need to be.

He'd built a tool that helped people do something they wanted to do, sell digital goods online.

In his book The Minimalist Entrepreneur, Sahil talks about how initially he had to manually send money to each creator on Paypal at the end of the month because he hadn't figured a way to automate it yet.

This kind of scrappy start is exactly the reason you don't need to know everything, you just need to know enough to create value.

Choosing my 'stack' of languages was straight forward, I already knew a little bit of Javascript so I decided to build on that knowledge.

First I'm learning the Javascript fundamentals before moving onto Node + React, down the road I will throw in some form of SQL database this should be enough to build tools.

There are a couple added bonuses to learning this stack for me. First, I can use Javascript in my freelance Webflow projects to add extra functionality. Second, learning React opens up the door to Web 3 development in the future as most Web 3 apps are written in React.

But remember there are no right or wrong answers here, just choose a language and start learning.

Now let's move on to how I'm making sure I stick to it.

Forming the Habit

The most important step is making sure I actually sit down and learn to code, without the habit of doing it consistently I will have no chance.

To form the habit I'm using some steps from James Clears's book, Atomic Habits.

James says that forming a habit requires 4 stages:

  1. Cue - triggers your brain to initiate a behaviour.
  2. Craving - the motivational force behind why you want to perform the habit.
  3. Response - the actual habit you perform.
  4. Reward - satisfying our craving

Using this framework I've created a simple method for me.

  1. Cue - Calendar notification + task on my to-do list
  2. Craving - I want to learn how to build software
  3. Response - I sit down and work through the courses + write code
  4. Reward - I've satisfied my craving to learn how to build software and sitting down everyday to code becomes a habit. I also reward myself after spending an hour coding with getting outside and taking a walk.

In the books he also talks about environment design and how many of our actions are down to the environment we live in e.g if there's always cookies on the kitchen counter you will likely eat a lot of cookies.

Designing my environment optimally is quite simple in this case. All I'm doing is this:

  • Leave a programming book on my desk
  • Keep programming apps on the home page of my phone
  • Use everyday habit tracker on both my browser and phone
  • Keep the courses I'm taking on the bookmark bar of my browser.

These simple cues make it obvious what I need to do.

Mixing it up

I'm not able to stare at a book and absorb the knowledge, instead I learn much better by doing. Video courses work best for me as they are much more practical than any other method.

But I am able to use books and apps to supplement and solidify my learning. Throughout the whole process, I will be using a healthy blend of courses, google searches, building my own project, books, and phone apps to help solidify the knowledge.

Starting with this Javascript fundamentals course from Wes Bos.

Have a project

For information to really stick I need something to actively apply it to.

The first piece of software I want to build is a platform called Makerflow. The idea behind Makerflow is that it will connect vetted no-code experts to companies.

Building a marketplace as my first real project will be a challenge but this will force me to learn much faster and solve problems I wouldn't otherwise face through courses and books.

Through setting my goals high even if I fail at building this platform and turning it into a viable business I will have failed way above where I'd be without an ambitious project.

Best energy

Time management is overrated. Think about it, the 2 hours after lunch are not worth anywhere near as much as the first 2 hours of the day.

Most of us are out here trying to manage our time, cramming more and more into our hours when we should be managing our energy.

Everyone has a natural cycle of energy throughout the day, mine looks something like this:

How I align my best energy with the things that matter most

Because my energy is highest early in the day those are my best hours, that's when I'm at peak performance, my willpower is highest and I'm much more likely to make progress.

So that's when I'm coding, right when my energy is highest because you need to put your best energy towards the things that matter most.

Make it public

This post is accountability, through sharing my thought process and my intentions I am holding myself accountable to anyone who reads this.

Publishing this blog post will act as a forcing function to make sure I'm doing what I said I would because if I don't I will be failing in public.

Be patient

Programming can be frustrating in the beginning, when you have no idea how to install the correct tools from Github let alone actually write some code it can be challenging.

But being aware of this makes it easier to counteract. Whenever I'm getting frustrated with a problem I can switch over to a different form of learning and come back to that problem with a fresh set of eyes the next day.

The key thing to remember is that you don't have to have everything figured out straight away, programming like anything in life is something that continually evolves.

In a couple months time I will write a follow up post on this to see how my learning has evolved and share where I'm at.