An Introduction to Statistical Learning: with Applications in R (Springer Texts in Statistics)
Gareth James , Daniela Witten , et al.
4.8 on Amazon
72 HN comments
Mastering Regular Expressions
Jeffrey E. F. Friedl
4.6 on Amazon
72 HN comments
Game Programming Patterns
Robert Nystrom
4.8 on Amazon
68 HN comments
Steve Jobs
Walter Isaacson, Dylan Baker, et al.
4.6 on Amazon
67 HN comments
Machine Learning: A Probabilistic Perspective (Adaptive Computation and Machine Learning series)
Kevin P. Murphy
4.3 on Amazon
66 HN comments
The Cuckoo's Egg: Tracking a Spy Through the Maze of Computer Espionage
Cliff Stoll, Will Damron, et al.
4.7 on Amazon
61 HN comments
Programming: Principles and Practice Using C++ (2nd Edition)
Bjarne Stroustrup
4.5 on Amazon
58 HN comments
Ghost in the Wires: My Adventures as the World’s Most Wanted Hacker
Kevin Mitnick, William L. Simon, et al.
4.6 on Amazon
55 HN comments
Modern Operating Systems
Andrew Tanenbaum and Herbert Bos
4.3 on Amazon
54 HN comments
Head First Design Patterns: Building Extensible and Maintainable Object-Oriented Software 2nd Edition
Eric Freeman and Elisabeth Robson
4.7 on Amazon
52 HN comments
The Singularity Is Near: When Humans Transcend Biology
Ray Kurzweil, George Wilson, et al.
4.4 on Amazon
51 HN comments
The Everything Store: Jeff Bezos and the Age of Amazon
Brad Stone, Pete Larkin, et al.
4.6 on Amazon
51 HN comments
Compilers: Principles, Techniques, and Tools
Alfred Aho, Monica Lam, et al.
4.1 on Amazon
50 HN comments
Test Driven Development: By Example
Kent Beck
4.4 on Amazon
45 HN comments
Patterns of Enterprise Application Architecture
Martin Fowler
4.5 on Amazon
43 HN comments
gilfoyleonJuly 2, 2021
https://martinfowler.com/books/eaa.html
ninjakeyboardonJuly 30, 2014
brandoncordellonJune 4, 2012
edwinnathanielonMar 6, 2015
Release It! => applicable
Continuous Delivery => applicable
Effective Java => absolutely IF you use Java (see other 'effective' series such as Effective C#, Effective C++ [_the_ grandfather], Effective JavaScript)
Patterns of Enterprise Application Architecture => Guess where Rails come from? (hint: DHH name is also mentioned somewhere in the book)
tswicegoodonDec 1, 2009
robdoherty2onNov 21, 2011
http://www.amazon.com/Patterns-Enterprise-Application-Archit...
I am trying to do the same thing as you, and I recently ordered this text based on a recommendation from a mentor.
gnaritasonFeb 19, 2020
But from the writers:
Fowler is the most prolific writer of the bunch, but he was largely documenting and naming what he saw all of them doing.
troelsonSep 18, 2015
icebrainingonOct 20, 2013
thorinonDec 10, 2014
douglaswlanceonDec 16, 2019
The best books I've ever read:
diimdeeponFeb 28, 2017
This was the one must fun and favorite, until panel split to https://www.greaterthancode.com
They had around 15 episodes where they discussed books with their authors, for example:
- RR Book Club: Smalltalk Best Practice Patterns with Kent Beck
- RR Book Club: Understanding Computation with Tom Stuart
- RR Book Club: Patterns of Enterprise Application Architecture with Martin Fowler
- RR Book Club: Refactoring Ruby with Martin Fowler
Another cool thing was picks at the end of each episode https://github.com/ryanburgess/ruby-rogues-picks
Software Engineering Radio - http://www.se-radio.net
FLOSS weekly - https://twit.tv/shows/floss-weekly
The Amp Hour - http://theamphour.com
pkaleronOct 16, 2020
Just start with the ones in the article and Amazon/Kindle will get good at recommending books.
Here's some books recently read on my Kindle:
stevepikeonJuly 6, 2014
dragonwriteronFeb 8, 2017
Certain other design patterns books in the software field (Patterns of Enterprise Application Architecture and Enterprise Integration Patterns, for examples that happen to be on the shelf next to me at the moment) don't share those features.
ConsilienceSysonMay 3, 2020
by Martin Fowler
This book is actually two books in one. The first section is a short tutorial on developing enterprise applications, which you can read from start to finish to understand the scope of the book's lessons. The next section, the bulk of the book, is a detailed reference to the patterns themselves. Each pattern provides usage and implementation information, as well as detailed code examples in Java or C#. The entire book is also richly illustrated with UML diagrams to further explain the concepts.
Armed with this book, you will have the knowledge necessary to make important architectural decisions about building an enterprise application and the proven patterns for use when building them.
copperxonMay 13, 2019
hugsonAug 23, 2017
Ironically, I've a got a theory (I did confirm parts of this with Martin years ago, though), that it's all Martin's fault. Before Martin was into Ruby, for a brief period of time, he was a Python fan. But by the time we wrote Patterns of Enterprise Application Architecture, he was full-on into Ruby. Then DHH came along and wanted to implement one of the first patterns listed (Active Record). DHH wanted to to step away from PHP and write his new code in whatever Martin's favorite language was. And the rest is history. But within a small window of time, DHH's project might have been called Python on Rails. So, it's all Martin's fault that you (or DHH or half of ThoughtWorks) never became a Python fanatic. :-)
troelsonJuly 25, 2017
Of books that are more on the craft of programming, "Refactoring" (Also Fowler) is good. And I enjoyed "Practical Common Lisp" by Peter Seibel too.
In general, I suspect that the value of a book has more to do with where the reader is, than where the book is.
eddie_31003onJuly 7, 2014
1) Clean Code
2) Pragmatic Programmer
3) Patterns for Enterprise Application Architecture
There's some overlap in contents, but I feel they complement each other very well.
vidarhonDec 1, 2011
I don't think this is exactly is lack of awareness on their part, though - as someone else has pointed out, Datamapper actually implements the Active Record pattern. Structurally the two are very different.
katonJan 22, 2015
Light Christmas reading written by the lead singer of Great Big Sea. I recommend it to anyone who grew up in a small town!
Reading: Patterns of Enterprise Application Architecture, Martin Fowler
So far so good. The first bit is overview, good contrasting examples of when to use what pattern. I've slowed down now that I've hit the actual patterns.
Planning: Clean Code, Robert Martin.
Recommended by a coworker.
jaredcwhiteonMar 20, 2019
davesimsonNov 28, 2011
"Martin Fowler" is on the cover in two different places, plus it looks just like the cover of Patterns of Enterprise Application Architecture, which he did write, so I've had that misconception in my brain for a while. Failure to test assumptions...
weavieonSep 4, 2015
Perhaps the problem doesn't fit into an object oriented solution. You could try learning a functional language and see if you find it fitting better. I struggled for years with OO and was never happy with my solutions. Learning functional was my road to Damascus experience.
If you have to go OO, there have been plenty of people who have thought long and hard about how to make OO a suitable solution. Some classic books you may want to consider :
- Design patterns : elements of reusable object-oriented software (Gang of four) - there are people who swear by this and turn it into their hammer for which everything becomes a nail.
- Patterns of Enterprise Application Architecture (Martin Fowler)
- Refactoring: Improving the Design of Existing Code (Martin Fowler and Kent Beck)
- Growing Object-Oriented Software, Guided by Tests (Steve Freeman)
un_montagnardonOct 21, 2019
Patterns of Enterprise Application Architecture by Martin Fowler.
Domain Driven Design by Eric Evans.
Growing Object-Oriented Software, guided by tests by Steve Freeman and Nat Pryce.
netaustinonApr 6, 2011
The Mythical Man Month by Fred Brooks really helped me learn to think about large projects from a personnel and planning perspective. There are some ideas there that have become part of the CS canon; "no silver bullet" and the slightly sexist but accurate metaphor for throwing more people at an overdue project, "nine women can't make a baby in one month." The Mythical Man Month was written in 1975, but it holds up remarkably well.
gruseomonDec 1, 2009
Refactoring is better because it's on a smaller scale and thus able to deliver roughly what it promises.
As far as the enterprise-OO space goes, though, the best book by far IMO is Eric Evans' Domain Driven Design. One reason it's better (apart from being superbly written) is that it's much more exploratory: it doesn't pretend to have figured things out, but rather offers principles you can use to figure things out. Also, the principles, though deep, are easy to understand (as opposed to "enterprise application architecture patterns" which get more confusing the more you try to understand them). In fact, the only weak spots in DDD are the points at which it veers closer to the PEAA approach.
(Disclosure: I worked with Eric for several years. But my high opinion of his book was not caused by this; it was the other way around.)
huhertoonJan 3, 2015
mirekrusinonMar 7, 2021
The point of patterns is to recognise things that reoccur all the time, ie. DFS is a pattern, FIFO queue as well, so stack, parser combinator, microservice, optimistic locking, proxy, demux etc.
The whole point it to use common volabulary where you can drop this "pattern" suffix when discussing things.
It can be anything, GoF described an idea and couple of patterns in OO context, there are many other books "Analysis Patterns", "Enterprise Integration Patterns", "Patterns of Enterprise Application Architecture" etc.
tempodoxonMay 5, 2015
But then, you also can see at once that this post came directly from the Dark Ages when people believed in silver bullets named “Methodology”. The post even mentions Martin Fowler's bestiary (Patterns of Enterprise Application Architecture) as an inspiration. So don't say you haven't been warned...
diego_moitaonJan 2, 2013
Given this, there are some books you might add or remove depending on the area you are interested (e.g.: Knuth's "Art of Computer Programming", Martin Fowler's "Patterns of Enterprise Application Architecture", ...)
To finish, 2 books people recommend a lot for beginning programmers:
"The Pragmatic Programmer"- Hunt, Thomas: a very good book, with sound advice and very easy to read. The only bad side is that it became so influential that its ideas became vulgarized in thousands of blogs.
"Code Complete" - Steve McConnel : A very dangerous book. It does give have a lot of sound advice. But, IMO, it has some big problems. First is that it gives the false impression that there is a lot of empirical evidence on what works on software engineering. Second, it perpetuates some myths that don't have such evidence: the "orders of magnitude programmer's productivity" and "the cone of uncertainty" (see: https://leanpub.com/leprechauns).
jonaspfonJan 3, 2014
In terms of books, I really like "The Architecture of Open Source Applications" (http://aosabook.org/) which is also mentioned in the blog post. For the enterprise world, "Patterns of Enterprise Application Architecture" (http://martinfowler.com/books/eaa.html) is a good choice.
However, before applying any technical software architecture methods, it is really important to understand what your stakeholders actually want/need. Unfortunately most of the time they don't even know it themselves. In my experience most software projects fail, not because of technical reasons but simply because the original problem hasn't been understood. This is where communication is key. I assume the reason why the authors of the blog post encouraged drawing diagrams and looking at different perspectives/views is to facilitate this communication.
katonSep 19, 2018
Patterns of Enterprise Application Architecture - by Martin Fowler
Domain Driven Design - by Eric Evans
bcjordanonJan 4, 2013
Re: The Pragmatic Programmer and Code Complete, I learned a ton from those books and I'd heartily recommend them to programmers starting their first job or internship, but likely not to someone with a few months before their first round of programming interviews. What do you think?
Maybe I will put together another list more tuned for general programming improvement versus interview-specific prep.
As an aside, Patterns of Enterprise Application Architecture looks very useful, thank you for the pointer.
davesimsonSep 17, 2011
"Unfortunately, these advantages disappear as the project increases in complexity: the abstraction breaks down, forcing the dev to use and understand SQL"
"Forced" to use and understand SQL? I think you have a basic misunderstanding of the purpose of ORMs, Laurie. The developer who can't use and understand SQL really has no business going near the ORM. They probably need to stay somewhere near the front-end doing design, layout and UI-centric work.
The purpose of an ORM, properly used, is not at all to completely remove SQL from the developer's toolkit, but to help developers who fully understand SQL and Objects eliminate boilerplate SQL. This has a huge dual benefit of productivity boost plus elimination of bugs by the reduction of code/SQL duplication.
If an ORM developer is not aware of SQL (i.e., watching their rails log for odd queries/joins) and the natural problems that arise, such as n+1, etc. then they probably shouldn't be writing data-layer concerns. ORMs are for experienced developers who know how to use things like the ActiveRecord or DataMapper DSLs when appropriate, and can also drop into straight SQL when appropriate. ORMs are power tools for serious developers who can use them for what they do well, and know how to avoid their weaknesses, which you outline well here.
Because of their benefit and the cumulative experience we've had in the last 10 years or so getting to know how to use ORMs effectively, they're not going away any time soon. However, they certainly have their pitfalls and it's important that we have posts like these every few years or so to remind us what those pitfalls are. So thanks!
AvalaxyonMar 3, 2013
- The information in books is complete. Tutorials on the web usually cover only a tiny fraction of everything there is to know about a specific technology. Tutorials often go deep into a specific part of the technology, or try to cover everything in a very shallow way. Books provide a thorough explanation of everything, nut just a tiny fraction.
- Books (if you make the right selection, I usually type "best [some technology] book" in google and read the suggestions on stackoverflow or other programming sites) are usually written by authoritative people in the industry. Very often by the author of the programming language that you're trying to learn. Not by some amateur who has some spare time and wants to write a blog post.
- It's much more pleasant to read long texts on paper than on a bright computer screen where you have to scroll all the time and cant place physical bookmarks.
As for your last question (what I read and can recommend):
Tech:
- Design patterns : elements of reusable object-oriented software
- Patterns of Enterprise Application Architecture
- Code Complete 2
- Clean Code
- Pro ASP.NET MVC (if you're into MS stuff like me)
- Scrum and XP from the trenches
Marketing/business:
- Business model generation
- Purple Cow
- Permission marketing
- Rework
(how to do these line breaks correct?)
I didn't like SICP. I can handle boring books, but this one is pretty extreme.
lesingerougeonMay 3, 2015
Basically the whole system should be a layer cake of smaller modules/systems, as "opaque" as needed to one another, but interacting with each other solely through a well defined "internal API".
I think the approach proposed in the article is good when starting or prototyping projects, but the object oriented and layering approach, even if it's a bit more challenging to visualize correctly at the start of the development of an app, is worth its weight in gold as features start piling up.
[0] http://www.amazon.com/Enterprise-Application-Architecture-Ad...
later edit: for clarity.
ItarPeyoonJuly 24, 2010
Last book about a specific language I read from cover to cover was "Expert Python Programming" which is more about best practices, testing and packaging etc.
I feel I learn much more by looking at source code then reading books or tutorials on something.
Books like "Patterns of enterprise application architecture", "Programming collective intelligence", "RESTful Web Services" etc. I do buy and read from cover to cover at least once every quarter.
jingwenoonSep 27, 2011
matt_sonAug 25, 2015
Like others have said, the focus should be on the bigger picture of the overall system(s) and how they inter-relate.
As you move around in your career, look for roles where you have more say in how the system is designed in the beginning. Take on more responsibility in how different modules/components interact.
Also read up on design patterns - including the book Patterns of Enterprise Application Architecture by Martin Fowler (and read his blog/site too).
Much of architecture is focusing on the parts of the system that have high risk and making them less risky, usually these are the parts where the systems interact with each other.
davidjnelsononJune 23, 2018
radicalbyteonDec 6, 2011
It's sitting proudly behind me next to The Mythical Man Month, the GOF book, the Dragon book, Refactoring, Code Complete and The Visual Display of Quantitative Information.