JAOO Brisbane 2008

When I saw the schedule for JAOO 2008, two names stood out for me; Erik Meijer (Haskell) and Don Syme (F#). My second thought was “why are the smart guys in Microsoft Research?”. I don’t really have an answer to that, but it’s an interesting question.

Meijer opened with a 1 hour talk on the software crisis and how we can solve it. A quick glance around the room quickly confirmed my suspicion that much of the audience was lost with the lambda-notation and various other squiggles on his slides, but deep inside, I could feel myself pushing him to continue. He had hit the nail right on the head with how to solve the so-called software crisis (perhaps an alarmist name, but there is a phenomenon of some sort).

I was disappointed that I could not disagree with Erik — not even in the slightest detail. When I saw him emphasising his displeasure with Haskell’s unsafePerformIO, I thought I had him. This was my opportunity to disagree with someone smarter than myself. But it wasn’t to be, he answered my question with almost exactly the same rhetoric that I would have used myself. I just think his emphasis on unsafePerformIO was because he knew he was standing in front of mostly Java/C# users. Perhaps that’s the lesson to learn; target your audience the way he did. A consolation prize at the very least.

From the introduction, I knew I was in for a great ride, however, I believe there were only two types of people in theatre during Meijer’s speech:

  • those who understood what he was saying in his limited time slot
  • those who didn’t quite understand but really want to, whether they know that fact or not

It is this second point that I wish to elaborate. I found many speakers thereafter had a common theme in trying to resolve some sort of crisis in software development; Dave Thomas and some of the problems he described, Rob Martin and his Clean Code, Michael Feathers and his Unit Testing and even Martin Fowler and his Enterprise Patterns. With some deeper thought, you can see that these speakers are — in some vague sense — highlighting the fact that there exists some kind of critical problem and each his trying to put forward his/her answer. Many of these speakers described the same problem, but then gradually and sometimes quickly diverged from what I think is the correct answer. Meijer nailed it guys! No seriously, the solution is in his slides and his exaggerated body language.

I know many people think Meijer’s solution and mainstream topics are disjoint and not unifiable. How could Meijer’s funny lambda symbols have any bearing on Fowler’s enterprise pattern or Feathers’ insistence on not testing that (dang side-effecting) database? No, there is no fence to jump. All these guys are just acknowledging the same problem in some vague notion and looking for an answer, believing they have found it. It is the realisation of the unification of this funny mathematical stuff with the euphemistic terms like “TDD” and “Agile” that brings the greatest reward. Is it not a big enough hint that the in-crowd is reinventing some of this stuff in a diluted and not-so-useful form?

Rob Martin, yes, the world is counter-intuitive and your analogy to Quantum Mechanics is perfect. However, what would Einstein say to your shunning of the application of thought experiment? You nailed the problem, but the solution was slightly misdirected. Meijer was pointing you to the answer. The theoreticians have it right and in the most practical sense; is history not a good indicator? No Rob, the jury is not in; you’ve screwed up. Are you open to this possibility? Any professional would be ready to accept an unheard argument, right?

If, as a participant of JAOO 2008, you were to take the time to truly and deeply understand the topic that Meijer was alluding to, then I give you an unreserved promise of a moment of realisation that will tingle your spine, fill your eyes with water and euphoria (you know that feeling right?) that far supersedes any other moment that you may have had in your programming journey so far. I say this with utmost confidence. And here’s the thing, there is an entire community of people waiting to help you to understand that funny lambda symbol, those strange arrows, what it means to write code from types, what code documentation and verification truly means and much more. We love answering your questions! The scientific community truly embraces ignorance; no really it does. Please don’t be afraid to express it; learning is fun.

So here’s my little contribution to the progress of software development; I’ll happily answer your questions about Meijer’s topic right here or by private email if you prefer (however, I don’t have the slides, so you’ll have to be specific in your query). Hopefully then, you can open JAOO 2009 and I can indulge myself by disagreeing with you in some way! :)
From a fellow programmer who wants to solve these problems too so please ask questions.

9 Responses to “JAOO Brisbane 2008”

  1. Daniel Yokomizo Says:

    What was Meijer’s problem with unsafePerformIO? I don’t like it because I find invisible side-effects to be one of the worse problems in programming today, OTOH I find monads and unique types to be solutions too restrictive (my current favorite is the Disciple’s effect tracking). BTW what was his solution (other than start using Haskell ;)?

  2. x Says:

    Tony, I’m sure you really mean to help, but the condescending tone I have seen you use on various mailing-lists is really not encouraging to newcomers. I wish you took a page from Erik’s book and stopped considering anyone who disagrees with you like an idiot.

    Hopefully, the rest of the lambda community is a bit more humble and approachable.

  3. Tony Morris Says:

    Hi x,
    I keep listening, but hear no tone. The suggestion that there is one (if you don’t mean an aural tone, then what?) followed by your straw man really leaves me no choice but to draw certain conclusions. If I think someone is an idiot, I suggest you look out for the words “you are an idiot” or some minor variation. I’ll call it how I see it, nothing more or less.

  4. jeff Heon Says:

    Hi Tony,

    I haven’t seen Meijer’s talk, but your blog entry is so intriguing, I just have to ask:

    What is the software crisis?

    What is it that he proposed that you feel his “right on the head” to solve it?

    Thank you

  5. Ian Horwill Says:

    It would be great if you could use your insight to present the ideas to a wider audience, i.e. from scratch! I have been around a while, am currently a .NET programmer dabbling in functional programming, and am fully aware of the “crisis” (although it seems to have been going on too long for that term to feel right), and am interested in reading any and all ideas about how it could be resolved (I have read Fowler etc.) What do you say?

  6. Tony Morris Says:

    Hi jeff,
    The “software crisis” is a general agreement that there is no progress in software development. I am little more pessimistic in that I submit that there has been significant backward progress and that “programming” consists of indefinite and self-deluded repetition of the same concept with a different name. Software cannot adapt to change and it contains a myriad of bugs. Mainstream programming has catastrophically failed.

    Meijer proposes that the fix is to control side-effects with the type system. I’m apprehensive to elaborate further on this point without the slides, nevertheless, the implications of doing so are quite broad.

    Edit: I have just found his slides and will elaborate further when I get a chance.

  7. Tony Morris Says:

    Jeff and Ian,
    Did you see Meijer’s talk? If so, did you see his slide (38):

    DateTime.Now.Ticks ∉ long

  8. jeff Heon Says:

    I haven’t seen Meijer’s talk. I’ve gone quickly through the slides just to get an idea. I saw this particular slide but I missed the meaning. It seems to me that a function returning a long number IS an element of the long number set.

    I must be looking at it too literally.

  9. Jesper Nordenberg Says:

    I definitely agree that side effects should be published and controllable, but I don’t like the way it’s done in Haskell. It’s too awkward to use and using monads to control side effects wouldn’t work in a language with strict evaluation order like Scala. I think an approach like http://www.haskell.org/haskellwiki/DDC is better option and a similar system using annotations can be implemented in Scala and other JVM languages.

Leave a Reply