Project ideas

Implement a BitTorrent client#

Implementing BitTorrent has become a common exercise in the programming community. Some universities use it in their classes, and a quick Google search can find examples in almost every language, including Go.

But that being said, it's an interesting exercise. Read through the official BitTorrent specification to understand the problem space.

If you want to diverge from the traditional, don't implement a client, but implement a tracker. Trackers are the web servers involved in BitTorrent discovery. The specification for trackers are also included in the above specification. They are often web servers with stateful backends. If you look at HDVinnie Torrent-Tracker-Platforms, a list of open-source Torrent trackers, or Wikipedia's comparison of BitTorrent tracker software, you can see that they are written in a variety of languages and backed by a variety of databases.

If you want to figure out what kind of availability requirements someone might request of your tracker, check out the paper "Availability in BitTorrent Systems". This paper conducted a wide-scale analysis of tracker availability.

Build a multiplayer video game backend#

One of Nat's favorite projects is to take classic video games and rewrite them in a modern language with added multiplayer support. Ken Pratt and Nat built a version of Asteroids called Hyperspace which uses Go as the multiplayer backend.

Some example games you could try implementing: Tetris, Frogger, Centipede and Pac-Man.