The CS assignment I wish I had
When I came out of academia and started working in the real world, by far the biggest gap in my CS education was that I had no idea of the real monetary cost, and associated tradeoffs, of accomplishing computational tasks.
With the goal of rectifying that, I wish I had been given the following assignments in some sort of advanced systems course, where people work in teams and the team with the maximum metric for the assignment “wins”:
Offline or batch: sort as many integers as you can in 1 hour on a computer that costs $1000.
Online queries: Build a plain text search and indexing system, and reply to as many queries per second as you can on a computer that costs $1000.
To keep the playing field level, the instructor should set the cost of various components (CPU, disk, RAM, flash, network) to be the same for the entire class. You are free to build your computer as you wish, as long as you stay within budget.
Perhaps you can do better with two computers, each of which costs $500. Go wild.
Every year, the instructor should index the costs against the market, and either make components cheaper, or decrease the overall allowed budget. That way students can compete not just with their own class, but classes of previous years as well. Just for fun, the instructor should maintain an all-time leaderboard.