How to get into software
Table of contents
- Install Arch Linux on your main computer and use it for ALL computer tasks.
- Read Automate the Boring Stuff
- Master a text editor.
- 4. Create a profile on Github and learn the basics of version control with git.
- 5. Learn Markdown
- 6. Start lurking on Hacker News and Lobsters.
- 7. Write a website from scratch, and host it on a server somewhere.
- 8. Read The Go Book
- 9. Research functional programming, and write a program
- 10. Leetcode
I end up talking to a lot of people about how to get into software development, so I am creating this guide.
This guide is by no means comprehensive, and is light on specifics. This is by design as the vast majority of the learning you will need to do is self directed in your career.
Additionally, this guide is much more focused on backend development, though you will be exposed to both backend and frontend work if you follow along.
Install Arch Linux on your main computer and use it for ALL computer tasks.
I picked Arch not because it is the most perfect or the best, but because it requires you to see what's going into your computing environment. This is to see what a computer does at a little lower level, and see how a more modular computing environment works. You will learn how to use the command line, and likely get some experience writing shell scripts to tailor your personal computing to your own preferences Additionally, whether or not you end up sticking with Arch (or linux at all), you will find the Arch wiki to be a useful reference for debugging software products.
Read Automate the Boring Stuff
This is a free Python book that includes instructions and explanations on how to automate some general tasks using the python programming language. These programs are simple, but powerful and will be a good starting point to program away some repetitive tasks in your own life. You will learn the basics of programming and see some of the power of writing your own programs to solve problems.
Master a text editor.
Your three choices are Neovim(my choice), Emacs (if you want to learn another programming language), and VS Code (this is the one that is most used in professional circles). At the end of the day, your work (and play) as a software developer is 90% editing text files, so you should be extremely effective at editing text files. This should be more personal to you than your computer is as you will find your productivity is directly tied to your abilities in the editor.
4. Create a profile on Github and learn the basics of version control with git.
From here out, you will put all of your code and things in your github so that potential employers will see that you are productive. Git is a difficult program to understand and work with, and much of it will not make sense. Use it regularly and, with practice and reading, you will eventually grow to understand enough to use it in a collaborative environment. A good resource for this is the first few chapters of this book
5. Learn Markdown
Use it to write documentation, notes, and pretty much anything that you have been writing in word or on paper. This is useful because it's a common format in software circles that can be rendered with another program to more or less any format using tools like pandoc. This will be your main way to write documentation about your programs. This blog, and most of the written prose I put out are all written in markdown.
6. Start lurking on Hacker News and Lobsters.
These are places where anyone from college students to CEOs hang out and discuss tech topics. You will see technologies come and go, people complain about things that are objectively good, and defend things that are objectively bad. Along the way, you will read thousands of blog posts about all programming and technology old and new. This is also where you will learn the in-group terminology and concepts that help you to get jobs eventually.
7. Write a website from scratch, and host it on a server somewhere.
It really doesn't matter what it's for or how you go about making it (as long as you do it from scratch). You will need a basic understanding of how websites are put together and how to put them on a server. A digital ocean droplet running ubuntu is fantastic for this, as well as an AWS ec2 nano instance. This will expose you to many concepts and ideas that are useful in getting your software out of your own computer and able to be used by others. I am specifically not giving instructions on how to do this to force you to find out. There are plenty of posts on the web on how to do this, but I'm going to give you the opportunity to find them on your own and decide how to do it.
8. Read The Go Book
The Go programming language is a newly common language in corporate business programming in which you can get most programming tasks done. It is one of the best languages for getting a good job in the current year. There are plenty of other programming languages out there that are equally good choices, but I think it's a good place to go from python. I might recommend node as a second language if you really enjoyed writing the website and didn't really care much for the python stuff. I don't have a reference for node like I do for go, so you'll be on your own for finding a good book.
9. Research functional programming, and write a program
I don't care what your program does. Functional programming is a totally different paradigm from imperative which is what you've mostly been doing so far. Many of the concepts will carry over from one paradigm to another, and gaining another perspective on programming will be infinitely useful. lisp and racket are great options, though more of them exist.
10. Leetcode
Do some of these problems. Like 20 will be enough to see the common ways people write performant code and it will expose you to many of the common algorithms that will be included in programming interviews. A lot of people overdo them and never end up getting practical programming knowledge, so you'll want to avoid becoming a career leetcoder.