Everyone knows that writing concurrent programs is really hard. However, the sad reality is that it is something that is going to be needed more in the future, not less, as we get massively multithreaded processors in all our computing devices. One solution for making multithreaded programming easier is to change the model. This is the approach taken by Erlang, a programming language that I keep meaning to experiment with. One of the creators of the language, Joe Armstrong, recently wrote an article describing why shared memory is bad. It is a great, short overview about some of the challenges posed by concurrent programming in general. It made me think that one of the reasons that distributed systems have been so useful for high performance computing is that they also enforce this same model. I think there are some interesting ideas percolating around the intersection of programming languages like Erlang, and techniques like using microkernels/microreboots to isolate fine-grained program components.