TITLE: Strange Loop, Day 2 Afternoon
AUTHOR: Eugene Wallingford
DATE: October 16, 2010 9:09 AM
DESC:
-----
BODY:
After eating some dandy deep-dish BBQ chicken at
Pi Pizzeria
with the guys from
T8 Webware
(thanks,
Wade!),
I returned for a last big run of sessions. I'll
save the first session for last, because my report
of it is the longest.
Android Squared
I went to this session because so many of my
students want me to get down in the trenches with
phone programming. I saw a few cool tools,
especially
RetroFit,
a new open-source framework for Android. There are
not enough hours in a day for me to explore every
tool out there. Maybe I can have a student do an
Android project.
Java Puzzlers
And I went to this session because I am weak.
I am a sucker for silly programming puzzles, especially
ones that take advantage of the dark corners of our
programming languages. This session did not disappoint
in this regard. Oh, the tortured code they showed us!
I draw from this experience a two-part moral:
- Bad programmers can write really bad code,
especially in a complex language.
- A language that is too complex makes bad
programmers of us all.
Brian Marick on Outside-In TDD
Marick demoed a top-down | outside-in style of TDD
in Clojure using
Midje,
his homebrew test package. This package and style
make heavy use of mock objects. Though I've dinked
around a bit in Scala, I've done almost nothing in
Clojure, so I'll have to try this out. The best
quote of the session echoed a truth about all
programming: You should have no words in your
test that are not specifically about the test.
Douglas Crockford, Open-Source Heretic
Maybe my brain was fried by the end of the two days,
or perhaps I'm simply not clever enough. While I
able to chuckle several times through this closing
keynote, I never saw the big picture or the point
of the talk. There were plenty of interesting, if
disconnected, stories and anecdotes. I enjoyed
Crockford's coverage of several historical mark-up
languages, including Runoff and Scribe. (Runoff
was the forebear of troff, a Unix utility
I used throughout grad school -- I even produced
my wedding invitations using it! Fans of Scribe
should take a look at
Scribble,
a mark-up tool built-on top of Racket.) He also
told an absolutely wonderful story about Grace
Murray Hopper's A-0, the first compiler-like
tool and likely the first open-source software
project.
Panel on the Future of Languages
Panels like this often don't have a coherent summary.
About all I can do is provide a couple of one-liners
and short answers to a couple of particularly salient
questions.
Joshua Bloch: Today's patterns are tomorrow's
language features. Today's bugs are tomorrow's type
system features.
Douglas Crockford: Javascript has become what
Java was meant to be, the language that runs
everywhere, the assembly language of the web.
Someone in the audience asked, "Are changes in
programming languages driven by academic discovery
or by practitioner pain?" Guy Steele gave the
best answer: The evolution of ideas is driven
by academics. Uptake is driven by practitioner
needs.
So, what is the next big thing in programming
languages? Some panelists gave answers grounded in
today's problems: concurrency, a language that could
provide and end-to-end solution for the web, and
security. One panelists offered
laziness.
I think that laziness will change how many programmers
think -- but only after functional programming has
blanketed the mainstream. Collectively, several
panelists offered variations of sloppy
programming, citing as early examples Erlang's
approach to error recovery, NoSQL's not-quite-data
consistency, and Martin Rinard's work on
acceptability-oriented computing.
The last question from the audience elicited some
suggestions you might be able to use. What
language, obscure or otherwise, should people learn
in order to learn the language you really want
them to learn? For this one, I'll give you a
complete list of the answers:
- Io. (Bruce Tate)
- Rebol. (Douglas Crockford)
- Forth. Factor. (Alex Payne)
- Scheme. Assembly. (Josh Bloch)
- Clojure. Haskell. (Guy Steele)
I second all of these suggestions. I also second
Steele's more complete answer: Learn any three
languages you do not know. The comparisons and
contrasts among them will teach you more than any
one language can.
Panel moderator Ted Neward closed the session with
a follow-up question: "But what should the Perl
guys learn while they are waiting for Perl 6?"
We are still waiting for the answer.
-----