Làm sạch mã dễ đọc vs nhanh khó đọc mã. Khi nào vượt qua ranh giới?


67

Khi tôi viết mã, tôi luôn cố gắng làm cho mã của mình sạch và dễ đọc nhất có thể.

Thỉnh thoảng sẽ có lúc bạn cần vượt qua ranh giới và chuyển từ mã sạch đẹp sang mã hơi xấu hơn để làm cho nó nhanh hơn.

Khi nào thì vượt qua dòng đó?


69
Bạn đã trả lời câu hỏi của riêng mình, bạn vượt qua ranh giới khi bạn cần vượt qua ranh giới
gnibbler

6
Ngoài ra, "mã bẩn" của bạn có thể hoạt động nhanh như "mã sạch" trên phần cứng 6 tháng kể từ bây giờ. Đừng quá nhiệt tình như Windows đã làm, mặc dù. :)
Mateen Ulhaq

21
Có một sự khác biệt đáng kể giữa một thuật toán khó hiểu và mã khó hiểu. Đôi khi thuật toán bạn cần thực hiện rất phức tạp và mã sẽ nhất thiết phải gây nhầm lẫn, đơn giản vì nó thể hiện một ý tưởng phức tạp. Nhưng nếu bản thân mã là điểm khó, thì mã phải được sửa.
tylerl

8
Trong rất nhiều trường hợp, trình biên dịch / trình thông dịch thông minh có thể tối ưu hóa mã sạch, dễ đọc để nó có hiệu suất tương tự như mã "xấu xí". Vì vậy, có rất ít lý do, trừ khi hồ sơ nói khác.
Dan Diplo

1
Khi nói đến trình biên dịch ngày nay, mã xấu xí của bạn rất có thể sẽ giống như mã sạch của bạn (giả sử bạn không làm bất kỳ thứ gì thực sự kỳ lạ). Đặc biệt là trong .NET, nó không giống như C ++ / MFC ngày mà cách bạn xác định các biến của mình sẽ có tác động đến hiệu suất. Viết mã duy trì. một số mã sẽ trở nên phức tạp nhưng điều đó không có nghĩa là nó xấu.
DustinDavis

Câu trả lời:


118

Bạn băng qua đường khi

  • Bạn đã đo lường rằng mã của bạn quá chậm so với mục đích sử dụng của nó .
  • Bạn đã thử các cải tiến thay thế mà không yêu cầu mã hóa.

Đây là một ví dụ thực tế: một hệ thống thử nghiệm tôi đang chạy đang tạo ra dữ liệu quá chậm, mất hơn 9 giờ mỗi lần chạy và chỉ sử dụng 40% CPU. Thay vì làm rối mã quá nhiều, tôi đã chuyển tất cả các tệp tạm thời sang một hệ thống tệp trong bộ nhớ. Đã thêm 8 dòng mã không xấu mới và hiện tại mức sử dụng CPU là trên 98%. Vấn đề được giải quyết; không có sự xấu xí cần thiết


2
Bạn cũng đảm bảo rằng bạn giữ mã gốc, chậm hơn, sạch hơn, cả dưới dạng triển khai tham chiếu và để quay lại khi phần cứng thay đổi và mã hackier nhanh hơn của bạn không còn hoạt động.
Paul R

4
@PaulR Làm thế nào để bạn giữ mã đó? Theo hình thức bình luận? Điều đó là sai, imo - các bình luận trở nên lỗi thời, không ai đọc chúng và cá nhân nếu tôi thấy mã nhận xét tôi thường loại bỏ nó - đây là những gì kiểm soát nguồn dành cho. Một nhận xét về một phương pháp giải thích những gì nó làm là tốt hơn, imo.
Evgeni

5
@Eugene: Tôi thường giữ phiên bản gốc của một thói quen được đặt tên foovà đổi tên nó foo_ref- thông thường nó tồn tại ngay trên footệp nguồn. Trong khai thác thử nghiệm của tôi, tôi gọi foofoo_refđể xác nhận và đo lường hiệu suất tương đối.
Paul R

5
@Paul nếu bạn đang làm điều đó có thể là một ý tưởng tốt để thất bại bài kiểm tra nếu phiên bản tối ưu hóa chậm hơn chức năng ref. điều này có thể xảy ra nếu các giả định bạn đưa ra để làm cho nó đi nhanh hơn không còn đúng nữa.
dùng1852503

58

Đó là một sự phân đôi giả. Bạn có thể tạo mã nhanh dễ bảo trì.

Cách bạn làm là viết nó sạch sẽ, đặc biệt là với cấu trúc dữ liệu càng đơn giản càng tốt.

Sau đó, bạn tìm ra nơi thoát thời gian (bằng cách chạy nó, sau khi bạn đã viết nó chứ không phải trước đó) và sửa từng cái một. (Đây là một ví dụ.)

Đã thêm: Chúng ta luôn nghe về sự đánh đổi, phải không, chẳng hạn như sự đánh đổi giữa thời gian và ký ức, hay sự đánh đổi giữa tốc độ và khả năng bảo trì? Mặc dù các đường cong như vậy có thể tồn tại tốt, không nên giả định rằng bất kỳ chương trình đã cho nào nằm trên đường cong hoặc thậm chí bất kỳ nơi nào gần nó.

Bất kỳ chương trình nào trên đường cong đều có thể dễ dàng (bằng cách đưa nó cho một loại lập trình viên nhất định) được thực hiện chậm hơn nhiều, và ít bảo trì hơn, và sau đó nó sẽ không ở đâu gần đường cong. Một chương trình như vậy sau đó có rất nhiều phòng để được thực hiện nhanh hơn và dễ bảo trì hơn.

Theo kinh nghiệm của tôi, đó là nơi nhiều chương trình bắt đầu.


Tôi đồng ý. Thật vậy, mã nhanh mà không sạch sẽ trở nên chậm hơn vì bạn không thể sửa đổi nó một cách chính xác.
edA-qa mort-ora-y

22
Tôi không đồng ý đó là một sự phân đôi giả; IMO có các kịch bản đặc biệt là mã thư viện (không quá nhiều trong mã ứng dụng ) trong đó sự phân chia là rất thực. Xem câu trả lời của tôi để biết thêm.
Marc Gravell

1
Marc, bạn có thể liên kết đến câu trả lời trong các bình luận với URL "liên kết". lập trình

Chúng tôi đã tìm thấy tất cả thời gian mà chúng tôi cần phải cố gắng và làm cho mã đi nhanh hơn. Nhưng sau khi thử nghiệm với trình lược tả để tìm ra giải pháp tốt nhất (mã bị xấu đi) điều này không có nghĩa là mã cần phải xấu. Đó là một vấn đề tìm kiếm giải pháp tốt nhất mà ban đầu có vẻ không rõ ràng nhưng một khi tìm thấy thường có thể được mã hóa sạch sẽ. Vì vậy, tôi tin rằng đó là một sự phân đôi giả và chỉ là một cái cớ để không dọn dẹp phòng của bạn sau khi bạn đã có niềm vui với đồ chơi của bạn. Tôi nói hút nó lên và dọn dẹp phòng của bạn.
Martin York

Tôi không đồng ý rằng đó là một sự phân đôi giả. Bởi vì tôi làm rất nhiều công việc đồ họa, ví dụ rõ ràng nhất đối với tôi là trong các vòng lặp đồ họa chặt chẽ: Tôi không biết việc này vẫn được thực hiện thường xuyên như thế nào, nhưng nó thường được sử dụng cho các công cụ trò chơi được viết bằng C để sử dụng hội để kết xuất lõi các vòng lặp để vắt kiệt từng giọt tốc độ cuối cùng. Điều đó cũng khiến tôi nghĩ đến các tình huống khi bạn lập trình bằng Python nhưng sử dụng các mô-đun được viết bằng C ++. "Khó đọc" luôn tương đối; bất cứ khi nào bạn giảm xuống một ngôn ngữ cấp thấp hơn về tốc độ, mã đó khó đọc hơn các ngôn ngữ còn lại.
jhocking

31

Trong sự tồn tại OSS của tôi, tôi thực hiện rất nhiều công việc thư viện nhằm mục đích thực hiện, nó gắn chặt với cấu trúc dữ liệu của người gọi (tức là bên ngoài thư viện), với (theo thiết kế) không bắt buộc đối với các loại đến. Ở đây, cách tốt nhất để làm cho trình diễn này là lập trình meta, mà (vì tôi ở .NET-đất) có nghĩa là IL-emit. Đó là một số mã xấu xí, xấu xí, nhưng rất nhanh.

Theo cách này, tôi vui vẻ chấp nhận mã thư viện có thể "xấu" hơn mã ứng dụng , đơn giản là vì nó có ít quyền kiểm soát (hoặc có thể không) đối với các yếu tố đầu vào , do đó cần phải đạt được một số nhiệm vụ thông qua các cơ chế khác nhau. Hoặc như tôi đã bày tỏ vào một ngày khác:

"mã hóa trên vách đá điên rồ, vì vậy bạn không cần phải "

Bây giờ mã ứng dụng hơi khác một chút, vì đó là nơi các nhà phát triển "thông thường" (lành mạnh) thường đầu tư nhiều thời gian hợp tác / chuyên nghiệp của họ; mục tiêu và kỳ vọng của mỗi người là (IMO) hơi khác nhau.

IMO, các câu trả lời ở trên cho thấy nó có thể nhanh chóng dễ bảo trì đang đề cập đến mã ứng dụng nơi nhà phát triển có quyền kiểm soát nhiều hơn đối với các cấu trúc dữ liệu và không sử dụng các công cụ như lập trình meta. Điều đó nói rằng, có nhiều cách khác nhau để lập trình meta, với mức độ điên rồ khác nhau và mức độ chi phí khác nhau. Ngay cả trong lĩnh vực đó, bạn cần chọn mức độ trừu tượng thích hợp. Nhưng khi bạn chủ động, tích cực, thực sự muốn nó xử lý dữ liệu bất ngờ theo cách nhanh nhất tuyệt đối; nó cũng có thể trở nên xấu xí Đối phó với nó; p


4
Chỉ vì mã xấu, không có nghĩa là nó không thể nhận ra được. Nhận xét và thụt lề là miễn phí và mã xấu thường có thể được gói gọn trong một thực thể có thể quản lý (lớp, mô-đun, gói, chức năng, tùy thuộc vào ngôn ngữ). Mã có thể xấu như nhau, nhưng sau đó ít nhất mọi người sẽ có thể đánh giá tác động của những thay đổi mà họ sắp thực hiện đối với nó.
tdammers

6
@tdammers thực sự, và tôi cố gắng làm như vậy càng nhiều càng tốt; nhưng nó hơi giống với việc đặt son môi lên heo.
Marc Gravell

1
Chà, có lẽ người ta nên phân biệt giữa cú pháp xấu và thuật toán xấu - thuật toán xấu đôi khi là cần thiết, nhưng cú pháp xấu thường là IMO không thể giải thích được.
tdammers

4
Cú pháp xấu xí @IMO là điều không thể tránh khỏi nếu những gì bạn đang làm là do bản chất của một số mức độ trừu tượng bên dưới cấp độ ngôn ngữ thông thường.
Marc Gravell

1
@marc ... thật thú vị. Phản ứng đầu tiên của tôi về meta / trừu tượng là xấu xí là sự nghi ngờ về ngôn ngữ / dạng tấm cụ thể không có lợi cho mã hóa meta hơn là một số luật cơ bản kết nối cả hai. Điều khiến tôi tin rằng đó là ví dụ về các kim loại tiến bộ trong toán học kết thúc bằng lý thuyết tập hợp mà biểu thức của nó khó hơn ugleir so với đại số hoặc thậm chí là cụ thể. Nhưng sau đó, ký hiệu có thể là một ngôn ngữ hoàn toàn khác và mọi cấp độ trừu tượng bên dưới đều có ngôn ngữ riêng ....
khám phá

26

Khi bạn đã lược tả mã và xác minh rằng nó thực sự gây ra sự chậm chạp đáng kể.


3
Và "đáng kể" là gì?
Rook

2
@ hotpaw2: đó là câu trả lời thông minh - nó giả định rằng các nhà phát triển ít nhất là một đối thủ cạnh tranh. Mặt khác, có, sử dụng một cái gì đó nhanh hơn sắp xếp bong bóng (thường) là một ý tưởng tốt. Nhưng quá thường xuyên, một người nào đó sẽ (để tiếp tục sắp xếp) trao đổi quicksort lấy heapsort để chênh lệch 1%, chỉ để thấy người khác trao đổi lại sáu tháng sau đó vì lý do tương tự.

1
Không bao giờ có một lý do để làm cho mã không sạch. Nếu bạn không thể làm cho mã hiệu quả của mình sạch sẽ và dễ bảo trì, bạn đã làm sai điều gì đó.
edA-qa mort-ora-y

2
@SF. - khách hàng sẽ luôn thấy nó quá chậm, nếu nó có thể nhanh hơn. Anh ta không quan tâm đến "sạch" của mã.
Rook

1
@Rook: Khách hàng có thể thấy mã giao diện (tầm thường) quá chậm. Một số thủ thuật tâm lý khá đơn giản cải thiện trải nghiệm người dùng mà không thực sự tăng tốc mã - các sự kiện nút trì hoãn thành thói quen nền thay vì thực hiện các hành động nhanh chóng, hiển thị thanh tiến trình hoặc một cái gì đó tương tự, hỏi một số câu hỏi không đáng kể trong khi hoạt động được thực hiện ở chế độ nền ... đó là khi những điều này không đủ, bạn có thể xem xét tối ưu hóa thực tế.
SF.

13

Mã sạch không nhất thiết là độc quyền với mã thực thi nhanh. Thông thường mã khó đọc được viết vì nó viết nhanh hơn, không phải vì nó thực thi nhanh hơn.

Viết mã "bẩn" trong một nỗ lực để làm cho nó nhanh hơn được cho là không khôn ngoan, vì bạn không biết chắc chắn rằng những thay đổi của bạn thực sự cải thiện bất cứ điều gì. Knuth đặt nó tốt nhất:

"Chúng ta nên quên đi những hiệu quả nhỏ, nói về 97% thời gian: tối ưu hóa sớm là gốc rễ của mọi tội lỗi . Tuy nhiên, chúng ta không nên bỏ qua cơ hội của mình trong 3% quan trọng đó. Một lập trình viên giỏi sẽ không bị ruồng bỏ bởi sự tự mãn như vậy Lý do, anh ta sẽ khôn ngoan khi xem xét kỹ mã quan trọng; nhưng chỉ sau khi mã đó được xác định . "

Nói cách khác, viết mã sạch trước. Sau đó, lập hồ sơ chương trình kết quả và xem liệu phân đoạn đó trên thực tế có phải là nút cổ chai hiệu năng không. Nếu vậy, hãy tối ưu hóa phần này khi cần thiết và đảm bảo bao gồm nhiều ý kiến ​​tài liệu (có thể bao gồm cả mã gốc) để giải thích các tối ưu hóa. Sau đó hồ sơ kết quả để xác minh rằng bạn thực sự đã thực hiện một cải tiến.


10

Vì câu hỏi nói "nhanh khó đọc mã", nên câu trả lời đơn giản là không bao giờ. Không bao giờ có một lý do để viết mã khó đọc. Tại sao? Hai lý do.

  1. Điều gì xảy ra nếu bạn bị xe buýt đâm trên đường về nhà tối nay? Hoặc (lạc quan hơn, và điển hình hơn) đã gỡ bỏ dự án này và gán lại cho thứ khác? Lợi ích nhỏ mà bạn tưởng tượng bạn đã tạo ra với mớ hỗn độn mã của bạn hoàn toàn vượt trội bởi thực tế là không ai khác có thể hiểu được . Rủi ro này đặt ra cho các dự án phần mềm là quá khó để nói quá. Tôi đã làm việc một lần với một tổng đài lớnnhà sản xuất (nếu bạn làm việc trong văn phòng, bạn có thể có một trong những điện thoại của họ trên bàn của bạn). Một ngày nọ, người quản lý dự án của họ nói với tôi rằng sản phẩm cốt lõi của họ - phần mềm độc quyền đã biến một hộp Linux tiêu chuẩn thành một tổng đài điện thoại đầy đủ tính năng - được biết đến trong công ty là "blob". Không ai hiểu nó nữa. Mỗi khi họ thực hiện một tính năng mới. họ đã nhấn compile rồi đứng lại, nhắm mắt lại, đếm đến hai mươi, rồi liếc qua ngón tay để xem nó có hoạt động không. Không có doanh nghiệp cần một sản phẩm cốt lõi mà họ không còn kiểm soát, nhưng đó là một kịch bản phổ biến đáng sợ.
  2. Nhưng tôi cần tối ưu hóa! OK, vì vậy bạn đã làm theo tất cả các lời khuyên tuyệt vời trong các câu trả lời khác cho câu hỏi này: mã của bạn đang thất bại trong các trường hợp kiểm tra hiệu năng của nó, bạn đã tìm hiểu kỹ về nó, xác định các tắc nghẽn, đưa ra giải pháp ... và nó sẽ liên quan đến một số twiddling . Tốt: bây giờ đi trước và tối ưu hóa. Nhưng đây là bí mật (và bạn có thể muốn ngồi xuống cho vấn đề này): tối ưu hóa và giảm kích thước mã nguồn không giống nhau. Nhận xét, khoảng trắng, dấu ngoặc và tên biến có ý nghĩa đều là những trợ giúp rất lớn cho khả năng đọc mà bạn hoàn toàn không mất gì vì trình biên dịch sẽ ném chúng đi. (Hoặc nếu bạn đang viết một ngôn ngữ không được biên dịch như JavaScript - và vâng, có những lý do rất hợp lệ để tối ưu hóa JavaScript - chúng có thể được xử lý bằng máy nén .) Các dòng mã dài, chật chội được đăng ở đây ) không liên quan gì đến tối ưu hóa: đó là một lập trình viên đang cố gắng thể hiện mức độ thông minh của họ bằng cách đóng gói càng nhiều mã vào càng ít ký tự càng tốt. Điều đó không thông minh, thật ngu ngốc. Một lập trình viên thực sự thông minh là một người có thể truyền đạt ý tưởng của họ rõ ràng cho người khác.

2
Tôi không thể đồng ý rằng câu trả lời là "không bao giờ". Một số thuật toán vốn đã rất khó hiểu và / hoặc để thực hiện hiệu quả. Đọc mã, bất kể số lượng ý kiến, có thể là một quá trình rất khó khăn.
Rex Kerr

4

Khi đó là mã vứt đi. Ý tôi là theo nghĩa đen: khi bạn viết một kịch bản để thực hiện phép tính hoặc tác vụ một lần và biết chắc chắn như vậy, bạn sẽ không bao giờ phải thực hiện lại hành động đó mà bạn có thể 'rm nguồn-tệp' mà không do dự, sau đó bạn có thể chọn con đường xấu xí.

Mặt khác, đó là một sự phân đôi giả - nếu bạn nghĩ rằng bạn cần làm cho nó xấu đi để làm nó nhanh hơn, thì bạn đã làm sai. (Hoặc nguyên tắc của bạn về những gì mã tốt cần sửa đổi. Sử dụng goto trên thực tế khá thanh lịch khi đó là giải pháp phù hợp cho vấn đề. Tuy nhiên, điều này hiếm khi xảy ra.)


5
Không có thứ gọi là mã vứt đi. Nếu tôi có một xu cho mỗi lần "mã vứt đi" được đưa vào sản xuất vì "nó hoạt động, chúng tôi không có thời gian để viết lại", tôi sẽ là một triệu phú. Mỗi dòng mã bạn viết nên được viết để một lập trình viên có năng lực khác có thể nhận nó vào ngày mai sau khi bạn bị sét đánh vào tối nay. Nếu không đừng viết nó.
Mark Whitaker

Tôi không đồng ý đó là một sự phân đôi giả; IMO có các kịch bản đặc biệt là mã thư viện (không quá nhiều trong mã ứng dụng) trong đó sự phân chia là rất thực. Xem câu trả lời của tôi để biết thêm.
Marc Gravell

@mark, nếu "lập trình viên có thẩm quyền khác" thực sự có năng lực, thì mã vứt đi cũng không phải là vấn đề :)

@Mark - Dễ dàng. Chỉ cần viết mã vứt đi để nó sẽ thất bại trong bất kỳ thử nghiệm sản xuất nào, có thể theo một cách không thể trộn lẫn nào đó.
hotpaw2

@Mark, nếu mã vứt bỏ của bạn, thì hãy đưa nó vào sản xuất, thì đó không phải là mã vứt đi. Lưu ý rằng tôi đã dành thời gian trong câu trả lời của mình để làm rõ rằng tôi đang nói về mã có nghĩa đen là vứt đi: tức là xóa sau lần sử dụng đầu tiên. Nếu không, tôi đồng ý với tình cảm của bạn và nói nhiều như vậy trong câu trả lời của tôi.
maaku

3

Bất cứ khi nào chi phí ước tính của hiệu suất thấp hơn trên thị trường lớn hơn chi phí bảo trì mã ước tính cho mô-đun mã được đề cập.

Mọi người vẫn làm SSE / NEON / vân vân xoắn. lắp ráp để thử và đánh bại một số phần mềm của đối thủ cạnh tranh trên chip CPU phổ biến năm nay.


Một quan điểm kinh doanh tốt, đôi khi các lập trình viên cần nhìn xa hơn các kỹ thuật đơn thuần.
this.josh

3

Đừng quên bạn có thể làm cho mã khó đọc trở nên dễ hiểu bằng tài liệu và nhận xét thích hợp.

Nói chung, hồ sơ sau khi bạn đã viết mã dễ đọc thực hiện chức năng mong muốn. Nút cổ chai có thể yêu cầu bạn làm điều gì đó khiến nó trông phức tạp hơn, nhưng bạn khắc phục điều đó bằng cách giải thích chính mình.


0

Đối với tôi đó là một tỷ lệ ổn định (như trong xi măng trong bê tông, đất sét nung trong lò, đặt trong đá, viết bằng mực vĩnh viễn). Mã của bạn càng không ổn định, vì càng có xác suất cao bạn sẽ cần thay đổi nó trong tương lai, thì nó càng dễ dàng trở nên dễ dàng hơn, như đất sét ướt, để duy trì hiệu quả. Tôi cũng nhấn mạnh đến tính dễ đọc và không dễ đọc. Đối với tôi sự dễ dàng thay đổi mã quan trọng hơn sự dễ đọc của nó. Mã có thể dễ đọc và là cơn ác mộng để thay đổi, và cách sử dụng nào có thể đọc và dễ dàng hiểu chi tiết thực hiện nếu chúng là cơn ác mộng để thay đổi? Trừ khi nó chỉ là một bài tập học thuật, điển hình là việc có thể dễ dàng hiểu được mã trong một cơ sở mã sản xuất với mục đích có thể dễ dàng thay đổi nó hơn khi cần. Nếu khó thay đổi, sau đó rất nhiều lợi ích của khả năng đọc đi ra ngoài cửa sổ. Khả năng đọc nói chung chỉ hữu ích trong bối cảnh của tính dễ uốn, và tính dễ uốn chỉ hữu ích trong bối cảnh không ổn định.

Đương nhiên, ngay cả những mã khó bảo trì nhất có thể tưởng tượng được, bất kể nó dễ đọc hay khó, không gây ra vấn đề gì nếu không bao giờ có lý do để thay đổi mã, chỉ sử dụng nó. Và có thể đạt được chất lượng như vậy, đặc biệt đối với mã hệ thống cấp thấp, nơi hiệu suất thường có xu hướng được tính nhiều nhất. Tôi có mã C tôi vẫn sử dụng thường xuyên đã không thay đổi kể từ cuối những năm 80. Nó không cần phải thay đổi kể từ đó. Các mã được đào tẩu, được viết trong những ngày khó khăn, và tôi hầu như không hiểu nó. Tuy nhiên, ngày nay nó vẫn được áp dụng và tôi không cần phải hiểu cách triển khai của nó để có được nhiều công dụng từ nó.

Kiểm tra kỹ lưỡng bằng văn bản là một cách để cải thiện sự ổn định. Một cái khác là tách rời. Nếu mã của bạn không phụ thuộc vào bất cứ điều gì khác, thì lý do duy nhất để nó thay đổi là nếu chính nó, cần phải thay đổi. Đôi khi, một số lượng nhỏ mã sao chép có thể đóng vai trò là cơ chế tách rời để cải thiện đáng kể tính ổn định theo cách làm cho nó trở thành một sự đánh đổi xứng đáng nếu đổi lại, bạn có được mã hoàn toàn độc lập với bất kỳ thứ gì khác. Bây giờ mã đó là bất khả xâm phạm để thay đổi với thế giới bên ngoài. Trong khi đó, mã phụ thuộc vào 10 thư viện bên ngoài khác nhau có 10 lần lý do để nó thay đổi trong tương lai.

Một điều hữu ích khác trong thực tế là tách thư viện của bạn khỏi các phần không ổn định của cơ sở mã của bạn, thậm chí có thể xây dựng nó một cách riêng biệt, như bạn có thể làm cho các thư viện bên thứ ba (tương tự như vậy chỉ được sử dụng, không thay đổi, ít nhất là không phải bởi đội). Chỉ loại hình tổ chức đó có thể ngăn chặn mọi người can thiệp vào nó.

Khác là chủ nghĩa tối giản. Mã của bạn càng ít cố gắng làm, càng có nhiều khả năng nó có thể làm những gì nó làm tốt. Các thiết kế nguyên khối gần như không ổn định vĩnh viễn, vì càng nhiều chức năng được thêm vào chúng, chúng dường như càng không hoàn thiện.

Tính ổn định phải là mục tiêu chính của bạn bất cứ khi nào bạn đặt mục tiêu viết mã chắc chắn sẽ khó thay đổi, như mã SIMD song song đã được điều chỉnh vi mô đến chết. Bạn chống lại khó khăn trong việc duy trì mã bằng cách tối đa hóa khả năng bạn sẽ không phải thay đổi mã, và do đó sẽ không phải duy trì mã trong tương lai. Điều đó làm giảm chi phí bảo trì xuống 0 cho dù mã có khó bảo trì đến đâu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.