Published: 10/25/2014. Updated: 5/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.
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
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!
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.
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