About a year ago I taught myself to program. When picking up any skill, programming included, I think it’s important to understand what it takes to learn that skill, to have the ‘level up progression’ sort of mindset. The same way your Pokémon learns Ice Beam at level 38, you can get an idea for what skills you’ll need to pick up as you learn to program. It’s a huge field and there’s a lot to know before jumping in.
It can be daunting, especially knowing that entire careers in programming can still have close to no overlap in knowledge besides the basics. Someone working in Machine Learning might never have to program the front end of a mobile app, and might not even know how! Just know that everyone starts from the bottom at some point and I really do believe anyone can not only learn HOW to program, but go on to actually work at any software company or do anything they want with those skills. It’s not difficult, just a lot of stuff to learn. I’m going to write this as a guide for people just getting into programming but I’m sure that some of this knowledge can be helpful with devs of any level, even people with more experience than me. I just feel like I’ve learned a lot over the past year, and I feel confident that I can write just about anything that my friends in CS Degrees can write, and learn any new programming language, framework, or technology pretty easily.
First, If you’ve never learned a programming language before, learn Python. I know this is a bit controversial. Most people will tell you to learn X other language, or say everyone’s situation is different depending on what you want to do with programming. Just trust me. PYTHON IS EASY! You won’t be discouraged and never want to program again if you start with Python and after learning Python you can pick up ANY programming language in a fraction of the time. It reads like English and there’s very few funky brackets or semicolons to confuse you on why your program isn’t working properly. You’ll get the hang of Python faster than any other popular language.
Okay, okay but where do I go to learn Python, and also WHY? Shouldn’t I just learn C, or Java like all the ‘real programmers’? I think we need a little story time as context here.
I actually learned from a book called “Python Projects for Beginners: A Ten-Week Bootcamp Approach to Python Programming” by Connor P. Milliken. Milliken’s book can be completed on a timeline of 10 weeks or 10 days depending on how the reader wants to take it and it has lots of little practice problems to check if you’ve been paying attention. It also has small ‘projects’ which are just little text games like hangman and blackjack. Now before you pull out your wallet and start running, thinking “oh man 10 days to a dev job?! Sign me up!”, I need to say that I don’t think it matters where you go to learn the basics of a programming language. In fact there are plenty of YouTube videos that will teach you programming from scratch in a few hours instead of 10 weeks. Also, Milliken’s book is pretty great for beginners, since it gives you a taste of a lot of different programming subjects, but it won’t get you a job, not even close. It also probably won’t let you build the startup that you’ve been dreaming of since you were a kid. If I were to go back I would watch a tutorial by Tech With Tim on YouTube. He’s a fantastic teacher for beginner programmers and has a free, in-depth video series that you can run at 2x speed to get the gist before moving on to cooler stuff.
You don’t need to spend a ton of time with Python, you just have to understand how programming works. That means being comfortable with Arrays (Lists in Python), Dictionaries, if statements, loops, basic data types, classes and objects (you’ll learn what all these mean pretty quickly, I promise). It takes a little while to get the hang of but I really do believe this is the most difficult part of learning to program.
Getting the bigger picture
At this point in the article it might be helpful to know just a little bit about programming. You probably want to be done with a few hours of programming (which I hope is Python, because Python is awesome).
There is a backend too, this is essentially where all of the data gets moved around. When I learned how to program I learned a class could represent some real life thing, like a dog. It never made sense to me why we care that a dog has a name and can call a little function in my program called Bark. In the real world, this is actually really important. Basically, a class will wind up being data in your program that real users or things interact with. You want a user to log onto your website? In your program that user will have its own class, and may have a method (a function in a class) that lets that person log in. But how do we store all of this data about a user? That would be in a database. For some ungodly reason, even Computer Science programs may get all the way to the end without students learning about databases. If you’re about to go into a CS Degree, take a class on databases, it’s pretty much mandatory for any job and you will need it to build any beefy web program. Also, you can use what’s called an object relational mapper (ORM) to connect your programming classes to database tables. This is insanely useful and helps you write massive systems really quickly, there are even frameworks that will do all the database creation for you based on what classes you want in your program!
Programmers are pretty funny people, but all of the jokes are really lame inside jokes. What do we call someone that works on both the frontend and the backend? That would be a full-stack developer. Okay, but why ‘full-stack’? So the lingo is kind of to call any programming language or framework as part of your ‘stack’. This is a reference to a data structure called a stack which kind of works like putting books on and off a stack… yeah pretty lame.
You’ll definitely want to learn how to use a database. Certain ORMs can get by without using SQL (the language used by relational databases), but it’s probably a good idea to learn it. There are a few NoSQL databases out there too, like MongoDB or Apache Cassandra. Learning any one of these should be fine to get you going, and learning which one is best for the job really has to do with the big architecture of your program and designing distributed systems, something I’m personally only just getting into.
If you want a job, it’s best to know about data structures and algorithms. Personally, I don’t agree 100% with every company using this to gauge who is a good programmer or not, and I’ve helped my Dad who owns his own software business with figuring out better hiring criteria. However, if you want to enter the game, you have to play by the rules and this is definitely a must-know skill. Data Structures and Algorithms are pretty much something that everyone, college grad or not, has to learn on their own. Plenty of school courses might teach you the basics but not enough practice to get a job at Microsoft. Currently there is one resource for learning that tops all of the others and that is “Cracking the Coding Interview” by Gayle Laakmann McDowell. You don’t really need prerequisite knowledge before picking up this book so I would recommend you just get it and murder every question until your eyes turn purple.
There are other subjects that I wondered about too when I started. What about Computer Networks, or Discrete Math, or Linear Algebra, or Machine Learning? Well, to put it simply, a lot of these things you learn as needed, like most web programmers don’t need to take a course on Computer Networks (in fact a lot of CS degrees don’t even make this class mandatory). Classes like Linear Algebra and Calculus might be important for an ML Engineer, but that doesn’t bar you from getting a job in any other programming field without taking it.
I think up until here is a good place to end this little chit chat. I pretty much made this article to the people who would have been in my situation a year or so ago. I remember spending so much time trying to understand just what it takes to get to build software like my dad does at his company, so I hope my rambling might help someone out on this journey. Not many people make it past “hello world”, but if you can put in the effort and not get overwhelmed, I really do believe anyone can program.