> The answers I get have taught me that most programmers don't have a basic understanding of how the internet works outside of their narrow specialty. This lack of a rudimentary mental model is one of the largest contributors to wasted time and effort in web application development.
I'm curious what specific mistakes you're thinking of that application developers make when they don't understand computer networks. In my limited experience, the rudimentary abstraction "messages are sent, they're not instant and they might not make it" has generally been sufficient, aside from DNS issues. I learned some networking in college (CS241 at UIUC) and it was really interesting, but I feel I've forgotten almost everything from lack of use. Maybe I've done terrible things as a result. I think I and many others could really benefit from a list of common pitfalls by networking newbs.
Can’t speak for OP, but there are a lot of things people do out there, not just web apps.
People building games, robots, trading systems, distributed databases, CDNs, etc could be really limited in their capability if they didn’t grok networking concepts on a deeper level. It also tends to tie in heavily to other systems concepts (things like zero-copy, or even basic elements like ring buffers).
I think you might also underestimate just how little knowledge a lot of people have. You went to a legit uni and took a legit course.
The interview question OP asks is an old favourite I used to ask too. A lot of people answered something like “clicky-linky-page-rendery!” So a bit of education on the many layers below that doesn’t hurt.
A lot of engineers have only ever written or interacted with server side code using heavy abstractions offered by web frameworks. Stuff like different request methods, response codes, headers and more should be basic knowledge but is not.
I once blew the minds of a room full of senior engineers by setting up a server which responds with the headers and different chunks of the body at different times, and so the content appears sequentially in the browser with a delay. They literally did not know you could do that.
Off the top of my head, not understanding the implications of the 2 Generals Problem is a really big one. Specifically, time and again, I've seen engineers struggle with distributed sagas (or any kind of distributed coordination really), because they don't know enough about the underlying model to reason about it.
There are also simpler issues. Not knowing the difference between GET and POST, not understanding what a header is, how parameters are passed etc...
Then there are the problems in the middle like not knowing how to correctly configure an HTTP client library.
The purpose of writing the book though is to help people develop a good mental model of the system, so that they don't need to memorize a list of all the things that can go wrong.
Adding a few examples to the intro wouldn't be a bad idea though!
I had multi-day bugs caused by people not knowing what "0.0.0.0" IP address is, or network address in IPv4 in general, and using that expecting to be connected to localhost (turns out, when you tell system to connect to any address, there's no guarantee you connect to 127.0.0.1)
Learning to use zap proxy, curl or burpsuite community has a profound effect on my understanding of L5/6/7 (ish) communications and how http works at a high-ish level.
I'm curious what specific mistakes you're thinking of that application developers make when they don't understand computer networks. In my limited experience, the rudimentary abstraction "messages are sent, they're not instant and they might not make it" has generally been sufficient, aside from DNS issues. I learned some networking in college (CS241 at UIUC) and it was really interesting, but I feel I've forgotten almost everything from lack of use. Maybe I've done terrible things as a result. I think I and many others could really benefit from a list of common pitfalls by networking newbs.