Starting Your Programming Journey

TL;DR

Programming is cool.

There have been a few told-you-so’s in my life so far and it doesn’t appear to be coming to an end anytime soon. My story begins where all programmer stories do: I wanted to understand the intricate inner workings of the machine, so I dove in head first and began taking it apart byte by byte. Alright fine, I concede. My dad was a software engineer and he loved what he did, and naturally that rubbed off on his personal life. As far back as I can remember, I can remember him going on about something or the other about programming and how it has shaped his life. I always thought he meant that he could see the code like Neo from the Matrix could, but it’s clearer, simpler and more profound now.

Programming is cool. Programming is a tool. And most of all, it can enhance your current skill pool.

Programming is a skill like any other but paired with the incredibly low barrier for entry, the transferable skills and the value it offers, it’d be unwise to not consider it as a tool for self-improvement. Through this article I hope I can inspire you to consider it as such. It has had a profound impact on my life, and I hope I can serve as the starting pistol to your programming journey.

I’m aware that not everyone starts in the same place, and that people’s mileage may vary. This article was written with that in mind. Feel free to jump around. My aim with writing this article is to serve as a starting guide to refer back to for tips, citations and witty pop culture references. I am, if you will, the Deadpool of digestible programming content.

DISCLAIMER: I use the words “programming” and “coding” interchangeably.

Contents

  1. Who is it for?
  2. Why learn to program?
  3. What do you need to start?
  4. Where do you start?
  5. Ideal Day One
  6. What should I build?
  7. Summary

Who is it for?

My short answer is that programming is not for everyone. The more nuanced answer is that it depends on who you are. If you’re someone who’d rather make use of pre-made solutions instead of learning to build it, then it’s not for you. If you’re someone that likes learning, and considers growth as a part of your identity, then it’s for you. There’s merit in both and in the context of adding value to the world, the approach should be somewhere in between. That’s why it’s important to not forget that programming is just another skill you can pick up. In my experience, however, the acquisition of this skill has come with a few positive side effects.

Tim Ferriss’s advice for gaining a competitive edge in this world is to combine unusual skills together [1], and programming is a relatively unusual skill for the majority of the people in the market to have. I say “relatively” because there has been a growing push for everyone to learn it in recent years, and the main way it’s being used is a catalyst to the other skills people have. If you’re an artist, learning to code can both expand the medium in which you operate and be able to create bespoke personal portfolios to showcase your work (the personal touch, for example, comes from not being limited to the editing tools provided by the code-free website builders) [2] [3].

Screenshot of an example showing an interactive experience built using ThreeJS and the HTC Vive
Screenshot of an example showing an interactive experience built using ThreeJS and the HTC Vive
Interactive Experience built with ThreeJS to be used with the HTC Vive [3]

If you’re a writer, you can use it to automate aspects of your workflow so that you can focus more on your writing (i.e. using IFTTT and Mailchimp to automate sending updates or setting up your own custom workflow using Node-RED at a much lower cost). If you’re a farmer, you can design custom trackers and forecast tools that uniquely speak to the challenges you face, through the combination of tracking and analysis of data you collect with open data like weather forecasts to build bespoke tools.

You, the astute reader, might be rightfully thinking, “this is over complicating things” or “I have an app for this” or even “I have someone doing that for me so that I don’t have to” and you’d be right. You have no reason to adopt this right this instant, but that would be true for many things in the world; the use for it doesn’t have to be instantly gratifying if you think it can have a long term relevance [4].

Why learn to program?

Every field in operation today requires some form of machine assistance and machine intelligence. This doesn’t immediately warrant learning the underlying tools and technologies, and entire market sectors have come into existence with the model of not needing to code to build programmatic solutions (i.e. tools like Zapier and IFTTT). I’m not certain if this is the pessimist or the optimist in me, but the other half of the glass that I see is that there is a growing demand in the market for people wanting to build things with code. Where there’s demand, there’s opportunity.

The code-free-solutions industry will continue to exist, and it’s to do with instant gratification, at the very least, and the accelerating pace at which things are progressing. It makes sense to be able to build solutions quickly and address the market demand quickly before the opportunity passes, and the use of these tools offers you that ability. However, the instant gratification monkey in your brain is perfectly capable of short circuiting the itch to acquiring the skill. An analogy that comes to mind is the difference between ordering takeout versus cooking yourself. If you don’t know how to cook, then it makes sense to order now, but ordering in everyday is not the most sustainable way to live. A more sustainable approach would be to order in today, and commit to learning how to cook, so that someday you can declare independence from takeout. Maybe I’m just hungry.

What do you need to start?

Now that we’re here, it won’t be a surprise to you that you will need access to a computer of sorts. I won’t assume you have access to the same computer that I have, so rest assured that I won’t show you screenshots of how to set up a specific tool on a very specific platform (if you do, feel free to get in touch via Twitter). However, if this is something you’ve set up, you can skip ahead to the starting line.

My minimum requirement guideline would be to have access to a device that has a browser and one that can connect to the internet. This could range from a desktop computer to a mobile phone with a browser. This is more than sufficient to get your feet wet. If you’re curious, this range would include:

  • Desktop computer
  • Laptop, Chromebook, Android tablet or an iPad
  • A small computer like a Raspberry Pi
  • Smartphone

And if you’re in the market to get a device for coding, I’d recommend a decent laptop but if you want something that can go beyond the browser without breaking the bank, then a Raspberry Pi or its more affordable cousins (like Raspberry Pi Zero W, Onion Omega2 Plus) are a worthwhile investment.

Where do you start?

Welcome to the starting line! This is what you need to do now:

  • Pick any language; ideally a popular one. This will make finding learning material on the internet easier. My suggestions are JavaScript or Python.
  • Fire up REPL.it in your browser and sign up.
  • Under “Create” select a language and “Create repl”.
Screenshot of the empty REPL.it editor. The sections in this editor are Files, Code and Console (left to right).
Screenshot of the empty REPL.it editor. The sections in this editor are Files, Code and Console (left to right).
Creating a REPL should result in something like this. The sections in this editor are Files, Code and Console (left to right) and the output of the program appears in the Console.
  • Now click on “examples” and find the “Hello world” section and click on it.
Screenshot of examples, and clicking this grey section will paste that code into the code section of your screen.
Screenshot of examples, and clicking this grey section will paste that code into the code section of your screen.
Clicking this grey section will paste that code into the Code section of your editor.
  • Run the hello world program by clicking the play/run button. (This is as of January 2021)
Screenshot of the code output in the Console after clicking the play/run button at the top of the editor.
Screenshot of the code output in the Console after clicking the play/run button at the top of the editor.
You should now be able to see the output of the code in the Console after clicking the play/run button.

That’s as simple as it needs to be. If you’ve picked any of the languages mentioned above, here are some great resources I use often:

  1. Search for “Derek Banas <your language here> in one video” on YouTube (JavaScript and Python) — Abdriged rundown with examples of every useful feature in the language in a single video.
  2. W3Schools — Tutorials and references to different languages and their language features.
  3. MDN web docs — Resources and documentation for HTML, CSS and JavaScript.
  4. The Coding Train — YouTube channel with an abundance of tutorials, wisdom and wholesomeness.
  5. The official language page, if it exists for the language you’re interested in. Look for a “Learn” or “Guide” section that is filled with resources that range from beginner to intermediate.
Screenshot of the offical Python website showing the Beginner’s Guide link under the Documentation tab in the Navigation Bar.
Screenshot of the offical Python website showing the Beginner’s Guide link under the Documentation tab in the Navigation Bar.
This is how this looks like on the official Python website.

Ideal Day One

An ideal day one of learning a new language would consist of being able to run a hello world program. This is a simple program that consists of making the program output the text “Hello World” to the screen. This has a strong cultural value in the world of programming, and I think we’ll start to regret it when self-aware AI like Ultron or the Terminator start using it. My next set of exploration areas would be how to:

  • Define and use variables to store information
  • Find built in functions of the language
  • Do things based on a condition
  • Do the same thing over and over again (i.e. loops)

These aren’t the only techniques required but this is a common set of constructs that will help at all points in your programming journey.

What should I build?

You should be asking this question pretty close to the beginning of your programming journey; not too soon but also not too late. You should be here at the goldilocks zone of your programming journey.

“OMG, I can build anything with these powers!” I wailed in euphoria, after writing my first loop.

This isn’t a well-defined metric, but I spend a day or two with the things in my ideal day one list, and then try to build something. I urge you to pick the simplest possible ideas but that doesn’t mean limit yourself. A useful way to measure the simplicity of this is to ask yourself if you think you can build it in an hour. If you find yourself unraveling the complexity of the beast you’ve conjured up, scale it back. For example, if you planned to generate art using tutorials from The Coding Train (like this), and you had an idea to combine two or more of those tutorials and get stuck, scale back by picking one or two things from the second tutorial to incorporate. This will start to build your familiarity with the domain and consequently your confidence in it. That in turn can drive you to iterate with more advanced concepts.

The fundamental skill you’ll continue to hone is deconstructing a problem into smaller and manageable chunks and approaching it by chipping away at it one chunk at a time. In my experience, this has been the way it is at all levels of work, and it is the definition of “chunk” and “problem” that continues to evolve. This high level enlightenment is a paramount mindset to keep sharpening as it will enable you to see areas that have unnecessary complexity. The talk by Venkat Subramanium [5] is a gem if you want to spend time exploring things at this high level. This gave me the tool to zoom out when I’m trying to build something or trying to solve a tricky problem; things will get clearer with perspective.

Summary

Programming may not be for everyone, but it’s a perfect fit for people seeking new skills and self-improvement. The thing I find most fulfilling about it is that the benefits of acquiring this skill far, far outweigh the cost of getting started, and it’s a seriously low barrier for entry. To me, coding is akin to reading and writing. In this information age, the most valuable tool is being able to learn new things constantly, and programming offers a new skill bundled with the necessary mental frameworks to approach new challenges. Invest in yourself. The world we live in is constantly evolving as it moves forward and it has left behind many things, and that’s humbling. It reminds me that the best way to live life is to learn and find new ways to add value to our lives and the world* we live in.

*N.B. This was written before humans colonized Mars.

If you think of anything I have missed or just wanted to get in touch, you can reach me through a comment, via Twitter or through LinkedIn.

References

  1. Tim Ferriss — Should You Specialize or Be a Generalist? [YouTube]
  2. South China Morning Post — World’s first digital art museum lights up Tokyo, Japan [YouTube]
  3. JSConf — Opher Vishnia: Wait, you can do that with JavaScript…!? [YouTube]
  4. James Clear — Atomic Habits [Book]
  5. GOTO Conferences — Venkat Subramaniam: Don’t Walk Away from Complexity, Run [YouTube]

Finished my MSc in Computer and Machine Vision at @CranfieldUni • Mechanical Engineer • Passionate about web technologies 🕸 • Interested in machine learning 🤖

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store