How to Become a Software Engineer

Introduction

This guide is intended for absolute beginners with no programming experience. It makes no assumption about your computer skills and can be used by anyone. I recommend the guide for people at least in the sixth grade. By then you should have learned about the order of operations in math which should give you a decent ability to solve problems with code. Knowledge of prealgebra is preferable because you will have learned about equations, variables, and functions which are important concepts to prime your mind for programming. The guide will take you from developing foundational knowledge of computers to making money as a software engineer. The goal is to provide you with a roadmap so you can teach yourself. This guide will tell you what you need to know and where you can learn it. The topics should be learned in the order they are presented. However, if you are already familiar with a topic, you can skip it. 

Contents

  1. Typing

  2. Computer Basics

  3. The Terminal

  4. Code Editors

  5. Git and GitHub

  6. Computer Science 

  7. Data Structures and Algorithms

  8. Software Design Patterns

  9. Competitive Programming

  10. Earning Income

1. Typing

Before you do anything on your computer you should know how to type. This will make the physical act of programming much easier because you will be able to type out your thoughts at the rate they enter your mind. This shortens the time it takes you to write a program. It is important to be mindful of time when you are learning to program. In the professional world, there are deadlines. In many interviews, you will have at most one hour to solve a problem. Also, time is a finite resource and it is better spent on actual problem solving than searching for keys on a keyboard. While programming should not be reduced to typing, typing is a fundamental skill everyone who uses a computer should have. If you do not know how to type, this will hinder your progress so it is best to get it out of the way in the beginning. If you need to improve your typing speed, this part of your training can be practiced while learning computer basics and the terminal.

Goals

  • Type at least 35 words per minute with 100% accuracy

Resources

2. Computer Basics

Knowing how computers work and how to use your computer is a necessary foundation before you can begin to program. Since you program on a computer, you need to be familiar with your environment to get work done. When you first start programming, you will have to install different kinds of software on your computer. This process of setting up your development environment can be difficult even for knowledgeable programmers who want to program in a new language. Hence, a mastery of the basic concepts will give you a proper foundation when moving on to more challenging topics. Read all of the computer basic tutorials listed here and choose between the Windows or macOS tutorial depending on which operating system you use. The technical support fundamentals course is optional if you would like to go deeper into these topics. You can audit it for free on Coursera.

Goals

  • Understand computer parts 

    • RAM

    • CPU

    • Hard drive

    • Hardware

    • Software

  • Be able to navigate files and directories

    • Create a file

    • Delete a file

    • Make a directory

    • Navigate into a directory

    • Delete a directory

  • Know keyboard shortcuts

    • Copy

    • Cut

    • Paste

    • Save

    • Select all

    • Undo

    • Redo  

  • Know how to download and install software

  • Understand file extensions

Resources

3. The Terminal

The terminal is an application that lets you interact with your computer through commands you type in it. Many programs you will use as a software engineer require you to interact with them through a terminal window. Common use cases for using the terminal include executing your programs and installing software on your computer. If you use Windows, you should install Git Bash first. Using Git Bash allows you to learn the same commands as someone using a Mac. This is necessary to follow the tutorials that are listed by Codecademy because they use one set of commands. If you use a Mac you can also install Homebrew. Homebrew is a program that allows you to install other programs on your computer. OverTheWire has a game that lets you learn security concepts by playing a game. This will give you additional practice using the terminal.

Goals

Know how to do the following from the terminal:

  • Create a file

  • Delete a file

  • Rename a file

  • Copy a file

  • Show the contents of a file

  • Make a directory

  • Navigate into a directory

  • Delete a directory

  • List files in a directory

Resources

4. Code Editors

A code editor is an application you use to write your code. A code editor will have features to help you write code like syntax highlighting. An IDE (Integrated Development Environment) is also a program for writing code except it provides additional features like tools for building and debugging code. Visual Studio Code is a free code editor you can download to use locally on your computer. Coderpad and Replit are code editors you use in the browser. A browser-based code editor is useful when you want to forgo installing software to get started coding. It also lets you share your code with others.

Goals

  • Download a code editor

Resources 

5. Git and GitHub

Git is a tool that provides version control for your code. A version control system saves the state of your code at a particular point in time and keeps a history of these states. This lets you provide an explanation for the change, access different versions of your code, and undo changes. GitHub is a site that lets you store your code online. This allows you to back up your code off your computer and share your code with other developers. Codecademy provides an interactive tutorial as well as the site Learn Git Branching. Git is used from a terminal. However, you can use the program GitHub Desktop to execute git commands from a graphical user interface (GUI). This helps because it can be more convenient to see all of your changes in a GUI. 

Goals

  • Create a git repository

  • Save changes locally

  • Undo changes

  • Create a branch

  • Download code from GitHub

  • Upload code to GitHub

Resources

6. Computer Science 

Now that you can use a computer and the tools a software engineer needs, you can learn programming. A Computer Science course will teach you just that. Knowing how to program is about more than just understanding how to use a programming language–it’s about problem solving. The resources chosen use Python as the programming language. I chose Python because I think it is beginner friendly. After learning Python you will be equipped to learn other programming languages and solve other kinds of problems. Python is commonly used in Data Science and Machine Learning. You can also use it to build web applications. To get started learning, you can do the lessons by Codecademy to learn the basic syntax while reading the Think Python book.

Goals

Understand and be able to implement the following:

  • If statements

  • For and while loops

  • Functions

  • Lists

  • Strings

  • Dictionaries

  • Sets

  • Classes

  • Inheritance

  • Recursion

Resources

7. Data Structures and Algorithms

A data structure is a format for organizing data and the rules for manipulating the data. Algorithms are a set of instructions for solving a particular problem. When you are trying to solve a problem, the data structures and algorithms you choose affect how easy it is to solve the problem and how efficient your program is. Having an understanding of the data structures and algorithms that exist gives you the knowledge to know how best to solve your problem.

Goals

  • Know how to use the following data structures:

    • LinkedLists

    • Stacks 

    • Queues

    • Binary Search Trees

    • Graphs

    • Heaps

  • Understand the following algorithms:

    • Binary Search

    • Merge Sort

    • Quick Sort

    • Traversing a graph:

    • Traversing a binary search tree:

    • Dijkstra’s algorithm

Resources 

8. Software design patterns

Design patterns are established solutions to design problems in code. Software design consists of the objects in your code and how they are structured and work together. When building larger and more complex programs, it becomes more important how your code is organized and structured. The right design can make your code easy to understand, easy to maintain, and easy to extend. As a software engineer, you will encounter problems that have been seen before. Instead of reinventing the wheel, you can use a pattern. 

Goals

Understand and know how to implement the following design patterns at a minimum:

  • Singleton pattern

  • Factory method pattern

  • Facade pattern

  • Composite pattern

  • Decorator pattern

  • State pattern

  • Observer pattern

  • Iterator pattern

  • Prototype pattern

Resources 

9. Competitive programming

The following resources are sites that have programming problems for you to practice. These problems will test what you have learned and also serve as a useful tool to prepare for programming interviews. This section can be started right after completing the data structures and algorithms study plan. There is no end to how long you should spend on this section. It is always good to hone your skills and practice problems throughout your programming journey. I recommend doing the Python and data structures topic of HackerRank. LeetCode allows you to see what programming problems companies have asked in interviews. Grind 75 is a curated set of problems from Leetcode for you to practice. Project Euler has problems that are math based. 

Goals

  • Be able to solve medium-level problems on LeetCode

Resources

10. Earning Income

Your search for making money as a programmer can start whenever you feel confident enough to start marketing your skills. You will want to have a portfolio that showcases your talent. The code for your projects should be on GitHub. If you have live links, that should be included in the description of your projects and your resume. You can also create a personal website to include this information. Some ways to get initial experience are finding clients directly as a freelancer, volunteering your skills for a nonprofit, or doing an apprenticeship.

Goals

  • Write a resume

  • Create a LinkedIn account 

  • Publish projects on GitHub

Resources 

Conclusion

This guide focuses on getting you the skills to become a software engineer. After completing this guide you should be able to find additional resources on your own to expand your knowledge and skills. O’Reilly is a resource you can use to continue learning. It is a subscription site that has technical books and courses. Meetup is a site you can use to find local events about programming. Many programming communities list their events on Meetup. Your very next step should be creating a schedule for your study plan and executing it. 

Additional resources

Next
Next

Guide to Learning Web Development