Tldr; Designing Data Intensive Applications, Effective Python, The Google SRE book, and High Performance Browser Networking.
https://github.com/eatonphil/notes.eatonphil.com/blob/master...
+1 for both data intensive apps and Google SRE books. The other two I haven’t checked out yet
https://abseil.io/resources/swe-book has a link to a PDF copy.
I've read through about... half of it; at least from my perspective (as a current software engineer at Google with experience with most of the systems / processes outlined in the book), a lot of it is philosophical about the "why" of software engineering.
So ultimately I don't think it will break my top list even when I finish it.
It reads like a lot of self-contained chunks (~15-20 pages per chapter, for most chapters), but right around the halfway mark, there's 100 pages on testing philosophy, which is a slog. Don't get me wrong -- testing is a fundamental aspect of modern software engineering! But I suspect that's why I got to that point and then put it down for a few months.
To harp on the testing section some more, there's some amount of redundancy across the sections. For instance, the unit testing chapter has a page on testing state rather than interactions, and then it's followed by 5 more pages expanding on the same subject at the end of the next chapter (test doubles).
It's a shame, really, since I think chapters 20+ contain some of the more technically interesting topics (yes, including another testing section -- CI!).
But no I haven't read that or the "Building Reliable..." book.
I'll look into the Building book. In general though all these Google books are really fantastic for anyone who has been a developer for a while and at any company size. I often feel like the chapters just couldn't explain the problem better.
My biggest problem is that the books kinda drone on and cover so much at once. I think they could have been better edited/cut down to make getting through them easier.
It also doubles as a very great introduction to C, if that something you're interested in. It's funny because both C and socket level programming are often a barrier, or at least they were for me. It's an attestant to the quality of Beej's guide that he introduces both simultaneously, and makes it very approachable.
This is one of those sources that helped me disproportionately grow as a programmer in a short period of time.
If you want the practical aspects of computer networks, you can try Niall Manfields' Practical TCP/IP designing, using and troubleshooting TCP/IP networks on Linux and Windows book. Granted it's a bit old (2nd edition is essentially the same 1st edition), but because you are after the essentials it should be more than fine. Here's the review of the book:
https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=122...
Read it while interning, I knew some amount of programming but had never really figured out networks.
I read a few different books and Kurose was the best.
That's a fantastic reco. I've read this book..
[0]: https://www.pearson.com/us/higher-education/program/Tanenbau...
[0] https://www.amazon.com/TCP-Illustrated-Vol-Addison-Wesley-Pr...
https://book.systemsapproach.org/index.html
The “perspective” sections at the end of every chapter are really interesting!
I think these two articles are also a great launch point before diving into the whole stack:
- https://apenwarr.ca/log/20170810 The World in Which IPv6 was a good design (which is actually a mini CS history course on networking in disguise)
- Running https://certbot.eff.org/instructions
- Trying out a few different web servers (apache/nginx/caddy)
- Playing around with load-balancers on $cloud_provider.
- Spending time with docker networking (https://docs.docker.com/config/containers/container-networki...)
- Playing around with various X-Forwarded header options in the context of your application
For a web developer, the most useful skill is knowing what each and every component on the pipeline is doing before your code executes on the request. As a common eg, if your application seems to be loading stylesheets from `http://` instead of `https://` despite being loaded over HTTPS, it is often because your application didn't honor the X-Forwarded-Proto header (which most frameworks will do for you). Similarly, seeing a local IP address (192.168.x.y for eg) on a log, and realizing that you should be using the X-Forwarded-Ip by "trusting your proxy"[1] and doing it securely[2].[3].
[0]: https://www.udacity.com/course/networking-for-web-developers...
[1]: https://expressjs.com/en/guide/behind-proxies.html
[2]: https://shubs.io/enumerating-ips-in-x-forwarded-headers-to-b...
[3]: https://blog.ircmaxell.com/2012/11/anatomy-of-attack-how-i-h...
To be fair, there is probably more up to date literature nowadays especially if you want to try and do it in 'condensed' format but this is how I first grasped this whole networking thing. I'm getting old, that was probably more than 20 years ago by now.
I always wonder why many if not most of the devs I work with don't seem to actually understand even simple IPv4 and how their computer connects to the Internet. IP addresses, ports, firewalls, NAT, DNS, email, routing.
I definitely don't know as much about this any longer as I used to, when I ran all this stuff at home/did networking admin at my company on the side but just knowing that something like STP and BGP exist and still underpin this all helps if you ask me, even if you totally forgot how BGP actually works in detail.
It covers:
- DNS
- Load Balancing
- Demand Control
- Network Routing
- Discovering Services
- Migratory Virtual IP Addresses
A web developer does not need to know TCP. They need to know HTTP. Even if they did know stuff about lower level networking the browser completely locks you out of that level.
I have also inspected traffic when investigating/writing patches for server code or the kernel, but that’s a completely separate matter.
What’s more, most nontrivial application code causes additional network activity, from DNS queries to database connections, calls to external APIs et cetera. The all-the-world-is-HTTP fallacy is how wheels get reinvented, but badly, as with websockets or JWTs.
Here's one I really like, you could learn a lot just reading through all the networking-related posts here: https://jvns.ca/#computer-networking
tcp/ip rfc https://datatracker.ietf.org/doc/html/rfc1180
daryl's ip primer https://www.ipprimer.com/#/
https://blog.uidrafter.com/engineering/freebsd-jails-network...
As for books, Ivan Ristić's ModSecurity, although old, is full of tips for setting up reverse proxies.
* An Engineering Approach to Computer Networking: ATM Networks, the Internet, and the Telephone Network by S. Keshav - This is a great text on fundamentals of Networking. Nothing to do with the "Web" but everything to do with what underpins it.
* Web Protocols and Practice: HTTP/1.1, Networking Protocols, Caching, and Traffic Measurement by Krishnamurthy and Rexford - Best book i have seen yet which explains the interplay between HTTP and the underlying TCP/IP protocol suite.
* Load Balancing Servers, Firewalls, and Caches by Kopparapu.
Thanks for coming to my TED talk.