Làm thế nào tôi có thể đối phó với một thành viên trong nhóm không thích bình luận trong mã?


183

Một trong những thành viên trong nhóm của tôi luôn tránh đưa ra nhận xét trong mã của anh ấy.

Mã của anh ấy không phải là tài liệu tự, và các lập trình viên khác gặp khó khăn trong việc hiểu mã của anh ấy.

Tôi đã yêu cầu anh ta nhiều lần để nhận xét mã của anh ta, tuy nhiên anh ta chỉ đưa ra lời bào chữa hoặc tuyên bố rằng anh ta sẽ làm điều đó sau. Mối quan tâm của ông là việc thêm ý kiến ​​sẽ mất quá nhiều thời gian và trì hoãn các dự án.

Lập luận nào tôi có thể trình bày với anh ấy để thuyết phục anh ấy viết đúng mã của mình?

Về lưu ý đó, tôi có sai khi tập trung vào các bình luận mã hay đây là dấu hiệu của một vấn đề lớn hơn cần được giải quyết?


109
Bình luận cho ý kiến ​​vì lợi ích không làm cho mã tốt hơn. Nếu mã là dễ hiểu (bao gồm cả tại sao) mà không có ý kiến ​​thì tốt nếu không bình luận.
Martin York

63
Ồ vâng, và khi sự phức tạp của một số đoạn mã tăng gấp ba lần để giải quyết tình trạng chủng tộc hoặc bế tắc, đừng bình luận về điều đó! Hãy để mọi người giải quyết câu đố tại sao mã phải là như vậy và tại sao nó phá vỡ theo những cách bí ẩn nếu họ thực hiện các thay đổi thử nghiệm. Mọi người nên trở thành một đại kiện tướng cờ vua ...
Kaz

12
@Kaz Sarcasm (tôi hy vọng) không dịch tốt sang văn bản.
deworde

10
@deworde & artjom - vâng, đó là sự mỉa mai. không, nó không đi qua một cách sạch sẽ như nó có thể, nhưng nó rõ ràng là mỉa mai.

17
Theo nguyên tắc của Dale Carnegie, bạn nên cố gắng hiểu lý do tại sao anh ấy không muốn bình luận..bạn đã đề cập rằng anh ấy không muốn trì hoãn dự án..bạn có thể nói với anh ấy rằng nếu anh ấy không bình luận thì sẽ không có thể hiểu được mã và điều đó sẽ làm trì hoãn thêm dự án .. điều này chắc chắn sẽ giúp ích ..
Anirudha

Câu trả lời:


431

Nhận xét một mình không tạo ra mã tốt hơn và chỉ cần đưa ra "nhiều bình luận" có thể sẽ cung cấp cho bạn ít hơn so với /* increment i by 1 */nhận xét về phong cách.

Vì vậy, hãy tự hỏi tại sao bạn muốn những ý kiến. "Đó là cách thực hành tốt nhất" không được tính là một đối số trừ khi bạn hiểu tại sao.

Bây giờ, lý do nổi bật nhất để sử dụng các bình luận là để mã dễ hiểu hơn và khi mọi người phàn nàn về việc thiếu bình luận, họ là những con vẹt không biết gì hoặc họ khó hiểu được mã họ đang làm việc.

Vì vậy, đừng phàn nàn về những bình luận bị thiếu: phàn nàn về mã không thể đọc được. Hoặc tốt hơn nữa, đừng phàn nàn, hãy tiếp tục đặt câu hỏi về mã. Đối với bất cứ điều gì bạn không hiểu, hãy hỏi người đã viết nó. Dù sao bạn cũng nên làm điều đó; với mã không thể đọc được, bạn sẽ chỉ hỏi thêm câu hỏi. Và nếu bạn quay lại một đoạn mã sau đó và bạn không chắc bạn nhớ chính xác nó làm gì, hãy hỏi lại câu hỏi tương tự.

Nếu các bình luận có thể khắc phục nó và đồng nghiệp của bạn có bộ não hoạt động, đôi khi anh ấy / cô ấy sẽ nhận ra rằng việc bình luận mã dễ dàng hơn nhiều so với việc bạn luôn luôn hỏi những câu hỏi ngu ngốc. Và nếu bạn không thể đưa ra câu hỏi, thì có lẽ mã đó đã hoàn toàn có thể đọc được và chính bạn là người có lỗi - sau tất cả, không phải tất cả các mã đều cần bình luận.

Về mặt kỹ năng con người, tránh nghe có vẻ ủy khuất hoặc buộc tội bằng mọi giá; nghiêm túc và trung thực về câu hỏi của bạn.


269
+1 cho "không phàn nàn về các bình luận bị thiếu: phàn nàn về mã không thể đọc được."
Md Mahbubur Rahman

4
Điều gì xảy ra nếu câu trả lời cho bất kỳ câu hỏi nào về mã nằm dọc theo dòng "Bạn đã làm gì để hiểu nó?"
Saul

40
+1: Việc đẩy các tên hàm có thể đọc được có thể có thêm lợi ích ... Tại Đánh giá mã: "Không thể hiểu xg_jkhsfkasq đang làm gì". "Ồ, nó đang xóa bộ đệm nguồn cấp dữ liệu chính, bây giờ tôi có thể phát hành không?" "Chắc chắn, nhưng tôi ngần ngại phê duyệt nó cho đến khi bạn đổi tên hàm flush_primary_buffer" "Ah, nhưng nó cũng xóa bộ nhớ cache chính, vì vậy tên đó sẽ gây hiểu nhầm" "NÓ LÀ GÌ? Sẽ dừng hệ thống lại! Trong khi bạn thay đổi logic đó, bạn có phiền đổi tên chức năng đó không? "
deworde

18
Tôi lo lắng về việc tạo ấn tượng rằng tôi không thể đọc được mã. Một người quản lý phi kỹ thuật có thể nhận thấy rằng tôi liên tục yêu cầu 'Bob' giúp đỡ vì mã của Bob quá cao đối với tôi. Điều đó có nghĩa là Bob là một nhà phát triển 'tiên tiến' và tôi chưa sẵn sàng làm việc ở cấp độ của anh ấy.
Rob P.

5
@Rob P. Tôi thấy sợ hãi, nhưng nếu bạn không thể đọc mã và dự kiến ​​rằng bạn sẽ duy trì mã, thì mã không được viết tốt hoặc bạn không biết đủ. Nếu bạn không biết đủ, bạn cần phải hỏi. Nếu hỏi cho thấy mã đơn giản là khó đọc, hãy ấn nó để sửa. Bí quyết là, nếu bạn đang đi theo con đường kỹ thuật xã hội, hãy trộn nó lại cho dù Bob đi đến bàn của bạn hay bạn đi đến chỗ của anh ấy, và rất tích cực trong việc chỉ vào mọi thứ. Rốt cuộc, một người quản lý phi công nghệ sẽ không thể nắm bắt được nội dung của cuộc thảo luận ...
deworde

114

Tôi đã gặp rất nhiều nhà phát triển gặp khó khăn trong việc viết mã tự viết tài liệu hoặc nhận xét hữu ích. Những loại người này thường thiếu đủ kỷ luật hoặc kinh nghiệm để làm điều đó đúng.

Điều không bao giờ làm việc là "bảo họ thêm bình luận". Điều này sẽ không tăng kỷ luật tự giác hoặc kinh nghiệm của họ. IMHO điều duy nhất có thể hoạt động là thực hiện các phiên đánh giá và tái cấu trúc mã thường xuyên. Khi một nhà phát triển đã hoàn thành một nhiệm vụ, hãy cho phép anh ấy / cô ấy giải thích bất kỳ phần nào của mã mà bạn không hiểu. Ngay lập tức tái cấu trúc hoặc ghi lại mã theo cách mà cả hai bạn sẽ hiểu 6 tháng sau.

Làm điều này trong khoảng thời gian vài tháng, ít nhất hai lần một tuần. Nếu bạn đủ may mắn, các nhà phát triển khác sẽ tìm hiểu qua các phiên này để bạn có thể giảm tần suất xem xét.


5
+1 đây là cách duy nhất để thực sự thay đổi thành đồng nghiệp mà tôi đã tìm thấy, thực sự ngồi với họ và xem xét / tái cấu trúc bên cạnh họ. Nếu bạn không ở vị trí để từ chối đánh giá mã, điều này có thể khó khăn. Đôi khi, khi bạn ở cấp độ trung bình, bạn chỉ cần nêu vấn đề với người cao niên và nếu họ không nghe nghẹt mũi cho đến khi bạn cao cấp và có thể phủ quyết rác như vậy
Jimmy Hoffa

1
Đánh giá mã & lập trình cặp là cách tốt nhất theo kinh nghiệm của tôi về việc cải thiện tiêu chuẩn chung của các nhà phát triển trong một nhóm. Đó là về việc chia sẻ kiến ​​thức và kỹ năng trong đội. Không có nó, bạn đang khiến các nhà phát triển học theo cách khó khăn và cho rằng họ đã ra khỏi trường đại học hoàn hảo. Sự thiếu sót chung của thực tiễn này trong ngành có lẽ là lý do tại sao có rất nhiều nhà phát triển với hơn 10 năm kinh nghiệm không thể viết mã được tổ chức tốt, dễ đọc.
Martin Brown

27

Tôi ngạc nhiên không ai đã đề cập đến đánh giá mã chưa. Làm mã đánh giá! Khi anh ấy kiểm tra chất lượng kém, đừng nói "thêm ý kiến". Liên tục đặt câu hỏi và yêu cầu anh ấy cho bạn biết mã của anh ấy làm gì và tại sao. Ghi chép. Sau đó, vào cuối bài đánh giá mã, đưa cho anh ta một bản ghi chú và bảo anh ta làm cho câu hỏi của bạn khá rõ ràng. Bằng cách thêm ý kiến ​​hoặc chỉ bằng cách cấu trúc lại mã của mình để làm cho nó có chất lượng tốt hơn (tốt nhất là sau này khi có thể)


2
+1 - Nếu bạn phải đặt câu hỏi về bất kỳ phần nào của mã thì phần đó cần bình luận hoặc tái cấu trúc để câu hỏi không cần phải hỏi người khác trong tương lai.
Dunk

+1 Các đánh giá về mã / đồng nghiệp cũng rất ngạc nhiên khi các câu trả lời rất thấp. Việc thực hiện đánh giá mã cấp độ nhóm (để không chọn một cá nhân) có thể giúp giải quyết vấn đề (và có thể những người khác thậm chí không biết bạn có :). Cuối cùng, bạn có thể thực hiện chính sách cấm solo, theo đó bạn không được phép đẩy trừ khi những thay đổi của bạn đã được xem xét bởi một thành viên khác trong nhóm.
Chris Lee

@ChrisLee tại các chính sách đánh giá mã công ty của tôi không được thi hành về mặt kỹ thuật, nhưng có một chính sách mà trước khi một câu chuyện có thể được đánh dấu là Sẵn sàng để Thử nghiệm, thì đó phải là mã được xem xét, bất kể ai đã làm công việc phát triển. Thật thú vị khi phải đánh giá mã khi CTO thực hiện kiểm tra mặc dù lol
Earlz

18

Điều này phụ thuộc vào mã mà nhân viên nhóm của bạn tạo ra. Nếu bạn đọc cuốn sách Clean Code từ chú Bob, bạn sẽ thấy rằng ông thực sự thích không thêm ý kiến ​​vào mã. Nếu bản thân mã là có thể đọc được như nó cần, thì hầu như không cần bình luận.

Nếu đó không phải là trường hợp, hoặc bạn yêu cầu bình luận do một số chính sách không thể thương lượng, thì câu hỏi chính là liệu chỉ có bạn muốn anh ấy / cô ấy viết bình luận, hay đó là toàn bộ nhóm hay nhóm / dự án lãnh đạo. Nếu đó chỉ là bạn, thì bạn nên nói chuyện với các đồng nghiệp khác để tìm hiểu lý do tại sao nó có thể không phải là một vấn đề lớn như vậy.

Nếu người lãnh đạo dự án thiếu các bình luận, bạn cũng có thể yêu cầu họ như một phần của sự hoàn chỉnh , tức là nếu mã được gửi thiếu bình luận thì công việc vẫn chưa kết thúc. Anh ta có thể không tiếp tục làm công việc khác, cho đến khi công việc hiện tại của anh ta kết thúc và cho những bình luận đó là bắt buộc. Tuy nhiên, hãy nhớ rằng loại cưỡng bức này rất có thể sẽ dẫn đến những bình luận khủng khiếp (mong đợi vô số lời bình luận lặp đi lặp lại của mã).

Cách khả thi duy nhất theo quan điểm khiêm tốn của tôi là thảo luận về lợi nhuận thực tế mà bạn và mọi người khác nhận được từ các bình luận. Nếu anh ấy không hiểu nó chỉ bằng thảo luận, thì luôn luôn có một cách khó khăn: thay vì để họ viết mã mới, họ sẽ làm việc với mã hiện có. Nếu có thể, bạn nên tìm cho họ hai lĩnh vực công việc khác nhau - một khu vực có bình luận hữu ích phù hợp và khu vực khác thiếu ý kiến. Phải đọc mã không bình luận không thể đọc được của người khác là một cái mở mắt liên quan đến công việc của bạn.

Chúng tôi đã từng ở đó một lần và tức giận vì tác giả ban đầu của một số nguồn vì làm việc rất cẩu thả. Đó là sự phản ánh bổ sung rằng mỗi chúng ta đều là một tác giả như vậy cũng khiến bạn nhận ra rằng bạn nên quan tâm đến khả năng đọc - do đó, đừng quên thảo luận về kết quả với đồng nghiệp của bạn sau đó để thúc đẩy phản ánh này.


+1 để thảo luận về lợi nhuận thực tế từ các bình luận. Nhận xét có nghĩa là để thêm giá trị cho mã nguồn.
Sparky

1
Re: "loại cưỡng bức này rất có thể sẽ dẫn đến những bình luận khủng khiếp". Nếu bạn không bình luận khi bạn viết mã thì việc điền lại các bình luận sau khi mã được thực hiện sẽ hầu như luôn dẫn đến các bình luận khủng khiếp cho dù bạn có tin vào chúng hay không. Khi bạn đang viết mã, đó là lúc bạn biết chính xác TẠI SAO bạn đang làm một việc gì đó theo một cách cụ thể. Đó là thời gian để cho người khác biết. Nếu bạn nhận xét sau khi hoàn thành, tỷ lệ cược là bạn thậm chí sẽ không nhớ những gì bạn đã nghĩ khi bạn viết mã, vì vậy bạn có xu hướng ném một bình luận vô ích chỉ vì mục đích bình luận.
Dunk

3
luôn có vấn đề với cách tiếp cận của cuốn sách đó. Nhận xét có thể hữu ích trong việc giải thích quy trình / logic kinh doanh (hoặc tại sao) mà không có số lượng mã sạch nào có thể.
bharal

Mặc dù các nhận xét trong mã sẽ không cần thiết, nhưng ít nhất phải có mô tả phương thức, chẳng hạn như Javadoc
Danubian Thủy thủ

2
Clean Code là một cuốn sách hay, nhưng nó không nên được coi là phúc âm. Bạn phải áp dụng lẽ thường và tự quyết định những gì hiệu quả. Tôi không đồng ý với lời khuyên về các bình luận, bởi vì các ngôn ngữ lập trình hướng đến việc diễn đạt cách thức của một vấn đề liên quan đến lý do tại sao. Tôi đã viết mã cho Google Mua sắm gắn thêm mã quốc gia vào SKU sản phẩm. Rõ ràng những gì mã đang làm, nhưng trừ khi bạn biết rằng bạn chỉ có thể sử dụng cùng một mã sản phẩm một lần, ngay cả ở các thị trường khác nhau, bạn sẽ không biết tại sao tôi lại làm điều này. Các bình luận tôi đã thêm làm rõ nó.
GordonM

10

Nếu bạn có một nhân viên không thể làm theo hướng dẫn, hãy khiển trách anh ta và chắc chắn rằng điều đó sẽ không giúp ích cho sự nghiệp của anh ta. Sự nhất quán trong phong cách mã hóa là rất quan trọng đối với một nhóm và nếu mọi người khác đang viết bình luận và điều này thì không, điều đó sẽ làm tổn thương phong cách mã hóa.

Điều đó nói rằng, bạn có thể có thể giúp anh ta ra. Theo kinh nghiệm của tôi, khi ai đó phản đối việc bình luận mất quá nhiều thời gian, có một rào cản tâm lý như là

  1. Anh ta tự giác về các lựa chọn thiết kế / mã của mình và không muốn trình bày chúng trong văn xuôi. (Đánh giá mã có thể hữu ích để củng cố sự tự tin của ai đó cũng như phá vỡ chúng.)
  2. Anh ấy làm việc rất tuyến tính và không suy nghĩ nhiều. Nhận xét là đau đớn vì nó buộc anh ta phải dỡ bỏ mã ngay lập tức mà anh ta sắp viết từ bộ nhớ làm việc của mình để soạn thảo ý định của mình theo một cách khác. (Nếu điều này là đúng, việc bình luận trở nên rất quan trọng đối với chất lượng mã của anh ấy.)
  3. Trong lịch sử mọi người không hiểu ý kiến ​​của ông.

Điều quan trọng đối với một lập trình viên là nhận ra rằng các nhận xét giống như các bài kiểm tra: Chúng không chỉ để sử dụng trong tương lai - Chúng dành cho chính lập trình viên. Họ buộc anh phải suy nghĩ khác về cách tiếp cận của mình.

Không ai trong số này là thay thế cho CI, kiểm tra hoặc đánh giá mã. Nó chỉ là một trong nhiều phần quan trọng của mã hóa, bản thân nó, không viết mã.


3
Tôi không nghĩ rằng các mối đe dọa là cần thiết sẽ có hiệu quả, chúng có thể xuất hiện dưới dạng bắt nạt (ngay cả khi đó không phải là ý định) và các lập trình viên như một quy tắc có xu hướng phẫn nộ với các sắc lệnh từ cấp cao hơn và trong trường hợp này anh ta có thể đào gót chân của mình trong hơn nữa. Nó có thể đến đó như là một phương sách cuối cùng, nhưng chỉ là một phương sách cuối cùng.
GordonM

@GordonM Bạn có nghĩ sẽ tốt hơn không nói với nhân viên khi hành vi của anh ta không phù hợp, và hậu quả của hành vi không phù hợp sẽ tiếp tục là gì?
kojiro

Rõ ràng không nói bất cứ điều gì không phải là một ý tưởng tốt, nhưng đe dọa mọi người sẽ chỉ thúc đẩy bầu không khí sợ hãi, đặc biệt là đối với một điều nhỏ nhặt tương đối như phong cách bình luận. Nếu bạn giải thích cho anh ta một cách hợp lý lý do tại sao nhóm xem xét nhận xét quan trọng đó là tốt. Nhưng tôi biết nếu ai đó đe dọa tôi với cái bao tải vì thứ gì đó tương đối nhỏ, tôi sẽ có xu hướng bắt đầu tìm kiếm một công việc khác thay thế.
GordonM

@GordonM Tôi thực sự có ngoại lệ với hàm ý rằng những gì tôi nói là đe dọa, nhưng dù sao, tôi đã sửa nó.
kojiro

8

Nhận phần mềm xem xét mã, và sử dụng nó tốt.

Chúng tôi sử dụng Kiln, và chúng tôi yêu nó. Chúng tôi có một chính sách rằng mọi thay đổi phải được xem xét (mặc dù chúng tôi cho phép các nhà phát triển nâng cao / phê duyệt đánh giá cho chính họ trên các thẻ và sáp nhập không xung đột (mặc dù hầu hết chúng tôi sử dụng rebaseif);

Mã không rõ ràng là lý do để đánh giá mã bị từ chối. Việc sửa lỗi là bình luận hay mã rõ ràng hơn không quan trọng, nhưng người đánh giá phải có khả năng hiểu nó. Một số nhà phát triển thích viết lại mã, nhưng những người khác (bao gồm cả tôi) thường thấy việc thể hiện ý định trong bình luận dễ dàng hơn (mã có thể dễ dàng hiển thị những gì nó làm, nhưng khó hơn để hiển thị những gì nên làm).

Nếu có câu hỏi nào về tính rõ ràng của mã, người đánh giá luôn thắng. Tất nhiên tác giả hiểu nó, bởi vì họ đã viết nó. Nó cần phải rõ ràng với người khác.

Bằng cách sử dụng phần mềm như Kiln, không có thay đổi nào bị bỏ qua. Mọi người trong nhóm dev của tôi thích nó theo cách này. Phần mềm đánh giá mã đã có tác động rất lớn đến cả chất lượng mã và chất lượng ứng dụng của chúng tôi :-)

Thật dễ dàng để các nhà phát triển có thể phòng thủ với các đánh giá bị từ chối khi lần đầu tiên giới thiệu phần mềm, nhưng theo kinh nghiệm của tôi, họ không mất nhiều thời gian để nhận ra mọi thứ tốt hơn theo cách này và nắm lấy nó :-)

Chỉnh sửa: Cũng đáng chú ý, chúng tôi cố gắng không để các nhà phát triển giải thích mã mật mã bằng lời nói hoặc trong các nhận xét trong đánh giá. Nếu một cái gì đó không rõ ràng, nơi tốt nhất để giải thích nó là trong mã (trong các bình luận, hoặc bằng cách tái cấu trúc), sau đó thêm các thay đổi mới vào cùng một đánh giá.


4

Thật thú vị, khả năng đọc như được áp dụng cho ngôn ngữ tự nhiên được đo bằng tốc độ đọc và hiểu. Tôi đoán một quy tắc đơn giản có thể thực sự được thông qua, nếu một nhận xét mã cụ thể không cải thiện thuộc tính này, nó có thể tránh được .

Tại sao ý kiến?

Mặc dù, nhận xét mã là một dạng tài liệu nhúng, có nhiều cách trong các ngôn ngữ lập trình cao cấp để tránh lập trình "thừa tài liệu" (mã có ý nghĩa) bằng cách sử dụng các yếu tố của chính ngôn ngữ. Cũng là một ý tưởng tồi khi biến mã thành danh sách từ sách giáo khoa lập trình, trong đó các câu lệnh riêng lẻ được giải thích theo nghĩa đen gần như theo kiểu tautological (nhớ ví dụ "/ * i tăng 1 * /" trong các câu trả lời đã được cung cấp), làm cho các nhận xét đó có liên quan chỉ để lập trình viên thiếu kinh nghiệm với ngôn ngữ.

Tuy nhiên, đó là ý định cố gắng bình luận mã "dưới tài liệu" (nhưng vô nghĩa) thực sự là "nguồn gốc của mọi tội lỗi". Chính sự tồn tại của mã "dưới tài liệu" là tín hiệu xấu - hoặc đó là một mớ hỗn độn không có cấu trúc, hoặc hack lập dị của mục đích bị mất bí ẩn. Rõ ràng, giá trị của mã như vậy ít nhất là nghi vấn. Thật không may, luôn có những ví dụ, khi thực sự tốt hơn là đưa một nhận xét vào một phần của các dòng mã được định dạng (được nhóm trực quan) hơn là bọc nó vào chương trình con mới (nhớ "tính nhất quán ngu ngốc" mà "là hobgoblin của những bộ óc nhỏ") .

Mã dễ đọc! = Nhận xét mã

Mã có thể đọc được không yêu cầu chú thích bằng bình luận. Ở mỗi vị trí cụ thể trong mã luôn có bối cảnh của một nhiệm vụ mà mã cụ thể này được cho là phải đạt được. Nếu mục đích bị thiếu và / hoặc mã làm điều gì đó bí ẩn = tránh nó bằng mọi giá. Không cho phép các bản hack lạ để điền mã của bạn - đó là kết quả trực tiếp của việc kết hợp các công nghệ lỗi với việc thiếu thời gian / sở thích để hiểu các nền tảng. Tránh mã bí ẩn trong dự án của bạn!

Mặt khác, chương trình Readable = code + tài liệu có thể chứa nhiều phần bình luận hợp pháp, ví dụ để tạo điều kiện cho việc tạo tài liệu "nhận xét cho API".

Thực hiện theo tiêu chuẩn kiểu mã

Thật buồn cười, câu hỏi không phải là lý do tại sao để bình luận mã, mà là về công việc nhóm - làm thế nào để sản xuất mã theo phong cách đồng bộ hóa cao (mà mọi người khác có thể đọc / hiểu). Bạn đang theo bất kỳ tiêu chuẩn phong cách mã trong công ty của bạn? Mục đích chính của nó là để tránh viết mã yêu cầu tái cấu trúc, quá "cá nhân" và "chủ quan" mơ hồ. Vì vậy, tôi đoán, nếu người ta thấy sự cần thiết trong việc sử dụng kiểu mã, thì có rất nhiều công cụ làm thế nào để thực hiện nó đúng cách - bắt đầu bằng việc giáo dục mọi người và kết thúc bằng tự động hóa để kiểm soát chất lượng mã (nhiều gợi ý, v.v.) và (sửa đổi kiểm soát tích hợp) hệ thống xem xét mã.

Trở thành một nhà truyền giáo dễ đọc mã

Nếu bạn đồng ý rằng mã được đọc thường xuyên hơn nó được viết. Nếu việc thể hiện rõ ràng ý tưởng và suy nghĩ rõ ràng là quan trọng đối với bạn, bất kể ngôn ngữ nào được sử dụng để giao tiếp (toán học, mã máy hoặc tiếng Anh cũ) .. Nếu nhiệm vụ của bạn là xóa bỏ lối suy nghĩ thay thế buồn tẻ và xấu xí .. (xin lỗi , cái cuối cùng là từ một "bảng kê khai" khác) .. đặt câu hỏi, bắt đầu thảo luận, bắt đầu truyền bá suy nghĩ kích thích sách về làm sạch mã (có lẽ không chỉ là thứ tương tự như mẫu thiết kế của Beck, mà giống như RC Martin đã đề cập ) trong lập trình. Hơn nữa đi qua một loạt các ý tưởng quan trọng (trích từ cuốn sách O'Reilly về khả năng đọc)

  • Đơn giản hóa việc đặt tên, nhận xét và định dạng bằng các mẹo áp dụng cho mọi dòng mã
  • Tinh chỉnh các vòng lặp, logic và các biến của chương trình để giảm độ phức tạp và nhầm lẫn
  • Các vấn đề tấn công ở cấp độ chức năng, chẳng hạn như sắp xếp lại các khối mã để thực hiện một nhiệm vụ tại một thời điểm
  • Viết mã kiểm tra hiệu quả, kỹ lưỡng và ngắn gọn cũng như dễ đọc

Cắt "bình luận" ra, người ta vẫn còn rất nhiều (tôi đoán viết mã không cần bình luận là một phần của bài tập tuyệt vời!). Đặt tên định danh có ý nghĩa về mặt ngữ nghĩa là một khởi đầu tốt. Tiếp theo, cấu trúc mã của bạn bằng cách nhóm các hoạt động được kết nối logic vào các hàm và lớp. Và như vậy. Một lập trình viên tốt hơn là một nhà văn tốt hơn (tất nhiên, giả sử các kỹ năng kỹ thuật khác được đưa ra).


Bạn có thể viết mã không cần bình luận chỉ để giải trí. Đây thực sự có thể là một bài tập tuyệt vời nhưng không phải nếu bạn cần quay lại mã và thực sự không thể thay đổi bất cứ điều gì vì bạn sẽ không biết tại sao chức năng này hoạt động vì có thể có một số khách hàng muốn nó như vậy. Tất nhiên bạn có thể ở trong đó có thể là 1% dự án được ghi lại và lý do bên ngoài dự án, nhưng ngay cả khi đó, có những quyết định bạn đưa ra trong quá trình mã hóa mà không bị đẩy trở lại tài liệu. Và thẳng thắn ... Ai đọc tài liệu không có trong mã. Chắc chắn không phải lập trình viên ;-P.
Nux

1
Một kỹ sư giỏi quan tâm đến toàn bộ hệ thống (bao gồm tài liệu không được mã hóa) - nhưng ở đây, tất nhiên, chúng tôi nói chung, mã hóa tâm trí .. Quan điểm của tôi là không có mã định danh trong mã gọi là foo , bar , tmpS Something2IamJustTooSmartAssToCare đã cải thiện tình hình và giảm nhu cầu tổng thể để giải thích mã là gì và nó làm gì. Mã phải được viết với "chế độ suy nghĩ" giống như một API được thiết kế tốt, được con người đọc, hiểu, sử dụng và duy trì. Quá nhiều bình luận trong mã mà khó hiểu là một dấu hiệu rất xấu!
Yauhen Yakimovich

Lập trình / mã hóa BTW bất kỳ loại logic cụ thể miền nào dưới dạng HACK hoặc sửa lỗi "tạm thời" trên thực tế đang tạo ra "HACKs lạ" - ngay khi bạn có rất nhiều trong số chúng bị chèn vào bên trong hộp đen - hãy mong đợi chúng thất bại và cháy trở lại. Điều này có thể được chứng minh bằng thời hạn trong các dự án "thế giới thực", v.v. nhưng trong thực tế, nó chỉ là phần mềm giá rẻ đòi hỏi phải tu sửa logic miền (hoặc có thể tìm một công việc mới).
Yauhen Yakimovich

Tôi đồng ý rằng khả năng đọc là quan trọng, điều tôi không đồng ý là dường như bạn nói "nếu bạn làm cho khả năng đọc là ưu tiên bạn sẽ không cần bình luận". Đó chỉ đơn giản là không đúng sự thật. Đã từng trải qua rồi. Lý do những gì bạn làm không chỉ đến từ việc đặt tên biến theo cách hợp lý. Làm điều đó tất nhiên, nhưng cũng thêm lý do trong các bình luận (ngay cả khi nó ở dạng lỗi / yêu cầu / số câu chuyện trong một số hệ thống bên ngoài). Đó là những gì tôi đang nói.
Nux

"Nếu bạn làm cho khả năng đọc trở thành ưu tiên bạn sẽ không cần bình luận" - vâng, đây chính xác là những gì tôi đang nói (và tôi biết điều này dường như không dễ đạt được). BTW Bạn có gặp tình huống khi duy trì hoàn toàn lịch sử cam kết (kiểm soát phiên bản) không đủ để phản ánh về "lỗi / yêu cầu / số câu chuyện" không? Tôi đã thực hành các cam kết khá dài - hoạt động đối với tôi và cho phép giữ mã trống trong lịch sử phát triển..làm cho nó ít phát triển hữu cơ hơn.
Yauhen Yakimovich

3

Tôi có sai khi tập trung vào các bình luận mã hay đây là dấu hiệu của một vấn đề lớn hơn cần được giải quyết?

Một chút nào đó. Mã lớn không cần bình luận. Tuy nhiên như bạn đã nói, mã của anh ấy không phải là tài liệu tự. Vì vậy, tôi sẽ không tập trung vào các ý kiến. Bạn nên tập trung vào việc cải thiện kỹ năng và tay nghề của các nhà phát triển của bạn.

Vậy làm thế nào để làm điều đó? Đề xuất của Doc Brown về các phiên đánh giá / tái cấu trúc là một ý kiến ​​hay. Tôi thấy lập trình cặp thậm chí hiệu quả hơn, nhưng nó cũng có thể khó thực hiện hơn đáng kể.


Lập trình cặp là một ý tưởng tuyệt vời, nó cung cấp cho một lập trình viên cái nhìn sâu sắc khác về sự phát triển của mã để họ biết những gì đang xảy ra, khiến hai người phải chịu trách nhiệm về mã. nó cũng tạo cơ hội cho một trong hai người nói rằng một cái gì đó nên có một nhận xét vì nó không bình thường hoặc một cái gì đó mà người khác có thể thay đổi bởi vì nó trông giống như ... "rò rỉ bộ nhớ", "mã hóa xấu", v.v ... một số điều cần bình luận để người khác trong tương lai không hoàn tác điều gì đó vì nó không đúng.
Malachi

3

Trước hết, tôi sẽ đề nghị bạn giải quyết lại cách tiếp cận của bạn về các ý kiến.

Nếu chúng là các nhận xét tài liệu ở cấp API (được hiển thị sau công khai), thì nhà phát triển này chỉ đơn giản là không thực hiện công việc của mình. Nhưng đối với tất cả các ý kiến ​​khác, hãy cẩn thận.

Trong hầu hết các trường hợp tôi gặp phải chúng, ý kiến ​​là xấu xa. Tôi khuyên bạn nên đọc chương bình luận mã của "Clean code" của Robert Martin để hiểu rõ lý do tại sao.

Nhận xét làm tổn thương mã của bạn theo nhiều cách:

1) Chúng khó bảo trì. Bạn sẽ phải làm thêm khi tái cấu trúc; nếu bạn thay đổi logic được mô tả trong bình luận, bạn cũng cần chỉnh sửa nhận xét.

2) Họ thường nói dối. Bạn không thể tin tưởng bình luận và phải đọc mã thay thế. Điều này đặt ra câu hỏi: tại sao bạn cần bình luận?

// this method returns the sum of 'a' and 'b'
public int GetHash(int a, int b)
{
    //the calculation of the hash
    int result = a*b;
}

(Băm không phải là tổng mà là sản phẩm.)

3) Nhận xét làm lộn xộn mã, và rất hiếm khi thêm bất kỳ giá trị nào.

Giải pháp của tôi: Thay vì thêm nhiều bình luận, hãy cố gắng loại bỏ chúng!


4
Điều này chỉ là ngớ ngẩn. Tôi hy vọng không ai tin rằng phong cách bình luận kém như vậy là hữu ích. Nhưng bạn có thành thật tin rằng bình luận không bao giờ nên được sử dụng?
jmk

1
Đúng, đây là một gợi ý ngớ ngẩn, nếu mã này cực kỳ dễ đọc, tôi có thể hiểu một vài bình luận nhưng nhìn thấy các bình luận nên nói tại sao phương thức đó đang làm gì và nó sẽ được sử dụng khi bạn đến nhiều hơn một vài lớp không có lý do cho ý kiến, họ giúp đỡ tất cả mọi người.
DBlackborough

3
Điều quan trọng cần nhớ là trong khi mọi thứ có ý nghĩa với bạn ngay bây giờ, một người khác sẽ phải duy trì mã của bạn sau 3 năm. Đừng vít quá.
xaxxon

4
@xaxxon Chưa kể táo đó ngay cả khi người đó có thể là bạn.
lông mịn

3
@mehaase - Không phải cái gì, không phải như thế nào, nhưng tại sao là lý do quan trọng nhất để thêm nhận xét vào mã.
Henk Langeveld

1

Nếu một thành viên trong nhóm gặp khó khăn trong việc hiểu mã của thành viên nhóm khác (vì bất kỳ lý do nào); sau đó thành viên trong nhóm sẽ có thể tìm ra ai đã viết mã gốc (bất kỳ hệ thống kiểm soát sửa đổi lành mạnh nào) và nên được yêu cầu tác giả của mã giải thích trực tiếp (ví dụ: đi bộ đến bàn của họ, ngồi xuống và thảo luận về nó).

Trong trường hợp này, nếu thiếu bình luận là một vấn đề thì người không bình luận đầy đủ mã của họ sẽ dành một lượng lớn thời gian để giải thích những gì họ đã làm; và (nếu họ thông minh) sẽ bắt đầu thêm nhận xét để tránh mất thời gian cho tất cả những giải thích đó.

Lưu ý rằng việc khuyến khích các thành viên trong nhóm hỏi nhau để giải thích là có giá trị vì những lý do khác. Ví dụ, có thể một thành viên trong nhóm ít kinh nghiệm hơn và có thể học hỏi những điều từ các thành viên nhóm có kinh nghiệm hơn.

Hầu hết, bằng cách khuyến khích các thành viên trong nhóm hỏi nhau để giải thích bạn tạo ra một hệ thống tự cân bằng; nơi các thành viên nhóm khác nhau "tự động điều chỉnh" với nhau.


1

Đây phần lớn là một phần mở rộng của câu trả lời tdammers, nhưng thực hiện đánh giá mã theo định kỳ.

Để anh ấy (và các nhà phát triển khác) ngồi xuống, xem mã của họ và ít nhiều bảo vệ trước cấp trên và đồng nghiệp của họ sẽ khiến mọi người trở thành lập trình viên tốt hơn và sẽ thêm giá trị thực trong một khoảng thời gian tương đối ngắn. Trong ngắn hạn, nó sẽ cung cấp cho nhà phát triển trong câu hỏi không có lý do gì, tại thời điểm xem xét, nhận xét đúng mã của mình.

EDIT: Tôi không chắc tại sao ai đó lại đánh giá thấp đề xuất của tôi - có lẽ tôi đã cho rằng lợi ích của việc xem xét mã sẽ là kiến ​​thức phổ biến ... vui lòng xem chủ đề này để phân tích cộng đồng về thực tiễn:

Là mã xem xét thực hành tốt?


Khi một căn phòng đầy người bắt đầu cười vào mã không thể đọc được của bạn, bạn sẽ bắt đầu thực hiện công việc mã hóa và nhận xét tốt hơn. :) Tôi là một người ủng hộ lớn của đánh giá mã.
Evik James

1
Có người cười mã trước mặt các đồng nghiệp khác không phải là cách làm: - \
Danny Tuppeny

1
Nếu những người thực hiện đánh giá mã đang cười thay vì mang tính xây dựng, họ cần đào tạo từng chút một như một nhà phát triển không thể viết mã có thể đọc được. Đưa ra những lời chỉ trích mang tính xây dựng hơn là xúc phạm là một trong những kỹ năng xã hội mà tôi thấy các nhà phát triển thường thiếu.
Martin Brown

1

Xem xét các quan điểm thường cực đoan về bình luận, tôi ngần ngại cân nhắc. Điều đó đang được nói ...

Một số đối số mà tôi có thể trình bày là nếu bạn định viết mã (không thể đọc được) thì nó phải được ghi lại đúng cách?

Hiểu cách viết mã duy trì và có thể đọc được cần có thời gian, thực hành và kinh nghiệm. Các lập trình viên thiếu kinh nghiệm (và đáng buồn là nhiều người có kinh nghiệm) thường phải chịu Hiệu ứng Ikea ( PDF ). Đó là bởi vì họ đã xây dựng nó và quen thuộc với nó, và họ chắc chắn rằng mã không chỉ tuyệt vời mà còn có thể đọc được.

Nếu người đó là một lập trình viên tuyệt vời, thì rất ít nếu có bất kỳ tài liệu nào được yêu cầu. Tuy nhiên, hầu hết các lập trình viên không tuyệt vời và rất nhiều mã của họ sẽ bị ảnh hưởng trong bộ phận "khả năng đọc". Yêu cầu lập trình viên tầm thường hoặc đang phát triển "giải thích mã của họ" là hữu ích ở chỗ nó buộc họ phải xem mã của họ với con mắt quan trọng hơn.

Điều này có nghĩa là "tài liệu" mã của họ? Không cần thiết. Trường hợp cụ thể, tôi đã có một lập trình viên tương tự với vấn đề này trong quá khứ. Tôi buộc anh phải làm tài liệu. Thật không may, tài liệu của anh ta không thể mã hóa như mã của anh ta và không thêm bất cứ thứ gì. Nhìn lại mã đánh giá sẽ có ích hơn.

Bạn (hoặc một đại biểu) nên ngồi xuống với lập trình viên này và lấy một số mã cũ của anh ta. Không phải những thứ mới anh ấy biết từ chỉ làm việc trên nó. Bạn nên yêu cầu anh ấy dẫn bạn qua mã của anh ấy với sự tương tác tối thiểu. Đây cũng có thể là một phiên "tài liệu" riêng biệt, nơi anh sẽ giải thích bằng cách viết mã của mình. Sau đó, anh ta nên nhận được phản hồi về cách tiếp cận tốt hơn.

Như một bên ... đôi khi một số tài liệu là cần thiết cho dù mức độ "dễ đọc" của mã tốt đến mức nào. API nên có tài liệu, các hoạt động cực kỳ kỹ thuật và phức tạp nên có tài liệu để hỗ trợ lập trình viên hiểu các quy trình liên quan (thường nằm ngoài miền kiến ​​thức của lập trình viên) và một số điều như các biểu thức phức tạp thực sự sẽ ghi lại những gì bạn phù hợp với.


0

Nhiều dự án yêu cầu tài liệu mã: tài liệu giao diện, tài liệu thiết kế, ...

Một số dự án yêu cầu tài liệu đó phải được đưa vào nhận xét mã và trích xuất bằng các công cụ như Doxygen hoặc Sphinx hoặc Javadoc, để mã và tài liệu phù hợp hơn.

Bằng cách đó, các nhà phát triển được yêu cầu viết bình luận hữu ích trong mã và nhiệm vụ này được tích hợp trong kế hoạch dự án.


6
Không, theo cách đó các nhà phát triển được yêu cầu viết một số bình luận. Họ tính hữu dụng giảm với áp lực để viết cho họ, thường chìm dưới zero vào khu vực tích cực có hại (comment không hợp lệ tồi tệ hơn không có ý kiến) nếu chính sách này được đẩy mạnh.
Jan Hudec

1
@JanHudec - Tôi đồng ý với bạn. Đó là lý do tại sao một số điều khiển nên được thiết lập. Tạo tự động đảm bảo rằng, ví dụ, các đối số hàm trong mã giống như trong các nhận xét. Hơn nữa, việc có một tệp PDF thay vì một thư mục chứa các tệp nguồn làm cho tài liệu dễ đọc hơn (nghĩa là có thể xem lại nhiều hơn) bởi nhiều người hơn.
mouviciel

2
Vâng, không, nó không. Làm thế nào bạn sẽ nhận thấy trong .pdf, rằng mã thực sự làm một cái gì đó khác biệt tinh tế so với mô tả nói?
Jan Hudec

1
Có thể ý kiến ​​của tôi bị thiên vị bởi miền của tôi, phần mềm quan trọng không gian nơi mọi thứ được xem xét, kiểm soát, xác minh, thử nghiệm hai hoặc ba hoặc bốn lần. Tự động tạo tài liệu không ngăn chặn sự không nhất quán nhưng nó giúp giảm bớt chúng.
mouviciel

Vâng, bạn rất thiên vị. Trong các lĩnh vực như vậy có ý nghĩa, trong hầu hết các bài kiểm tra đơn vị là đủ cho QA và ghi lại mọi chức năng cuối cùng sẽ lãng phí thời gian.
Jan Hudec

0

Tôi sẽ nói rõ hầu hết các câu trả lời và ý kiến ​​gợi ý: có lẽ bạn cần tìm ra vấn đề thực sự ở đây thay vì cố gắng đưa giải pháp nhận thức của bạn đi qua.

Bạn có động lực để xem ý kiến ​​trong mã của mình; tại sao ? Bạn đã đưa ra một lý do; Tại sao lý do đó rất quan trọng với bạn? Anh ấy có động lực hơn để làm một cái gì đó khác thay vào đó; tại sao ? Anh ta sẽ đưa ra một lý do; Tại sao lý do đó rất quan trọng với anh ta? Lặp lại điều này cho đến khi bạn đạt đến mức độ xung đột thực sự phát sinh và cố gắng tìm giải pháp mà cả hai bạn có thể sống cùng. Tôi cá là nó có rất ít liên quan đến việc bình luận.


0

Nếu bạn tuân theo tiêu chuẩn mã hóa tốt, sẽ có một số lượng bình luận tối thiểu cần thiết. quy ước đặt tên là quan trọng. Tên phương thức và tên biến sẽ mô tả vai trò của chúng ..

TL của tôi đề nghị tôi sử dụng ít bình luận hơn. anh ta muốn mã của tôi nên dễ hiểu và tự mô tả. ví dụ đơn giản: tên biến cho loại chuỗi được sử dụng cho mẫu tìm kiếm

   var str1:String="" //not uderstandable
   var strSearchPattern:String="" //uderstandable

0

Yêu các câu trả lời xem lại mã, nhưng có lẽ quá trình của tôi cũng sẽ giúp một chút.

Tôi thích bình luận, nhưng tôi gần như không bao giờ thêm chúng vào mã trong lần đầu tiên. Có thể đó chỉ là phong cách của tôi nhưng tôi sẽ nhấn cùng một đoạn mã từ 3 đến 5 lần trong quá trình phát triển (tái cấu trúc, kiểm tra viết, v.v.).

Bất cứ khi nào tôi cảm thấy hơi bối rối hoặc bất cứ khi nào ai đó hỏi tôi một câu hỏi về một phần của mã, tôi cố gắng sửa nó để nó có ý nghĩa.

Điều này có thể đơn giản như việc thêm một bình luận loại bỏ một tập hợp các thao tác khó hiểu vào hàm riêng của chúng hoặc nó có thể kích hoạt một bộ tái cấu trúc lớn hơn như trích xuất một đối tượng mới.

Tôi khuyên bạn nên khuyến khích mọi người trong nhóm "sở hữu" rằng mã của họ có thể đọc được cho người khác - điều này có nghĩa là mỗi khi ai đó hỏi bạn một câu hỏi về mã của bạn, bạn cam kết thực hiện thay đổi - hoặc tốt hơn là kết hợp với điều đó người để thực hiện thay đổi ngay sau đó!

Nghiêm túc xem xét thúc đẩy điều này như là một phần của "Hợp đồng nhóm" của bạn (Và chắc chắn tạo ra một hợp đồng nếu bạn không có) - theo cách đó mọi người đã đồng ý và bạn đặt nó lên một bức tường ở đâu đó để không có bất kỳ câu hỏi về những gì bạn đã đồng ý làm.


0

Có lẽ anh chàng này cần được đánh giá cao về kỷ luật mã hóa tốt, và tại sao điều quan trọng đối với người khác là có thể hiểu được mã anh ta viết.

Tôi đã làm việc trên một số cơ sở mã hóa thực sự khủng khiếp trong sự nghiệp của mình, những nơi mà mã được tổ chức rất tệ, tên biến rất kém, nhận xét quá tệ hoặc không tồn tại, rằng cơ sở mã hóa đã làm tổn hại đến năng suất của tôi. Bạn không thể làm việc để sửa chữa hoặc cải thiện một cơ sở mã mà bạn không hiểu và nếu nó được viết theo cách không thể chấp nhận được đối với người mới thì họ sẽ dành nhiều thời gian để cố gắng hiểu nó hơn là thực sự làm việc với nó.

Không có giáo viên tốt hơn kinh nghiệm khắc nghiệt!

Mỗi codebase đều có một số bit khủng khiếp ẩn giấu trong đó, các bộ phận của hệ thống không ai muốn chạm vào vì họ sợ phá vỡ thứ gì đó hoặc họ không thể thực hiện bất kỳ công việc có ý nghĩa nào vì bất cứ ai đã viết mã đã rời đi từ lâu và hiểu được của mã với họ. Nếu mã đó không bị lỗi và không tự ghi lại thì nó chỉ làm cho vấn đề tồi tệ hơn.

Tôi đề nghị bạn nên tìm một chút về cơ sở mã của bạn giống như vậy và giao trách nhiệm cho người viết mã rắc rối của bạn cho nó. Trao cho anh ta quyền sở hữu nó, biến nó thành trách nhiệm của anh ta, để anh ta học được nỗi đau thực sự khi làm việc với mã không thể được duy trì bởi vì nó không được ghi chép tốt hoặc không thể hiểu trong một khoảng thời gian ngắn. Sau vài tháng làm việc với nó, tôi chắc chắn anh ấy sẽ bắt đầu quay lại.


-1

Đưa cho anh ta một số mã khác mà không có ý kiến ​​và yêu cầu anh ta hiểu mã. Có thể là anh hiểu tầm quan trọng của những bình luận thích hợp rồi.


12
Tôi chỉ cần tránh nút -1 trên này. Hầu hết các mã tôi viết có rất ít ý kiến. Tôi không nghĩ rằng tôi đã có người phàn nàn rằng ít nhất là không thể hiểu được trong vài năm qua. Với rất ít trường hợp ngoại lệ, nếu mã cần bình luận để hiểu , thì nó không cần bình luận, nó cần cải thiện cho rõ ràng. (Tất nhiên, bạn phải thừa nhận sự hiểu biết cơ bản về cú pháp của ngôn ngữ. Những điều như, trong C ++, đừng đi theo cách của bạn chỉ để tránh sử dụng reinterpret_cast<>()vì mọi người có thể thấy nó khó hiểu; trong C #, nếu ??bạn cần, hãy sử dụng nó; v.v.)
một CVn

2
@ MichaelKjorling: Nó có thể phụ thuộc rất lớn vào loại mã bạn đang viết. Nếu mã của bạn phụ thuộc vào các đặc điểm không phổ biến của ngôn ngữ hoặc API hoặc bạn đã làm gì đó theo cách phản trực quan để tránh một lỗi khó hiểu khiến bạn mất hàng giờ để khám phá, việc nhận xét sẽ hiệu quả hơn rất nhiều nó (có thể bao gồm một liên kết đến một bài viết) hơn là cố gắng làm cho mã "rõ ràng" về thông tin cơ bản này với các bình luận.
LarsH

@ MichaelKjorling: Tôi đặc biệt có động lực để nói rằng hôm nay bởi vì tôi đã vật lộn trong một tháng qua với API API sâu. Các cơ sở của API rất phức tạp và không được ghi chép kỹ lưỡng. Chúng tôi liên tục gặp phải những bất ngờ, một số trong đó khiến chúng tôi quay lại nhiều ngày. Mong đợi người khác (hoặc tôi trong 6 tháng) phải tìm lại những cố gắng đó để làm việc hiệu quả với mã của chúng tôi sẽ là một sự lãng phí rất lớn thời gian của người đó. Và những bí mật nói chung không thể được ghi nhận bằng cách không bình luận "cải thiện cho rõ ràng".
LarsH

@LarsH Điều đó có thể đủ điều kiện là một trong những "trường hợp ngoại lệ" mà tôi đã đề cập trong bình luận của mình. Tôi không phản đối bình luận nơi nó thực sự làm tăng giá trị ; nhưng nó không phải là lượng bình luận làm cho mã dễ đọc hay khó đọc. Điều đó nói rằng, với một API, tôi sẽ có xu hướng ghi lại những điều kỳ quặc đó ở nơi khác; nói, trong một wiki hoặc tương tự. Cũng có thể thêm một liên kết đến trang có liên quan bên cạnh mỗi lần sử dụng. Theo cách đó, bạn không phải tìm kiếm một địa điểm nào khác sử dụng tính năng cụ thể đó của API bất cứ khi nào mã không hoạt động như bạn mong đợi trong lần thử đầu tiên.
một CVn

@ MichaelKjorling: đồng ý chung. Những ngoại lệ này có hiếm hay không phụ thuộc vào tên miền bạn lập trình và API bạn phải sử dụng. Liên kết / tài liệu tham khảo là tốt cho các ghi chú áp dụng chung, không chỉ cho tình hình hiện tại. Không ai muốn một luận án trong chính mã.
LarsH

-1

Có lập trình viên này làm một số bảo trì mã. Nếu không, anh ta nên: kiểm tra bất kỳ dự án không thích nào bạn có xung quanh và giao bảo trì cho anh ta.

Thông thường đó là những dự án được ghi chép kém mà bạn mất hàng giờ cố gắng để hiểu những gì đang diễn ra để sửa những gì có thể dễ dàng sửa chữa. Nếu loại kinh nghiệm này không khiến anh ấy muốn cập nhật, tài liệu chính xác và hữu ích sẽ không có gì.


1
Cách tiếp cận này có nhiều khả năng làm cho lập trình viên bỏ việc hơn là đào tạo họ theo cách làm việc đúng đắn.
Martin Brown

-1

Trong một trong những dự án trước đây của tôi đã thiếu hàng tá ý kiến ​​(thuật toán, kết quả hoặc một số JavaDoc cơ bản), vì vậy tôi chỉ quyết định thực hiện 130 vấn đề cho anh ấy, thông báo qua email về mỗi vấn đề cứ sau 4 ngày. Sau 3 tuần anh ấy có 280 vấn đề, sau đó anh ấy quyết định viết bình luận.


-1

Nhận xét có một mục đích và chỉ một mục đích:

Tại sao mã này làm điều này?

Nếu một bình luận không giải thích tại sao một cái gì đó là như vậy, thì nó nên được gỡ bỏ. Những bình luận vô dụng làm lộn xộn mã ít hơn vô dụng, chúng có hại tích cực.

Tôi có thói quen biến nhận xét của mình thành điều rõ ràng nhất trong IDE của mình. Chúng được làm nổi bật với văn bản màu trắng trên nền màu xanh lá cây. Việc thực sự thu hút sự chú ý của bạn.

Điều này là do mã giải thích những gì đang làm, và các ý kiến ​​cho lý do tại sao nó đang làm điều đó. Tôi không thể nhấn mạnh điều này đủ.

Một ví dụ điển hình của một bình luận:

/* Must instantiate clsUser before trying to encrypt a password because the code to 
   encrypt passwords only uses strong encryption if that module is loaded. */

Một ví dụ tồi:

/* instantiate clsUser */

Nếu bạn đang sử dụng các nhận xét dưới dạng "các phần" của mã: Cắt phương thức voi ma mút của bạn thành các hàm có tên nhỏ hơn, hữu ích và xóa các nhận xét.

Nếu bạn đang nói những gì bạn đang làm trên dòng tiếp theo: Làm cho mã tự giải thích và xóa nhận xét.

Nếu bạn đang sử dụng nhận xét làm thông điệp cảnh báo: Hãy chắc chắn rằng bạn nói lý do tại sao.


-2

Để bổ sung các câu trả lời ở đây, tôi có thể thêm "Nếu bạn muốn nó được thực hiện đúng, bạn phải tự làm nó."

Tôi không có nghĩa là trở thành "bình luận viên trưởng", ý tôi là trở thành một hình mẫu trong việc chứng minh những gì bạn muốn nhà phát triển khác này làm. Họ nói hiển thị là hiệu quả hơn so với nói . Nếu bạn có thể chứng minh lợi ích của các bình luận chất lượng, hoặc thậm chí là cố vấn cho nhà phát triển khác này (đến mức mà anh ta sẵn sàng), bạn có thể tìm thấy nhiều thành công hơn trong việc áp dụng nhận xét mã.

Tương tự, ở nhà có một số công việc gia đình tôi không quan tâm để làm. Tuy nhiên, những việc lặt vặt đó cũng là những việc vặt "thú cưng" của vợ tôi ... những việc lặt vặt phải được thực hiện để cô ấy được hạnh phúc. Tình huống tương tự áp dụng ngược lại. Tôi nghĩ rằng bạn có thể phải chấp nhận rằng nhà phát triển khác này có các ưu tiên khác với bạn và sẽ không đồng ý với bạn về mọi thứ. Giải pháp mà vợ tôi và tôi đã tìm thấy là đối với những việc lặt vặt "thú cưng" đó, chúng tôi chỉ phải tự làm chúng, ngay cả khi điều đó có nghĩa là tự mình làm thêm một chút.


1
Tôi tranh luận rằng việc hiển thị mã sạch hơn / tái cấu trúc mã của họ để dễ đọc hơn chứng tỏ một sự thay đổi lớn hơn so với việc đưa các bình luận vào mã.
Makoto

Bất cứ ai có thể giải thích cho tôi những gì họ không thích về ý tưởng của tôi ...?
M. Dudley

-6

Đơn giản: nếu nhân viên không đưa ra nhận xét, hãy bảo anh ta nhấn shift+alt+jđể nhận xét tự động theo từng phương pháp đồng thời với việc nhập mã. xin vui lòng sửa đổi mã để tránh những vấn đề này.


11
"Tự động bình luận"? Vì vậy, đó là nơi mà tất cả những bình luận "tăng i lên 1" đến từ đâu? IDE nào làm điều này (vì vậy tôi có thể tránh các công việc đang được sử dụng)?
một CVn

Tôi đã cố chỉnh sửa nó thành một cái gì đó có thể đọc được, nhưng tôi không chắc là từ đầu tiên nên có dấu phẩy trước nó hay sau nó. Là cụm từ làm cho ý kiến ​​đầu tiên hoặc đầu tiên nói trong mỗi phương pháp ?
TRiG
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.