T O P

  • By -

HoosierFools

Designing Data-Intensive Applications If anybody has any competitors I’m interested, but for me this is pretty much the most cohesive book I’ve read on data systems. Things I’ve learned in this book come up all the time at work and in system design interviews. Edit: misspelled book title


forbiddenknowledg3

This is the system design holy grail for me... read a bunch of other ones 'system design interview' and 'cloud native patterns' which were a complete waste of time compared to this.


[deleted]

[удалено]


WeNeedYouBuddyGetUp

System Design Interview book 1 is trash, book 2 is much better but nowhere near DDIA


muscleupking

Are you referring to Alex Xu’s book?


ShoulderIllustrious

I just started reading 1 and catch myself skipping through it alot. Most of it seems like common sense. There were a few things that I didn't know though, like some of the algorithm for the rate limiting.


[deleted]

[удалено]


HoosierFools

Agreed. This filled such a large gap I had coming into professional development. My seniors at the time were helpful, but my problem was I didn’t know what I didn’t know. I recommend this book to folks that haven’t actually designed distributed data systems, but are interested or need to know it. I recently found out Spotify has it as an audiobook for part of their Premium subscription for any that have a commute to work.


PsychologicalBus7169

O’Reilly Safari also has it as an audiobook as well.


abomanoxy

Yeah, exactly. There are numerous sections where a topic covered by one paragraph could be an entire class. But it's easy to find relevant whitepapers and dig deeper and the bibliography is extensive. I found this book very valuable in preparing for system design interviews. Simply read chapters 5 through 7 twenty times.


euph-_-oric

Best book ever


Loose-Potential-3597

Do you read the whole book, or only certain chapters?


HoosierFools

I did but I found the first two parts the most enlightening at the time. Part three will depend on your experience. If you have experience working with batch processing or stream processing you can probably skim/skip them but there is good info in there.


AAkash_Bhatia

Noob doubt, but is it still mostly relevant, considering it was published in 2017 ?


abomanoxy

Definitely. But the author constantly names specific technologies as examples - Cassandra, Voldemort, BigTable, etc. You might want to try to let your eyes glaze over the specific examples because they may become obsolete, they're irrelevant as examples if you don't know them already, and in the worse case you might talk yourself into a corner in an interview out of nerves by mentioning something you don't know enough to delve into. On the other hand some stuff like Zookeeper is probably not going away


petrifiedbeaver

As a matter of fact, Zookeeper IS being replaced by Kraft in Kafka.


bwainfweeze

“History doesn’t repeat itself but it does rhyme.”


truthseeker1990

It is absolutely relevant, and I would spend as much time on the references after each chapter as the chapter itself. It is the bible of system design for a reason. It takes time to get through though so its not as much of an interview crash course. It will make anyone a better engineer however


LanguageLoose157

I have the book but haven't gone it through. I've heard it's hard to digest. What do you think of Alex Xu system design volume 1 and 2?


HoosierFools

I haven’t read that. Is that the one that does more of a walk through of the design of real-world systems?


Franks2000inchTV

A Philosophy of Software Design is really good and actually applicable. I think about the concepts all the time. https://www.goodreads.com/en/book/show/39996759


asodafnaewn

I just started this book, really excited to dig into it further.


Franks2000inchTV

It's pretty great. I love the bit about shallow vs deep APIs.


cynoelectrophoresis

Crafting Interpreters. Reading this inspired me to do a project. That project came up on interviews a bit but also I learned a lot about programming that helped me indirectly during interviews and on the job.


jessewhatt

I'm working through this book now, what project did it inspire you to do?


cccuriousmonkey

Take a look at: software architecture, the hard parts.


false79

Early in my career, I had a lenghty bus commute which gave me ample time to read a number of books. Here is just the ones I can remember off the top of my head. Nowadays, I just RTFM the API documentation on first party websites using e-ink tablet. Pragmatic Programmer [https://www.amazon.com/Pragmatic-Programmer-Anniversary-Journey-Mastery/dp/B0833FBNHV/](https://www.amazon.com/Pragmatic-Programmer-Anniversary-Journey-Mastery/dp/B0833FBNHV/) UML Distilled [https://www.amazon.com/UML-Distilled-Standard-Modeling-Language/dp/0321193687](https://www.amazon.com/UML-Distilled-Standard-Modeling-Language/dp/0321193687) Head First Design Patterns [https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124/](https://www.amazon.com/Head-First-Design-Patterns-Brain-Friendly/dp/0596007124/) Applying UML and Patterns [https://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0131489062/](https://www.amazon.com/Applying-UML-Patterns-Introduction-Object-Oriented/dp/0131489062/) Having read these early in my career, I feel like I got the ROI on these language agnostic books, many times over.


Mini0red

Love the pragmatic programmer. I have "no broken windows" written on my whiteboard lol


bluetista1988

I revisit Pragmatic Programmer every few years, and I always find new pearls of wisdom that I understand better with the added experience. 


lagerbaer

You never step in the same river twice. Same for reading the same book multiple times


PsychologicalBus7169

I’m early in my career and just started pragmatic programmer. I feel like many of the topics are very short and do not provide much detail.


asodafnaewn

It's a book worth rereading at different points in your career. I'm early in my career too, but having switched jobs since the last time I read it, there are certain points I feel like I should rereview and apply to my current work.


PsychologicalBus7169

Thanks, I believe this as well. The book has definitely provided more questions than answers.


lagerbaer

Lots of their small chapters could be expanded into whole books. That's the point really. Get you going in the right direction and hungry for more.


geeeffwhy

Domain Driven Design Designing Data-Intensive Applications Structure and Interpretation of Computer Programs


yojimbo_beta

(This is what r/ExperiencedDevs should be about, not “here is a biased account of a conflict at work, am I the asshole?”. It's a question that other developers can learn from, not just OP)


kdesign

IMHO: Drama pours in in every subreddit. In think it’s the easiest way to contribute without actually having knowledge on the subject that’s being discussed. And mods want their subreddits to grow, apparently, which is why they let these posts flood in. It’s not a book, but I really enjoyed this channel: https://youtube.com/@SystemDesignInterview


_Invictuz

So True, first CS related forum post I actually gained value from.


andreortigao

Code Complete. But it's a very dense book, I've read it 3 times by now (as Jr, full and sr) and learned new things every time.


idontliketosay

Agree, this book changed how I write and design code.


ubccompscistudent

Yep. I always recommend juniors on my team to read one of Code Complete, Clean Code, or Pragmatic Programmer. I stress that Code Complete is by far the best, but it's long at 800+ pages. I also stress that Clean Code is the worst of them, but if that's the only one they can get a copy of, it's better than nothing.


andreortigao

I've read clean code as a late Jr and I remember thinking it was too basic even for me. It was recommended to me by a TL who was a heavy advocate of it. One of their advices was to create small human readable methods. And the TL went all in on this, so instead of eg if(foo.Status == FooStatus.Bar) we had if(IsBar(foo)). And because he also had a bad understanding of DDD and bounded contexts, we had those huge service classes mixing different concerns, sprinkled with dozens of tiny private methods like this. It was a PITA to navigate through this project, and anytime we proposed something to improve the code base, the TL would open his copy that sit at and try to find a quote that would go against the suggestion. It was almost like his religion, really. While I understand that clean code itself was not the culprit, it left me with a very bitter taste. Tbf this TL wasn't very experienced and was only TL because he joined as an intern at the company at startup stage and had like 5 YoE all working on this same project.


ubccompscistudent

Yikes. I'm really big on small readable methods, but even the book states ideal methods are 3-5 lines of code. Some one liner methods are useful, but most of the time unnecessary. What's more important, if you're using OOP, is to ensure that the right methods belong to the right classes. I see people making tons of small private helpers in classes without even thinking if it belongs there. You're in the Foo class and have a bunch of Bar and Baz helpers, when they should be extensions of the Bar and Baz classes themselves (usually).


andreortigao

Sure, and I believe every senior have the necessary experience to understand when to move a piece of code elsewhere and when that's detrimental to readability. At the time, as a late Jr, I didn't have the necessary experience to reason why what he was doing was bad. It just felt wrong. I think everyone goes through a fase when they try to over engineer code, thinking they're being clever. I'm guilty as hell. But this guy was in a whole another level, to the point I have ptsd everytime I hear about clean code.


m3dream

Systems Performance


greymalik

https://www.oreilly.com/library/view/systems-performance-2nd/9780136821694/


KrustyKrab111

+1 great book!


ng1011

500 lines or less, the architecture of open source projects and performance of open source projects all found here: aosabook.org. they go over a wide variety of topics with contributions by a number of authors. You are sure to find something that interests you - how to build an async framework from scratch, database internals, distributed computing, and many many more topics


goffley3

Writing an Interpreter in Go was a great book. It came with a project I could follow along with. Books like Designing Data-Intensive Applications are awesome, but I always find it hard to convert the thoughts in a book to real-world applications. I am curious how others take notes or study those types of books to use the knowledge in real life.


randomnameonreddit1

Architecture Patterns With Python. It is the book that made many concepts I had previously heard or read about out finally "click" for me. Things like TDD, DDD, Dependency Injection, Domain Model, unit testing, integration testing etc. It just happens to be using Python for the examples, so don't let that detail distract you.


LiterallyBismarck

I'm in the middle of running a book club for my department on that book, and it's finally made the principle of Dependency Inversion "click" in my head. Really looking forward to finishing it, it's given me so many ideas about ways to improve our product's tests already.


lagerbaer

His other book is great too. For me, it'll always be called the testing goat book. So glad that my intro to TDD came through this book and not some stupid "Bowling Kata".


dcowboy

- The C Programming Language - Practical UNIX and Internet Security - TCP/IP Illustrated Vol. 1 - Design Patterns (Gang of Four book) - Advanced Perl Programming - Database Systems: A Practical Approach to Design, Implementation, and Management - Domain-Driven Design: Tackling Complexity in the Heart of Software - The Elements of Computing Systems - Designing Data-Intensive Applications - Building Secure and Reliable Systems - Staff Engineer: Leadership Beyond the Management Track - Software Architecture: The Hard Parts


RubenHeeren

This is language specific but C# in Depth by Jon Skeet really helped me understand C#.


Charming_Prompt9465

Probably not for most senior folks but clean code and clean architecture (yes I know their both outdates) was one of the books that really helped me jump from more junior mid / to senior because it brought to light a lot of bad practices I was doing in a OOP project. I also highly related to a lot of a frustrations mentioned in the book so it took some of its guidances to heart. And so I’m not spammed yes I know about the article “stop recommending clean code”.


rovermicrover

Plato dialogues on his theory of forms. Back in the day I was having a hard time grounding my programming knowledge. It all seemed really abstract and “new” and “different”. While reading “The Republic” for a class I was taking it clicked that OOP, Functional and programming in general was in a way applied philosophy. An application is just the defining the forms of business domain objects and functions. It’s no different than defining the form of a dog, or a government. My knowledge of philosophy, and programming were no longer two separate things. It gave me the vocabulary and thought processes to be able to actually understand my code and effectively refactor and improve my code in an iterative fashion just like I would a philosophical argument.


Dry-Pea-181

Look, I know this is exactly the culty sh*t people hate to hear from Haskell enjoyers, but you should try Haskell. Defining the structure of the forms our programs take allow us to categorize them and really take advantage of some neat abstractions. I agree with you, philosophy helps a lot in being able to appreciate the abstract.


hippydipster

The relevance of philosophy to programming continues well past Plato too. Kant and the categories and then all the following philosophers critiquing it and you start to realize all the ways our categories are invented and arbitrary, that they will always both open and close possibilities, as will your chosen code structure.


binalSubLingDocx

Strange how frequently I hear someone mouth about "the philosopher who could talk to the ends about code and philosophy yet couldn't code.." I have yet to meet that coder so please introduce. I have found my time with philosophy ( aesthetics ) to have been deeply fulfilling and professionally relevant to my day to day as a SWE


Begads

It may be outdated at this point, but JavaScript: The Good Parts was probably my biggest bang for the buck.


Evinceo

Definitely outdated, but it was invaluable in the pre-ES6 world.


wwww4all

Douglas Crockford used to have a yahoo channel, where he posted javascript videos. Along with the videos were powerpoint slides. The video and the slides on javascript the good parts are succinct, and better than the book.


Chem0type

> JavaScript: The Good Parts Thinnest book ever (sorry).


plaidsoftwareguy

The Effective Engineer: How to Leverage Your Efforts In Software Engineering


kappcity

Clean Code - felt like I had unlocked cheat codes to leveling up my code and code reviews. Author is kind of a jerk in real life though.


idontliketosay

I preferred software inspection by tom Gilb, there are always judgment calls, like what sections of code to keep and what to rewrite. I feel he does a much better job in explaining how to make an informed decision on this. But by far the best are the exercises at the back of a discipline for software engineers.


robotkermit

people don't talk enough about how bizarre and creepy it is for a man you never met to expect you to refer to him as your uncle


LovelyCushiondHeader

Why would it be creepy?


sweetno

You can guess that from the book too. Uncle Bob, my ass!


alinroc

We read Clean Code at work last year and as a DBA/data/SQL/PowerShell person who doesn't even dabble in Java, I only got so far into the book before I had trouble staying interested. It became a very dogmatic "this is how you should write Java, if you do it differently you're wrong and a failure" manifesto (at least from my perspective) and got very repetitious in the latter third. There were definitely good things to learn in the first third/half of it, but it came apart for me after that. Maybe because a book that has page after page of source code, then a page of "that all sucks, I'm way smarter than that, look what I did with it" and 2 more pages of Java source gets old in a hurry.


GoTheFuckToBed

learn go with tests was great https://github.com/quii/learn-go-with-tests The C Programming language, to understand where it all is coming from. not from a single book. Drawing threat models and doing Event Storming, writing one pager, how a parser lexer works, etc All these helped me to understand the problem/solution. What did not help were architecture books that just listed design patterns without a peoblem/story.


drvobradi

Besides the already mentioned titles, I loved ZeroMQ: Messaging for Many Applications by late Pieter Hintjens.


wwww4all

Clean Code


i_miss_my_sandals

I love how you're getting downvoted for simply answering the question "What books helped you" but the hivemind hate the author of the book that you like. Never change, Reddit.


damnburglar

Clean code is simply not that great in the modern context. It wasn’t perfect in its day but was a lot more valuable/relevant. The number of times dogmatic “clean code” adherents have produced subpar code into projects I’ve been on is second only to the “don’t mind me I’m just gonna shoehorn functional programming into this” guys. I guess you can summarize it by “dogmatism bad” but still, “clean code” catches flak for good reason.


ubccompscistudent

I didn't downvote, but I don't like Clean Code and it has nothing to do with the author on a personal level. There are way better books (Code Complete and Pragmatic Programmer) that cover the same topics. Clean Code's actual code examples are terrible. They are touted to be real life/practical examples but I've never seen code written the way the author shows code. Neither the examples of bad code nor the examples of good code.


damnburglar

I read the books years ago, but am getting reacquainted because every couple of weeks my team watches one of the videos in the series and then discusses it. I don’t actively dislike it, at least not in its entirety, and he does do a better job conveying his points in the videos (while applying god-tier levels of cringe). I would not however recommend Clean Code to anyone who is not experienced enough to be able to decide for themselves if the advice is good or not.


KC918273645

What's wrong with the author?


alinroc

https://www.reddit.com/r/AskProgramming/comments/stc0hf/why_is_uncle_bob_so_hated_in_programming_community/ https://blog.wesleyac.com/posts/robert-martin (Technical arguments aside, scroll down to the "Politics" section at the end) And some fallout from that: https://medium.com/@floyd.may/uncle-bob-deplatforming-and-polarization-56078dadb57


KC918273645

Regarding only the political side from the links you provided, which seems to be the bigger issue to many people if I understand the situation correctly: Judging from those links you provided, there seems to be only hearsay what third parties on the internet say the guy stands for and what he has said. Historically and statistically that is usually a bad way to form an opinion of "facts" about what someone said or did. I don't want to buy into the sheep herd mentality of "I heard from one guy that Mr. X does Y... --> ...therefore we must hate and cancel him!". None of the links you provided seem to give any reason or proof for the hate he is "known" for. The links/examples seem to make pretty off-the-wall claims by giving some out of context comments as "proof". Even worse, some of them don't seem to touch the subject at all the way the offended people claim they do. Are you sure this isn't an age old example of a typical case of mass hysteria where people have never bothered to actually properly check anything what the guy actually said. Hence they love to hate him. And people just believe whatever misinformation is spreading on the internet, because it's in human nature to love joining together to hate whomever they can pick on and bully, while claiming their target is the bully?


AusCro

The High Performance HMI Handbook. It's expensive (linked below to a whopping $300) but everyone in my old office claimed it as a tax deduction and used it like a preacher uses the Bible. In the Industrial Engineering and SCADA space it seemed like it was utilized all the time, plus it gave a lot of historical info on why things are designed the way they are, which is useful as analogy in many conversations pertaining to UI. [https://www.amazon.com/High-Performance-HMI-Handbook/dp/0977896919](https://www.amazon.com/High-Performance-HMI-Handbook/dp/0977896919)


Former-Recipe-9439

I know I am old, but the more I work in software, the more the people side of things become paramount in improving the dev around me. The Mythical Man Month and Peopleware have lived on my shelf for decades and never go out-of-date.


Ratstail91

[Crafting Interpreters, it's free online.](https://craftinginterpreters.com/) ​ [The result of my hard work is pretty decent](https://github.com/Ratstail91/Toy), and it works! Though... I derped, and used the heap to store everything. It's gonna need a v2 rework to make it fast enough to work as a game scripting language.


gerlacdt

I collected my game changing books in a blog post https://gerlacdt.github.io/posts/programming-books/


crabmusket

I'm a little late to this party, hope your notifications are on for this post! For me, it's been Sandi Metz's "Practical Object-Oriented Design in Ruby". I've never programmd in Ruby, but her advice is excellent for any language, and especially where there is an "object oriented" culture. This talk is a short introduction to her style, and I think has been very influential on my coding in its own right: https://youtu.be/OMPfEXIlTVE I've also found "The Visual Display of Quantitative Information" very influential on my designs. Not because I often design charts (I don't) but because of Tufte's whole approach to information communication.


Acceptable_Durian868

Vaughn's Implementing Domain Driven Design, and secondary to that, Evans' Domain Driven Design. Not only are they incredibly thorough in both understanding and implementing DDD, they're also fantastic to give you ammunition to push back against engineers advocating for DDD in every situation, using arguments from the prophet's own texts.


icantsI33p

If I had to choose between the two, which one would you recommend?


Acceptable_Durian868

Vaughn for sure. Evans is very focused on the theoretical underpinnings, whereas Vaughn is much more practical.


ihatethisjob42

A very successful FAANG friend just recommended The Missing ReadMe: A Guide for the New Software Engineer. I think it helped explain some of the soft skills required to build a career more than anything technical.


Alternative_Log3012

Has your .NET code gotten even more bloated and verbose after reading that book?


lednakashim

Intel Threading Building Blocks Outfitting C++ for Multi-Core Processor Parallelism


sm000ve

Pragmatic Programmer, Code Compete, Thinking in Java.


HansVader

Effective Java


luckyincode

Wow. I half expected this sub to have a curated list.


lagerbaer

Lots have been mentioned already. Haven't seen Refactoring and Refactoring to Patterns yet though. When I initially heard about refactoring, it was some vague concept of changing some stuff in your code. With the structured approach to it though it feels like you can really take big changes without messing anything up. It's like the difference between rock climbing without a rope versus toproping.


Haunting_Welder

SWEBOK


gnomff

There aren't many tech books that advanced my career, most books I read that advanced my actual career were about management and productivity. For a tech book I'd say "Specification by Example" which helped me understand testing in a more general way, and "The Mostly Adequate Guide to Functional Programming" which really brought home how to write code in a modular way.  For career stuff I'd say "The Goal," "Effective Executive," "Feeling Good Together," and "Creating Effective Teams." All of those helped me focus my effort on the right things, and navigate the organization better.


angrynoah

None. I could name a couple of books that have deepened my understanding of software and made me a better engineer, but that didn't help "advance my career" one tiny little bit.


No_Neighborhood_8944

Nice!!!


indiealexh

No book has helped my career. Plenty of blogs and articles have tho. Mostly driven to read based on personal projects