A roadmap from mechanic to software engineer

Kolby Sisk
Udacity Eng & Data
Published in
9 min readApr 25, 2022
Salary data comparing automotive-mechanic-III to software-engineer-III from salary.com

Intro

I have a good friend who is currently a tractor mechanic. He tells me stories about fighting to move up in his industry. Once he had an interview where he was pitted against the hiring manager’s son. The latest interview consisted of:

“15 people in a zoom call and we had 30 seconds to pitch ourselves to make it to the next round.”

I ask him if he’s considered transitioning to a different industry, maybe tech? I know the idea is daunting for someone with only basic computer knowledge, but with some guidance I think it’s an achievable goal.

I’ve been in the tech industry for 10 years. From an intern at a small web agency to a software manager at a unicorn startup. I feel I have enough experience to help my friend in his journey to landing a tech job. This article is for him, and anyone else who needs guidance breaking into the tech industry.

Overview of a tech organization

First, I think it’s important to get an overview of the roles involved in building software. There are many roles, and finding the one that fits you best will be key to your success. These are the tech related branches you will typically find in a company’s org architecture:

Product

Lead by the Chief Product Officer (CPO), the product team is responsible for the strategic direction of the project. They create the vision for the future of the product, and their vision is supported by market research and user research. People who do well in product have a good understanding of business, good analytical skills, and are good at communicating.

Design

Lead by the Chief Product Officer (CPO), the design team is responsible for taking the vision of the product, and creating a blueprint for what the user interface (UI) should look like. They focus heavily on the user experience (UX), to ensure users aren’t frustrated when using the product. People who do well in design have good problem solving skills, are highly empathetic, and are detailed-oriented.

Engineering

Lead by the Chief Technology Officer (CTO), the engineering team is responsible for taking the blueprint, and building the product. People who do well in engineering have good problem solving skills, are logical thinkers, and are good at learning.

I’ve spent my career in engineer, so that’s where we will focus.

Engineering teams

Within the engineering org there can be many different teams, and specific roles within those teams. A team will typically be comprised of an engineering manager, tech lead, a few senior engineers, a few middle/junior engineers, and a project manager.

Senior, middle, and junior, are ways to differentiate the experience of an engineer. A new engineer is typically called a junior, while an experienced engineer is called a senior. The tech lead is a specific role given to a senior engineer who is responsible for driving the high-level architectural decisions.

There are many different types of engineers, each specialized in a different aspect of software development. Let’s break down the most common.

Front-end Engineer

The front-end represents what the user sees and interacts with, aka the client. Front-end engineers are responsible for building the user interface (UI). If the product is a web app — meaning it is rendered by a browser, like a website— then the UI is built using HTML, CSS, and JavaScript.

Back-end Engineer

The back-end represents the software responsible for sending and receiving data to and from the client, along with storing and querying data to and from a database. There are many back-end languages, and many types of databases, each with their own use-cases. A few back-end language examples are: JavaScript, Python, Go, ASP.NET, and a few database examples are: MySql, MongoDB, Cassandra.

Full-stack Engineer

A full-stack engineer is someone who does both front-end and back-end work. It takes a lot of experience to become an efficient full-stack engineer, but they are highly sought after, especially by start ups.

Platform Engineer

A Platform Engineer is responsible for the infrastructure in which software is delivered to the user. They build toolchains and workflows that enable other engineers to easily move their code to a cloud platform, where it can be accessed by the user.

Project Manager

The project manager’s role is to organize, plan, and manage the work that engineers need to do to accomplish the product vision. They work closely with the product and design teams to prioritize the work that needs to be done.

Software infrastructure overview

The last bit of context you’ll need before we get to the roadmap, is an overview of a typical software architecture.

The diagram above is a simplified example of a common software architecture that is meant to show the process from writing code to a user using it.

  1. Engineers write their code and save it to a source control host — the most popular being GitHub.
  2. After saving their code, Continuous Integration & Continuous Deployment (CI/CD) processes run. These processes (called a pipeline) will normally compile the code, test the code for bugs, and prepare the code for deployment.
  3. If the code passes all the tests then it will be deployed to a server. A server is a computer optimized to handle requests from a client.
  4. The user can now access the software through a client. For example, if the software is a website, the client is a browser. When a user types a URL into a browser the request is sent to a server which will return data in the form of HTML.
  5. As the user uses the app, the client will communicate with the server to send and receive data. For example, when a user loads tweets on Twitter they’re getting data from a server, and when a user creates a tweet they are sending data to a server. This interaction happens via an Application Programming Interface (API).
  6. The server is storing and querying data to and from a database. The database is where most data is stored.

The roadmap to your first job

Now that we have some context, let’s look at the steps I recommend taking to get your first job.

Online Courses

The first step I recommend is taking some online courses. This step is important to get a feel for what you’re getting into, and determining if it’s something you like doing. There are quite a few options, and you’ll get what you pay for in terms of quality, but this can be done for free. I’ll list the topics you should cover, and link to a free course that covers the topic.

Obligatory note: I work at Udacity, an online learning company, so this list will consist of free Udacity courses, but find the courses that work best for you.

  1. Take a course which gives you a basic introduction to programming, and explains some of the common concepts and terminologies.
    👍 Recommended Course: What is Programming?
  2. Start learning front-end development. Take a course that goes into HTML and CSS.
    👍 Recommended Course: Intro to HTML and CSS
  3. Dig a little deeper into front-end development and take a course that goes into JavaScript.
    👍 Recommended Course: Intro to JavaScript
  4. At this point you should create a free GitHub account and start learning Git. This is how you will save your code. The learning curve with Git can be a bit steep, so focus on understanding the concepts — you’ll master Git over time.
    👍 Recommended Course: Version Control with Git
  5. Now you should have a basic understanding of front-end development, let’s move on to the back-end. There’s a lot of debate on the best back-end language to learn, but the consensus is that Python is a great beginner language to help learn the important concepts.
    👍 Recommended Course: Introduction to Python Programming
  6. Time to bring it all together by learning about databases. There are a lot of options when it comes to types of databases, but the most widely used is relational.
    👍 Recommended Course: Intro to Relational Databases

At this point, you should have a much better understanding of what software development is, and a basic understanding of programming. Learning from courses will only get you so far though.

Bootcamps and online programs

After you’ve gone through some free online courses and decided software development is something you like, the next step I recommend is either a coding bootcamp, or an online program like Udacity’s Nanodegree Program. This is where you will really start to understand software development. You will work through projects, and they will prepare you for getting a software development job. Choose a course that fits the type of software engineer you’re most interested in. Front-end, back-end, or maybe platform?

A coding bootcamp is an intensive course with a syllabus, teacher, and other students. They can be 12–32 weeks long and average around $15,000. You can find in-person or online bootcamps. I highly recommend an in-person bootcamp if you’re near one.

Udacity’s Nanodegree Programs average around $1500, and are better suited for people who do well learning without a teacher. They are less hands on, but still come with a human mentor, active community, project grader, and a more flexible schedule.

Both of these are great options, and after finishing you will be ready for an entry level job!

Prepping for interviews

Software engineering interviews are… notoriously difficult, but if you’ve gotten this far then getting an entry level job is not impossible. Depending on your interview skills it may even be easy. The important part is that you are well prepared and persistent. Be ready to go through multiple rounds per company. Be ready to get turned down over and over. It will suck, but I promise if you stick with it you will learn from each attempt, and eventually get that job. Think of each interview as an opportunity to learn and improve your interviewing skill set.

Software engineering interviews will usually ask you to do a coding challenge. I recommend practicing coding challenges on HackerRank.

🔗 Read How to Pass the Engineering Interview in 2021 by David Byttow

💡 Quick Tips 💡

  • Google is the number 1 tool for every engineer. Learning how to research is crucial.
  • Learning how to learn is the most valuable skill a software engineer can have. As a software engineer you never stop learning.
  • Project-based learning is the best way to learn. Once you have a solid foundational understanding start doing projects. Build a basic to-do list app, or a simple game like tic-tac-toe.
  • MDN is the best web development documentation resource.
  • Reddit and Twitter have thriving software communities. They are both great ways to learn and stay up-to-date.

Conclusion

The only requirement to becoming a software engineer is a growth mindset. If you’re eager to learn then this is the right industry for you. Tech is always evolving and to be successful you should too. I hope this article helps to provide context of the industry, and guides you in your learning journey. If you need advice, or would like offer feedback, please feel free to reach out to me on Twitter @kolbysisk.

Udacity is currently looking for skilled React developers to help us build talent transformation tools. If you’re skilled in developing international UIs at scale then reach out to me on Twitter @kolbysisk

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Published in Udacity Eng & Data

from the engineers and data scientists building Udacity

Written by Kolby Sisk

Builder of software with a passion for learning. I specialize in web development and user experience design. www.kolbysisk.com

No responses yet

Write a response