This page is a growing compilation of free resources for learning to use various technologies, tools, and skills that I find interesting, fun, productive or essential. Most if not all of them are those which I’ve used myself. They are listed in order of relative complexity to a new programmer.


There are some things that you might want to know about, learn about, set up, and/or install before beginning to program. These are my recommendations. While some of them are definitely not as “necessary” as others, I believe that they are all worthwhile.

  • How to Become a Hacker - ESR
    • Good overview of programmer and open-source philosophy and an ideological guide to getting started. Serves as good motivation and provides a clear path of progression.
  • Installing Python/Editor Set-Up - RUCS24 Set-Up
    • Only the two sections specified, providing relatively thorough instructions for installing Python 3 and a productive environment for writing Python programs.
  • [Optional] Learn Enough Command Line to Be Dangerous - Michael Hartl
    • Thorough and informative introduction and tutorial to using the Unix command-line. Maybe a little too thorough for beginners who are excited to learn how to program and don’t want to spend an hour or more learning how to use their computer through a terminal. It is worth learning to use a terminal, however, so if you aren’t familiar already, read it in bits and pieces, and come back to it when you are lost or confused.
    • Windows users will not have a Unix command-line installed by default, but the Windows command-line is inconvenient and lacking in features in comparison to the Unix command-line. Look into setting up Windows Subsystem for Linux and make sure you install Ubuntu 20.04 LTS. Once you do so, the Ubuntu Linux command line for beginners tutorial might be of additional help to you, particularly Part 7: The Command Line and the Superuser.

Learning to Program

I believe, for a variety of reasons, that Python is the best and most approachable programming language for beginners to learn as their very first. I explain this opinion in a little more detail here if you’re interested in my reasoning.

If You Know Java

  • Python for the AP CS A Student
    • Provides reasoning for learning Python over Java, as well as syntax comparisons and a learning project at the end to solidify knowledge.

Otherwise …

  • A Byte of Python

    • A short and concise tutorial on programming in Python intended for beginners. Well written, simple, and can be completed quickly. It is rather lacking in the kinds of projects you might find in Automate the Boring Stuff, but that may be ideal if such an approach isn’t presently of interest to you.
  • Automate the Boring Stuff with Python

    • A project-based approach to learning how to program in a way that will enable you to automate away all the menial tasks you perform with computers. Of course, it is not necessary that you complete the entire book. Chapters 1 through 6, Part I, are enough to get you familiar with Python itself. It is a great introduction to programming for those who prefer to learn through practical examples.

      Do note that the book provides its own suggestions and instructions for setting up an environment for writing Python code. My suggestion is to ignore them and instead install Visual Studio Code as recommended in the Pre-Programming section, as it is an editor that is widely used by both casual and professional software developers, and you will find lots of information on the internet about how you can use it.

Regardless …

Consider checking out the Interactive Edition of How to Think Like a Computer Scientist if you are in fact studying computer science, or are simply curious as to how computer scientists approach programming. The Interactive Edition is full of code examples you can run in your browser, as well as videos to help guide you through them, and little quizzes to check your understanding. The sub-sections are numerous, so each chapter gives off the illusion of immense length. However, you will find that each sub-section is actually rather small, and so the book is much more approachable than it might seem at first.

Developing Applications

If you know how to program, or have just recently learned, it’s likely that you’re itching to begin developing cool and practical applications that you or others will want to use. I would not have recommended Python if you could not use it to do these things. It is, in fact, one of the most popular languages with which web applications (e.g. YouTube, Google, Reddit, Spotify, etc.) are developed today. It is not so suitable for the development of mobile applications, but it will have provided you with a lot of the knowledge and understanding necessary to quickly learn a programming language that can enable you to comfortably develop high-performance mobile applications if you wish to do so. Here are some resources for getting started.


  • Python API Tutorial: Getting Started with APIs
    • A one-page tutorial on accessing and working with RESTful web APIs in Python. APIs, as the tutorial explains, are Application Programming Interfaces. Most popular services such as Imgur, Discord, Twitter, and maybe a service you write in the future, have well-documented and accessible APIs so that anyone can easily write a program that taps into their service and requests data from it or performs actions on it programatically.


Chatbots are a really simple and practical way to learn how to develop software applications that do more than take input from and print output to your terminal window. They are easy to get started with, and if you have a group of friends who end up making use of it, you will learn some of the responsibilities that come with developing software, such as making sure it is easy to use (and to learn how to use), free of confusing error messages, etc.

Web Application Development

  • The Flask Mega-Tutorial
    • A thorough multi-part tutorial on developing fully-featured web applications in Python with Flask.
  • Writing your first Django app
    • The official introductory tutorial for Django, a popular web framework for Python that comes packed with many, many features. Try learning how to use both Flask and Django. Both are valuable, though Flask is much simpler and therefore may be more approachable as a beginner.