Published: 10/25/2014. Updated: 5/21/2016. Updated 9/21/2016. Updated 2/19/2017. Updated 3/7/2017.
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.
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
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.
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!
Udemy – cost per course – Various languages – Courses aren’t free, but this can be a great way to get up to speed with a new framework. Many of the courses are geared toward beginners in a given language or framework.
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
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.
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!
MIT OpenCourseware – free video lectures from MIT – Much of MIT’s core CS curriculum is available for free on their website. You can learn the basics, as well as the highly theoretical by watching these free video lectures.
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.
The Vital Parts of UIUC’s CS curriculum
Sometimes, aspiring programmers are concerned that they don’t know what they need to study to be a successful computer scientist or software engineer. And outside of academia, it can be tough to form a complete image of what a well rounded CS curriculum should look like. The CS program at UIUC is excellent, so I believe that if you follow the core curriculum, and learn the material covered, you can be a successful computer scientist or software engineer.
CS 125 – Introduction to Computer Science. This teaches basic computer science and programming principles. There are also other great ways to get started on this post.
CS 225 – Data Structures. The class serves as both an introduction to data structures, and an introduction to C++ skills. Check out Cinda Heeren’s CS 225 course website. And here is a free data structures textbook. Alternatively, Google for introductory Data Structures courses. Here is a Coursera Data Structures course. Prerequisites: CS 125, CS 173
CS 233 – Computer Architecture. This is a great class which teaches you how computers work at the level of chip design. MIT has a similar class, 6.004, which is available for free online. Prerequisites: CS 125, CS 173. Prerequisite or concurrent: CS 225
CS 241 – System Programming. This is an extremely valuable class, and I feel it has been instrumental in my early career and internships. It teaches you C and System Programming and some Bash. You can learn most of this by reading Professor Angrave’s excellent open source wiki book. It’s helpful to have access to a Bash terminal. If you’re on Windows, you can now install Bash. You can also check out Learn C the Hard Way. Here is a C programming course on Udemy. (but it isn’t free.) Here is a free Bash course from Stanford. Prerequisite: CS 125, Prerequisite or concurrent: CS 173
CS 242 – Programming Studio. Great class with a lot of hands on work. We spent time each week learning new programming languages, and creating new projects with those languages. It’s an overview of how to work as an effective software engineer. This class’ content is being migrated into CS 126. Prerequisite: CS 241
CS 361 – Probability and Statistics for Computer Scientists. Professor Forsyth’s textbook is excellent. Prerequisites: calculus 1, matrix theory
CS 374 – Algorithms. This is the content you need to pass whiteboard/interview questions at top companies like Google. Read Professor Erickson’s notes. Coursera has free algorithms courses, too. Prerequisite: CS 225, linear algebra
CS 421 – Programming Languages. This class makes you a more efficient software engineer. You learn lambdas and functional programming, and also how interpreters work. A lot of the course’s material can be learned in the book “Learn You A Haskell for Great Good!“, which the author offers as a free web book, or you can purchase it on Kindle. Here is a free course on functional programming. Here is another free course on functional programming. My recommended prerequisite: CS 241. Actual prerequisites: CS 233, CS 374
If you’re looking for more free online courses, this StackExchange answer lists quite a few great resources, including MIT and Coursera.
A list of my favorite tools for Mac:
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
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