Learn to Code – A Collection of Programming Tutorials and Resources for Beginners

Published: 10/25/2014. Updated: 5/21/2016 Updated 9/21/2016

Because I am often asked by friends where to start as a beginner in computer science and software development, I compiled a list of a few of my favorite resources. This list may be updated from time to time. Have a suggestion? Contact me so I can add it. :)

This is not an exhaustive list. You can find many more coding resources at code.org.

Visual Coding

scratch.mit.edu – free – code blocks / javascript – Designed by the Lifelong Kindergarten Group at MIT. Learn basic programming with animations, sounds, music, and movements. A great way to introduce kids – or anyone – to programming.

Learn to code with Minecraft

ComputerCraft for Minecraft – free, but requires Minecraft account – Lua – Play Minecraft and program computers, robots, and even computer networks in the game itself.

YouthDigital Mod Design 1 – $250 – Java – Learn to use Eclipse to make your own items, biomes, and monsters in Minecraft. While $250 may seem expensive, the testimonials are very positive, and the videos are especially appealing to younger viewers. In the process, you will learn how to use Eclipse and Java, which is a desirable skill in the marketplace.

Make your own games

Cocos2D with Python – free / MIT licensed framework – Python – Use Python to make 2D games for desktop platforms

RayWenderlich.com – free – Objective-C and tools for iOS and mobile development – Use Objective-C to make your own iPhone apps with Xcode.

LWJGL with Java – free – Java framework for 2D and 3D graphics. Minecraft used this framework at one point. – Use Java to make 2D / 3D games for desktop platforms.

Overview of Entity Component Systems – free – comparison and contrast of different versions of ECS, which is a very useful pattern in game design

Web development

w3schools.org – free – Learn to program in HTML, CSS, Javascript, and various server side languages. A solid introduction to designing websites from scratch, without having to purchase any expensive software.

Coding Exercises

CodeCombat – freemium – multiple languages – An RPG where you learn to code to advance through the levels. I think this is a great starting place for absolute beginners.

HackerRank – free – coding challenges in C – A series of exercises to prepare you for interviews with top tech companies.

Codecademy – free – Javascript – A series of tutorials and exercises to teach you to program in Javascript.

Community resources

Khan Academy – free – various languages – Educational website with videos covering hundreds of topics, including programming, complete with progress tracking and other incentives. Self paced.

Coursera – free – various topics, including computer science topics – Educational website with online coursescovering hundreds of topics, taught by top university professors, with some courses including certificates and grades.

stackoverflow – free – Various languages – Ask and answer questions related to software development.

Derek Banas – free – Various languages – A YouTube channel of software development tutorials

Beginner’s Resources to Learn Programming Languages – free – a list of programming/coding resources for various languages. This link was sent in by a guest of this blog in September 2016. Thank you!

Repositories and Version Control

Bitbucket – free for small teams with paid plans available for larger teams  – various languages – Bitbucket allows you to version control (i.e. protect and create backups) your code using Mercurial or Git. Includes wikis for repos. Bitbucket also allows you to have free private repositories.

GitHub – free – various languages – Github allows you to version control your code using Git. Very popular in the open source community. If you contribute to a project on GitHub, you can also put your contributions on your resume.

HgInit – free – a tutorial by Joel Spolsky on how to use Mercurial

Command Line

C Tutorial – free – Learn basic programming with C.

Learn Python the Hard Way – free e-book / paper version available for purchase – Python and shell – Learn how to program Python, with an emphasis on using the terminal or shell. Using the terminal to configure your programming environment is a vital skill for software engineers. This is a great introduction to using the terminal to develop software.

VIM Adventures – free / $25 for full version – Vim – Play a game, and learn to use Vim! Vim is a text editor with shortcuts, and a lot of customization available. This is a powerful editor; programmers who use Vim efficiently in combination with the terminal appear to other programmers as wizards.

VimGolf – free – vim – Learn to use Vim by attempting to complete challenges while using a minimal number of keystrokes.

Vim Cheat Sheet – free – vim – Remind yourself of various Vim commands with this handy reference.

RMS’s gdb Debugger Tutorial – free tutorial – A tutorial on using GDB. GDB allows you to execute C/C++/Objective-C programs (and a few other languages), and then step through each line and print out variables to find bugs.

Valgrind Quick Start Guide – free – A tutorial on Valgrind. Valgrind allows you to find memory errors in your C/C++ programs.

CS Theory

Open Data Structures – free e-book / creative commons attribution license – various languages + pseudocode – Ever wondered what people mean when they say “binary search tree” or “that function will run in O(n) time?” You can learn about data structures for free by reading this book.

Building Blocks for Theoretical Computer Science – free e-book – An excellent introduction to discrete mathematics by a professor at UIUC. This is an important topic in computer science. Easily the best advanced textbook I have ever read. Thank you, Dr. Fleck!

My Favorite Books

System Programming by Lawrence Angrave – free wiki book – one of my favorite books on System Programming in C; written by Lawrence Angrave, who is a professor at UIUC.

Programming in Objective-C by Stephen Kochan – Great intro to Objective-C. You can use Objective-C to create iPhone apps.

Effective Objective-C 2.0 – A helpful book to take your knowledge of Objective-C to the next level, by diving deeper in several areas.

Game Programming Patterns – Great discussion of various patterns for game programming. The patterns are also extremely applicable to other types of applications, besides games.

App Empire by Chad Mureta – An introduction to creating iPhone apps from the sales/business owner perspective. No programming tutorials, but a solid introduction to the app marketplace.

Building Blocks for Theoretical Computer Science – Also listed above under “CS Theory”. An excellent introduction to discrete mathematics.

Tools for Mac

A list of my favorite tools for Mac:

Sublime for C/C++ development. Make for building C/C++ projects. Valgrind and GDB for C/C++ debugging.

Terminal and SSHFS in combination with Sublime for editing files on remote systems

Xcode for iPhone development

Adobe CS6, Adobe Illustrator for graphic design

ShiftIt for window management

Mercurial on the command line is my favorite distributed version control system for new projects. I also use Git and Subversion.

TortoiseHg is a tool to graphically manage your Mercurial repository. It is helpful for complex operations where using the command line could be unwieldy.

Wireshark for network debugging, web development, and socket development. Only use this if you have permission / administrator rights on your network. It may be useful to debug your networking code.

OnyX for cleaning, performance tweaking

Colloquy for IRC chat

iFunBox for iPhone file browsing

PlayOnMac to run Windows software

Mailbox (Beta) for email

Dropbox for cloud storage

TeamViewer for remote technical support on Mac, PC

VirtualBox for Linux and Windows virtualization

Disk Inventory X for hard drive profiling

Netbeans for Java development

Violet UML for UML diagrams