Tại sao chú Bob đề nghị rằng các tiêu chuẩn mã hóa không nên được viết ra nếu bạn có thể tránh nó?
Nếu bạn đang hỏi lý do đằng sau ý kiến của anh ấy thì bạn chỉ có thể có câu trả lời nếu anh ấy sẽ đăng câu trả lời ở đây ( ý kiến của chúng tôi chỉ là không liên quan), tuy nhiên ...
Tại sao tôi không nên viết ra một Tiêu chuẩn mã hóa?
Nếu bạn hỏi liệu anh ấy có đúng về điều đó không: hãy để tôi là người duy nhất không phổ biến (cho đến nay) nói rằng bạn không có lý do gì để tránh điều đó.
VIẾT NÓ XUỐNG . Tuy nhiên tôi sẽ cố gắng giải thích lý do của mình ...
David đề nghị trong một bình luận rằng điểm chính của câu trả lời của Stephen không phải là lý do tại sao bạn không nên viết tài liệu mà ở dạng chúng. Nếu hướng dẫn được chính thức hóa trong các công cụ (không chỉ đơn thuần là xem xét mã thủ công) thì tôi có thể đồng ý (khi luật pháp không yêu cầu điều gì khác). Xin lưu ý rằng các công cụ không may không thể kiểm tra tất cả mọi thứ (lý thuyết tính toán không phải là bạn của chúng tôi) vì chúng bị giới hạn trong một đơn vị hoặc gói dịch cụ thể hoặc bất kỳ ngôn ngữ yêu thích nào của bạn gọi là ranh giới .
Tuy nhiên, cách diễn đạt của chú Bob không khiến tôi nghĩ rằng ông đang nói về điều đó.
Tôi có thể không đồng ý với chuyên gia cao cấp như vậy? Tôi làm, cho hầu hết mọi điểm trong bài viết được trích dẫn (xem thêm phần thứ hai của câu trả lời này để biết chi tiết). Chúng ta hãy cố gắng hiểu lý do tại sao (giả sử bạn đã biết rằng các nguyên tắc mã hóa không chỉ là về các vấn đề định dạng nhỏ ).
- Trong một số trường hợp, các tiêu chuẩn mã hóa được yêu cầu bởi luật pháp.
- Tôi đã đọc tài liệu và tôi chắc chắn rằng tôi không cô đơn. Các thành viên trong nhóm có thể thay đổi theo thời gian, kiến thức không thể có trong một cơ sở mã 5-10 năm tuổi hoặc trong tâm trí của các thành viên trong nhóm. Các tổ chức nên sa thải những người không tuân theo các hướng dẫn nội bộ.
- Các tiêu chuẩn mã hóa, một khi chúng đã được phê duyệt , sẽ không thay đổi thường xuyên và nếu chúng muốn biết về nó. Nếu các tiêu chuẩn thay đổi thì tài liệu của bạn (trong mã) đã hết hạn vì tất cả mã của bạn không tuân theo tiêu chuẩn mới. Định dạng lại / tái cấu trúc có thể chậm nhưng bạn luôn có một hướng dẫn có thẩm quyền bằng văn bản để tuân theo.
- Tốt hơn là đọc một tài liệu 5 trang hơn là kiểm tra 10 / 20K LỘC để ngoại suy một quy tắc (mà bạn có thể hiểu sai, BTW), không nghi ngờ gì về điều đó.
- Thật trớ trêu khi ai đó đã viết nhiều cuốn sách về các nguyên tắc thiết kế và phong cách mã hóa đang gợi ý rằng bạn không nên viết hướng dẫn của riêng mình, sẽ không tốt hơn nếu anh ta bỏ rơi chúng tôi với một số ví dụ về mã? Không, bởi vì các hướng dẫn bằng văn bản không chỉ cho bạn biết phải làm gì mà còn hai điều khác mà mã thiếu: không nên làm gì và lý do để làm điều đó hay không.
"Lập trình tự tổ chức miễn phí" tốt cho một chàng trai 16 tuổi ninja nhưng các tổ chức có các yêu cầu khác :
- Chất lượng mã phải được cấp (và được xác định) ở cấp công ty - đó không phải là điều mà một nhóm duy nhất có thể quyết định. Họ thậm chí có thể không có kỹ năng để quyết định điều gì tốt hơn (ví dụ, có bao nhiêu nhà phát triển có tất cả các kỹ năng cần thiết để xem xét MISRA hoặc thậm chí chỉ hiểu mỗi quy tắc?)
- Các thành viên có thể được di chuyển qua các nhóm khác nhau: nếu mọi người tuân theo cùng một tiêu chuẩn mã hóa thì việc tích hợp diễn ra suôn sẻ và ít xảy ra lỗi hơn.
- Nếu một nhóm tự tổ chức thì các tiêu chuẩn sẽ phát triển theo thời gian khi các thành viên trong nhóm thay đổi - khi đó bạn sẽ có một cơ sở mã lớn không tuân theo các tiêu chuẩn được chấp nhận hiện tại .
Nếu bạn đang nghĩ về mọi người trước khi xử lý thì tôi chỉ có thể đề nghị đọc về TPS: con người là một phần trung tâm của Lean nhưng các thủ tục được chính thức hóa cao.
Tất nhiên một tổ chức nhỏ chỉ có một nhóm có thể để nhóm quyết định các tiêu chuẩn để áp dụng nhưng sau đó nó phải được viết ra. Ở đây trên Lập trình viên. Bạn có thể đọc các bài đăng của Eric Lippert: Tôi cho rằng tất cả chúng ta đều đồng ý rằng anh ta là một nhà phát triển có kinh nghiệm, khi làm việc cho Microsoft, anh ta phải tuân thủ các nguyên tắc bằng văn bản của họ (ngay cả khi một số quy tắc có thể sai , không áp dụng hoặc vô dụng với anh ta.) Còn Jon Skeet thì sao? Các nguyên tắc của Google khá nghiêm ngặt (và nhiều người không đồng ý với chúng) nhưng anh ta phải tuân thủ các nguyên tắc đó. Có phải là thiếu tôn trọng họ? Không, có lẽ họ đã làm việc để xác định và cải thiện các hướng dẫn như vậy, một công ty không được tạo bởi một thành viên (hoặc một nhóm) và mỗi nhóm không phải là một hòn đảo .
Ví dụ
- Bạn đã quyết định không sử dụng nhiều lớp kế thừa và các lớp lồng nhau trong C ++ vì các thành viên nhóm thực tế của bạn không hiểu rõ về nó . Sau này ai đó muốn sử dụng nhiều kế thừa phải duyệt toàn bộ LỘC 1M để xem nó đã từng được sử dụng chưa. Thật tệ vì nếu các quyết định thiết kế không được ghi nhận, bạn phải nghiên cứu toàn bộ cơ sở mã để hiểu chúng. Và thậm chí sau đó, nếu nó chưa được sử dụng, có phải vì nó trái với tiêu chuẩn mã hóa, hay nó được cho phép, nhưng không có bất kỳ tình huống nào trước đó mà nhiều sự thừa kế là phù hợp?
- Trong C #, bạn đã quá tải các phương thức để cung cấp các tham số mặc định vì cơ sở mã của bạn bắt đầu khi các tham số tùy chọn không có sẵn trong C #. Sau đó, bạn thay đổi và bạn bắt đầu sử dụng chúng (tái cấu trúc mã cũ để sử dụng chúng mỗi khi bạn phải sửa đổi các chức năng đó). Thậm chí sau đó bạn đã quyết định rằng các tham số tùy chọn là xấu và bạn bắt đầu tránh sử dụng chúng. Là gì quy tắc mã của bạn sẽ cho bạn biết? Thật tệ vì tiêu chuẩn phát triển nhưng codebase phát triển chậm hơn và nếu đó là tài liệu của bạn thì bạn sẽ gặp rắc rối.
- Jon chuyển từ đội A sang đội B. Jon phải học một tiêu chuẩn mới; Trong khi học, anh ta có thể sẽ giới thiệu các lỗi tinh vi hơn (hoặc, nếu may mắn, chỉ mất một thời gian dài để hiểu mã hiện có và làm cho mã xem lại lâu hơn).
- Đội A chuyển sang một cơ sở mã được sở hữu trước đây bởi đội B. Nó có các tiêu chuẩn mã hóa hoàn toàn khác nhau. Viết lại? Phỏng theo? Pha trộn? Tất cả đều tệ như nhau.
Chú Bob
Hãy để chúng phát triển trong vài lần lặp đầu tiên.
Đúng, cho đến khi bạn không có một tiêu chuẩn và tổ chức của bạn đã giao cho bạn nhiệm vụ xây dựng một tiêu chuẩn .
Hãy để họ là nhóm cụ thể thay vì công ty cụ thể.
Không, vì tất cả các lý do đã giải thích ở trên. Ngay cả khi bạn nghĩ để chính thức hóa định dạng mã (điều ít hữu ích nhất bạn có thể muốn chính thức hóa) tôi vẫn có ký ức về những cuộc chiến vô tận (và vô dụng) về định dạng. Tôi không muốn sống chúng nhiều lần, hãy đặt nó một lần cho tất cả.
Đừng viết chúng ra nếu bạn có thể tránh nó. Thay vào đó, hãy để mã là cách các tiêu chuẩn được nắm bắt.
Không, vì tất cả các lý do đã giải thích ở trên (tất nhiên trừ khi bạn sẽ cấu trúc lại tất cả mã của mình trong một lần khi hướng dẫn thay đổi). Bạn có muốn để lại mã như hiện tại không? Làm thế nào để bạn kiểm tra codebase để hiểu các hướng dẫn hiện tại ? Tìm kiếm theo tuổi tệp và điều chỉnh kiểu mã hóa của bạn theo tuổi tệp nguồn?
Đừng quy định thiết kế tốt. (ví dụ: đừng nói với mọi người không sử dụng goto)
Đúng, hướng dẫn phải ngắn gọn hoặc không ai sẽ đọc chúng. Đừng lặp lại điều hiển nhiên.
Hãy chắc chắn rằng mọi người đều biết rằng tiêu chuẩn là về giao tiếp, và không có gì khác.
Không chỉ, một tiêu chuẩn tốt là về chất lượng trừ khi bạn muốn có một tiêu chuẩn chỉ về các chi tiết nhỏ .
Sau vài lần lặp đầu tiên, hãy cùng nhóm quyết định.
Xem điểm đầu tiên và đừng quên rằng một tiêu chuẩn mã hóa thường là một quá trình mất nhiều năm để được phát triển và hoàn thiện: vài lần lặp lại, có thể với các nhà phát triển cơ sở? Có thật không? Bạn có muốn dựa vào trí nhớ của một thành viên cao cấp (nếu có) không?
Ba lưu ý:
- Theo tôi, nhược điểm là nghiêm trọng hơn với một số ngôn ngữ so với các ngôn ngữ khác, ví dụ như trong C ++, một tiêu chuẩn cấp công ty thậm chí còn cần thiết hơn so với Java.
- Lý do này có thể không áp dụng hoàn toàn (và lý do của chú Bob có thể ít cực đoan hơn ) nếu bạn làm việc trong một công ty rất nhỏ nơi bạn chỉ có một nhóm nhỏ.
- Bạn được tuyển dụng (theo nhóm) và bạn sẽ làm việc một mình với một dự án mới, sau đó bạn sẽ quên nó và tiếp tục. Trong trường hợp này, bạn có thể không quan tâm (nhưng chủ nhân của bạn nên ...)