2010-07-13 17 views
23

Có một cuộc tranh luận nhỏ đang diễn ra nơi tôi làm việc về hiệu quả của các nhận xét trong mã. Một trong những khách hàng tiềm năng đã hướng dẫn các nhà phát triển của mình không sử dụng nhận xét vì chúng quá "lỗi thời" và một vài nhà phát triển khác đã chỉ ra rằng họ không bao giờ sử dụng nhận xét vì họ cảm thấy tất cả những gì họ làm là làm lộn xộn mã.Khi nào là các nhận xét "quá nhiều" và khi nào chúng không đủ?

Tôi luôn chú ý đến thực tế rằng tôi nhận xét đầu mỗi tập tin bằng khối nhận xét cơ bản, nhận xét từng định nghĩa phương thức/lớp/v.v, sau đó tôi nhận xét bất kỳ vị trí nào trong mã nơi tôi nghĩ mình có thể trở lại trong 6 tháng và tự nghĩ với mình, "WTF".

Rõ ràng đây là chủ quan, nhưng tôi tò mò muốn biết nếu có ai có bất kỳ đối số hoặc kinh nghiệm thực sự tốt cho cách này hay cách khác.

+0

nơi tôi làm việc, chúng tôi được khuyên không nên sử dụng ý kiến ​​bên trong mã, trừ TODO ý kiến. Điều này giúp viết mã rõ ràng. –

+2

@Alexandre - Tôi cho rằng nó không giúp viết mã rõ ràng, nó chỉ làm cho mã không rõ ràng của người khác hoàn toàn sai ngữ pháp. Sự hiện diện hoặc thiếu ý kiến ​​không làm thay đổi mã được viết. –

+0

@ Jelel: lý do là tên hàm và cấu trúc mã nên làm cho chú thích vô dụng. –

Trả lời

22

Điều này đã được bàn đến chết.

Tôi sẽ chỉ cho bạn đến Jeff Atwood's wonderful post on the subject, chạm vào móng ngay trên đầu.

+0

A - Cảm ơn bài viết được liên kết . Đó là một đọc tốt. –

+0

@ Jelel - bạn được chào đón, Jeff tóm tắt vấn đề rất độc đáo. –

+4

Ugh. Ông làm suy yếu điểm riêng của mình với ví dụ căn bậc hai của mình; khi anh ta thay đổi nó thành kiểu "tự viết mã", anh mất thông tin rằng thuật toán là xấp xỉ Newton-Raphson. Số nhận dạng tốt và nhận xét tốt sẽ hoạt động cùng nhau. –

9

Thỉnh thoảng tôi chạy trên mã được phân vùng rất thanh lịch, có phương thức rõ ràng, tên trường và tên biến khác nhau mà mọi thứ tôi cần biết đều rõ ràng từ mã.

Trong trường hợp chung, chỉ có rất nhiều mã tuyệt vời viết mã như vậy. Phần còn lại của chúng tôi cùng nhau hợp tác với nhau.

  • Nếu bạn là một chuyên gia mã thực sự tuyệt vời, đừng bận tâm bắt nạt mã thiêng liêng của bạn với những nhận xét không cần thiết.
  • Nếu bạn hầu như không biết mình đang làm gì, hãy cẩn thận ghi lại các nỗ lực sai lầm của bạn để những người khác có thể cố gắng cứu vãn mớ hỗn độn.
  • Nếu bạn trung bình (và hầu hết chúng ta, theo định nghĩa) thì hãy để lại một số gợi ý cho chính bạn và những người khác để giúp mọi thứ dễ dàng hơn trong thời gian bảo trì, nhưng không xúc phạm trí thông minh và không gian lãng phí của bất kỳ ai thực sự rõ ràng. Lý tưởng nhất là các nhận xét của bạn nên mô tả mã của bạn ở mức meta, cho biết bạn đang làm gì nhưng tại sao. Ngoài ra làm thế nào, nếu bạn đang làm một cái gì đó bất thường hoặc khó khăn.
+6

"Đây là một trong những tính năng cần thiết của sự thiếu năng lực như vậy mà người đó bị ảnh hưởng là không có khả năng biết rằng anh ta không đủ năng lực. Có kiến ​​thức như vậy sẽ là để khắc phục một phần tốt của hành vi phạm tội. " http://gagne.homedns.org/~tgagne/contrib/unskilled.html – sarnold

+0

Kruger-Dunning! Tôi đang tìm kiếm điều đó. @sarnold: Cảm ơn! :) –

+0

@Carl - Một câu hỏi khác mà tôi cho là, bạn đã bao giờ thấy mình bình luận cho mẫu số chung thấp nhất chưa? Điều gì định nghĩa "siêu cấp" (theo ý kiến ​​của bạn) rằng một nhóm nên bình luận mã tại? –

3

Vấn đề với nhận xét là chúng có xu hướng tồn tại lâu sau khi mã được nhận xét đã thay đổi hoặc thậm chí bị xóa.

Theo quy tắc chung, tôi chỉ nhận xét API công khai và khó hiểu thuật toán.

Không sử dụng nhận xét để giải thích những gì bạn đã làm - đó là mã dành cho, sử dụng nhận xét để giải thích lý do bạn đã làm như vậy.

+1

Đề xuất viết câu trả lời của bạn một cách mạnh mẽ trong công cụ cung cấp khả năng kiểm tra chính tả. – sarnold

+0

Và có lẽ ngữ pháp cũng vậy ... "Không phải chúng tôi commnet ot giải thích những gì bạn đã làm" cũng giống như một trong những tương lai-sẽ-có-được-quá khứ tenses từ Hitch Hikers 'Hướng dẫn. –

+0

@ sarnold, trình soạn thảo SO kiểm tra chính tả cho tôi, có lẽ anh ta không chú ý đến gạch dưới màu đỏ ??? –

0

Bạn nên viết nhận xét trước mã hoặc trước hàm để lần sau nhìn vào hàm mà họ có thể biết ngay mục đích của mã đó là gì.
Điều đó xảy ra với tôi nhiều lần khi tôi viết mã và sau đó quên mục đích của nó. vì vậy, tôi có thói quen viết bình luận trước khi viết mã.

0

Điều tôi muốn thấy trong phần bình luận là giải thích tại sao một phương thức rõ ràng và đơn giản hơn nhiều so với phương thức được sử dụng trong mã không hoạt động.

16

Trong tất cả sự nghiệp của mình, tôi chưa bao giờ bắt gặp con thú tuyệt vời đó "mã tự viết". Có lẽ tôi đã không may mắn, nhưng tôi bắt đầu nghi ngờ nó không thực sự tồn tại.

6

"Một trong những khách hàng tiềm năng đã hướng dẫn các nhà phát triển của mình không sử dụng nhận xét vì chúng quá" lỗi thời "và một vài nhà phát triển khác đã chỉ ra rằng họ không bao giờ sử dụng nhận xét vì họ cảm thấy tất cả những gì họ làm là làm lộn xộn mã."

Nếu tôi từng nghe một nhà phát triển, tôi đã làm việc với việc nói chuyện như thế này, tôi sẽ sửa chúng. Nếu tôi không có thứ hạng cần thiết để sửa chúng, tôi sẽ rời khỏi công việc.

Rất ghi rõ mã, với định danh tốt - những thứ đôi khi được gọi là 'tự chủ tài liệu' - làm một công việc tốt để minh họa những gì đang làm. Đó là tốt như xa như nó đi. Công việc của các nhận xét là giải thích lý do tại sao.

+0

may mắn thay tôi không làm việc trong một trong các phần của các nhà phát triển. Trong nhóm của tôi, điều đầu tiên được định nghĩa là tài liệu chuẩn của chúng tôi cho dự án mã (bao gồm cả các nhận xét). Thảo luận bình thường về các tài liệu tiêu chuẩn của chúng tôi "trong nhà" là những gì đã đưa ra cuộc tranh luận giữa các nhóm. –

3

chủ đề này có xu hướng được thảo luận rất nhiều, nhưng đây là Mỹ của tôi $ 0.02 về đề tài này:

  1. Tôi thà thấy quá nhiều ý kiến ​​hơn là không đủ. Thất bại ở bất cứ điều gì, bạn luôn có thể xóa các nhận xét thừa từ mã; tuy nhiên, bạn không thể lấy được ý nghĩa từ chúng nếu không có gì để bắt đầu.
  2. Tôi đã nghe một số nhà phát triển cho rằng các nhà phát triển khác rằng "trên tài liệu" (định nghĩa về điều này thay đổi theo từng người) mã của họ không phải là nhà phát triển giỏi. Trong khi nói rằng bạn đang cập nhật bộ đếm có thể là dấu hiệu cho thấy bạn không biết mình đang làm gì, có hướng dẫn rõ ràng về một số logic nghiệp vụ đang ngồi ở giữa phương pháp bạn đang làm việc có thể khá hữu ích.
  3. Mặc dù có một số nhà phát triển xuất sắc có thể viết mã cực kỳ rõ ràng không yêu cầu nhận xét, hầu hết các nhà phát triển không giỏi hoặc dành nhiều thời gian viết mã để tự viết tài liệu hơn họ bao gồm một vài bình luận.
  4. Bạn không biết cấp độ kỹ năng của người tiếp theo để đọc mã của bạn và nếu cấu trúc ngôn ngữ bạn đang sử dụng có thể gây nhầm lẫn, thường là một ý tưởng hay để bao gồm nhận xét mà ai đó có thể sử dụng cho Google.
1

Diomidis Spinellis chỉ viết một cột đẹp cho IEEE cột (quoted on his blog), nêu rõ các vấn đề, và một số giải pháp:

Khi nhận xét, chúng tôi luôn luôn là một cặp vợ chồng của tổ hợp phím ra khỏi thảm họa: khôi phục chức năng của mã trong tiếng Anh. Và đó là khi sự cố bắt đầu.

Các vấn đề liên quan