Monthly Archives: December 2009

Gentle Introductions (to Programming)

Here are two applications to help learn the basics of programming:

  • (aka, Alice) teaches computer programming by letting you “program” things in an animated virtual world.
  • WizBang is a visual programming tool that lets the learner drop and connect symbols.

Both are free to use. Wikipedia keeps a more exhaustive list of visual programming tools, but these two caught my eye: Alice for its entertainment value, and WizBang for its simplicity.

(A note of caution: visual programming is great for learning and relatively simple tasks, but I’ve witnessed visual programming tools becoming an unbearable burden to serious software efforts.)

Data-Oriented Design

Here’s a great discussion of data-oriented design from some gamer programmers: Data-Oriented Design (Or Why You Might Be Shooting Yourself in The Foot With OOP)

I believe OOP is the very best way to manage complexity, but isn’t the end-all be-all. It must build on structured programming techniques. That’s not a given.

Further, memory organization may make a big difference as well, depending on the application. Even with modern processors and gigabytes of RAM. I recently encountered an application that needed its memory footprint to be reworked. It brought the very-powerful machine on which it ran to its knees by using memory very inefficiently.

Though I don’t have much desire to build games, I appreciate the game-development community. They build incredibly ambitious pieces of software: ambitious in both complexity and performance. That causes them to encounter many issues one might not consider, and think hard about everything they do.

Update: Here’s a very detailed article on memory usage from the bare metal up: What Every Programmer Should Know About Memory, by Ulrich Drepper. Hat-tip Dan DeMaggio. If your performance concerns reach all the way to RAM access and CPU caches, this is one to study. It’s a whole course, and not a light read. One take-away: memory usage patterns can have very non-linear effects on performance.