56 luật phần mềm, Việt hóa để dễ đọc lại
Trang này tổng hợp 56 quy luật và nguyên lý nổi tiếng trong kỹ nghệ phần mềm dưới dạng diễn giải tiếng Việt ngắn gọn để tra cứu nhanh.
Nội dung bên dưới là bản tóm tắt Việt hóa, không phải bản dịch nguyên văn. Tên gốc tiếng Anh được giữ lại để tiện đối chiếu khi cần đọc sâu hơn.
Kiến trúc
9 mục trong nhóm kiến trúc
Architecture
Định luật Hyrum
Hyrum's LawNếu một hành vi của hệ thống có thể quan sát được, sớm muộn cũng sẽ có người phụ thuộc vào nó.
Định luật Gall
Gall's LawHệ thống phức tạp hoạt động tốt thường tiến hóa từ một hệ thống đơn giản đã chạy ổn trước đó.
Định luật Trừu tượng rò rỉ
The Law of Leaky AbstractionsMọi abstraction đủ phức tạp đều sẽ để lộ chi tiết bên dưới vào lúc bạn ít mong muốn nhất.
Định luật Tesler
Tesler's Law (Conservation of Complexity)Độ phức tạp cốt lõi không tự biến mất; bạn chỉ đang chuyển nó từ người dùng sang code hoặc ngược lại.
Định lý CAP
CAP TheoremTrong hệ phân tán có phân vùng mạng, bạn không thể đồng thời tối đa cả nhất quán lẫn sẵn sàng.
Hiệu ứng Hệ thống thứ hai
Second-System EffectPhiên bản tiếp theo của một sản phẩm thành công rất dễ bị nhồi quá nhiều ý tưởng và trở nên cồng kềnh.
Ngụy biện của tính toán phân tán
Fallacies of Distributed ComputingNhiều giả định tưởng hiển nhiên như mạng luôn ổn định, độ trễ bằng không hay topology không đổi đều sai.
Định luật Hệ quả ngoài ý muốn
Law of Unintended ConsequencesMỗi thay đổi trong hệ thống phức tạp đều có thể tạo ra tác động phụ ở nơi bạn chưa nghĩ tới.
Định luật Zawinski
Zawinski's LawPhần mềm có xu hướng phình to phạm vi cho đến khi cố làm nhiều việc hơn mức nó nên làm.
Đội ngũ
9 mục trong nhóm đội ngũ
Teams
Định luật Conway
Conway's LawCấu trúc hệ thống thường phản chiếu cách các nhóm giao tiếp và chia trách nhiệm với nhau.
Định luật Brooks
Brooks's LawThêm người vào một dự án đã trễ hạn thường làm nó trễ hơn vì chi phí phối hợp và truyền đạt tăng lên.
Số Dunbar
Dunbar's NumberCon người chỉ duy trì hiệu quả một số lượng hữu hạn quan hệ ổn định, nên quy mô đội ngũ có giới hạn tự nhiên.
Hiệu ứng Ringelmann
The Ringelmann EffectKhi nhóm lớn lên, hiệu suất của từng cá nhân thường giảm nếu trách nhiệm và mục tiêu không đủ rõ.
Định luật Price
Price's LawTrong nhiều nhóm, một phần nhỏ thành viên tạo ra tỷ lệ đóng góp rất lớn cho kết quả chung.
Định luật Putt
Putt's LawKhoảng cách giữa người quản lý và người làm kỹ thuật dễ tạo ra quyết định thiếu ăn khớp với thực tế công nghệ.
Nguyên lý Peter
Peter PrincipleTrong tổ chức phân cấp, con người dễ được thăng tiến tới mức vai trò mà họ không còn làm tốt nữa.
Bus Factor
Bus FactorNếu quá ít người nắm kiến thức sống còn, dự án sẽ cực kỳ mong manh khi họ rời đi hoặc không còn sẵn sàng hỗ trợ.
Nguyên lý Dilbert
Dilbert PrincipleTổ chức yếu có thể đẩy người kém phù hợp khỏi công việc tạo giá trị trực tiếp và vô tình đưa họ lên quản lý.
Lập kế hoạch
6 mục trong nhóm lập kế hoạch
Planning
Tối ưu quá sớm
Premature Optimization (Knuth's Optimization Principle)Tối ưu khi chưa có dữ liệu thực tế thường làm hệ thống phức tạp hơn trước khi mang lại giá trị rõ ràng.
Định luật Parkinson
Parkinson's LawCông việc có xu hướng nở ra để chiếm trọn khoảng thời gian được cấp cho nó.
Quy tắc 90-90
The Ninety-Ninety RuleNhững phần cuối cùng của dự án thường ngốn thời gian nhiều hơn tưởng tượng và phá vỡ kế hoạch ban đầu.
Định luật Hofstadter
Hofstadter's LawMọi việc thường mất lâu hơn dự tính, kể cả khi bạn đã nhớ rằng nó thường mất lâu hơn dự tính.
Định luật Goodhart
Goodhart's LawKhi một chỉ số trở thành mục tiêu, con người sẽ tối ưu theo chỉ số đó thay vì theo giá trị thật.
Định luật Gilb
Gilb's LawNgay cả khi chưa đo hoàn hảo, việc đo một cách hữu ích vẫn tốt hơn là hoàn toàn không đo.
Chất lượng
11 mục trong nhóm chất lượng
Quality
Quy tắc Hướng đạo sinh
The Boy Scout RuleMỗi lần chạm vào code, hãy để nó sạch hơn, rõ hơn hoặc an toàn hơn một chút so với trước đó.
Định luật Murphy
Murphy's Law / Sod's LawNếu có cách để sự cố xảy ra, hãy giả định nó sẽ xảy ra và chuẩn bị cho trường hợp đó.
Định luật Postel
Postel's LawKhi phát dữ liệu hãy chặt chẽ, khi nhận dữ liệu hãy chịu lỗi hợp lý để tăng khả năng tương thích.
Thuyết Cửa sổ vỡ
Broken Windows TheoryNhững chỗ xấu nhỏ bị bỏ mặc trong codebase thường kéo theo thêm nhiều chỗ xấu và tiêu chuẩn thấp hơn.
Nợ kỹ thuật
Technical DebtMọi quyết định làm nhanh hôm nay nhưng làm chậm việc thay đổi ngày mai đều đang tạo thêm nợ kỹ thuật.
Định luật Linus
Linus's LawKhi đủ nhiều người xem xét đúng chỗ, lỗi khó cũng dễ bị phát hiện hơn.
Định luật Kernighan
Kernighan's LawCode càng khôn lỏi và khó hiểu, việc debug nó sau này càng tốn sức gấp nhiều lần.
Kim tự tháp kiểm thử
Testing PyramidHệ kiểm thử bền vững thường có nhiều test nhanh ở lớp thấp và ít test giao diện chậm ở lớp cao.
Nghịch lý thuốc trừ sâu
Pesticide ParadoxChạy mãi cùng một bộ test sẽ dần kém hiệu quả vì lỗi mới tìm cách lẩn qua các mẫu cũ.
Các định luật tiến hóa phần mềm của Lehman
Lehman's Laws of Software EvolutionPhần mềm gắn với thế giới thực phải tiếp tục thay đổi; nếu không, nó sẽ dần mất giá trị và khó bảo trì.
Định luật Sturgeon
Sturgeon's LawPhần lớn sản phẩm và ý tưởng ngoài kia chỉ ở mức trung bình hoặc tệ, nên đừng lấy số đông làm chuẩn chất lượng.
Mở rộng hệ thống
3 mục trong nhóm mở rộng hệ thống
Scale
Định luật Amdahl
Amdahl's LawTốc độ tăng nhờ song song hóa bị giới hạn bởi phần việc vẫn bắt buộc phải chạy tuần tự.
Định luật Gustafson
Gustafson's LawKhi bài toán đủ lớn, thêm tài nguyên song song vẫn có thể mang lại lợi ích đáng kể.
Định luật Metcalfe
Metcalfe's LawGiá trị của mạng lưới thường tăng rất nhanh khi số người hoặc điểm kết nối tăng lên.
Thiết kế
6 mục trong nhóm thiết kế
Design
YAGNI
YAGNI (You Aren't Gonna Need It)Đừng thêm tính năng, abstraction hay cấu hình khi nhu cầu thực tế vẫn chưa xuất hiện.
DRY
DRY (Don't Repeat Yourself)Mỗi mẩu tri thức quan trọng nên có một nơi thể hiện đáng tin cậy thay vì bị sao chép rải rác.
KISS
KISS (Keep It Simple, Stupid)Thiết kế càng đơn giản và dễ hiểu thì càng dễ thay đổi, kiểm thử và vận hành lâu dài.
Các nguyên lý SOLID
SOLID PrinciplesĐây là bộ nguyên tắc giúp code dễ mở rộng, dễ thay đổi và giảm phụ thuộc chặt giữa các thành phần.
Định luật Demeter
Law of DemeterMột đối tượng nên nói chuyện với các thành phần gần nó, không nên luồn sâu qua nhiều tầng để lấy dữ liệu.
Nguyên lý Ít gây ngạc nhiên nhất
Principle of Least AstonishmentAPI và giao diện nên cư xử theo cách người dùng hoặc đồng đội dễ đoán nhất.
Ra quyết định
12 mục trong nhóm ra quyết định
Decisions
Hiệu ứng Dunning-Kruger
Dunning-Kruger EffectNgười biết ít về một chủ đề thường dễ tự tin quá mức vì chưa thấy hết độ khó thật sự.
Dao cạo Hanlon
Hanlon's RazorĐừng vội quy mọi lỗi thành ác ý khi thiếu hiểu biết, sơ suất hoặc hệ thống tồi cũng có thể giải thích được.
Dao cạo Occam
Occam's RazorKhi nhiều giả thuyết cùng giải thích được vấn đề, hãy ưu tiên phương án đơn giản nhất trước.
Ngụy biện chi phí chìm
Sunk Cost FallacyThời gian hay tiền đã bỏ ra trong quá khứ không nên ép bạn tiếp tục một hướng đi đang sai.
Bản đồ không phải lãnh thổ
The Map Is Not the TerritoryMô hình, dashboard, sơ đồ hay tài liệu chỉ là đại diện cho thực tế, không phải chính thực tế.
Thiên kiến xác nhận
Confirmation BiasCon người có xu hướng chọn dữ kiện ủng hộ niềm tin sẵn có và bỏ qua tín hiệu trái chiều.
Chu kỳ Hype và định luật Amara
The Hype Cycle & Amara's LawTa thường kỳ vọng quá cao vào tác động ngắn hạn của công nghệ mới nhưng lại đánh giá thấp ảnh hưởng dài hạn.
Hiệu ứng Lindy
The Lindy EffectThứ gì tồn tại hữu ích lâu trong thời gian dài thường có xác suất tiếp tục tồn tại thêm nữa.
Tư duy nguyên lý gốc
First Principles ThinkingHãy bóc vấn đề về các giả định nền tảng nhất rồi xây lại lời giải từ các sự thật cơ bản đó.
Tư duy đảo ngược
InversionThay vì chỉ hỏi làm sao để thành công, hãy hỏi điều gì chắc chắn dẫn tới thất bại rồi tránh nó.
Nguyên lý Pareto
Pareto Principle (80/20 Rule)Một phần nhỏ nguyên nhân thường tạo ra phần lớn kết quả, nên cần ưu tiên đúng điểm đòn bẩy.
Định luật Cunningham
Cunningham's LawTrên Internet, câu trả lời đúng thường xuất hiện nhanh hơn khi ai đó nhìn thấy một câu trả lời sai.