One Hundred Steps

The idea is to list one hundred curious things about programming. These can be taken on faith. In some languages they are true. In other languages, no. Developing a sense of what might and might not be true is the part of programming that is rarely taught, probably because the inconsistency is an embarrassment.

Hold a value.

Hold a value of different types. (Integer, decimal, string, time, ...)

Compare values.

Hold collection of related values.

Step through all values in a collection.

File input output

How to organize code

What is a function or subroutine? (Why, when, ...)

What is an object? (Why, when, ...)

What is a class? (Why, when, ...)

What is a user-defined data type? (Why, when, ...)

How to test software

Version control

Graphical user interface


Tools to use

Libraries of useful code (Where, what, when, ...)

Patterns of code (small and big. Idioms vs. patterns)

Pros and cons of various forms, designs, ...

Design principles

Naming (principles)

Strategies or processes to use

Team strategies or processes

How to communicate about software to other programmers

How to communicate about software to non-programmers.

How to estimate difficulty or time required.

What's important?

How to sort things. (at all)

When does efficiency matter?

How to programmers spend most of their time?

Incremental or methodical preparation?

Picking a language?


Ward's list below:


X = X + 1 but not at the same time.

Swaping X and Y usually needs T.

Count Down from 10.

F = 9/5 C + 32 if we are careful.


Sing 99 Bottles of Beer on the wall.

Concatenating strings.

Matching strings.


A Turtle moves and draws.

A Collection holds many things.

A Manager delegates responsiblity.


An Algorithm describes steps that lead to a result.

A Methodology offers advice to people seeking results.

A Program influences the future behavior of both people and machines.