This year at JAOO all 5 keynote speakers were language designers so there was a clear trend talking about new languages, for example Scala, F# and Fortress. What motivates this is the trend toward more parallel computing with more cores per machine and also to increasing popularity in cloud computing. That is, parallel computing applies to both desktop applications and scalable enterprise applications. For example previously the focus have been to run multiple applications on the same CPU and therefore we have the synchronized keyword in Java to prevent concurrency problems. But in the future we might have more CPUs than applications so different mindsets and constructs are needed to be able to harness the increased parallel nature of computing.
Guy Steele pointed out that what is good practice for sequential programming might be very bad practice for parallel programming. For example in parallel algorithms you want to limit synchronization and avoid communication between parallel computations and therefore it is ok to use more memory and more CPU cycles to avoid this. Erik Meijer tried to brainwash us all to use Haskell, and succeeded in some ways as people started talking about monads and IO
Gregor Hohpe talked about what Google is doing to create extremely scalable systems. He talked about a new definition of ACID in cloud computing. Associative (the order the operations are combined is not important), Commutative (order of execution is not important), Idempotent (when an operation is executed multiple is has the same result every time) and Distributed. He also recommended Pat Helland’s excellent paper on near infinity scalability.
Another cool presentation was Michele Lanza’s code visualization tools based on ideas around iconic memory, ie that you should be able to immediately understand and see what is going on. Check out CodeCity and X-Ray.