Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ronhedwigzape/how-to-get-into-software
https://github.com/ronhedwigzape/how-to-get-into-software
Last synced: 5 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/ronhedwigzape/how-to-get-into-software
- Owner: ronhedwigzape
- Created: 2023-09-16T15:03:42.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2023-09-16T15:07:37.000Z (about 1 year ago)
- Last Synced: 2023-09-17T01:03:08.088Z (about 1 year ago)
- Homepage: https://github.com/npmaile/blog/blob/main/posts/2.%20How%20to%20get%20into%20software.md
- Size: 3.91 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# How to get into software
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.
## 1. Install [Arch Linux](https://archlinux.org) 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](https://wiki.archlinux.org) to be a useful reference for debugging software products.## 2. Read [Automate the Boring Stuff](https://automatetheboringstuff.com/)
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.## 3. Master a text editor.
Your three choices are [Neovim](https://neovim.org)(my choice), [Emacs](https://emacs.org) (if you want to learn another programming language), and [VS Code](https://code.visualstudio.com/) (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](https://github.com/) 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](https://git-scm.com/book/en/v2)## 5. Learn [Markdown](https://www.markdownguide.org/)
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](https://pandoc.org).
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](https://news.ycombinator.com) and [Lobsters](https://lobste.rs).
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](https://digitalocean.com) running [ubuntu](https://ubuntu.org) is fantastic for this, as well as an [AWS ec2 nano instance](https://aws.amazon.com/).
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](https://www.gopl.io/)
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](https://nodejs.org) 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](https://common-lisp.net/) and [racket](https://racket-lang.org/) are great options, though more of them exist.## 10. [Leetcode](https://leetcode.com/)
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.## Additional musings
### You need to write programs (or make websites)
The numbered instructions above are not enough to get a job.
You will also need to have some examples of code you've written along with the experience of having written the code.
Coming up with programs (or websites) to write is difficult.
The only way I've been able to reliably do it is by examining what happens in my own computing experience and finding things that annoy me.
One of my favorite problems to solve is changing my desktop wallpaper with a keyboard command.
It's not ground-breaking or even technically impressive, but it's something that makes my computing experience some small amount more plesant.
The important thing isn't that you make wild programs that change the world, but that you get experience writing programs.### The ordering of the above list is not as strict as I make it look
Each one of these steps does not take the same amount of time, and they are meant to overlap quite a bit.### This is by no means an exhaustive list of things you need to do
I hope that in researching and completing the above tasks, you will have gained enough knowledge about the other aspects of programming to make yourself a well-rounded programmer.
Do not be afraid to go down rabbit holes of learning about things that seem to pull you from the loose path I've laid out.
These are the things where you will find your niche.### These tasks will not be done instantly
I expect someone to have done enough to get an entry level job after about a year or so of doing the things on this list.
You may take more time or less time.
This is not a problem.### You can ask me for help if you want to
I don't care who you are.
If you found your way to this post and you want some help, feel free to reach out to me.
I'm available on many platforms as npmaile.
If you've seen me post on it in the last 6 months, there's a great chance that I will respond.
I cannot promise I will get back to you as I am just one man, but I like to see others succeed and will do anything I can to make that happen.### Apply to jobs frequently
You will not get a job the first time you apply.
You will not be ready to work in software the first time you apply.
Do not let this stop you from applying to entry level positions.
Eventually, you will get to a screening interview before you get rejected.
Eventually, you will get to a technical interview before you get rejected.
Eventually, you will get a job.
It took me around 60 applications before I got my first programming job.