You really don't need much to get started with computer programming. Actually, there is a lot you can do with just a smart phone, or in a web browser - which makes things way easier if you are working from a computer at a public library or something, where you may not be able to install your own software. Many of the resources that I will share will run on as little as a Raspberry PI 3 B+ - that is a $35 computer, by the way. Of course, you'd also need a keyboard, mouse, display, power supply, and SD card, but basically if you have access to this website in the first place, then you probably have enough computing power to get started. In the future, I do plan on making videos about specific limitations of different types of hardware, and the most affordable ways to accomplish certain goals, but for now I’m going to dump all of my favorite resources on this page and on the corresponding video channel(s) so that at the very least I can help others to not waste as much time as I did when I was getting started.
Below I have provided links to different resources, all free or at least what I consider to be affordable and of exceptional value. Some of these resources are organized by goals and others by language, but you should be able to begin with any section you like. Of course, one section may reference another, but generally your goals will determine the languages and technologies that you will need to learn, so the organization of information here will reflect that to some extent. Also, pretty much all of these languages can be run in-browser on https://replit.com/, including inline assembly in C - you just won't be able to access your local filesystem from Replit, which some lessons may require.
Oh, and if you do get stuck at any point, check out the forums at https://stackoverflow.com/, https://forum.freecodecamp.org/, or https://gamedev.net/. You can also search for Discord servers on topics that interest you, and I would recommend checking if there are any meetups in your area. Tutors are awesome if you can afford them and have very specific issues you need solved quickly, but there are lots of people willing to help - or show off their skills - on the internet. Bonus: When you are able to answer someone else's question you get to feel awesome because you are helping someone else and seeing your own progress at the same time.
Disclaimer: I am trying to cover things beyond my areas of expertise, so feel free to send recommendations or corrections - email in footer. Also, prices of products I recommend are only accurate as of...the last time I checked, maybe; I don't update all of the prices every time I update the page.
Legend
= Click for more info.
= Non-free resource at the time of writing.
= Lessons that can be completed in browser and the resources that will enable you to do that.
= Lessons that I've verified can be completed on mobile and touchscreen devices. Soon™.
Contents
Last Updated: Mar 2024
Goals
Web Development
Modern web development is generally divided into front-end and back-end development. In perhaps overly simple terms, front-end development is basically making the things you see on a webpage, and back-end development is working with storing, processing, and moving data behind-the-scenes - a developer who does both is a full-stack developer. Modern front-end web development will require knowledge of HTML, CSS, and JavaScript at a minimum, though more realistically one would be expected to learn at least one framework like React or Angular. Back-end development generally requires knowledge of some type of back-end framework and some type of database at a minimum, e.g. ASP.NET and SQL Server, or NodeJS and MongoDB.
Resources:
Video Game Development
Oh, where to begin? You can make games completely with builders and visual programming in existing engines. Actually, the first video in this playlist is about making a video game without writing code, publishing it on Steam, and then getting console ports published! Of course, you could also challenge yourself endlessly with graphics, sound, I/O, networking, physics, artificial intelligence, etc. Make it as simple or as challenging as you like!
Anyway, I would recommend starting somewhere in the middle and just checking out tutorials for an existing engine like Unity. Any prior programming knowledge - especially with C# or C++ - will help a lot, but it isn't an absolute necessity. It is also becoming increasingly easy to port games to console, especially with Unity and Microsoft technologies, so I would recommend just learning a little code and an existing engine first and worrying about console stuff later; besides, you can use controllers for most modern consoles directly on your computer, so there is no reason not to if that's how you prefer to game. Oh, and you can develop mobile games with these engines, too!
Important: Many game engines are free for learning purposes and small projects - definitely read the license agreements, especially if you plan on publishing your game. Godot is completely free and open-source, though.
Resources:
Artificial Intelligence
You can do artificial intelligence in many languages, but Python is the most popular. Data mining, artificial intelligence, machine learning, deep learning, I recommend approaching them somewhat in that order, but of course you don't have to master every little thing before moving on to things that you find more interesting. It is worth noting that the power of your computer, especially your graphics card, can have a significant impact on how long it takes to run certain machine learning algorithms. Although, the 2GB or 4GB version of the Nvidia Jetson Nano - a small standalone computer made for learning AI, you just have to install Linux on an SD card - is more than enough for learning purposes. Not long ago the 2GB version was just under 60 USD, but now I'm only seeing the 4GB version for 150 USD.
I highly recommend starting with Weka. The Weka courses on Data Mining will teach you how to use their program for machine learning; it is not GPU accelerated - i.e. it does not make use of the computer's graphics card to process the calculations more quickly - so it is not very fast, but it will enable you to focus on the concepts and the terminology of data mining, artificial intelligence, and machine learning, so that once you have a grasp of these, as well as a language like Python or C#, then you can dive into the lessons and documentation of libraries like PyTorch and TensorFlow with confidence.
Resources:
Reverse Engineering
Reverse engineering, in perhaps overly simple terms, is taking apart computer programs and figuring out how they work. There are a surprising number of people who reverse engineer things like old computer viruses just for fun. Of course, there are some legal concerns with reverse engineering other people's intellectual property - e.g. copywritten material - and I'm not an attorney, so you might want to consult one if you find yourself going down that path; but there are a number of applications that are not so perilous.
Definitely check out the Assembly section, as well. Also, if you go pretty deep into reverse engineering, it will be useful to learn a bit about data forensics; I would like to add a post on Volatility in the future, but until then this and the other assembly resources should be more than enough study for anyone just getting into reverse engineering.
Resources:
- https://beginners.re/This is not the sort of book that you should read with the expectation of understanding everything; if you fail to understand something, just keep reading - if you begin to feel overwhelmed, just come back to it later in your journey. The book was free for a long time, but as of the time of this writing the author, Dennis Yurichev, requests a 1 USD patron donation for access. I could not possibly overemphasize how generous this is; he has maintained a wonderful book which, with the assistance of his readers, has been translated into French, German, Japanese, Italian, Polish, Chinese, Korean, and Farsi/Persian, from its original Russian and English. The Chinese and Farsi/Persian editions appear to still be available for free, and the Korean version must be purchased at a greater price as the copyright is held by a third party.
(Click to close.)
Languages
Python
Largely the language of data science and artificial intelligence. If you use Windows, I recommend installing Python from the Microsoft Store first and then Visual Studio Code, and it should just find Python for you. You can also use Python directly in a terminal, or any number of IDEs (Integrated Development Environments). The first resource below will probably be enough to get you started if you use Windows, MacOS, or Linux - do read the note.
Resources:
- https://inventwithpython.com/Al Sweigart has generously released several free books on Python, as well as a couple of other technologies. "Automate the Boring Stuff with Python" would be a great place to start, but I definitely would not skip the Introduction if you are using Python for the first time.
(Click to close.)
- https://www.freecodecamp.org/learnI've not yet taken all of the Python-related courses on here, but the "Scientific Computing with Python" course looks like it breaks things down pretty well.
(Click to close.)
- https://www.python.org/doc/
JavaScript
Mostly for web development, though there are other things you can do with it. It has become very powerful, and you can even render 3D graphics in a browser using WebGL, but I would still recommend starting with some of these resources.
Resources:
- https://www.freecodecamp.org/learnThe first six freeCodeCamp courses are mostly JavaScript. I will say the Data Visualization one can get a little tricky though, so definitely check out the D3 resource below if you take that course.
(Click to close.)
- https://www.d3indepth.com/D3 is a powerful Data Visualization library for JavaScript. You may not need it, but if you do, or if you take the Data Visualization course on freeCodeCamp, then definitely check out this resource.
(Click to close.)
- https://developer.mozilla.org/en-US/docs/Web/javaScriptThis is just JavaScript documentation, but definitely worth referencing for browser compatibility, or if you forget how to use a specific function or feature of the language.
(Click to close.)
- https://codepen.io/Allows you to do HTML, CSS, and JavaScript directly in the browser.
(Click to close.)
- https://jsfiddle.net/Similar to CodePen - HTML, CSS, and JavaScript in browser.
(Click to close.)
C++
My first love, C++. A powerful language used for basically everything. If you go the VS Code on Windows route, I highly recommend installing Visual Studio Community Edition with all of the packages for the programming languages you plan on using and then installing VS Code, that way VS Code will automatically find the correct compilers without you having to manually configure anything. Of course, a good bit of this could also be done in-browser with Replit.
Resources:
- C++ YouTube Playlist by CreelOne of the most streamlined beginner series on C++ that I have seen. He does not go very in-depth on setting up the programming environment, but you can watch the first videos in The Cherno's playlist for that or just use Replit. I have not yet validated that all of the code will run in Replit, but I was able to run assembly in C with it, so it's probably fine.
(Click to close.)
- C++ YouTube Playlist by The ChernoThe Cherno's C++ series is much more in-depth, but I highly recommend it even if you already have some experience.
(Click to close.)
- YouTube Playlist on the CMake Tool by vector-of-boolCMake is not mandatory for compiling C++ programs, but it can be helpful and this was the best tutorial series on in that I could find.
(Click to close.)
C#
The Microsoft language, though it definitely has uses outside of Windows environments. C# is not an exceptionally difficult language, but I haven't found as many good resources for learning it as I have for other languages. That said, the Microsoft tutorials here will run in browser either in Microsoft's own .NET editor or in Jupyter notebook - another great program, but the in-browser version just isn't stable enough for me to really recommend yet - and you can also do C# in Replit if you want to take it a step further but without installing anything.
Resources:
Assembly
I do not recommend beginning your programming journey with assembly, but if you have some prior programming knowledge, or if you simply insist, then here are my favorite primers. None of the resources really summarize the things that I found most helpful, so I plan on revisiting this subject in a later post. Inline assembly in C is also possible in Replit.
Resources:
- Assembly in General
- https://beginners.re/Understanding Assembly Language is the same book as Reverse Engineering for Beginners, just with a different title; the beginning portion focuses specifically on assembly. It is 1 USD for access as of this writing, but as stated above in Reverse Engineering, it is more than worth it.
(Click to close.)
- X86 / X64
- MIPS
- ARM
Rust
I mean...I'm not going to stop you.
:)
Resources: