How to become a software engineer
I sometimes tell folks that I learned to program because I wanted to become a tech entrepreneur and knew how difficult it was to find good developers. I discovered along the way that this is one of the worst reasons learning to program and not what was driving me.
My real motivation comes down to three fundamental characteristics of programming that make it so enjoyable.
Programming gives you the superpower to create. You can create a new program from scratch and all you need is a laptop. Most software for coding is open source and free. It’s a true superpower for creators.
Programming has a rapid feedback loop. Many skills in life are hard to measure. It can be tricky to know when you are doing something right or wrong. In coding, you can set up testing and get feedback on whether your code works or not in milliseconds.
Programming knows no physical constraints. You can create software for a company that is thousands of kilometers away. Likewise, your customers can be living on the other end of the world and enjoy the program you have created. Programming can be a true equalizer.
No matter what your motivation is to get into programming, I wish someone had given me some direction on how to get started.
Learn the principles first
One mistake I made while becoming a software developer was to treat learning too superficial. It’s easy to conclude that you understand a topic or concept and jump to the next.
There are even some learning resources that emphasize practical learning so much that they encourage you to stay on the surface. There are some tips you can use to make sure you truly understand the content you are consuming:
Start with the basics
The pace in software development is rapid. Every day there are new frameworks being introduced that you are supposed to learn. Since it’s easy to measure, you might be convinced that a new library is faster and better than the one you are using.
Resist the temptation to jump into these frameworks and learn the basics first. Pick one language (see tips which one to choose below) and truly understand it’s fundamentals.
Keep in mind that any framework or technology you use in the future is built on these fundamentals, so learning them will help you pick up and understand other technologies faster in the future.
Replicate what you learned
Whichever content you consume, don’t try to copy it directly. When you want to use a snippet from a blog post, type it out yourself.
Watch a video lesson to the end (they are usually only 10-15 min long) and then try to write the entire code you just saw without looking at it again. I even change variable names and other small details to make sure I can apply the concepts in my own projects later on.
Don’t be afraid to ask when you are stuck
The software engineering community is truly collaborative and welcoming. Don’t be afraid to post a question on forums like Stackoverflow where experienced software engineers can help you out.
Which language should I learn?
One of the first questions you probably have is what language to learn. The truth is that it doesn’t matter as much as you might think.
Programming languages have their differences, but especially as a beginner it’s more important to understand the fundamental principles in programming. You can then apply those principles to any other language.
One way to decide on which language to start with is to think of it like any other foreign language you might learn. You could learn Bavarian (yes it’s an actual language) and be able to communicate with about 14m beer-loving Germans. Or you might consider a more widely spoken language like English, Spanish, or Mandarin. 1
In programming it’s no difference. You have small, very specialized languages that nonetheless have a strong following. Jelly for example is a language designed to produce programs in the smallest possible number of bytes. It’s also an extremely weird language to read and can only be used for a small subset of specialized programs.
See the small code snippet below for printing out “Hello, World!” to the console with Jelly.
You are probably better off starting with a popular language. I would recommend you to start with either Python or Typescript.
Python is a very popular language and sort of a Swiss-army knife. It is used to write small scripts, web servers, and has become the standard for data science and machine learning programs. You will see that printing out a “Hello, World!” is much more readable:
Python is known for being easy to learn and is often used in general introduction courses to programming as the go-to language. You will be able to find a job with many companies that use it in data science or as their backend language. Google, Spotify, Netflix, and many more use Python in many parts of their software products.
Typescript is the language I use the most and it’s a controversial choice.
So what’s Typescript then? As Typescript explains on their homepage:
Speaking of which, where do you find courses to learn these languages?
Where to learn to become a software engineer
You probably searched the web already for resources, and there’s no shortage of them. From blog posts, YouTube tutorials to video courses and whole degrees, there is a plethora of content to get you started.
So where should you start? It all comes back to your goals in learning to program. I will share some of the resources that I used along the way and when I would make use of them.
The format that has worked the best for me is to take a structured video course in one topic, and then supplement with reading documentation and blog posts. Some other learners find the video format too slow and prefer to read everything.
Both Coursera and edx publish academic courses from top universities that you can use to level up your knowledge. If you are serious about software engineering and you want to build up solid foundations, you can join one of their courses.
Many of them are self-paced, so you can take them on your own schedule. However, I found it a great motivation to take a course that has hand-ins at specific times and has a clear end in mind. Many of those courses will take you 4-6 months to complete.
One great introduction to programming is the well-known CS50, Harvard’s introduction to computer science. It’s great for getting an understanding of computer science, although I found that it took a long time for me to get practical skills out of the course.
Coursera has also a great selection of courses. I took several courses in data science from John Hopkins University and found them to be informative and challenging. However, if you are not using programming in your academic career there are better options to get you introduced into the field of data science.
Udacity has specialized in providing technology education to get you job-ready. If you are aiming for a job in the tech industry they can get you there. I completed their Full Stack Web Developer Degree in about 5 months and was generally happy with the experience. The most valuable part of the program was the code feedback you get from their staff. It’s hard to find that in other courses.
One big downside with Udacity is its price. Taking part in a degree program will set you back several hundred dollars every month. If you have a clear plan to get hired at a large tech company and you can afford it, one of their programs might be right for you. There are however plenty of other great courses that will cost a lot less and provide comparable value.
Udemy is my personal favorite. It is unique in that it is a platform where any person can submit a course for almost any topic. The students then rate the experience with their courses, and the best ones bubble up to the top.
This leads to a large available selection of courses, from beginner boot camps to specialized topics. Surprisingly, the quality of the top courses on Udemy is very high.
The best part is that (rather weirdly) Udemy courses are constantly on sale. You can get a course that has 40+ hours of high-quality content for $20 USD or less.
I got most of my knowledge from a few instructors on Udemy. Their courses are practical but also go beyond the basics. Here are the ones that I would recommend when starting out:
Typescript: The Complete Developer's Guide
The title of the course is actually misleading. It will not only teach you Typescript, but also a lot of the principles of object-oriented programming. If you want to learn Typescript, I would start with this course.
Complete Python Developer in 2020: Zero to Mastery
Andrei Neagoie has some strong courses in Python programming. This course will get you up to speed with the language and many applications quickly. It’s a great place to start your Python journey here. Note also that advanced topics like object-oriented and functional programming paradigms are included.
Complete Machine Learning and Data Science: Zero to Mastery
Machine learning is a popular topic and this course will teach you the basics with the Python programming language and frameworks like Tensorflow.
I find data science and machine learning harder to get into than web or mobile app development. You benefit from having a solid background in mathematics and statistics, even though it is not required to take the course.
Two areas where self-taught or boot camp software engineers often trail behind computer science majors is that of algorithms and data structures. Unfortunately, those are often exactly the topics brought up at technical interviews in a job application process.
Even though you might not immediately see the practical value of those topics, they are well worth investing in. I am learning more about them not because of interview preparation, but because they take my programming skills to the next level.
Understanding how you write performant code is a key skill and this course will get you there.
Wherever this journey takes you, enjoy the process, and share it with others. I am looking forward to what you are creating next.