Introduction to programming
A list of resources for aspiring developers
Table of contents
- Introduction
- Objectives
- Where should I start?
- How is this page organized?
- Which resource should I choose?
- Attention
- General resources
- Other
- Online courses
- Programming languages
- C
- C++
- C#
- Haskell
- HTML, CSS, and JavaScript
Introduction
Objectives
Programming and computer science are more popular than ever. Initiatives such as Hour of Code have helped make learning to code visible around the world.
As a result, there is a growing number of resources for beginners, ranging from books and tutorials to interactive websites and MOOCs such as Codecademy, Coursera, and OpenClassrooms.
That abundance is excellent, but it can also make it hard to know where to begin.
This page is meant to help with that problem. It gathers high-quality starting points for people who are new to programming, new to a specific topic, or trying to move beyond the beginner stage. It is not an attempt to list everything. It is a curated list of resources that are worth your time.
Where should I start?
If you already know what you want to learn, that is ideal. Browse the links below and find something that fits your goals.
If you do not know where to start or which language to learn, some good beginner-friendly options are:
- Golang for a language that combines relative simplicity with the efficiency and safety of a compiled language.
- Python for general-purpose programming, scientific computing, and mathematics.
- Java for general-purpose programming and Android development.
- HTML/CSS/JavaScript for websites and web applications.
- Scratch for children and highly visual first steps into programming.
Python and Java are widely used to teach programming in schools and universities, and there is a large range of resources available for both. Web development is also a popular entry point because it often requires very little setup: a text editor and a browser are enough to get started.
Scratch is different from the others because it was designed from the ground up to be easy to use and easy to learn. Instead of typing text, you drag and connect visual blocks to create programs. That makes it especially suitable for younger learners or for people who prefer visual interaction.
How is this page organized?
This page is divided into two main parts: a section of general resources that offers broad, high-quality learning material, and a section of more specific resources focused on particular programming languages or subjects.
In practice, most learning material tends to fall between two broad categories: online courses, and books plus tutorials. Online courses often rely on video lectures and a classroom-like structure. Books and tutorials teach through reading and usually let you learn more flexibly at your own pace.
Which resource should I choose?
Whether you prefer learning through video or text is mostly a matter of personal preference. You may need to try several resources before you figure out what works best for you.
Most learning resources also tend to emphasize one of three things:
- Programming concepts, semantics, and problem solving.
- Syntax, rules, and the mechanics of a language.
- Idioms, best practices, philosophy, and the wider ecosystem around a language.
If you are new to programming, the first type is usually the most useful. Programming is about solving problems by breaking them down into smaller parts until they can be translated into code. Memorizing syntax alone is not enough.
If you already know how to program, resources focused on syntax and differences between languages may be more efficient.
Attention!
This page is still a work in progress. Some sections may be incomplete, and some links may need to be updated over time.
General resources
Other
You can find a large list of free programming books and resources on GitHub.
You can also browse another meta-collection of programming resources here: http://resrc.io/
Online courses
Online courses have become one of the most popular ways for universities and professionals to teach programming in a structured format. New courses appear constantly, so these platforms are worth revisiting from time to time.
- Codecademy offers free online courses in several languages, though it often focuses mainly on basic syntax.
- OpenClassrooms offers free and paid online courses and allows both readers and contributors to participate.
- Coursera hosts courses from major universities across many subjects.
- Udacity offers computing courses taught by industry experts.
- edX began as a joint effort involving MIT, Harvard, and Berkeley.
- OpenCulture curates many free recorded lectures.
- MIT OpenCourseWare provides static course material from MIT.
- Khan Academy includes introductory material on programming and many other subjects.
- Stanford Engineering Everywhere provides static course material from Stanford.
Paid platforms with a wide range of courses include:
- Team Treehouse, with a strong focus on web development and iOS.
- Lynda, which covers design, animation, video, business, and more.
- PluralSight, with more emphasis on developer and IT topics.
- General Assembly, which also includes broader professional and technical courses.
Programming languages
C
C can be difficult to teach and to learn well. Courses and tutorials are useful, but many people still recommend complementing them with a proper book.
- Online courses:
- Interactive tutorials:
- Books and online tutorials:
- Printed books:
C++
As with C, C++ is often easier to learn well with a combination of courses and serious reading.
- Online courses:
- Interactive tutorials:
- Books and online tutorials:
- Printed books:
C-Sharp
C# is a multi-paradigm language that supports imperative, declarative, functional, generic, object-oriented, and component-oriented programming styles.
- Online courses:
- Books and online tutorials:
Haskell
Haskell is a statically typed, purely functional language that differs significantly from many mainstream programming languages.
- Online courses:
- Interactive tutorials:
- Books and online tutorials:
- Exercises:
HTML, CSS, and JavaScript
HTML, CSS, and JavaScript are the three core technologies behind the web.
HTML describes the structure and content of a page, CSS describes its visual style, and JavaScript adds behavior and interactivity.
The usual order is to begin with HTML and CSS, then move on to JavaScript once you are comfortable with the basics.
Also note that HTML and CSS are markup languages rather than programming languages in the strict sense. If your only goal is programming, you might choose to jump directly to JavaScript or another language. In practice, however, web development usually leads you back to HTML and CSS sooner or later.