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
Typing
Computer Basics
The Terminal
Code Editors
Git and GitHub
Computer Science
Data Structures and Algorithms
Software Design Patterns
Competitive Programming
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
Job search sites:
Interview preparation resources:
Listings of company salaries:
Resources to work for yourself:
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