Cách học kiến trúc từ các phần mềm open source nổi tiếng

Chào anh chị và các bạn.

Em muốn học kiến trúc phần mềm thực tế – không chỉ design pattern hay clean code, mà là cách các dự án lớn tổ chức core logic , infrastructure logic , và cách chúng phân tách tầng kiến trúc trong codebase.

Vấn đề là:

  • Trong các dự án như VSCode, Tauri hay Chromium, phần logic cốt lõi và hạ tầng thường trộn lẫn với nhau, hoặc phân tách theo quy ước riêng mà chỉ người phát triển mới hiểu được.
  • Tài liệu kiến trúc hoặc sơ đồ tổng thể hiếm khi được viết đầy đủ . Dù thi thoảng sẽ gặp được 1 số tài liệu tổng thế: https://github.com/microsoft/vscode/wiki/Source-Code-Organization

Liệu có phương pháp hay quy trình nào hiệu quả để đọc hiểu kiến trúc của một dự án open source lớn không? Hay là có những cuốn sách nào dạy về những kiến trúc của phần mềm open source như Vscode, chromium, tauri, … hay không ?

Em cảm ơn.


hình này là các file ở thư mục gốc của source
bạn có biết từng file đó là gì không? nếu bạn không biết bạn sẽ làm gì?

Em chưa hiểu câu hỏi của anh chị liên quan gì đến chủ đề.

Đầu tiên biết file đó là gì không, không biết sẽ làm gì, thì mình cần xác định “Vì sao cần quan tâm những file đó đầu tiên”.

Nó có mấy file cấu hình, gitignore ở phía hạ tầng, để hiểu kiến trúc tổng thể trước thì có thể bỏ qua mà

theo bạn, có phương pháp nào hay tài liệu nào để 1 đứa trẻ mới học hết tiểu học có thể tham gia nghiên cứu đề tài cấp tiến sĩ không?

có những kiến thức, mặc nhiên bạn phải biết, nó không thuộc scope của dự án đó
ở trên hình là các file của dự án vscode

mình hỏi để xem thái độ của bạn khi gặp 1 repo mới bạn sẽ làm gì

không lẽ trên dự án vscode, người ta lại làm tài liệu hướng dẫn node/nvm/eslint/editorconfig/gulp…

có những cái mặc nhiên phải biết, không biết thì cũng sẽ phải search google trước, khi nào không có kết quả thì mới tìm kiếm tới 1 sự giúp đỡ khác

tất nhiên có hướng dẫn thì tốt, nhưng không thể cái gì cũng hướng dẫn được

bạn cần có kiến thức nhất định để bát đầu

kiến trúc là dựa theo project thực tế và định hướng của project mà nó sẽ đi theo, nên người ta mới quan trọng kinh nghiệm

bạn có học lý thuyết lái xe 10 năm, thì bạn cũng không thể nào biết lái xe được đâu
cần phải có thực hành, bạn thực hành càng nhiều, xử lý của bạn càng thuần thục
có những cái không thể cố học đượcđược

1 Like

Em thì không đồng tình với quan điểm đó, vì những file anh chị gửi là nó tập trung vào hạ tầng, cấu hình.

Còn cấu trúc thì có thể sơ đồ hoá chứ không phụ thuộc vào ngôn ngữ.

Ví dụ ngày xưa tích phân vi phân làm khó các nhà toán học top đầu, thì nay nó được đưa vào chương trình thpt, đó là nhờ cái nhìn từ trừu tượng tới cụ thể.

Dù là vscode, sublime text, intelliJ có code bằng công nghệ khác nhau, thì nó sẽ có những cơ chế chung, để giải quyết những bài toán như cho phép cài plugin trong lúc sử dụng. Hay những thuật toán linter cho những dòng code. Em muốn học những cơ chế tương tự.

Còn về kinh nghiệm, thì hiếm mà tìm được công ty ở Việt Nam tạo ra những phần mềm tương tự, còn tự làm trải nghiệm thì như em đây, đang hỏi han để xem anh chị có những phương pháp rõ ràng nào không.

bạn không rành về kiến trúc, thì đừng nên học từ các phần mềm open source.
đơn giản vì không phải open source nào cũng có kiến trúc và thậm chí là code xanh sạch đẹp.
hầu hết là từ các project cá nhân nhỏ nhỏ đi lên nên nên thường khá là chắp vá. đó là chưa kể nhiều người cùng code chung, project owner mà quản lý kém thì nó càng rối rắm và không thống nhất.

trừ khi bạn muốn đóng góp cho open source đó thì nên học, hoặc muốn cực kỳ am hiểu 1 tính năng nào đó, còn lại thì thôi, mất thời gian mà không được gì.

cách tốt nhất là tự clone 1 cái app bạn hứng thú, tự tổ chức code, rồi tự tham khảo các clip về kiến trúc để review là ổn nhất.
cái này không thực tế, nhưng nó giúp bạn có cái nhìn tổng quan gần thực tế.
kinh nghiệm đi làm thấy rằng thực tế thì kiến trúc đều ở mức high-level, chứ code thì chắc chỉ được ở giai đoạn đầu thôi hoặc app đơn giản.
app to lên deadline dí, bug đè đầu cưỡi cổ thì có clean mấy cũng phải dirty.


còn nếu vẫn muốn tìm hiểu về các open source này, thì bạn nên đi từ 1 tính năng đơn giản + dễ sờ nắm nhất. lấy ví dụ vscode là save file -> tìm code liên quan save file. các hàm nào gọi save file, data flow của sau save file là gì. là sẽ có cái nhìn tổng quan về 1 project ngay.

3 Likes

@catlord is right. Open source does NOT always mean “Kiến trúc” or “clean code,” but rather a place where anyone can contribute—from self-taught software developers to PhD-level developers. The best way to explore software design/architecture is online. There are tons of documents. Your only problem might be choosing the right ones.

You know that software architecture is similar to civil architecture. Buildings, houses, palaces, etc., were and are built by different architects, and each architect has his/her own paradigm and design philosophy, and that’s what makes some of them famous. The same applies to software architecture. You learn the basics taught in universities, and you have to figure out the rest yourself. If you blindly copy the style of a famous developer, you won’t be like him/her; you’ll just be a me-too, because many others are doing the same thing as you.

The basics you should learn are:

  • Operating system, to acquire the fundamental knowledge – just as a real architect learns statics and material properties.
  • Low-level programming languages: assembly and C, to understand how a computer works and how to write clean code – just as a real architect drafts some structures.
  • Higher-level programming languages ​​such as C++, Java, Python, etc. C++ should be the first language you learn. This will give you an understanding of data structures and data addressing. Then either Java or other OOP. This will give you an understanding of how an application is designed and implemented – just as a real architect starts to design a building or a town house.
  • Once you’re comfortable with programming, you can eventually develop your own style, leaving your own fingerprint on software architecture and design – just as a real architect is becoming renown.

I have a Master of Science in Computer Science and have worked from the lowest level (microprogramming for computer boosting) to the highest level (designing OOP at Sun and BEA – both now Oracle), and have met many gurus with own software architecture and design. But their style isn’t my style and isn’t my taste. Therefore, I can say that it’s good to be familiar with such a paradigm and philosophy, but you still have to find your own path.

1 Like

Về phương pháp thì tương tự khi bạn join một project mới, bạn phải đọc code, documents, debug các flow chính, ghi note hoặc vẽ diagram lại, và contribute bằng cách fix bug hoặc task nhỏ. Việc này cần thời gian và kinh nghiệm.

Những opensource bạn liệt kê không phải là loại project thường thấy, do đó gần như sẽ không có sách hay tài liệu chuẩn hóa. Thường thì các developer sẽ dựa trên structure của framework (ví dụ Electron) và kinh nghiệm cá nhân (các pattern của backend chẳng hạn) để xây dựng nên kiến trúc.

Ngược lại, các backend or enterprise system thì phổ biến hơn, do đó mới có các cuốn như P of EAA chuyên về architecture.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?