Ryan Dahl’s talk on Node.js presents a clear and cogent argument for event-driven I/O. The first ten minutes could just as easily be a pitch for EventMachine or Twisted (touching on one of my own battlecries: threads suck). But he then follows on by pointing out that these libraries will never be truly intuitive to use, because event-driven I/O is enough of a fundamental shift that it requires deep language integration. This is why he ceated Node.js: Javascript, it turns out, is a fundamentally event-driven language because of its origins in the browser. I find it interesting to note that this is also the exact argument for Erlang.