OVO Tech Blog

Learning Software Development - A Self Teaching Survival Kit

Introduction

Theodore Jones

Theodore Jones

Software Developer


Learning Software Development - A Self Teaching Survival Kit

Posted by Theodore Jones on .
Featured

Learning Software Development - A Self Teaching Survival Kit

Posted by Theodore Jones on .

Introduction

Welcome my virtual friends. How are you? I’m fine thank you. If you're interested in learning software development, but want a friendly nudge towards where to start, look no further. Whether you're a total beginner, or junior developer looking for the next areas to focus your learning, then this blog is for you. I’ll share some tips and tools of the trade to help you make the next steps on your developer journey.

This topic is rather subjective depending on who you ask, but I believe what you mostly need is focus, determination, and a desire to learn. Let's get started.

Where to start

Software development involves more than coding alone, there are some essential tools and theory that you will need:

Theory:

Tools:

  • Git - Versioning control system.
  • GitHub - Repository hosting service.
  • Command line terminal. There are two I can recommend, Cmder for Windows and iTerm2 for Mac.
  • IDE (Integrated Development Environment). VSCode is a great cross platform IDE and is commonly used here at OVO & Boost because of the Live Share plugin that allows you to collaborate remotely.
tip-icon

Tip: Be strict for the first few months and only use your terminal commands. As great as GitHub desktop and all these other tools are, there is no substitute for learning the mechanics of what is going on under the hood.

What language to learn

The truth is there is not one correct answer for this and with so many languages out there it can be difficult to know what to learn first. A good question to ask yourself at this point is, what are you looking to do? Some languages are better suited to different tasks. For example C# is commonly used to develop video games whereas Swift is what you need for iOS applications. If you are completely new to programming I would recommend learning Python. There are a few reasons, it’s versatile, cross platform and many people find it an intuitive language to start with.

tip-icon

Tip: I recommend a Python Course that I found incredibly useful. It’s by an online instructor named Mosh Hamedani who I will be recommending a number of times throughout this guide.

Something you will find as you progress, once you have learned one language it is much easier to learn a second. This is because they share many of the same principles. I would recommend learning one language well before moving onto the next. A common mistake for new developers is trying to learn too much at once.

If you choose to take on a developer role and join a team you’ll need to use the tech stack they are using. In the team I’m currently working in, we mainly use NodeJS (A runtime environment for JavaScript) and TypeScript (A superset of JavaScript with optional static typing). Personally I’m a big fan of TypeScript because of the strict typing it offers and allows you to build full web application stacks using one language. If your interested in learning TypeScript, here is a really cool "Cough!" Learn TypeScript repo I’ve created "cough!".

tip-icon

Tip: I recommend another couple of courses by Mosh Hamedani for learning NodeJS. Object Oriented Programming in JavaScript and Node.js: The Complete Guide to Build RESTful APIs.

Other technologies to learn

Although you won’t be expected to know these when you first start as a developer, these are some of the other essential technologies that we use at OVO and Boost:

Deployment:

  • Docker - Deployable containers for your code.
  • CircleCI - Managed CI/CD (Continuous Integration and Continuous Delivery) that integrates with GitHub.
  • Terraform - Code for defining and deploying infrastructure.

Infrastructure:

  • AWS (Amazon Web Services) - Cloud computing services.
    • S3 - Cloud object storage.
    • Fargate - Serverless compute engine for Docker containers.
    • CloudWatch - Monitoring and observability service.
    • Lambda - Serverless computing platform.
  • GCP (Google Cloud Platform) - Cloud computing services.

How to learn

If I was working at OVO or Boost in a non-tech role, but wanted to become a developer (and I was) I would look into one of the many manual processes that are just begging to be automated. For example logging your team's daily performance STATS or build a calculator that generates an email based on its results. A great tool for this is Google App Script. This is essentially a version of JavaScript with a load of pre-built functions that can be used to mimic interactions with Google Suite (Sheets, Docs, Gmail etc).

tip-icon

Tip: Fixing real life problems in my experience is by far better for learning because you encounter issues that you won’t get with step by step tutorials. For example here is a Pokemon TypeScript API I created, something that I’m sure we will all agree, everyone needs.

Remember that coding requires a passion for learning as the technologies you will be using are constantly being updated and improved. Tooling and languages also come in and out of fashion so it’s important to keep reading and familiarizing yourself with the latest tech trends and techniques.

Working in a team

When you join a development team you will most probably be working using some sort of Agile methodology such as the scrum framework. This is usually practiced by delivering features iteratively in what are called sprints (usually two week periods). Although you will pick this up as you start working within a team, it is worth familiarising yourself with What is Scrum?.

An important principle for teamwork is being able to understand the code that other members of your team have written. For this reason, at OVO and Boost, we like to make code self documenting. This wouldn't be a tech blog without a few code snippets so let me show you what I’m talking about. Please note this code is for demonstrative purposes only.

What NOT to do:

// Function for checking if given value is odd or even.
const numberChecker = (value: number) => {
  // Check if the value is even.
  if (value % 2 === 0) {
    // If true then log value is even.
    console.log('Value is an even number');
  } else {
    // If false then log value is odd.
    console.log('Value is an odd number');
  }
};

This is an extreme example but as you can see, the comments create a lot of noise in the code and can distract from what it’s doing. Comments can also become outdated, as Ron Jeffries puts it:

"Code never lies, comments sometimes do".

What to do:

const isOddOrEven = (value: number) => {
  const isEven = value % 2 === 0;

  if (isEven) {
    console.log('Value is an even number');
  } else {
    console.log('Value is an odd number');
  }
};
tip-icon

Tip: Great book that demonstrates these principles and a must read for all developers is Clean Code by Robert C. Martin (Uncle Bob).

Teams here at OVO and Boost also use a methodology called Test Driven Development or TDD. This is the practice of writing failing tests and then writing the minimum amount of code that will make the tests pass. It is a highly disciplined practice but will ensure that your code is lean and easily re-factorable. "Cough!" OH LOOK, here’s my Learn TypeScript repo again. It’s got exercises for learning Test Driven Development "cough!".

Conclusion

Well done, you’ve made it to the end. Although there is a huge amount of information here, take it one step at a time and remember to enjoy yourself. Learning to be a developer is essentially problem solving. So although at times it can be tough just remember that each problem you encounter is just another opportunity to learn.

Happy hacking :)

Resources

Luckily there are a ton of resources at your disposal. Here you will find a bunch of resources that I have found the most useful for self teaching.

Guides:

Cheat Sheets:

Technologies:

  • Postgres - Open source relational database

NodeJS / TypeScript Technologies:

  • Express - Minimal and flexible web application framework
  • GraphQL - A query language for your API
  • React - Library for building user interfaces
  • Jest - Testing framework
  • Cypress - End to end testing framework
  • Prettier - Code formatter
  • Yarn - Package manager
Theodore Jones

Theodore Jones

https://github.com/MrKiplin

Software Developer

View Comments...