- Published on
I just did ________, how do I get into software?
- Authors
John Partee
This week, I was asked to give some mentorship to a highschool student who had started to peek into the wonderful world of software. It's terrifying looking from the outside in! I had a lot of the same concerns when I came in. My first software was awful. I was way too focused on the wrong things. I've come a long way in the last few years, with the help of the right tools. So, here's some Q&A's to sum up what I've learned.
- I just did ____, how do I get into software?
Whether you're about to get out of highschool, the military, or a trade, you're ready for software. You don't need a computer science bachelor's, a bootcamp (Please, god, don't do a bootcamp. Come talk to me first.), or be a genius. Software seems scary from the outside, but it's just solving a lot of little puzzles, and sticking those pieces together.
If you remember nothing else, burn this into your brain. Software is just solving a lot of little problems.
So, how do you get your start in software? Two big things. Pick a language, pick a problem. Then, solve that problem with your language.
- What language should I learn?
It doesn't matter. Seriously. Some languages are better for some things, and I'll talk about that in a minute, but don't waste time figuring out the best language for something yet. Definitely don't try to look up salaries and base your choice around that.
Personally? I'd say go learn Python. The syntax is easy if you've never done software before. We have a roadmap here!
- If language doesn't matter, what should I focus on?
Problem solving. Remember when I said pick a problem? And that software is just a bunch of little problems? Pick a problem, break it up into a bunch of little problems, and start solving it. This seems impossible now, but it only gets easier as you go. You will not have all the answers when you get started. I still don't when I start a project. It's normal! Google hard, think hard, you'll be fine.
For practice, solve practice problems. If you spend ten minutes a day on Codewars or Exercism you'll start to make sense of it all fast.
Solving these little problems is Essential. I can't emphasize this enough. When you get stuck, google it. Your new job is to learn to think in loops and conditionals. Start with something like SoloLearn to get the syntax, then start working on these little problems. It seems dumb, but these building blocks build the systems we use every day.
Don't skimp here. Do the reps. Solve little problems. It's your new job.
- Hey jerk, you said pick a language, then don't pick a language. What gives?
I know! The big thing is don't decide you'll learn everything C++, then give up when you get bored. Pick what fits your problem, your real job is to learn how programs work, not just one language.
But, fine, here's a few to give you a start.
Python - Again, the easiest language to learn at first. It's the 'second best language for everything'. It's not fast, it's not always pretty, but it's usually pretty easy.
Javascript - The internet is full of JS hate, and I get it. But, there's not another good language out there yet for web stuff. Javascript runs in your browser, so you can make websites do stuff interactively. If you're learning Python and decide you want to use Flask, think twice and try some JS. I really like the React framework, once you know how to make a loop (or use map) in JS, I'd skip to React.
Again, don't get married to a language. Pick a language for your problem, and move on if it doesn't fit. Your whole job is to learn how programs work, not how C++ handles memory (...yet).
Ruby on Rails - Honestly, haven't used it. However, it's widely used in industry, so I had to throw in another option. The Odin Project has educational paths that can take you from zero to hired in Ruby and JS, take a gander. It's all project based too, which is awesome!
HTML/CSS - I think this is super boring. But, it is how the internet works. Want to make a very static website with 90's flair? Learn straight up HTML. The Odin Project's Foundations covers this stuff, and it is worthwhile. Just don't treat it as the last thing you'll learn. You'll need JS too probably!
Once you really come to love a language, pick up a new one. You'll see a lot of the same ideas, but a lot of new ones too. Broadening your horizons is super helpful.
- I'm an admin and just want to automate some stuff, do I have to learn all this crap?
Nope. Tony doesn't like it, but I recommend Ansible. It's Python under the hood, but "playbooks" (programs, kinda) are written in YAML, which is easy. And it's near human readable! When I roll into an organization to help them go from traditional IT to automation, this is my go-to hammer. It's slow, it's heavyweight for what it does, but it's super easy.
- What else do I need to learn?
Pick an IDE, and learn how it works. An IDE is just a fancy text editor, but it's a gamechanger with the right one. For Python, I have my SensibleDefault setup here for VSCode. If you hate it, try another one. VSCode is like the Python of IDE's, it's the second best for everything.
Git. Git is how real developers store their code. It's a brilliant, beautiful system that makes our lives a lot easier. GitHub has a good intro, give it a shot here. You will use this at work, be able to talk about it for an interview! While you're learning, make a GitHub repo and use it to store your code. Eventually you can turn that into a portfolio, which helps you get hired.
Interviewing, and selling yourself. Play the LinkedIn game! This is stupidly important. Show your work. Talk about your journey. Ask people you've worked with in the past how they got to where they are. Add everyone you ever interact with in the software space. Add people you find interesting. Ask them about their journey. The power of the network can't be understated, it's how most of us find work.
Teaching what you know. It reinforces what you learned, but also helps you break down hard technical things to a nontechnical audience, which is hugely important. Find a friend that wants to learn, and drag them along. You'll both end up stronger for it.
Using Google efficiently. Find a good resource? Bookmark it. Find a useless resource? Notice what red flags you can see on the site. Was it a sketchy domain? Ten years out of date? Amateurs Google, pros Google really well. The dev working on Google uses Google to solve their problems. It's a reality of the field, we just can't store it all in our brains. Keep patterns in your head, random syntax at your fingertips.
- Should I got to college for this?
Yeah, probably. It helps get past hiring managers. If you have the spare funds and time, do it. If you're in the military, it's stupid not to. If you're broke and hungry, no. You can get into the software world with just a few months application, and free resources. Think about it after you can afford rent.
In my experience the college you choose doesn't matter much. What you do outside of your coursework is more important. Find problems, solve them. Talk about them. Build your network.
Credentials cost money, learning programming doesn't have to.
Good luck!
Remember, software is just solving lots of little problems. Find some problems to solve, and you'll be in the industry faster than you think.