NeXT, OpenStep, and the Return of Steve Jobs to Apple

April 02, 2012

Steve Jobs, 1997:

When I went to Xerox PARC in 1979 and saw the original genesis of the Graphical User Interface, they actually showed me three things. And I was so blinded by the first that I didn't hang around to find out about the other two. It took me years to rediscover them. The first was of course the Graphical User Interface which Xerox PARC had pioneered and they had a lot of it right and a lot of it was left to be completed. But the other two things -- the second was Object Oriented Programming. They had ita ll running back in 1979. And the third was networking. They had several hundred Altos hooked up with networked printing, network file servers, email, all in 1979. If I had just stayed for another twenty minutes . . .

Jobs also shows that until he left Apple, he was still commercializing his visits to Xerox PARC. With iCloud he completed the trifecta of GUI, OOP, and Networked Computing that was already available thirty years ago.

Steve Jobs, though he was not a programmer, also understood Object Oriented programming better than most programmers. Cue it up to 23:00 for his explanation and demonstration. He of course borrowed his understanding right from the source: Alan Kay and Xerox PARC.

Compiling Clojure to JavaScript, pt. 3 – The Himera Model

March 29, 2012

Dividing the read-compile-eval-print loop over client and server. In Himera, eval and print happen in the browser, while the rest happen on the Himera server.

Rich Hickey: Keynote

March 16, 2012

I just rewatched this great talk where Rich Hickey talks about some future directions for Clojure.

Notes

Quil

March 16, 2012

Fine, fine work. I had a project I was doing in OpenGL that I will have to convert to Quil.

Clojure Gazette

March 11, 2012

I was inspired by Ruby Weekly and Javascript Weekly to create an email newsletter specifically targeting Clojure programmers.

The Clojure community is incredibly inspiring. It is at once pragmatic and philosophical. It looks to the future and learns from history. It adheres to its own vision while drawing from other languages. I wanted to create something that enhanced these wonderful features of the Clojure community.

The Clojure Gazette is a mix of links to news, lectures, papers, libraries, and more that gives a weekly taste of the swirls of activity surrounding Clojure.

Click here to subscribe. It's free.

Programming Paradigms and Expressive Power

February 09, 2012

I recently watched a talk by Uncle Bob Martin called The Last Programming Language. Since I had just written a post relating indirection mechanisms to expressive power, I was intrigued by Uncle Bob's idea and wanted to explore it further.

Uncle Bob gives a brief history of programming paradigms. Here are the ones he mentions:

His perspective was that programming paradigms are generally subtractive.

He concludes by saying that there's nothing left to take away and a language of the future would have to have all of these.

Perspective is worth 80 IQ points. -- Alan Kay

The idea that paradigms are subtractive is interesting. It is interesting to look at what is taken away. However, I would rather say that paradigms replace a manual, error-prone pattern with a more reliable one (usually through indirection). Structured programming didn't just ban GOTO. It also encouraged conditionals and loops. Object Oriented programming didn't just prohibit tables of function pointers, it gave a unified syntax and semantics for message dispatch. But, still, I do appreciate the perspective.

On the other hand, I think Uncle Bob has left out many interesting paradigms from his history. Wikipedia lists 59 paradigms in a hierarchy. (Note that they are not mutually exclusive!) Let's see if we can apply his subtractive perspective to those paradigms.

Aspect-oriented programming

. . . aims to increase modularity by allowing the separation of cross-cutting concerns.

What does it remove?

The mixing of concerns.

Concatenative programming

A concatenative programming language is a point-free programming language in which all expressions denote functions and the juxtaposition of expressions denotes function composition.

What does it remove?

Explicit arguments to functions (point-free!).

Constraint programming

. . . is where relations between variables are stated in the form of constraints.

What does it remove?

Specifying the sequence of steps to execute.

Logic programming

. . . is the use of mathematical logic for computer programming.

What does it remove?

Much like constraints, it removes the explicit steps to execute.

Array programming

. . . is the generalization of operations on scalar values to apply transparently to vectors, matrices, and higher dimensional arrays.

What does it remove?

The distinction between scalar and vector quantities.

Language-oriented programming

. . . is the creation of a domain-specific language for the problem, then solve the problem in that language.

What does it remove?

General purpose programming languages.

One more.

Event-driven programming

. . . means the flow of the program is determined by response to events.

What does it remove?

The main function?

The perspective has some merits. But it also has flaws. I've already mentioned that it does not specify what the removed thing is replaced with, which may be more important than the removal itself. Also, the perspective probably does not apply to all programming paradigms, as Uncle Bob claims. He's exhibiting a blindness toward the possibility of future change because he can't imagine it.

I also don't think we have come to the end of programming paradigms. Although I can't predict what paradigms will be invented in the future (if I could, I'd just invent it), I don't think we're looking at mere incremental improvement. It's just that after racking my brain I can't come up with much.

This video holds some ideas.

Introduction to Logic Programming with Clojure

February 09, 2012

This talk makes me even more excited about core.logic.

Why Ruby?

February 08, 2012

I've been watching a lot of Clojure videos at the moment. I really appreciate some of the more philosophical directions in Clojure talks. Then I started thinking that other languages must have that type of philosophical talk, too.

So I searched for "Ruby lectures" and found this talk by David Heinemeier Hansson. He talks about what he likes about Ruby. He really shows his love for the language that has kept him engaged for so long. He ends with a passionate assessment of Ruby as a language that fosters freedom.

It's not exactly Hammock-Driven Development, but it's still an interesting talk and one that all dynamic programming language fans should appreciate.

Osterhout's Dichotomy Isn't

February 07, 2012

An excellent and down-to-earth talk from Stuart Halloway explaining some of the decisions made in Clojure as they relate to power. Particularly, I like that Halloway deconflated the general power of a language from its expressive power.

Unpretty

February 06, 2012

Snut:

It wasn't pretty, but Leiningen is now generating a large .jar containing almost everything required to run a chunk of stuff excised from my "random clojure braindump" folder. So now I can in theory show my tiny vestigal 3D roguelike/turn-based Dungeon Master/hex-based Legend of Grimrock clone to people! People that don't have Clojure installed!

I can't wait.

How do people approach cross-project hacking at a small scale?

It's still tough to do so in Clojure at the moment.