A few friends have asked me about how they can start learning programming. So I’ve put together some resources that I hope will be useful to someone trying to self-study programming.

Development Environment

Many programmers prefer to use Linux since it is much easier to manage packages, libraries and other essential components. If you’re coding on Windows 10 and want to use a Linux environment, you can use WSL. WSL is the easiest way to run Linux on Windows. Setup WSL with a popular Linux distro like Ubuntu and that should make it a lot easier to follow along with most programming tutorials.

For local development, I’d recommend VS Code as the IDE of choice.

You could also use an online editor like Repl.it (or CodePen for JavaScript) if you don’t want to set up your development environment locally.

Version Control

Version control is very important for organizing and managing your code. Git is a popular version control system. Check out this article about getting started with Git. It also has links to the Udacity course for Git as well as other useful resources at the bottom of the page.

With that said, development environment and version control are both things you can completely ignore in your initial stages. I mentioned them here so you can remember to come back to them once you’ve got a grasp of the basics as they will make things a lot easier once you start writing a bit of code.

Picking a Programming Language

With regards to what language to learn first, it’s entirely up to you. I’d suggest starting with a popular language since it’ll be a lot easier to get help on things when you get stuck (which will undoubtedly happen and is completely normal). Python, JavaScript, C and Java are all fair choices here.

If you’re interested in a general introduction to programming and want to use an easy-to-understand language, go with Python. Python is also very popular in the fields of artificial intelligence, machine learning and data science.

If you want to focus on web development, go with JavaScript. JavaScript runs in the browser and is responsible for most interactive content on the web. You’ll also have to learn some basic HTML and CSS to be able to create the webpages in which JavaScript will run.

If you want to do some heavy-lifting and work on enterprise applications, go with Java.

If systems-level programming (robotics, mechatronics, firmware/hardware) sounds interesting to you, go with C.

If you’re unsure, I would highly recommend Python since it is the easiest of the bunch. It has clear, easy-to-understand syntax and is very high-level (closer to human-readable, as opposed to low-level which is closer to machine-readable).

General programming concepts are a transferable skill across all languages so it’s relatively easy to pick up new languages once you’ve got a solid grasp of the ideas through understanding a single language. I’ve linked to tutorials for the four languages I mentioned above.

Tutorials

Python Tutorials:
https://diveintopython3.problemsolving.io/
https://www.programiz.com/python-programming

JavaScript Tutorials:
https://www.programiz.com/javascript
https://developer.mozilla.org/en-US/docs/Web/Tutorials - complete web development tutorial (HTML, CSS & JS from beginner to intermediate to advanced)

Java Tutorials:
https://books.trinket.io/thinkjava2/index.html
https://www.programiz.com/java-programming

C Tutorials:
https://www.programiz.com/c-programming
https://www.learn-c.org/en/Welcome

Computer Science Concepts

Computer Science Fundamentals - Brilliant (several free courses): https://brilliant.org/computer-science/

Computer Science courses - KhanAcademy: https://www.khanacademy.org/computing/computer-science

Programming problems - HackerRank: https://www.hackerrank.com/

Advanced programming problems - LeetCode: https://leetcode.com/

Discrete Mathematics - An Open Introduction [free textbook]: http://discrete.openmathbooks.org/dmoi3/dmoi.html

Complete Computer Science Curriculum

If you want to actually take it a few steps further and get a more thorough education in computer science, I recommend checking this out: https://github.com/ossu/computer-science

This is a full curriculum with high-quality open-source online resources to get you a proper, well-rounded computer science education.

Alternatives to Self-Study

If self-learning is difficult, there are some other options available as well.
Some companies may offer education and career tracks - ex. Shopify: https://www.shopify.ca/careers/shopify-dev-degree-2021-429856

There are also many “bootcamps” that aim to rapidly teach students the basics and get them into the job market - ex. Springboard: https://www.springboard.com/courses/software-engineering-career-track/

I hope that helps you get started and wish you success on your journey!