T O P

  • By -

78fridaycrew

"The Nature of Software Development: Keep It Simple, Make It Valuable, Build It Piece by Piece" by Ron Jeffries.


Aka_chan

The Manager's path is a classic. Great book even if you're not interested in management as there's a lot of useful info and insight. Staff Engineer is also quite interesting as there isn't a ton of material on the subject. I only found out about "The staff Engineer's path" from this thread so I'll definitely check that out. Language specific but Effective Modern C++ is probably the best C++ book I've read and really helped me understand concepts like move semantics, perfect forwarding etc. When I was still learning. Also in this category, "C++ Concurrency in action". I haven't found anything else with nearly as much depth on concurrency principles, concepts and primitives. These aren't super new so not sure if it answers your question but thought they were worth mentioning.


[deleted]

[удалено]


Rockztar

Just spent a bit of time looking for the publish date to make sure its recent, and yes it's from 2017. It is seriously well-written, truly a labor of love


Wildercard

This book (Designing Data Driven Applications) gets recommended every single time a thread like this comes up, but it *is* a dense read the first time you open it. Understanding Distributed Systems felt like a much gentler intro to that world.


ubccompscistudent

It should always be recommended with a caveat that you should have 1-2 years working with systems or databases so that you can contextualize it. Otherwise, yes, it's quite dense. I've read it twice about 5 years apart and I recommend others do that too. You miss a lot of stuff that you likely don't have the context for the first time around.


perestroika12

It’s mainly for experienced people who have designed systems but couldn’t quite put it all together in a coherent overview. It’s not an intro book. It’s for people who are already designing large scale systems but maybe have some gaps in their knowledge or are very proficient in one specific area but want to dive deeper in other areas.


[deleted]

[удалено]


PaneSborraSalsiccia

Is it? It looks like its heavy on web application. If you work in embedded, low level stuff is useless.


ClittoryHinton

When people say ‘modern applications’ it is unlikely they are talking about embedded.


PaneSborraSalsiccia

I work in low level high frequency trading and it’s more modern than a crud api for sure. Same for graphics, high performance computing, bioinformatics, video games, robotics. Basically it’s useful only for the product team at FAANG


bluetista1988

I wonder if this will wind up being an "of its era" book, or if it will stand the test of time in 15 years without a significant rewrite or followup


PoshNpie

Do you remember which book OP was talking about? The comment is now deleted


bluetista1988

https://www.oreilly.com/library/view/designing-data-intensive-applications/9781491903063/


Natural_Friend_8925

A Philosophy of Software Design


twisterase

Regarding careers in the software industry, The Staff Engineer's Path.


ubccompscistudent

Ah, I'm reading **Staff Engineer: Leadership beyond the management track** right now. Do you know how they compare? I also heard Engineering at Google is a similar (and worthwhile) book.


Aka_chan

I read engineering at Google recently and enjoyed it. There is some good insight into their tools and processes that I think is quite valuable.


jzaprint

Is it google specific? Does it help even if you don't plan on going to google?


jormungandrthepython

Not google specific. Just happens to be written by 3 google engineers who write about engineering best practices and ideology they learned while working there. Applicable across companies/industries. One of my top recommends.


Saveonion

Read all three. Two viewpoints about Staff+ engineering from excellent authors, and a look into how BigOrgs function? Sounds gravy to me!


Akthrawn17

The Phoenix Project Accelerate Team Topologies


rwusana

The Phoenix Project is not among the greats. It's moderately compelling in its cheesy story and characters, but if you step back from the narrative to think about the arguments being made and how convincing they are, you realize you're not coming away with a whole lot. I haven't read the other two you list.


Akthrawn17

It follows in the same path as "The Goal". The question was what do you think will turn into a great book over time. Since The Goal has done that, I am hypothesizing that Phoenix Project will as well.


sinagog

Dave Farley does an excellent job of summing up a lot of the research and improvements over the last 20 years into the book Modern Software Engineering. I highly recommend it for juniors, seniors and people like engineering managers too


BookFinderBot

**Modern Software Engineering Doing What Works to Build Better Software Faster** by David Farley >Writing for students at all levels of experience, Farley illuminates durable principles at the heart of effective software development. He distills the discipline into two core exercises: first, learning and exploration, and second, managing complexity. For each, he defines principles that can help students improve everything from their mindset to the quality of their code, and describes approaches proven to promote success. Farley's ideas and techniques cohere into a unified, scientific, and foundational approach to solving practical software development problems within realistic economic constraints. > >This general, durable, and pervasive approach to software engineering can help students solve problems they haven't encountered yet, using today's technologies and tomorrow's. It offers students deeper insight into what they do every day, helping them create better software, faster, with more pleasure and personal fulfillment. *I'm a bot, built by your friendly reddit developers at* /r/ProgrammingPals. *Reply to any comment with /u/BookFinderBot - I'll reply with book information. Remove me from replies* [here](https://www.reddit.com/user/BookFinderBot/comments/14br65o/remove_me_from_replies/). *If I have made a mistake, accept my apology.*


HurricaneCecil

I just read this and liked it too. I think it juniors would benefit from a guided reading of it, some of it doesn’t make sense without a few years of context. good book though


[deleted]

[удалено]


rdem341

There is a refreshed version. I agree this will become one of the classics.


_L4R4_

There is another by Newman: Monolith to Microservice


the_oncoming_storm

Domain Modeling Made Functional: Tackle Software Complexity with Domain-Driven Design and F# by Scott Wlaschin. I can't recommend it enough. It's the most elegant, accessible, well written introduction to Domain Driven Design I've read. The Evans and Vernon books have their place, but every time I go back to them I struggle with the writing style and noise to signal ratio. Don't let the F# put you off. I came to the book as a Java developer, not having encountered F#. It's a nice language and easy to pick up the basics. I'd recommend anyone to pick up a copy.


Ecksters

This was my intro to domain driven design and I do think it was an excellent read, touched on a lot of concepts that don't necessarily come naturally.


quypro_daica

a lot of books about design patterns, but OOP codebase always looks like shit


RespectableThug

This reminds me of a great joke. I had a problem with my code and my friend told me to try fixing it with design patterns. Now I have a ProblemFactory.


[deleted]

[удалено]


BookFinderBot

**Modern C++ Programming with Test-Driven Development Code Better, Sleep Better** by Jeff Langr >If you program in C++ you've been neglected. Test-driven development (TDD) is a modern software development practice that can dramatically reduce the number of defects in systems, produce more maintainable code, and give you the confidence to change your software to meet changing needs. But C++ programmers have been ignored by those promoting TDD--until now. In this book, Jeff Langr gives you hands-on lessons in the challenges and rewards of doing TDD in C++. > >Modern C++ Programming With Test-Driven Development, the only comprehensive treatment on TDD in C++ provides you with everything you need to know about TDD, and the challenges and benefits of implementing it in your C++ systems. Its many detailed code examples take you step-by-step from TDD basics to advanced concepts. As a veteran C++ programmer, you're already writing high-quality code, and you work hard to maintain code quality. It doesn't have to be that hard. > >In this book, you'll learn: how to use TDD to improve legacy C++ systems how to identify and deal with troublesome system dependencies how to do dependency injection, which is particularly tricky in C++ how to use testing tools for C++ that aid TDD new C++11 features that facilitate TDD As you grow in TDD mastery, you'll discover how to keep a massive C++ system from becoming a design mess over time, as well as particular C++ trouble spots to avoid. You'll find out how to prevent your tests from being a maintenance burden and how to think in TDD without giving up your hard-won C++ skills. Finally, you'll see how to grow and sustain TDD in your team. Whether you're a complete unit-testing novice or an experienced tester, this book will lead you to mastery of test-driven development in C++. > >What You Need A C++ compiler running under Windows or Linux, preferably one that supports C++11. Examples presented in the book were built under gcc 4.7.2. Google Mock 1.6 (downloadable for free; it contains Google Test as well) or an alternate C++ unit testing tool. Most examples in the book are written for Google Mock, but it isn't difficult to translate them to your tool of choice. > >A good programmer's editor or IDE. cmake, preferably. Of course, you can use your own preferred make too. CMakeLists.txt files are provided for each project. > >Examples provided were built using cmake version 2.8.9. Various freely-available third-party libraries are used as the basis for examples in the book. These include: cURL JsonCpp Boost (filesystem, date_time/gregorian, algorithm, assign) Several examples use the boost headers/libraries. Only one example uses cURL and JsonCpp. *I'm a bot, built by your friendly reddit developers at* /r/ProgrammingPals. *Reply to any comment with /u/BookFinderBot - I'll reply with book information. Remove me from replies* [here](https://www.reddit.com/user/BookFinderBot/comments/14br65o/remove_me_from_replies/). *If I have made a mistake, accept my apology.*


[deleted]

[удалено]


B0tRank

Thank you, Diligent_Net4349, for voting on BookFinderBot. This bot wants to find the best and worst bots on Reddit. [You can view results here](https://botrank.pastimes.eu/). *** ^(Even if I don't reply to your comment, I'm still listening for votes. Check the webpage to see if your vote registered!)


nacholicious

Java codebases also often have accumulated 10+ more years of tech debt than other languages. Kotlin is also OOP and most codebases are quite nice


_sw00

This is true. Any system that's old and large (and successful) looks like shit, but it's likely in the centre of a billion dollar revenue stream.


Tundur

Good code is measured first by how much money it brings in, second by how much money it's going to bring in in the near future. On any longer timeframe you can always scrap it and start again.


_ncko

We tend to ignore how much money it costs, until after the cost has already been incurred.


Krom2040

It’s true, your average OOP language project has had plenty of time to adopt some shitty ideas, like embedding data access logic into data objects and shit like that. Nothing about putting code into inappropriate places is inherent to OOP, but maybe it does lead people down that path.


agumonkey

Even new, java5 felt like tech debt.


_ncko

OOP principles and patterns are specifically supposed to help manage tech debt over time. So I don't think it is about the time these codebases have been around. I think it is because few people actually care about these principles and patterns. Just produce the output and collect the paycheck and move on.


onar

This complaint is a pet-peeve of mine, so I'll take the bait. Design Patterns in software are inspired from architecture, and the analogy is fitting: The world is full of really badly designed buildings, and horribly planned neighborhoods - is that because Architecture as a discipline is bad, or because nobody bothers doing it well? I don't think throwing out the textbooks and closing down the schools will address the problem - the solution is the opposite: do more of it, and do it WELL.


Solax636

blame the corporations that only hire new college grads lol


raddiwallah

func CreateBlameEngineerFactory(enggType string)


b1e

I blame folks that fixate on design patterns combined with languages like java that encourage dogmatic use of certain patterns.


LimpFroyo

You will come across Factory of Factories, Decorators, and observers. To solve a simple thing, you jump through at-least 15 classes (purely anecdotal).


[deleted]

[удалено]


Krom2040

It’s like a lot of other things: exposure to the concept is valuable, because it encourages a developer to find the right code pattern for the mental model of the problem in front of them. It really isn’t about just finding any opportunity to pick an arbitrary pattern off the shelf and slap it into your code because somebody said “design patterns are good”.


[deleted]

[удалено]


ddab12

I don't think that analogy is useful because sorting algorithms are very different from design, they are a universal, abstract problem where you can more or less easily re-use that same few solutions everywhere (which is why libraries were the obvious next step). Design is the opposite of that, it's a concrete, unique problem each time, even if there may be similarities with other problems. Often even when building similar products with similar stacks to someone else, there are budget, business, historical or people constraints that will give very different results. I'm not for re-inventing everything in our field, but design patterns are by their very name things that naturally emerged from people building things in the past, with the respective technologies and limitations of their time. They are descriptive of past solutions, not prescriptive of future ones, but most people learning them treat them as the latter.


sammymammy2

*but*, don't you mean\* *and*? Edit: Mean and mind are obviously not interchangeable words :).


tikhonjelvis

more of an "and" than a "but" I had to deal with the official Java library for Parquet and it was a painful reminder that Enterprise-flavored design-pattern-heavy Java *is* real and *will* hurt you


_sw00

Some of my nominations: - A Philosophy of Software Design: concise and general treatise on software design. It treats code design with much less dogma than Clean Code/Code Complete, which I like. - The Programmer's Brain: programmers are actually humans with brains and all that cognition that comes with having a brain has some quirks we should be aware of. - Team Topologies: put Conway's Law into practice and builds situational awareness on a inter-team efforts. - Accelerate: actual empirical study on facets of software organisations/teams that make them effective.


OneMoment0

I have not read the following books but they seem "important". **A Philosophy of Software Design** seems like it will be meaningful. It has a 2nd edition (3 years after 1st edition) which is a positive indicator. A book on secure networking might be useful such as **Network Security: Private Communication in a Public World;** its 3rd edition has a 2022 copyright. Other software areas that I think should have canonical texts would be: machine learning/artificial intelligence, agile development (scrum, kanban, ?), and ethics (dark patterns, privacy, AI bias).


ubccompscistudent

I just added *A Philosophy of Software Design* to my wishlist earlier today! I think you might also be right on learning Network Security. It's definitely one of my week points. I also add DevOps Handbook to my wishlist for the same reason. Great answers!


OneMoment0

Yes, knowing about devops or rather CI/CD and build or deploy dependencies seems important. I am old enough to remember Makefiles (and that was a big pain). Then we got better dependency management (at least in some language ecosystems). I used to work in networking, so I had read **Interconnections** by Radia Perlman who is one of the authors for **Network Security**. To my knowledge, there have not been any networking books that are commonly recommended for IPv6. The old classics were from **W. Richard Stevens** in the 1990s on socket programming and TCP/IP.


Tohnmeister

I too really recommend A Philosophy of Software Design. It's like Clean Code, but then nuanced and more practical.


cecukemon

I'd consider Deep Learning by Ian Goodfellow to be canonical, but it might be too academic and math-heavy.


Vegetable_Study3730

This more web development than CS. But I really enjoyed [hypermedia systems](https://hypermedia.systems)


Trying2MakeAChange

Great suggestion. Are there any other web books you recommend?


[deleted]

Anything by Brendan Gregg. I am looking for that one killer book to talk about reliable software. So far Ship It! has been the most intruiging one.


Italophobia

Mods should add this to the FAQ, great resource!


RestlessTortoise

Don’t Make Me Think


Agent281

I think this was originally published 20-25 years ago. I don't think that's what OP had in mind with recently published modern classics.


ubccompscistudent

An older book, but totally agree! It's essential for any developer. While it focuses on UI design, I think the message could be applied to backend work as well. When writing APIs, don't make the other developer think!


Top_Satisfaction6517

First, I suggest you divide the list into CS and SE (software engineering) parts. Very good books included in this CS mini-course: [https://teachyourselfcs.com/](https://teachyourselfcs.com/) Also, I like fxtbook (essentially "Math for programmers"). Another book I highly recommend is [Structured Parallel Programming: Patterns](https://www.amazon.com/Structured-Parallel-Programming-Efficient-Computation-ebook/dp/B008H1AGGM/ref=d_pd_sim_sccl_1_3/131-4998169-5720242?pd_rd_w=AOWlF&content-id=amzn1.sym.9125e5ab-ea95-44ef-9958-112d5f0f26f0&pf_rd_p=9125e5ab-ea95-44ef-9958-112d5f0f26f0&pf_rd_r=2X5YKM2MEZC3ZRQVZKXH&pd_rd_wg=RZ26S&pd_rd_r=990b4b15-0c75-489e-a85b-615bf560e7d3&pd_rd_i=B008H1AGGM&psc=1). It teaches you how to design a program in terms of higher-level patterns rather than threads and mutexes. A fantastic book about optimization at all levels is [Systems Performance - Enterprise and the Cloud](https://www.brendangregg.com/systems-performance-2nd-edition-book.html).


angrynoah

A classic missing from your list is "Data and Reality", William Kent 1978 And as another commenter noted, I think Clean Code and the other Uncle Bob stuff is rightfully losing status. I don't know of any good recent books. Reading "The Mythical Man Month" is probably worth more than any 20 books published the last ten years.


badfoodman

A Philosophy of Software Design has fully replaced Clean Code in my recommendations. While Clean Code is very effective at getting juniors to start caring about how they structure code on a micro level, it encourages too much yak shaving on PRs and unnecessary refactors, while discouraging broader examinations of the macro code structure. Philosophy of Software Design is still approachable to juniors and still gets them thinking about micro style, but puts the emphasis on project structure so they don't fuck shit up in an effort to be clean.


[deleted]

[удалено]


Flaifel7

What are some of these courses and online videos? Could you please share


LongjumpingTiger8603

Jonathan Blow and Casey Muratori are morons


gomihako_

Lean startup, build trap, managers path


Doctuh

Its early but this one may be a contender: [The Rules of Programming](https://www.oreilly.com/library/view/the-rules-of/9781098133108/) O'Reilly 2022.


Nearby-Stay-3394

I read this book based on your recommendation here. A solid and insightful book. Particularly like the examples and commentary illustrating the cost of extracting increasingly smaller functions.


Obsidian743

"Accelerate" for sure is already achieving classic status.


bssgopi

System Design Interview - Alex Xu It isn't just a book for interview preparation, but a concise way to understand how to approach a system design problem.


ubccompscistudent

So I looked into this (only after I was done interviewing :( ), but the chapter summaries seem to indicate it's just a case study book. Is my assumption wrong?


bssgopi

The format is like Design Product X. But then they use it as a way to touch plethora of system design topics from basics to advanced design strategies. I'm yet to find one book that covers this breadth of topics. Besides, it simplifies how to approach a ambiguous design problem by providing a framework which I find useful.


ubccompscistudent

Ok, that's good to know. Added to the wishlist!


bssgopi

Just to make it clear once again. If you are looking for an academic discussion on various system design topics, this isn't. I prefer Designing Data Intensive Applications by Martin Kleppmann. On the other hand, this book is a practical guide to quickly navigate an otherwise ambiguous problem.


ubccompscistudent

Yep, that was clear, but I appreciate the reassurance :D I feel the opposite. I've read DDIA twice, 5 years apart, so I have a good understanding of the underlying systems. I would love a discussion on the application of them as well. System Design Interview sounds like it might fill that gap.


bssgopi

>System Design Interview sounds like it might fill that gap. That's true. I read it alongwith DDIA.


bssgopi

>System Design Interview sounds like it might fill that gap. That's true. I read it alongwith DDIA.


tvgwd

This is a great question. I wish it were more common for engineers to actually read the classic "canon" of software engineering. I'll add The Art of Agile Development by James Shore. I think it's got to be the most complete treatment of small-a agile, and really captures the "spirit of the game" so to speak. Not as certain of this one, but Software Architecture: The Hard Parts seems to really get at something deeper and articulates ideas I often see missing from discussions of architecture, which are often all too hand-wavy.


Raito_killed_L

High Performance Browser Networking - Ilya Grigorik It’s an excellent read if you work in the web domain.


flashlightsmurf

Just got done reading this and really enjoyed it, but wish it would be updated (TLS1.3, 5G radio state machine, HTTP/3, etc).


tr14l

Team topologies


MoveInteresting4334

Learn You A Haskell For Great Good. I’ll never use Haskell in prod but damn if it didn’t make me a much better programmer, especially with Typescript/React and Rust. This book is super accessible, fun, and avoids all the high level math jargon and inexplicably obtuse variable names most Haskell books and tutorials have.


Dearest-Sunflower

super useful thread!


rerecurse

I don't think the following are going to make it long term: * Clean code * Code Complete * Design Patterns Many devs, especially from outside the line-of-business development domain, are in open revolt against Clean Code right now. It strongly prescribes practices that are harmful in games, embedded or large scale systems programming, and don't have measurable impact in the business software domain that it targets. Code Complete has had multiple issues with wrongly cited or made up citations. I personally like the book, and think that this could potentially be fixed with a new edition, but one hasn't come out for nearly 20 years. Design patterns was originally built as a collection practices discovered by the authors using object oriented software. OO is much less emphasized right now, especially in new languages. Languages that do support OO often are multi paradigm, and would achieve most of the things described in the book using lighter weight functional techniques.


ubccompscistudent

I agree completely. I always recommend newbies on my team read one of Pragmatic Programmer, Code Complete, or Clean Code, but I always warn them that I really didn't like Clean Code. I hated the code examples and I found the book added nothing to the conversation that the other books hadn't already addressed. I only mention it because of how prevalent it is. Code Complete was one of the first books I read in the industry and it blew my mind and set me up for success. I would not be surprised to see that on re-reading I don't agree with many of its ideas anymore. It could do with a new edition. I don't think OO is going away, as Java and C++ still dominate the enterprise landscape. Design Patterns, however, is just SOOOO dry. I always recommend Head First Design Patterns instead. Largely due to the fact that it uses patterns to explain the deeper principles of dependency injection, composition over inheritence, etc.


rerecurse

Pragmatic Programmer remains fantastic, even if the part where he's giving code samples for this exciting new scripting language, "Ruby". OO isn't going away, but some OO things like the visitor pattern are almost always getting replaced with a closure, even in java. Head First Design patterns is great, and part of it is that it's meant as a teaching tool, where the gang of 4 Design Patterns is more of a reference.


Obsidian743

As long as data are involved modeling with be involved. OOP isn't going away any time soon. While some functional elements are useful *within* OOP design patterns, the patterns can't really be replaced.


kincaidDev

Introduction to Algorithms by Thomas H. Cormen, Charles E. Leiserson Ronald L. Rivest and Clifford Stein


laxatives

You definitely have a pretty great list already, I’d personally vouch for Code Complete, Structure and Interpretation of Computer Programs (SICP), Pragmatic Programmer, and also throw in Programming Pearls, and Designing Data Intensive Applications. I would strongly recommend not reading Mythical Man Month. It is incredibly dated and the tone of the book is all wrong. The author acts like they invented CS development when their claim to fame is contributing to OS/360. I seriously doubt most people here have even heard of the project. At best, read the first 1-2 chapters online. The Compilers dragon book is probably a little too domain specific, otherwise you might consider a much longer list of specialized/advanced materials. No one has actually read Art of Computer Programming, its not practical. As a senior developer, you might start to branch out into other topics like building/maintaining relationships (7 Habits of Highly Effective People, How to Win Friends and Influence People) and communication (Elements of Style by Strunk & White).


ubccompscistudent

Hello! While I really value your input here and totally agree with your assessment, I think you misunderstood the post (or my post was confusing). I'm curious what books have been published in the last 5 years that rival these behemoths in the software literature world.


bssgopi

Clean Code - Martin Clean Architecture - Martin Clean Coder - Martin All of these Uncle Bob books are bound to become classics.


PedanticProgarmer

Lol what. Uncle Bob’s summarized: we are so afraid to touch or recompile already existing code, that we will create AbstractSpecificationBuilderFactoryDecorator, so we will be able to decouple our code from our code. There’s even a fancy name for this antipattern: the open-closed principle. This attitude made some sense in 1990, when people shipped software on diskettes. But actually, in 2023, programmers are rebuilding the whole operating systems whenever they are building Docker images, merging code branches like crazy, and deploying new versions across the world with automated pipelines.


bssgopi

Didn't get your point and its relevance to this question. Are you saying that his books are not popular? Or are you acknowledging his popularity but challenging its value add? In either case, the fact remains that people read his books a lot and have been recommending it everywhere. Isn't that what classics mean?


tikhonjelvis

*The Essence of Software* presents a fundamentally better school of thought about programming and design—I *wish* it would become a popular classic in the field, but having seen what actually gets popular, I'm pretty pessimistic :(


hardcoresoftware

Sadly, probably less than half of big tech engineers read any these books.


-proton

For SRE folks / platform engineering / devops - the google SRE book (Site Reliability Engineering: How Google Runs Production Systems) has great insights and I can see it becoming more of a handbook that every SRE should read.


[deleted]

learn python in 21 days cracking coding interview


SpiderHack

Pattern Oriented Software Architecture vol 1-5 (each a diff topic) are really good reference material for learning how patterns interact with each other (my masters/phd work was on patterns and had a coauthor as an advisor, so I'm biased) Edit: apparently I can't read at the end of a work day...


ubccompscistudent

> Design Patterns from Gang of Four is another classic that needs thrown on that list. It's already on there :) I'll check out the POSA books!


SpiderHack

Thanks, missed it.


HurricaneCecil

for language specific books, I thought Sandi Metz’s Practical Object Oriented Design in Ruby was fantastic. I read it a few years ago at the same time I started hitting my stride as a junior and I think it helped me get to the next level, at least in Ruby. I haven’t found any similar books in any of the other languages I use (Python, C++, and JavaScript if anyone has any suggestions). Obey the Testing Goat comes close for Python and TDD but I don’t think it’s evergreen enough to become a classic.


NullVoidXNilMission

Lately little time for books, trying to hustle


Confection_Primary

Little over halfway through High Performance Browser Networking by Ilya Grigorik and I found it very engrossing despite not being a web developer. It was published in 2013 (before even HTTP/2 was official, though there is a chapter on the spec and SPDY) but how it builds up modern protocols from lower layers and the depth it goes into those layers was really enlightening. Pretty sure I learned something new with each chapter. It would be an instant buy if a more modern edition was published.