Programming does not mean using high level languages to create complex applications. It means creating a set of instructions for something else to act out. You could even consider writing a play as programming.
A number of "esoteric programming languages" have populated the web over the years. Each being unique or frustrating in it's own way, but they all share one similarity. Their sole purpose is to be impractical.
The most recognized of these, is something called Brainfuck. It's name is quite descriptive. It is a turing complete language consisting of 8 characters, each with a single function. It has a 1-dimensional array of memory cells, with a memory pointer that selects a cell to be read/written. The functions are as follows:
+Increments the selected memory cell
-Decrements the selected memory cell
>Moves the pointer one step to the right
<Moves the pointer one step to the left
.Prints the current memory cell as an ASCII-encoded character
,Accepts one ASCII-encoded character from the user and replaces the current memory cell
[Opens a loop if current memory pointer is nonzero, otherwise skips to end of loop
]Ends loop if current memory cell is zero, otherwise jumps to beginning of loop
As you can see, these rules are very restricting and difficult to use. Here is an implementation of the fibonacci sequence in brainfuck that I made, not even god knows how it works.
Tumblr's markdown parser shits itself when I put preformatted brainfuck here, so I'll just link it instead
(This is an infinite loop and will break some interpreters)
Another notable language is Befunge. Instead of being interpreted by reading left-right up-down, befunge is a 2D grid with a pointer facing in one of 4 cardinal directions. Each "step" it moves forward in the direction it's facing, and executes the cell it lands on. There are quite a few of instructions so I won't list them here, but I can show you an implementation of FizzBuzz that I made.
Link to guthub gist
And lastly, probably my favorite among them all, is Whitespace. It uses 3 different characters for every single command. Space, Tab, and Linefeed. Different combinations of these three result in an assembly-like set of commands.
Here's more fizzbuzz, but in whitespace
I really did not know what to write about today, maybe something more interesting will happen tomorrow.