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.
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.
March 16, 2012
I just rewatched this great talk where Rich Hickey talks about some future directions for Clojure.
Notes
- Different build targets - leaner and fatter builds of Clojure for deployment and development
- Clojure in Clojure - protocols, records, and deftype at the bottom
- Code analysis using core.logic - type checking, other analysis
- Pods - safely encapsulate state change
- Extensible reader - making Clojure a better format than JSON and XML
March 16, 2012
Fine, fine work. I had a project I was doing in OpenGL that I will have to convert to Quil.
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.
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.
- Modular programming removed large programs
- Structured programming removed GOTOs
- Object Oriented programming removed hand-rolled vtables
- Functional programming removed mutable state
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.
. . . aims to increase modularity by allowing the separation of cross-cutting concerns.
What does it remove?
The mixing of concerns.
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!).
. . . is where relations between variables are stated in the form of constraints.
What does it remove?
Specifying the sequence of steps to execute.
. . . is the use of mathematical logic for computer programming.
What does it remove?
Much like constraints, it removes the explicit steps to execute.
. . . 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.
. . . 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.
. . . 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.
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.
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.
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.