Getting Started in Programming
As with natural languages, most of the tools are poor, most of the methods are ineffective, and the books unreadable. Successful language learners gather quality resources and use proven references. The same applies to programming. Here I organize programming into four application areas with my recommended resources for each.
1. Philosophical Programming¶
This is for those interested in math, logic, and language. The recommended language is Scheme. It's like learning to program with Yoda.
Reading Materials:
- The Little Schemer by Daniel P. Friedman
- Structure and Interpretation of Computer Programs (SICP)
Implementation:
- Racket (formerly PLT Scheme)
- MIT Scheme
After mastering Scheme, I recommend transitioning to Python for practical applications.
2. Game Programming¶
Game programming is engaging because you can immediately see and enjoy the results of your work. The recommended language is Python with the PyGame library.
Reading Materials:
Important Note: Use Python 2.7, not Python 3, as Python 3 is NOT compatible with most of the books, tutorials, and libraries.
Downloads:
3. Embedded Programming¶
This is for programming microcontrollers and electronic circuits.
Recommended Platform:
- ATMEL AVR microcontrollers (specifically ATmega168)
- Arduino community hardware and tutorials
- Parallax Propeller chip (alternative, more advanced option)
Language:
- C (de-facto standard for AVR)
- SPIN (for Propeller chips)
- Assembly language (for advanced applications)
Reading Materials:
- Practical C Programming by Steve Oualline
- Introduction to Embedded Systems
- Designing Embedded Hardware by John Catsoulis
4. Data-Driven Programming¶
This addresses programming that manages information through databases and user interfaces. A typical web application involves the following components:
- Hosting service
- HTTP daemon/server
- Database
- Server-side scripts
My Recommended Stack:
Resources:
- Think Python (mentioned above)
- The official Django book (available on the Django website)
Originally published on Quasiphysics.