Learning Path to Software Engineering Role From a Self Taught

2023-08-12
#career-switch #learning-path

# My view on the learning path

I have friends that want to get into tech, some of them are looking into the software engineering field, they are confused with so many learning sources in the field. I personally think there's too much noise on the learning path nowadays. A little bit of my background, I'm a self taught, I do software engineering for fun and I was lucky to land an engineering role at Cermati in 2015, so I’m confident that I can say a thing or two regarding getting into the software engineering field. I will write another post on the details of the journey, this post will focus on my version of balanced practical approach to get into the software engineering field.

I hope this post can be useful as a guideline and inspiration for other people to get into the software engineering role.

# Learning Keypoints

It's very common for everyone to have varying learning journeys, I think there are some important points to keep in mind regardless of your learning path:

  • It's a lot easier to pick a specific learning path if you know what you want. It ranges from wanting to build a tech startup, switching career to tech or just finding a new hobby.
  • If you just want to try things out whether software engineering fits you or not, then I would recommend finding a problem that you think can be solved with software. Typically, repetitive tedious tasks can be solved or automated by software, keep the problem in your mental notes so it's easier to relate to it during learning. Try to think whether it’s possible to solve your problem with your current tech skills, if not then try to find the missing learning components.
  • Focus on the fundamentals. There are many engineering tools and frameworks, it's a common pattern to come across a "new cool thing" in software engineering. The tools you learn today could be obsolete anytime in the future, the fundamentals however typically can be applied to most of the tools. Be curious, always ask why? Why things work that way, why things are built that way.
  • It’s expected to not understand subjects from the learning source you're currently on, don’t give up yet! My tip is to search other learning sources on the same topic and try to learn from different perspectives, you can do it by googling or youtube or just asking ChatGPT, beware though it might not be 100% on point, you need to reverify the answer by re-reading the subject from other sources.
  • I’m recommending to read books as your main learning source, it’s structured and easy to search by text. At the very minimum, books with 100+ reviews and 4.5+ stars on Amazon.com should be ok. Watching videos are ok but I think it’s hard to search for a specific explanation by keyword. You could also do bootcamps, but it seems most of them put more emphasis on the frameworks/tools instead of the fundamentals though.
  • Software engineering is a craft, the more you put in the hours to write software the more you’ll get better.

# Learning Path

Following a balanced practical path throughout your journey is crucial, you want to know the fundamentals and be able to practically apply them. The fundamentals will set you apart and help you make better engineering decisions, for example, which tools (language, framework, libraries) to use and how to use them properly.

The learning path that I'm recommending might take ~12 months with dedication, around 1-2 hours per day on average, it consists of mainly 3 components:

  • Programming fundamentals, focusing on the basic programming concept as the foundation for you to build software.
  • Building a website, I think it's a good idea to start with building a basic website UI, we will build the server side later on since most of tech products are connected to the internet.
  • Building a web server, a web server is responsible to process, store, and serve user website data. Imagine a user registration functionality where users can input email and password, the data will be processed and stored on the web server side.

# Programming Fundamentals

# Why

Programming fundamentals can be applied to most of the software that you want to build, regardless of the programming language that you use. In fact, writing Excel/GoogleSheet formulas is similar to programming, the formulas are instructions to Excel with cell ranges as its input, and programming code is machine instructions to the computer. It's ok to invest a bit more time in fundamentals, based on my experience, you need to regularly revisit the fundamentals.

# Tech to learn

Any general purpose programming language is fine, I think Python is the most practical way to get started with programming, with Python alone you can build many things from games, software, web servers, and many more! I started with C++, I would start with Python if I knew the underlying programming fundamentals are mostly the same, the time learning and tinkering with C++ syntaxes and features would have been better to be invested in other fundamentals such as operating systems, computer networking, database.

# Learning sources

Any beginner Python books focusing on the programming basics.

# Building a website

# Why

I recommend to learn building a website first instead of building a mobile app because it’s easier to iterate and test. The experience from building a website and some the fundamentals are aplicable to mobile apps as well.

# Tech to learn

  • Basic HTML
  • Basic CSS, learn what's the role of CSS and how to do basic styling.
  • Basic Javascript, same as CSS but instead of styling learn how to manipulate HTML with javascript.

# Learning sources

  • Any basic html books.
  • A huge plus point if you’re interested in CSS & Javascript. Using video as learning sources can help you to visualize and learn CSS & Javascript since mostly it's UI based.

# Building a webserver

# Why

Most tech products are connected to the internet nowadays, a website is basically a product that the end users see on the UI side (we call it the client side), the web server is responsible for serving dynamic data to the client (your website). You will try to connect the website that you build from the previous learning point with the webserver and learn how these two interact with each other.

# Tech to learn

  • Python web framework. It's ok if you have time and want to build without a web framework, it's going to be a lot more challenging but will be more rewarding. I think the easiest way to start is with Python Flask.

  • Database. A database is like a warehouse where you can organize and store data, for example user registration data will be stored in a database. I recommend learning MySQL / PostgreSQL first, they are categorized as relational database (RDBMS) in terms of data model. It's longer to get started compared with MongoDB, but I think it's better to start with RDBMS since it's more common.

# Learning sources

Any Python book related to building a web app with a web framework should have a database introduction included.

# What’s next?

Do not aim to be perfect, just start and get things done first, you can iterate later on while you’re learning. The more you put in the hours to write software the more you’ll get better.

You will still need to visit other fundamentals, I'm still building my fundamentals up until now and there's always more to learn and discover, it's actually fun! Here are the topics that you can explore:

  • Operating System
  • Database
  • Computer Networking
  • Data Structure
  • Security
  • Distributed system

Please feel free to comment in the post if you have any questions.

Topics that might interest you