Skip navigation

Cool links

Here are some links to things I think are pretty cool:

Programming Languages

Programming languages are how we communicate with our machines, and how they communicate back to us. I hold "mainstream" languages in little regard, as they mostly suffer from a "feature creep" that dilutes any original clarity they may have had. Some languages don't suffer from this as much, but are unfortunately not in as widespread use as the C++/Java/PHP/C# type languages. Some examples are:
  • LISP - The original AI language. Whilst amalgamations like Common LISP may be said to be bloated, that doesn't change the fact that at its core, this language embodies all that is great about Computer Science.
  • Scheme - The streamlined little brother of LISP, Scheme is a more managable beast. See Racket and Guile.
  • Smalltalk - In Smalltalk, every component of a program behaves like a whole computer, and it is the messages sent between these computers that implement the program. Beautifully simple, symmetric and incredibly powerful.
  • Etoys - A visual programming framework built on Smalltalk. Incredibly useful for making 2D games and simulations.
  • Croquet/Cobalt - Etoys' big brother. The 2D canvas of Etoys becomes a network of 3D "SecondLife"-style distributed, peer-to-peer, hyperlinked virtual worlds. Certainly blows centralised, walled-garden systems like SecondLife out of the water.
  • Scratch - A nice visual programming interface designed to teach programming. Whilst very good at its job, I find Etoys to be more open-ended. For example, Scratch makes an artificial distinction between what is being programmed (the "Stage") and the way it is programmed (everything else). Etoys makes no such distinction; everything is symmetric and uniform. The programming tools are Etoys themselves, and new programming tools can be painted and tile-scripted.
  • Self - In the tradition of Smalltalk, but does away with the artificial class/instance divide. Every object defines its own behaviour. If you want to make objects that behave the same way then make one and clone it. A "class hierarchy" is simply a series of cloned and modified objects.
  • Newspeak - Another progression of Smalltalk, but unlike Self, Newspeak embraces classes and uses them as the implementation of a wide range of features (modules, object-capability security model, dependency injection, etc.). This is done by allowing arbitrary nesting of classes, and rejecting a global namespace in favour of top-level classes.
  • Forth - The ultimate stack language. Forth does everything through a stack, but having such a uniform implementation method allows a great degree of flexibility in library design, without sacrificing any speed on interpretation layers. Unfortunately the stack seems, to me, to make Forth incredibly unsuited for transparent parallel processing. See also Factor, an active Forth successor.
  • Haskell - Everybody's favourite lazy, typed, purely functional language. The amount of Maths that can be done in Haskell is amazing. Screw "design patterns", Haskell makes it easy to prove that certain techniques are used over and over again, and allows efficient, generic implementations that truly are "write once".

There are no pages beneath this page

There are no posts yet