How to Begin Programming
Programming is an incredibly useful skill. Even at beginner levels it allows people to create useful, tangible projects seeming out of thin air. Why not create that website to showcase your portfolio, develop that game idea that you have been thinking about for weeks, create a mobile app to help with productivity, or make a secure chat room to chat with your friends? Well, with such a large, broad skill it is difficult to know where to begin. Programming languages number from the hundreds to the thousands and each one is tailored to develop software for specific cases or in a specific way. There is no one-size-fits-all programming language and some of them are more difficult to learn than others. To make matters more complicated, your computer environment will look different depending on the project you are creating and the programming language that you are using. If you are developing a website, you will most likely need to download different development software than if you are developing a mobile application for example. So where is the best place to begin?
I want to point out that throughout this post I will be sharing my opinions. There are no strict rules to optimally learn to be a programming wizzard. You may even find that you disagree with my opinions on where to begin entirely and that is okay. My goal is to give some ideas to those individuals that are interested in programming so as to have an understanding of where they can start. This guide is for those individuals that are just trying to get their feet wet with programming on their own to see if programming is for them or not.
Have a goal:
This is one of the cheesiest pieces of advice that I have heard about learning how to program but it is true. When you begin programming it is important to have an end goal in mind. The goal can be as simple as "I want to make a web page about turtles" or "I want to make a mobile application to track my sleep". Having an end goal of a project allows for an easier time knowing where to begin and how to track your progress. It will allow you to have an easier time making choices about what programming language to start with and how you should set up your environment.
What are the differences between programming languages?:
Programming languages vary in syntax, features, and how they are used. Syntax which refers to the rules and structure of a programming language are different for each programming language. Although some programming languages might have similar syntax, by definition, every programming language has different syntax. Some programming languages such as Python favor readability and ease of use with their language syntax while languages like C or C++ might have more complicated syntax.
Programming languages are often categorized by their language paradigm which is simply a way to classify the language based on its features. Some popular paradigms are object-oriented, functional, imperative, and declarative. For the sake of beginning, I find that object-oriented programming languages such as JavaScript, Python, and Java are the easiest to learn because they are often high level -- meaning that they abstract and simplify from a lot of details of the computer. For instance, high level languages often don't have to worry about assigning computer memory to variables in the code. Along with their paradigm, many languages are created for specific use-cases. For instance JavaScript is primarily used for web development whereas Kotlin is primarily used for mobile Android development.
Another difference between langauges are how well they perform. As a rule of thumb, lower level languages such as C allow for the potentiall of greater optimization because of their ability to more closely control hardware components, but require more management. Langauages that are high level such as Java, Python, and Ruby sacrifice some performance for ease of use.
I would also consider the popularity of the language when determining which programming langauge to use for a project. More popular languages have a more prevelant footprint on the internet in terms of documentation and even project tutorials. There is no shame in using a project tutorial to learn the basics of a new language or framework so long as you are learning and not simply copying.
Some programming languages sorted by project ideas:
Project Idea |
Language(s) |
Reason |
Difficulty |
Very basic web site | HTML, CSS, JavaScript | HTML and CSS are not technically programming languages and have a structure that is easy to understand and follow. HTML is used for the structure of the website such as determining what elements are on a page and CSS is used for styling those elements such as coloring them, making them bigger, or putting them on the right side of the screen. JavaScript is used in websites for functionality. It allows functionality like searching, transitions, or even a game. The possibilities are virtually limitless. | Easy |
More advanced web site or web application | HTML, CSS + web framework of some kind such as Angular which uses TypeScript, Django which uses Python, or Laravel which uses PHP | The inclusion of a web framework allows for a lot of out-of-the-box functionality which is extremely helpful. This allows you to focus on the more complicated aspects of your project. One major reason for using a framework is the ability to store and retrieve data more easily. Although this will require a database, many modern frameworks provide out-of-the-box soltions to store and retrieve data in these databases more easily. This site for instance uses the Django framework. | Intermediate |
Simple application | HTML, CSS + web framework such as Angular which uses TypeScript, Django which uses Python, or Laravel which uses PHP | A lot of programming languages make it difficult to create what is called a GUI (graphical user interface) -- in other words the visual, interactable piece of software. Web sites, on the other hand are a nice solution to create a basic GUI and many applications that can be made now adays can be or have been made into web applications. | Intermediate |
Very simple game | JavaScript, Python, Java | They offer ease of learning with beginner-friendly syntax and rich libraries/frameworks dedicated to game development. These languages provide cross-platform compatibility, allowing games to run on different systems, and have active communities with abundant resources for support. Additionally, learning these languages can lead to diverse job opportunities beyond game development, making them versatile choices for aspiring programmers. | Easy - Intermediate |
More complicated game | Game engine such as Unity which uses C# or Godot which uses Python | These engines provide powerful, pre-built tools and frameworks that simplify game creation. They offer visual editors for designing game scenes, reducing the need for extensive coding. Unity and Godot have active communities, tutorials, and asset stores, making it easier to learn and find resources. Furthermore, proficiency in these engines can lead to career opportunities in the game industry, where they are widely used for both 2D and 3D game development. | Intermediate |
Desktop utility or tool | Python, Java | Python and Java remain as two of the most popular programming languages of all time. And for a good reason. They are programming languages that take a lot of tedious nuances out of programming so that you can get down to actually creating the project you want (because they are high level languages). | Easy - as difficult as you want. A great place to start in my opinion. |
Basic mobile utility app | Kotlin (similar to Java) on Android Studio | Kotlin is known for its concise and expressive syntax, making it easier to write clean and maintainable code. It's officially supported for Android app development by Google, making it a recommended choice for Android apps. Kotlin's interchangability with Java allows you to leverage existing Java libraries and resources. | Intermediate |
Basic mobile game | C# with Unity or Python with Godot | See "more complicated game" above. Unity and Godot offer libraries to make mobile game development simpler. | Intermediate |
I'm literally a child but want to learn the concepts of programming | Scratch | It features a block-based visual programming language that's incredibly beginner-friendly, making it accessible for users of all ages. Scratch provides a creative and interactive environment, allowing you to learn programming concepts through hands-on game development. | Very Easy |
What is an IDE and what do I do to set up my environment?:
IDE stands for integrated development environment and, simply put, it is the software that allows you to code. Different IDEs are used for different languages and it can be overwhelming to know where to start. Here is what I would reccomend for starting with different languages for Windows.
Language(s) |
IDE |
Additional Downloads |
HTML, CSS, JavaScript | Visual Studio Code, WebStorm, Sublime Text | |
Python | Visual Studio Code, PyCharm, IDLE | Python itself, virtual environment setup, pip installs |
Java | Eclipse, Visual Studio Code, IntelliJ | Java itself, JDK |
C/C++ | CLion, Visual Studio Code | Compilers for C/C++ |
Kotlin (Android mobile devl) | Android Studio | JDK |
Web frameworks | Visual Studio Code | The framework itself, libraries |
Unity/Godot | Unity/Godot | Libraries |
Scratch | Nothing! Use in browser |
Linux is more of the same except that it has C/C++ compilers out of the box. I would reccomend doing any C development in a terminal using Vim, Emacs, or Nano which all have a high learning curve but will eventually increase productivity.
Learn fundamentals:
Understanding the fundamentals of programming is essential for beginners to provide a strong foundation for computer programming. These basics introduce key concepts like variables, data types, conditionals, and loops, fostering logical thinking and problem-solving skills.
For those starting their programming journey, there are abundant resources available. Online courses and platforms like Codecademy, Coursera, and edX offer interactive programming courses for beginners. Books such as "Python Crash Course" by Eric Matthes and "JavaScript: The Good Parts" by Douglas Crockford provide in-depth knowledge for Python and JavaScript enthusiasts, respectively. Additionally, coding communities like Stack Overflow and GitHub are invaluable for seeking help and collaborating with fellow programmers. For those on a budget or just wanting to sharpen particular skills, I strongly reccomend following a YouTube tutorial of a project from start to finish that aligns with your programming interests. Allow yourself to tweak the code that the guide uses so as to understand it better. There is no better way to learn that a hands-on practical approach.
Here is a list of the beginning programming concpets that I think are important to learn in the order I would learn them:
- 1. Input and Output
- 2. Variables and Data types
- 3. Operators
- 4. Conditionals
- 5. Loops
- 6. Functions/Methods
- 7. Data Structures
- 8. Error Handling
- 9. Debugging
- 10. String and data manipulation
- 11. Objects
- 12. File I/O
- 13. Libraries and Frameworks
One thing that I would advise is that you do not simply read about these concepts separately but follow a beginner's guide to programming concepts to have a foundation that comes from the same source and is therefore easier to follow. Be sure to follow along with any guides or tutorials by doing hands-on learning and projects.
Use tutorials and open source projects to learn:
Using tutorials and open-source projects is a highly effective hands-on approach to learning programming. These resources offer practical, real-world examples that enable you to apply your theoretical knowledge in a tangible way. By following step-by-step tutorials, you gain practical experience writing code and encounter common coding challenges. Moreover, tackling open-source projects exposes you to diverse coding scenarios and experienced developers, allowing you to grow your problem-solving skills and best practices when coding.
To make the most of tutorials and open-source projects, start by selecting topics that align with your interests and goals. Follow tutorials attentively, typing out the code and experimenting with variations to deepen your understanding. After completing tutorials, challenge yourself by modifying the code or extending the project. For open-source projects, study the codebase to grasp interactions, coding patterns, and conventions. As your skills progress, consider contributing to these projects, fixing bugs, adding features, or enhancing documentation. Don't hesitate to seek help and feedback from coding communities, and maintain regular practice to solidify your learning.
Additionally, learning version control systems like Git is crucial for managing and collaborating on open-source projects effectively. Keep notes and maintain a coding portfolio to document your progress and showcase your skills. This hands-on approach fosters practical coding proficiency, problem-solving abilities, and a strong sense of community in the world of programming.
Hit the ground running:
A lot of what I said in this article can be boiled down to this: if you want to begin programming, go for it. Pick a language that is suitable for your project, learn the basics of programming in that language, and then follow a tutorial that is similar to your end goal. One of my favorite free resources whenever I am trying to learn a new language is this YouTube channel. He does a crash course video in many different programming languages to allow you to get used to the syntax and the pacing is spot on.