I’ve committed to getting involved in PragProWriMo, which is piggybacking on top of NaNoWriMo, the National Novel Writing Month. The concept is simple: write 4 pages of prose every day for the month of November. By 1st December, you should have about 50,000 words towards a book. Or you won’t, and you’ll have a better idea of how much effort is involved in writing the book you’ve always promised to write.
I’ve always wanted to write a book (actually, what I want is to have a book published and available for sale in the local Borders, but the writing is a necessary prerequisite). I’ve even approached the Pragmatic Programmers in the past with a couple of ideas. (Their response has always been, “sounds interesting, write a proposal”, which has been enough to weed me out so far.)
I’ll keep you up to date with progress throughout the month, but for now I wanted to share the background to the book I’m planning to write.
The concept behind the book is “The Internet: How it works”. I’m aiming it squarely at software developers; in particular web developers, because that’s who I’ve been working with most often lately, but I’m sure most other species of developer will get something out of it too. The book should be direct and to the point, and it should help developers have a better understanding of how the technologies they use actually work. A broad understanding of all the parts of the tools you’re using will make you a better developer. Chances are you’re using/building on top of the Internet a hell of lot.
Some of the topics I’d like to cover include:
- How the Domain Name System works, including what happens when you look up a DNS record. From here, you’ll understand practical things like when to use a CNAME or an A record, and why propagation delays occur.
- An overview of the full network stack, from your web browser, down through the TCP/IP stack, to the physical Ethernet layer and back up.
- TCP/IP itself. As web developers in particular, we rely on the underlying TCP/IP protocol to provide us with a (relatively) resilient, stable, bi-directional, in-order stream of bytes from a source IP to a destination. The details are a little more complicated. From here, you’ll have an understanding of TCP vs. UDP, how TCP gives you a (relatively) reliable connection and what happens when Good Streams Go Bad.
- Internet routing. The Internet’s a funny place. Your TCP/IP packets go out of your network card, off to your broadband router, through this fluffy cloud (the Internet is always represented as a cloud in network diagrams, sometimes bearing the phrase “here be dragons”) and magically arrives at its destination. It’s not that simple. Routing decisions are made for technical, commercial and political reasons. Here you’ll learn more about what happens to the traffic in the cloud, an overview of routing protocols and some background to the routing decisions made.
- Email. How email works. The roles of mail transfer and mail delivery agents. How SMTP, POP and IMAP fit into the world. What Mail Exchangers are all about. Spam and spam fighting mechanisms.
That’s all I’ve got so far. Chances are it’s enough to keep me busy for the month. But I’d like to know, what are you, the software developer (my target audience) would like to learn? I’m looking to help you develop better software by better understanding the stuff you’re using under the hood. What are the concepts, protocols and tools that you use every day, but you don’t know the details of how they work?