TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Ask HN: Which are the best resources to learn software architecture?

135 点作者 labarilem超过 5 年前
I'm a software engineer with ~4 years of experience in the IT industry. Since I've always liked designing systems (of any kind), I'm thinking I'd love moving to a software architect role. Currently I'm working closely with some software architects and I guess this can count as practice. But what about theory? Which are the resources (courses, books, etc.) that helped you become a great software architect?

18 条评论

codingbear超过 5 年前
It depends on what you mean by Software Architecture. I normally see 3 interpretations of it.<p>For some people, S&#x2F;W arch is writing readable, maintainable code. Things like Design patterns, FP, TDD, microservices etc. There is a lot of literature on this out there.<p>For others, it means having the ability to design the next Kafka&#x2F;Spark&#x2F;React. You can get basic theory for this by reading books on Domain Modelling, Distributed computing and Algorithms. So books like The Algorithm design manual, Designing Data intensive Applications, The Parallel and Concurrent Programming in Haskell, Functional and reactive domain modelling etc. The <a href="http:&#x2F;&#x2F;aosabook.org" rel="nofollow">http:&#x2F;&#x2F;aosabook.org</a> has good case studies to read as well. However, to actually build these systems require facing the problem in the 1st place and being unable to use existing systems to solve it. Or doing phd in them. It happens rarely.<p>Finally, the last one is my day job. Which is to convert ramblings and fantasies of leadership into a production systems, minimizing the number of curse words people use when working on it. I haven&#x27;t really found any good guides to do this though. Things which help me are:<p>- Always thinking what could go wrong. And if it does, who should be notified if the system can&#x27;t recover. A lot of times when I don&#x27;t have the answer, I ask around. Things like slack channels, mailing lists, or even having coffee with people in industry who have tackled stuff like this.<p>- Communication skills. This doesn&#x27;t mean small talk, but being able to have conversations and meetings which help define requirements and ensure everyone is on the same page. Also making sure there are hard numbers. ie. instead of &quot;fast&quot;,&quot;responsive&quot; etc, get latency, throughput, uptime numbers.<p>- Understanding business&#x2F;technical capabilities and limitations. Things like business impact(LTR etc), capabilities of current infrastructure, skill levels of various people&#x2F;contractors involved etc
评论 #22207662 未加载
评论 #22207443 未加载
veeralpatel979超过 5 年前
I was in the same situation as you a couple years ago. I&#x27;d taken programming classes in high school but I was unsure how &quot;real&quot; software was written.<p>So, I started learning about design patterns. In particular, I spent a lot of time reading through this site [1] and &quot;Head First Design Patterns&quot;.<p>It was a mistake.<p>I&#x27;ve used maybe 2-3 of these design patterns when actually writing code, and never because I intended to use, say, a factory or a singleton -- I wrote what code I thought was most appropriate and it turned out to match an existing pattern.<p>--<p>Here&#x27;s what&#x27;s more valuable to learn:<p>- SOLID principles<p>- Realizing that what depends on what in your web application matters.<p>You want your business logic depending on your DB access code and your web layer depending on your business logic.<p>You do NOT want your business logic depending on your web layer.<p>- Realizing that your web app is really just some business logic which has a HTTP interface.<p>- Organizing software into layers. In a web app you&#x27;d have layers for middleware, controllers, business logic, and database access.<p>- Folder structure. I have a folder for each layer and try to have a descriptive name for each file in it. If a folder is getting messy, add another folder inside it with a descriptive name.<p>- Understand that refactoring is a fact of life. When you start a project, there&#x27;s no way you can think of the optimal design up-front. This means you&#x27;ll write code, accrue technical debt, and will need to refactor. Realize that this is 100% normal.<p>[1] <a href="https:&#x2F;&#x2F;sourcemaking.com&#x2F;design_patterns" rel="nofollow">https:&#x2F;&#x2F;sourcemaking.com&#x2F;design_patterns</a>
评论 #22207516 未加载
评论 #22211811 未加载
评论 #22207538 未加载
评论 #22210546 未加载
robto超过 5 年前
I found Designing Data-Intensive Applications[0] by Martin Kleppman to be the most eye-opening system design book that I&#x27;ve read. He really describes well how awful things get once you have to coordinate more than one physical machine - the number of things that can go wrong is staggering. I would say this book is as scary as Java Concurrency in Practice was - and that book was scary enough to get our company to change languages.<p>I think one of the best ways to learn software architecture is to have a clear view of what the challenges are, and the Kleppman book does a really good job of providing that clear view.<p>[0]<a href="https:&#x2F;&#x2F;dataintensive.net&#x2F;" rel="nofollow">https:&#x2F;&#x2F;dataintensive.net&#x2F;</a>
评论 #22204581 未加载
striker_axel超过 5 年前
I follow these links<p><a href="https:&#x2F;&#x2F;github.com&#x2F;justinamiller&#x2F;SoftwareArchitect" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;justinamiller&#x2F;SoftwareArchitect</a><p><a href="https:&#x2F;&#x2F;github.com&#x2F;donnemartin&#x2F;system-design-primer" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;donnemartin&#x2F;system-design-primer</a><p><a href="https:&#x2F;&#x2F;github.com&#x2F;binhnguyennus&#x2F;awesome-scalability" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;binhnguyennus&#x2F;awesome-scalability</a>
tcvt超过 5 年前
Despite the url this is not specific to azure. <a href="https:&#x2F;&#x2F;docs.microsoft.com&#x2F;en-us&#x2F;azure&#x2F;architecture&#x2F;patterns" rel="nofollow">https:&#x2F;&#x2F;docs.microsoft.com&#x2F;en-us&#x2F;azure&#x2F;architecture&#x2F;patterns</a>
lgunsch超过 5 年前
For me, one of the pieces that really helped me understand architecture, was doing ops for years. Deploying systems, designing deployment solutions, and understanding how services fit into their environment helped me understand the solution as a whole. I was more able to come up with simpler, quicker to implement, solutions.<p>However, at the same time I was also doing lots of software development. I tried out lots of different solution styles. So don&#x27;t ignore that aspect.
andrei_says_超过 5 年前
Sandi Metz’ POODR is the best I’ve seen on OO software architecture.<p><a href="https:&#x2F;&#x2F;www.poodr.com&#x2F;2nd-edition-faq" rel="nofollow">https:&#x2F;&#x2F;www.poodr.com&#x2F;2nd-edition-faq</a>
评论 #22204476 未加载
mbrodersen超过 5 年前
If you <i>really</i> learn and understand the SOLID principles then you already have better tools in your architectural toolbox than most “software architects”.
austincheney超过 5 年前
Perhaps a good way to learn architecture is directly jump into it. Try spinning up a complex personal open source project. The first architectural problems you will encounter will occur once the first set of new non-original requirements creep in. You will notice: complexity and competing concerns. You will need to make hard decisions to reduce complexity to allow better scale into the future and balance to resolve competing concerns. Practice is a great teacher.
lifefeed超过 5 年前
I&#x27;ve been following Mark Richards at <a href="https:&#x2F;&#x2F;www.developertoarchitect.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.developertoarchitect.com&#x2F;</a> for a while. I convinced my work to send me to his three day fundamentals seminar, and it was worth it. It was a top-down view of the architect role, and deep dives into different design decisions. Lots of hands-on exercises in small groups.<p>Super friendly guy, too. (And a board game geek.)
mcqueenjordan超过 5 年前
Internal resources (papers, wikis, talks) at big companies (AWS, Google) have been massively instrumental for my learnings.<p>Thankfully, some of these things have been opened up:<p>- <a href="https:&#x2F;&#x2F;aws.amazon.com&#x2F;builders-library" rel="nofollow">https:&#x2F;&#x2F;aws.amazon.com&#x2F;builders-library</a><p>- <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;user&#x2F;GoogleTechTalks" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;user&#x2F;GoogleTechTalks</a>
jbn超过 5 年前
I like the following books:<p><a href="https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;224110.Software_Architecture?from_search=true&amp;qid=mapHvJtQKf&amp;rank=1" rel="nofollow">https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;224110.Software_Architec...</a><p><a href="https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;25380761-software-architecture-in-practice-3rd-edition?from_search=true&amp;qid=sBcvkEmab6&amp;rank=7" rel="nofollow">https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;25380761-software-archit...</a><p><a href="https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;6329721-software-architecture?from_search=true&amp;qid=sBcvkEmab6&amp;rank=8" rel="nofollow">https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;6329721-software-archite...</a><p><a href="https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;1171676.Software_Architecture?from_search=true&amp;qid=sBcvkEmab6&amp;rank=30" rel="nofollow">https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;1171676.Software_Archite...</a><p><a href="https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;1347952.Design_and_Use_of_Software_Architectures?from_search=true&amp;qid=sBcvkEmab6&amp;rank=90" rel="nofollow">https:&#x2F;&#x2F;www.goodreads.com&#x2F;book&#x2F;show&#x2F;1347952.Design_and_Use_o...</a><p>You can also look at <a href="https:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;engineering-systems-division&#x2F;esd-34-system-architecture-january-iap-2007&#x2F;index.htm" rel="nofollow">https:&#x2F;&#x2F;ocw.mit.edu&#x2F;courses&#x2F;engineering-systems-division&#x2F;esd...</a> , which although it&#x27;s not specific to software systems has a lot of concepts that are common to all kinds of systems (I took that course in 2013), such as interfaces or modules.
alicorn超过 5 年前
&quot;Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives&quot; by Nick Rozanski, Eóin Woods. Found this book really useful due to its methodical approach on views and perspectives. It really helped me to structure and clarify my thinking around complex software systems and communicate with stakeholders in a better way.
tartoran超过 5 年前
All the advice above is good, but if I were you, I&#x27;d take a look at functional languages and the architecture they yield as well.
评论 #22210183 未加载
surajcm超过 5 年前
Try this one, <a href="https:&#x2F;&#x2F;www.aosabook.org&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.aosabook.org&#x2F;</a>
gitgud超过 5 年前
No one&#x27;s mentioned this book [1], which is a great catalogue of concepts, useful in architecting codebases.<p>[1] &quot;<i>Design Patterns: Elements of Reusable Object-Oriented Software</i>&quot;
lincpa超过 5 年前
[The Pure Function Pipeline Data Flow v3.0 with Warehouse&#x2F;Workshop Model](<a href="https:&#x2F;&#x2F;github.com&#x2F;linpengcheng&#x2F;PurefunctionPipelineDataflow" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;linpengcheng&#x2F;PurefunctionPipelineDataflow</a>)<p>It systematically simulates integrated circuit systems and large industrial production lines.<p>In the computer field, for the first time, it was realized that the unification of hardware engineering and software engineering on the logical model. It has been extended from `Lisp language-level code and data unification` to `system engineering-level software and hardware unification`.<p>It brings large industrial production theory and methods to software engineering. It incorporates IT industry into modern large industrial production systems, This is an epoch-making innovative theory and method.<p>There are only five basic components:<p>1. Pipeline (pure function)<p>2. Branch<p>3. Reflow (feedback, whirlpool, recursion)<p>4. Shunt (concurrent, parallel)<p>5. Confluence.
adamnemecek超过 5 年前
I think that Entity-Component-System is THE architectural pattern for building complex applications<p><a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Entity_component_system" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Entity_component_system</a><p><a href="http:&#x2F;&#x2F;adventures.michaelfbryan.com&#x2F;posts&#x2F;ecs-outside-of-games&#x2F;" rel="nofollow">http:&#x2F;&#x2F;adventures.michaelfbryan.com&#x2F;posts&#x2F;ecs-outside-of-gam...</a>