How To Be A Self-Taught Programmer

Everything I’ve Learned (Basically Word Vomit)

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.

Baby Steps

Photo by Hitesh Choudhary on Unsplash

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

Photo by Denny Müller on Unsplash

When I started I always wondered, “Okay, so I see how to send ‘Hello World’ to the console, take user input, and play around with all this data, but how in the hell do people build crazy stuff with code?!” And I really wish that I had a bit of context about that before getting lost in tutorial after tutorial on how to write for loops in Python. Basically, software engineering is a MASSIVE field, and everyone has different stuff that they want to build. I’m going to guess that most people here are interested in building programs on the web, but there’s also game development, embedded systems (think sprinkler systems and when hardware meets software), operating systems programming (someone needs to tell your physical computer how to work with the user), and plenty more. Even on the web there are a ton of different specializations. The frontend is what is displayed on a web page, it’s all HTML (basically text and links), CSS (style and color to make your website all pretty), and JavaScript (programming to change HTML and CSS when the user clicks on stuff), and most people what’s called a Framework, basically a set of functions that adds a lot of new functionality to a programming language, making it almost a new language of its own (this is usually where the fun is).

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.

What Next?

Photo by Glen Carrie on Unsplash

So what should you learn after Python? I think that’s up to you. Personally, I think HTML, CSS, and JavaScript can be helpful if you want to build something visual for a portfolio or as a hobby web project. It’s also kind of nice to mess around with the front end if all you’ve been able to see from your code at this point is just dark text in a terminal. After HTML, CSS, and JavaScript what should you learn next? Well, now this is really up to you, because there are a TON of backend programming languages and a TON of different databases. You already know Python at this point so you COULD stick with Python, but I think this is where the decision gets a little complicated. Backend languages like Python and NodeJS might be simple to learn, but you might have to put in a bit of extra work if you want a fully functioning login system and security. Personally, I don’t find it very helpful to my skills as a developer to implement password hashing, user sessions, and other enterprise level program features from scratch. You absolutely can, and probably will mess with these at some point, but I think you can cross that bridge when you absolutely have to. Languages like Java and C# can be done in an IDE (Integrated Development Environment). These come with a ton of features that make your life as a developer easier. It will let you know what packages are missing, come with a full-featured debugger so when you misspell the word “class” as “clas”, it will let you know exactly where and what the problem is. I have experience with C# and I think that it’s been awesome building such full-featured programs with a lot less setup than programming from everything from scratch.

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.

Photo by Jeswin Thomas on Unsplash

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.

To recap, I think it’s a great idea to start with Python as your first programming language. After you learn the basics of Python, you probably want to learn the basics of the web, HTML, CSS, and JavaScript. Once you understand how a user can play with things on their end of the web, you can learn how to program a simple backend. Python has Django and Flask (though I hear Django is better), JavaScript has NodeJS, and pretty much every other programming language out there can work on the backend. If you want to build something feature rich, with a complex login system, authorization, etc. I would recommend researching more on Java, C#, or C++ (though C++ is weird if you don’t know computer architecture). After this, you want to know a database management system. Finally, you might want to pick up Cracking the Coding Interview if you’re looking for a job (it’s really not that important if you want to make a startup and if you need an algorithm you could probably just figure that out as you go). This is really where my expertise ends (and I’m not an expert to begin with), but I think if you reach this point you’ll be pretty comfortable learning just about anything you need to in programming.

I'm a self taught developer from Long Island, New York. I'm also an English Teacher in Kumamoto, Japan! Life is pretty cool when you learn cool stuff.