When I was in college at Rice, one of the harder projects in a sophomore level software engineering class was implementing Gzip according to RFC 1951 and RFC 1952. We had about an hour lecture explaining what huffman coding was and then were left to our own devices for three weeks.<p>Half the challenge was just understanding what the RFCs were talking about, teaching ourselves huffman coding, and then figuring out how to build this low level stuff in Java in a reasonable way. This was definitely one of the hardest projects I had up until that point.<p>We had a class discussion afterwards about what was so difficult about implementing GZIP and a few of us mentioned the RFCs were tough to figure out. Professor laughed and said something along the lines of "Besides just learning computer science, we're hoping to teach you the value of good documentation!"