I've always thought that #golang would make a great teaching language. It seems particularly well-suited to this distributed systems class. I'm impressed by what these students were able to build in such a short time, and also by their good taste in choosing the Go Gophers instead of cash. :-)
Had our final 15-440 project presentations today. The students had their choice of language - most, but not all, stuck with #golang. One or two moved to Java. The happy winners of Go gophers were:

* Distributed paint; Chord-style partitioning of documents onto servers, with the modification log synchronously replicated onto a backup. Multicast notifications implemented through the application server nodes to tell clients to refresh. (Go with gtk libs)

* Distributed scrabble on an infinite board. Transactional placement of tokens onto spaces with first-writer-wins. (Go with an ncurses-like color text interface)

* Geo-event discovery: Tells you when enough other people are nearby and lets you create or join an "event." Sharded by geographic region and by user; events can cross shard boundaries, etc. (Java)

* Peer-to-peer music analysis for music researchers: A KaZaA-like superpeer architecture that allows queries based upon complex music fingerprints and attributes; allows researchers to push analysis queries to other nodes to run locally (e.g., sending requests for advanced beat analysis, etc.). (Lots of languages - had to glue together lots of existing audio analysis libraries)

* Distributed chat: Kind of IRC-like but in a p2p style. (Go)

We didn't get to see the Paxos-replicated MMORPG in Go (we believe that the non-replicated student was asleep), but it was one of the projects we had tapped to present, and the version we saw looked great.

I'm really psyched with the projects I've seen so far. One or two of the groups flubbed, as expected, but overall, we saw a lot of very creative projects that met the dual requirements of "do something that needs a good distributed systems solution" (lots of replication in the projects to handle server failures) and "do something cool." This is undoubtedly mostly due to having great students at CMU, but I was delighted to see that students were able to pull in good GUIs and other things using Go. And most of the projects successfully got solid systems implementations running, handling failures and disconnections, etc. We saw projects implementing 2-phase commit, primary-backup replication, paxos, the chord and Kademlia DHTs, and more. Good stuff!

I think I'm convinced - I'll teach the class in Go again. I'm glad to be able to point students to the tutorial next time, which should reduce some of the language pain. And next time we won't be writing all of the projects from scratch three weeks ahead of the students, so things should be a little more smooth. :)

(And thanks for arranging the Gophers, +Sameer Ajmani ... I didn't have enough to give to all of the projects selected for demos, so I put seven gophers and three $20 bills on the table. All of the gophers went before any of the cash - I even had to give away my own gopher as part of the prizes. :)
Shared publiclyView activity