Làm thế nào để rèn luyện bản thân để tránh viết mã thông minh, thông minh? [đóng cửa]


75

Bạn có biết cảm giác đó khi bạn chỉ cần thể hiện thủ thuật mới đó với Expressions hoặc khái quát ba thủ tục khác nhau không? Điều này không nhất thiết phải ở quy mô Phi hành gia Kiến trúc và trên thực tế có thể hữu ích nhưng tôi không thể không chú ý người khác sẽ thực hiện cùng một lớp hoặc gói theo cách rõ ràng hơn, đơn giản hơn (và đôi khi nhàm chán).

Tôi nhận thấy tôi thường thiết kế các chương trình bằng cách khắc phục vấn đề , đôi khi có chủ ý và đôi khi hết nhàm chán. Trong cả hai trường hợp, tôi thường thành thật tin rằng giải pháp của tôi rất rõ ràng và thanh lịch, cho đến khi tôi thấy bằng chứng ngược lại nhưng thường thì đã quá muộn. Ngoài ra còn có một phần của tôi thích các giả định không có giấy tờ để sao chép mã, và thông minh để đơn giản.

Tôi có thể làm gì để chống lại sự thôi thúc viết mã thông minh của Hồi giáo và khi nào thì chuông reo mà tôi đang làm sai ?

Vấn đề càng trở nên khó khăn hơn khi tôi hiện đang làm việc với một nhóm các nhà phát triển có kinh nghiệm và đôi khi những nỗ lực của tôi trong việc viết mã thông minh có vẻ ngu ngốc ngay cả với chính tôi sau khi thời gian xua tan ảo tưởng về sự thanh lịch.


5
hơi off topic, nhưng thedailywtf.com/Articles/...

@Joe: đây là rất về chủ đề, cảm ơn! Tôi đã đọc bài viết nhưng đó là một niềm vui để khám phá lại nó bây giờ.
Dan

33
Gỡ lỗi rất nhiều mã thông minh ... nên thực hiện các mẹo.
Dan Olson

@Joe cơ sở dữ liệu của liên kết cơ sở dữ liệu trong bài viết đó là chết cho.
jnewman

Câu trả lời ngắn: mã ngắn nhất, đơn giản nhất sẽ thắng. Loại bỏ trùng lặp, nhưng không thêm các lớp "chỉ vì". Tái cấu trúc của Fowler có thể cung cấp cho bạn một cái nhìn sâu sắc.
kevin cline

Câu trả lời:


54

Vấn đề càng trở nên khó khăn hơn khi tôi hiện đang làm việc với một nhóm các nhà phát triển có kinh nghiệm và đôi khi những nỗ lực của tôi trong việc viết mã thông minh có vẻ ngu ngốc ngay cả với chính tôi sau khi thời gian xua tan ảo tưởng về sự thanh lịch.

Giải pháp của bạn nằm ở đây. Tôi cho rằng "có kinh nghiệm" trong bối cảnh này có nghĩa là "nhiều kinh nghiệm hơn bạn". Ít nhất, bạn rõ ràng tôn trọng họ. Đây là một cơ hội học tập có giá trị - giả sử cái tôi của bạn có thể đạt được thành công. (Những điều thú vị, bản ngã. Thật đáng tiếc chúng ta cần chúng như vậy.)

Bạn có đánh giá mã với những người này? Nếu vậy, nếu họ chưa làm điều đó, hãy yêu cầu họ gọi cho bạn một cách nhảm nhí. Đề cập rằng bạn đã nhận thấy xu hướng của bản thân quá mức, sử dụng máy khoan khí nén hàng đầu được thiết kế tỉ mỉ (tốt nhất là được sử dụng bởi một loại android công nhân đường tự động) khi một cây búa vuốt đơn giản là quá đủ .

Bạn có thể thường xuyên thấy mình ngồi vắt vẻo trong khi mặt bạn đỏ lên trong quá trình đánh giá mã. Chịu đựng nó. Bạn đang học.

Sau đó, một khi bạn đã có một vài trong số này dưới vành đai của mình, hãy chú ý đến những khoảnh khắc mà bạn nghi ngờ rằng bạn có thể quá mức. Khi những khoảnh khắc đó đến, hãy tự hỏi: "Nếu ai đó gọi tôi ra điều này trong quá trình xem xét mã, tôi có thể bảo vệ giải pháp của mình là giải pháp tốt nhất hiện có không? Hay có một giải pháp đơn giản hơn mà tôi đang từ bỏ?"

Đôi khi, đánh giá ngang hàng là cách tốt nhất để có cái nhìn tốt về công việc của chính bạn.


Cảm ơn cho một câu trả lời thực sự tốt. Không, chúng tôi không có đánh giá mã, chủ yếu là vì dự án lớn và tài nguyên của khách hàng rất hạn chế. Nhưng tôi đoán tôi có thể tự kiểm tra bằng cách hỏi "tôi có thể bảo vệ giải pháp của mình là giải pháp tốt nhất hiện có" vào cuối mỗi ngày không.
Dan

7
Không có mã đánh giá? Thôi nào. Tôi sẽ viết một cái gì đó tự cho mình là đúng và kinh hoàng, nhưng tôi cũng đã làm việc trong môi trường đó. Chúng tốn thời gian và là một nỗi đau trong mông của mọi người, nhưng chúng thực sự có giá trị cho cả dự án trong tay và sự phát triển cá nhân của riêng bạn. Nếu chủ đề "Có nên thực hiện đánh giá mã?" bao giờ đi lên, chắc chắn rằng bạn đang xuống như "địa ngục có!" Và nếu họ không bị đình trệ với thời hạn lờ mờ của riêng mình, bạn có thể yêu cầu đồng nghiệp mà bạn tôn trọng để giao việc mà bạn không chắc chắn về việc xem xét mã không chính thức.
BlairHippo

1
Vâng, dự án là một phần khởi động và do một số sai lầm trong kế hoạch, về phía khách hàng, chúng tôi đã gặp phải tình huống khi chúng tôi thực sự cần giao hàng nhanh chóng nếu không nó không đáng để nỗ lực. Tôi vừa nói chuyện với Thủ tướng của chúng tôi và ông xác nhận thời hạn cuối cùng là lý do duy nhất tại sao chúng tôi không thực hiện đánh giá mã, ít nhất là bây giờ. Nếu khởi nghiệp thành công và hạn chế thời gian trở nên thoải mái hơn, chúng tôi có thể thực hiện đánh giá trong tương lai.
Dan

2
Ôi trời. Âm thanh thú vị - với tất cả các ý nghĩa tốt và xấu mà từ đó mang theo nó. :-) Nguoi ban doi may man; Đây là hy vọng bạn đang bắt đầu một cái gì đó tuyệt vời.
BlairHippo

8
@BlairHippo: Tôi chỉ làm theo lời khuyên của bạn, bình tĩnh lại và vui lòng hỏi đồng nghiệp, người đã chỉ ra vấn đề được giới thiệu bởi những thay đổi của tôi để thực hiện đánh giá không chính thức với tôi và anh ấy đã đồng ý. Điều này cũng giúp loại bỏ sự lúng túng nhất định khỏi cuộc trò chuyện của chúng tôi (như trong "bạn viết mã phức tạp và tôi phải sửa nó .."). Cảm ơn!
Dan

20

Điều tốt nhất để làm là ghi nhớ câu châm ngôn của Brian Kernighan:

Đầu tiên, gỡ lỗi khó gấp đôi so với viết mã ở vị trí đầu tiên. Do đó, nếu bạn viết mã một cách khéo léo nhất có thể, theo định nghĩa, bạn không đủ thông minh để gỡ lỗi nó.


1
Tôi hoàn toàn đồng ý với trích dẫn nhưng câu hỏi là làm thế nào để vượt qua sự cám dỗ để trở thành cậu bé thông minh ? Bạn có thể được khuyên không nên ăn kem khi bị bệnh nhưng đôi khi điều đó không có ích.
Dan

13
+1 cho một câu châm ngôn mà mọi con khỉ mã nên biết, nhưng -1 vì đã không cung cấp cho OP bất kỳ cái nhìn sâu sắc nào về cách áp dụng nó vào công việc của chính mình. Vì vậy, tất cả phát triển ra để không nhấp vào mũi tên.
BlairHippo

2
Trích dẫn tuyệt vời, nhưng không thực sự là một câu trả lời cho câu hỏi của OP.
Jim G.

5
Xin chào Daniel, chúng tôi đang tìm kiếm nhiều hơn một trích dẫn: trang web chỉ hữu ích khi các câu hỏi được ghép nối với các câu trả lời dài, chu đáo chứa đầy kinh nghiệm, sự kiện và tài liệu tham khảo. Có bất cứ điều gì hơn, từ kinh nghiệm của riêng bạn, bạn có thể thêm?

2
-1: Không trả lời câu hỏi của OP một chút nào.
Thomas Eding

15

Thường có ít nhất ba giải pháp cho các vấn đề phần mềm có ý nghĩa quan trọng: cách rõ ràng, cách phức tạp không rõ ràng (thông minh) và cách đơn giản không rõ ràng (thanh lịch). Một trích dẫn về các tác giả được áp dụng ở đây:

Đặt mọi thứ vào đầu bạn và sau đó bạn là một nhà văn. Nhưng một tác giả là một người có thể đánh giá giá trị của chính mình, mà không thương hại và phá hủy hầu hết. - Colette

Bạn sẽ không thể viết mã thanh lịch cho đến khi bạn có thể đánh giá giá trị mã của riêng bạn, mà không thương hại và phá hủy hầu hết mã đó. Nếu bạn đánh giá mã thanh lịch bằng kết quả cuối cùng, nó có vẻ dễ hiểu, nhưng nó đòi hỏi phải chậm lại, trải qua nhiều bản nháp, tìm kiếm lời khuyên của người khác và trích dẫn những gì không ngồi ngay trên trang. Điều đó có nghĩa là ngay cả khi mã của bạn hoạt động hoàn hảo, bạn vẫn tự hỏi mình hoặc đồng nghiệp tại sao điều gì đó không đúng, cho đến khi bạn hài lòng với câu trả lời. Có thể nó cảm thấy quá dài, hoặc lặp đi lặp lại, hoặc bạn cảm thấy trình biên dịch nên đã có thể bắt được một loại lỗi nhất định. Hầu hết các lập trình viên với một chút kinh nghiệm có thể nhận ra mã không phù hợp một cách dễ dàng. Bí quyết là tìm hiểu tại sao .

Đó là cách có phương pháp để viết mã thanh lịch hơn. Nó cũng thường xuyên đòi hỏi một cái nhìn sâu sắc giúp bạn nhìn nhận vấn đề theo một cách mới. Điều này khó khăn hơn để đạt được, nhưng nó giúp làm chậm và chỉ nghĩ về một vấn đề trước khi bạn lao vào viết mã. Khi bạn tìm thấy một giải pháp tốt, hãy tìm một giải pháp tốt hơn. Đọc mã khác giúp. Tham gia lớp học hoặc đọc sách về thực hành tốt nhất sẽ giúp. Học các mô hình lập trình khác giúp. Xin lời khuyên từ các đồng nghiệp có mã mà bạn ngưỡng mộ giúp đỡ.


3
Điều đó làm tôi nhớ đến câu nói của một nhà toán học cũ: "Đối với mọi vấn đề, có một giải pháp đơn giản, thanh lịch và sai lầm".
Joris Timmermans

9

Tôi sẽ thêm vào các câu trả lời hiện có, phát triển theo cách TDD, vì vậy trước tiên bạn viết các bài kiểm tra về những gì mã của bạn nên làm, và sau đó thực hiện để làm cho các bài kiểm tra của bạn trở nên xanh. Bằng cách này, bạn sẽ chỉ đáp ứng các yêu cầu mà các bài kiểm tra đang áp đặt. Vì bạn sẽ viết bài kiểm tra, đó là một cách tốt để tiếp cận tự kỷ luật để phát triển.


Tôi chắc chắn cố gắng áp đặt điều này lên bản thân mình bất cứ khi nào có thời gian.
jnewman

Viết bài kiểm tra sau đó cũng là một cách tốt để phát hiện ra những lỗi lớn trong mã của bạn. Đó là một cách nào đó tự xem xét. Nhưng TDD rõ ràng là cách tiếp cận tốt nhất nếu bạn đang bắt đầu mới.
vanna

6

Khi làm việc cho một nhóm lớn và năng động trải dài qua nhiều nhóm kỹ năng và năm khác nhau, sự phát triển có một sự tiến triển tự nhiên để "chết lặng" đến mức thấp nhất của thành viên bảo thủ nhất hoặc thiếu trí tuệ nhất trong nhóm, hiện tại hoặc lịch sử.

Điều này có thể không nhất thiết là một điều xấu bởi vì mã thông minh có thể khó gỡ lỗi hơn, khó truyền tải hơn trong một đặc tả kỹ thuật và mất nhiều thời gian hơn để viết, làm chậm thời gian phát triển.

Đôi khi mã thông minh rất quan trọng, chẳng hạn như khi mã thông minh mang lại hiệu quả và hiệu suất tăng sau này trong chu kỳ trưởng thành của phần mềm khi hiệu suất trở thành một yêu cầu.

Mã thông minh cũng có cách truyền tải mã nhanh hơn để phát triển và dễ đọc và dễ hiểu hơn cho một nhóm có thể không tiếp xúc với tính năng ngôn ngữ mới hoặc cuộc gọi thư viện. Ví dụ, khi lần đầu tiên được giới thiệu với Linq bởi một nhà phát triển cơ sở, tôi đã cảm thấy ghê tởm ngay lập tức vì nó không cần thiết, khó gỡ lỗi, ngu ngốc và "thông minh". Sau khi tự chơi với nó và khám phá ra các truy vấn Linq hữu ích và mạnh mẽ như thế nào, tôi đã đầu tư thời gian để tìm hiểu nó và mã DAL của tôi chưa bao giờ sạch sẽ và dễ đọc hơn, cũng như dễ dàng gỡ lỗi và mở rộng hơn.

Tôi rất tiếc vì không có một suy nghĩ cởi mở trước đây và ước rằng tôi sẽ không quá khắc nghiệt với một nhà phát triển cơ sở "thông minh" như vậy.

Quan điểm của tôi là mã "thông minh" NÊN bị nghi ngờ, nhưng chúng ta không nên tiếp tục cuộc thập tự chinh chống lại nó bởi vì nó có thể kìm hãm sự sáng tạo và đổi mới.

EDIT: Tôi chỉ nhận ra rằng tôi đã không trả lời đầy đủ câu hỏi của bạn. Nếu bạn có khả năng trong dự án của mình rất dễ dàng viết mã thông minh thì có lẽ nhóm nên áp dụng các tiêu chuẩn mã hóa chặt chẽ hơn để tuân theo một khuôn mẫu và phong cách thống nhất và khác biệt. Điều này sẽ giúp rút ra các dòng trong hộp cát của bạn để bạn không lang thang ra đường đuổi theo một quả bóng.


6

Nếu 20% (% của bạn có thể thay đổi) hoặc nhiều dòng được thêm vào của bạn cần phải là tài liệu - đã đến lúc lùi lại và suy nghĩ lại .

Tôi thực sự nghĩ rằng bạn nên cố gắng để trở nên thông minh, đó là một tác dụng phụ tự nhiên của việc thành thạo hơn. Đưa ra cho mình một hướng dẫn chung như% ý kiến ​​cần thiết để làm cho bản thân rõ ràng là một cách tốt để buộc bản thân đứng lại và đánh giá xem sử dụng điều mới mà bạn học được là một lựa chọn khôn ngoan hay chỉ là một cách để thể hiện đồ chơi mới của bạn.


3
Tôi có xu hướng coi tài liệu / ý kiến ​​là một thất bại. Khi bạn cần ghi lại / nhận xét một cái gì đó, điều đó có nghĩa là ở nơi đầu tiên mã của bạn không rõ ràng. Thật không may, đây là một mục tiêu không thực tế và chúng tôi cần một số điểm. Chỉ cần lưu ý rằng phần này của mã nên được giảm đến một mức tối thiểu.
deadalnix

@deadalnix: Không phải là một điểm xấu. Tôi nghi ngờ% của tôi sẽ cao hơn hầu hết bởi vì tôi thường viết mã bằng ngôn ngữ lắp ráp vĩ mô và đã chết. Khó đọc hơn và mỗi lần thuê mới phải học langague, kết quả là cần nhiều bình luận hơn.
DKnight

2
@deadalnix - tài liệu để giải thích làm thế nào là một dấu hiệu mã của bạn không rõ ràng. Tài liệu để giải thích lý do tại sao rất cần thiết. Tôi đã thấy tất cả quá nhiều đoạn mã mà tôi có thể hiểu những gì họ đã làm nhưng không hiểu tại sao họ quyết định làm theo cách không trực quan đó. Điều đó làm cho nó rất khó để duy trì.
HLGEM

@HLGEM Điều này là tranh cãi. Sự không rõ ràng của mã có thể đến từ các lib / API được thiết kế tồi, từ sự không rõ ràng trong chính khái niệm giống như sự phân tách các mối quan tâm xấu. Chúng ta đang sống trong thế giới thực và năng lực của chúng ta là hữu hạn, vì vậy chúng ta chắc chắn yêu cầu tài liệu, nhưng mỗi khi chúng ta cần nó, điều đó có nghĩa là ai đó đã viết mã không hoàn hảo. Không có tài liệu nào không phải là điều bạn nên làm - thậm chí đừng nghĩ về nó, mà là điều bạn phải suy nghĩ mọi lúc để tiếp tục cải thiện đúng hướng.
deadalnix

@deadalnix - mã hoàn hảo không bao giờ là một giải pháp thiết thực trong thế giới thực.
JeffO

4

Tôi không thể cưỡng lại việc thử một cái gì đó thông minh.

Vì vậy, tôi làm điều đó trong một dự án đồ chơi, vào thời gian riêng của tôi, ở nhà.

Khi sự mới lạ biến mất - vấn đề được giải quyết.


3

Tôi tin rằng một cách để tìm hiểu xem mã của bạn có quá "thông minh" hay không là lùi lại một bước và tự hỏi mình những điều sau:

Nếu tôi đưa bản in mã này cho ai đó chưa từng làm việc với dự án / mã này, liệu họ có thể đọc nó và mô tả lại cho tôi biết chức năng này làm gì (sau khi cung cấp cho họ một số ngữ cảnh ngắn)? Nếu không, tôi sẽ phải giải thích bao nhiêu? Làm thế nào tôi có thể giải thích điều này với ai đó dùng CS101?

Nếu nó chỉ ra rằng bạn sẽ phải đưa ai đó đi qua từng dòng hoặc hầu hết các dòng trong một phương thức hoặc lớp, thì có lẽ nó quá thông minh. Nếu bạn phải giải thích các cấu trúc ngôn ngữ (ví dụ LINQ) cho một người không quen thuộc với nó, điều đó có thể ổn. Nếu bạn phải nhìn vào một dòng và suy nghĩ về nó một chút trước khi bạn có thể giải thích nó, mã của bạn cần phải được cấu trúc lại.


Tôi đã nghe điều này được gọi là "Vịt cao su" khi áp dụng để giải quyết vấn đề; khi bị bối rối, hãy thử giải thích vấn đề cho ai đó không biết gì về nó (như, bạn biết, vịt cao su của bạn) và xem liệu giải pháp không rơi vào lòng bạn. Tôi phải nghĩ rằng nó cũng sẽ làm việc cho việc này.
BlairHippo

2

1) Bị đốt cháy bởi nó trước đó để bạn biết đó là một điều xấu. Cố gắng gỡ lỗi một cái gì đó từ lâu mà viết khéo léo là niềm vui lớn. Tôi nghĩ rằng bạn có điều đó được bảo hiểm.
2) Nhận xét mã của bạn, giải thích những gì bạn đang làm trước mỗi phần của mã.
3) Nếu bạn thấy mình phải vật lộn để giải thích nó, hoặc cảm thấy cần phải chèn một sơ đồ, thì những gì bạn vừa làm là quá thông minh và có thể được thực hiện sạch sẽ hơn.

Giải pháp thông minh cho các vấn đề có thể là tuyệt vời, cho đến khi bạn phải gỡ lỗi hoặc mở rộng chúng. Đôi khi đó là giải pháp duy nhất. Nếu bạn có thể mô tả chính xác những gì nó làm, và làm thế nào, giải pháp thông minh có thể được chấp nhận.

Tôi thường sử dụng bình luận để mô tả những gì tôi đang làm với một phần của mã. Nếu nó có vẻ khó hiểu nhất, tôi cũng mô tả cách tôi đang làm nó. Lý tưởng nhất, mã nên được thẳng về phía trước và tự giải thích. Nhưng nếu tôi đấu tranh để giải thích cách tôi đã làm những gì tôi vừa làm, thì đó là một dấu hiệu rõ ràng rằng tôi cần phải lùi lại và thử lại.


2
Thủ thuật bình luận cũng có tác dụng với tôi. Trong số các lý do khác, tôi luôn bao gồm một khối nhận xét trên bất kỳ chương trình con không tầm thường nào như một loại kiểm tra độ tỉnh táo cuối cùng. Nếu tôi thấy mình phải giải thích rất nhiều (hoặc thậm chí, đôi khi, xin lỗi) các phần mã bị xáo trộn hoặc khó hiểu hoặc các thông số đầu vào kỳ lạ hoặc bất cứ điều gì, đó là một dấu hiệu cảnh báo tôi có thể cần suy nghĩ lại về giải pháp một chút.
BlairHippo

@BlairHippo HA! "kiểm tra sự tỉnh táo cuối cùng" Tôi thích điều đó.
Philip

2

Có lẽ một cách tốt để bắt đầu viết mã đơn giản là giải phóng niềm đam mê thông minh trong một dự án đòi hỏi sự thông minh . Phần còn lại của câu trả lời là dành riêng cho .NET nhưng tôi chắc chắn người ta có thể tìm thấy các dự án cấp độ tương tự trong bất kỳ ngôn ngữ nào khác.

các khung tiêm phụ thuộc nguồn mở để làm việc mà chỉ cần hỏi Expressionkiến thức về thủ thuật, có F # và một loạt các nhiệm vụ tuyệt vời mà người ta có thể muốn thử.

Nếu bạn học toán (và đó là thuyết bất khả tri về ngôn ngữ ), thì có Project Euler cho bạn.

Cuối cùng, nhưng không kém phần quan trọng, trong thế giới .NET có Mono Project có rất nhiều lĩnh vực cần sự chú ý của nhà phát triển , một số trong đó khá phức tạp. Làm thế nào về việc đóng góp cho một công cụ phân tích mã .NET tĩnh nguồn mở ? Có một số phân tích IL liên quan, cũng như các công cụ cấp cao. Jb Evain luôn làm việc trên một cái gì đó thú vị, cho dù đó là thư viện phản chiếu, Expressionhỗ trợ hay trình dịch ngược .NET.

Nếu không có gì phù hợp, chỉ cần bắt đầu khuôn khổ chế giễu của riêng bạn :-)


2

Bạn có biết cảm giác đó khi bạn chỉ cần thể hiện thủ thuật mới đó với Biểu thức hoặc khái quát ba thủ tục khác nhau?

Không

Đây là một trong những lý do tại sao tôi luôn nói rằng đó là một điều tốt khi các nhà phát triển mới bị ném vào một mớ hỗn độn mã speghetti không có giấy tờ để duy trì và tái cấu trúc. Nó sẽ dạy cho họ thực tế về việc duy trì mã 'thông minh' quá mức mà họ không viết, và hy vọng sẽ thấm nhuần một số sự đồng cảm cho người học giả nghèo, người sẽ phải gỡ lỗi mã của họ sau 5 năm kể từ bây giờ.


Tôi nghĩ rằng điều này có nhiều khả năng làm cho họ thất vọng và nghĩ rằng mã THEIR sẽ tốt hơn và thanh lịch hơn nhiều so với những người mới viết bài lộn xộn NÀY. Không ai viết mã với ý định làm cho nó khó duy trì.
sara

2

Tôi nghĩ chủ đề được lựa chọn tốt. Thật tuyệt vời khi viết một dòng Perl thực hiện mười nghìn thứ cùng một lúc, nhưng sau đó nó thật tệ khi bạn phải xem lại nó.

Trên một lưu ý khác, thông minh hay không, mã phải được ghi lại. Có một sự không phù hợp trở kháng cố hữu giữa các ngôn ngữ lập trình được ngành công nghiệp chấp nhận và các khái niệm cấp cao mà chúng ta là con người đã quen với suy nghĩ của chúng ta. Mã tự viết tài liệu đơn giản là không thể thực hiện được - cho đến khi nó trở thành ngôn ngữ tự nhiên, đó là. Ngay cả mã Prolog cũng cần phải được ghi lại, tuy nhiên, ở mức độ cao, nó vẫn còn khá trang trọng.

Mã mệnh lệnh hạt mịn phục vụ để thực hiện các kế hoạch hạt thô - cần phải được ghi lại. Tôi không muốn phải đọc qua tất cả 50 dòng của phương pháp khi nhận xét lộ trình 3 dòng nhanh sẽ thực hiện.

Chỉnh sửa sau: Một ví dụ hùng hồn hơn là một ví dụ vượt qua máy tính. Một cuốn sách có thể được viết rất tốt, nhưng chúng ta thường muốn xử lý nó ở các mức độ trừu tượng khác nhau. Thông thường, một bản tóm tắt của cuốn sách sẽ làm, và đó là những gì bình luận có thể cung cấp cho mã. Tất nhiên mã được trừu tượng hóa tốt có thể đi một chặng đường dài hướng tới tài liệu tự, nhưng nó không thể cung cấp cho bạn tất cả các mức độ trừu tượng.

Và các bình luận cũng có thể hoạt động như sidenote trong một cuốn sách, khi chúng ta cần giải thích quá trình suy luận đằng sau một yêu cầu trong văn bản chính mà không làm hỏng nó.

Với bối cảnh này, tôi thấy rằng tuyên bố trước đây của tôi đề cập đến ngôn ngữ tự nhiên vượt quá nhu cầu bình luận là không chính xác. Ngay cả ngôn ngữ tự nhiên, như trong một cuốn sách, cũng có thể tự cho mình mượn tài liệu, để giải thích một cách thưa thớt sự trừu tượng được thể hiện trong văn bản, hoặc để cung cấp các đường vòng mà không làm hỏng văn bản chính. Với lưu ý rằng mã được trừu tượng hóa tốt có thể đã đi một chặng đường dài hướng tới việc tự ghi lại tài liệu.

Cuối cùng, nhưng không kém phần quan trọng, các bình luận có thể giúp người viết mã giữ mức độ trừu tượng cao. Đôi khi tôi nhận ra rằng hai bình luận liên tiếp tôi đưa vào danh sách các bước không nói ở cùng mức độ trừu tượng, điều này ngay lập tức đảm bảo một cái nhìn quan trọng về những gì tôi đang làm với mã đó.

Một số vấn đề vượt qua mã hóa và ảnh hưởng đến mã hóa giống như các hoạt động khác. Nhận xét có thể cung cấp trợ giúp trong việc làm rõ lý do đằng sau và các khía cạnh của mã của chúng tôi và tôi thấy chúng là một người bạn đồng hành dễ chịu nói một ngôn ngữ nhẹ nhàng hơn để mang lại lợi ích cho người đó để thay đổi.


1

Làm sao? Tiếp tục hiển thị mã của bạn cho những nhà phát triển có kinh nghiệm. và khi bạn bị cho là ngụy biện và sặc sỡ, hãy mút nó và hỏi họ xem họ sẽ làm như thế nào và tại sao (dĩ nhiên là theo cách không đối đầu).

Chỉnh sửa trong ánh sáng -1:

Nhiều mặt trăng trước đây, tôi đã ở trong tình huống tương tự - tôi có một ông chủ sẽ co rúm mỗi khi tôi sử dụng một con trỏ trong Delphi hoặc 'với cấu trúc', một người khác đe dọa sẽ sa thải tôi nếu tôi không ngừng quay vòng tất cả các booleans của mình với 0-1 và sử dụng các biến chữ cái duy nhất ở mọi nơi.

Tôi đã học được vì tôi đã hỏi tại sao và họ đã gặp khó khăn để giải thích vì họ nghĩ tôi có thể đạt được điều gì đó - LOL ....


1
Xin chào Mikey, chúng tôi đang tìm kiếm nhiều hơn một lớp lót: trang web chỉ hữu ích khi các câu hỏi được ghép nối với các câu trả lời dài, chu đáo chứa đầy kinh nghiệm, sự kiện và tài liệu tham khảo. Có bất cứ điều gì hơn, từ kinh nghiệm của riêng bạn, bạn có thể thêm?

1

Tôi có cảm thấy cần phải thể hiện? Không, không còn nữa. Làm thế nào tôi vượt qua nó? Giống như hầu hết mọi người vượt qua bất kỳ thói quen xấu nào khác ... thực hành có chủ ý và có chủ ý các kỹ thuật phù hợp. Bạn làm điều đó đủ, bạn sẽ hiểu giá trị của các thực tiễn tốt nhất và thông qua việc sử dụng liên tục của họ, bạn sẽ phát triển các thói quen tốt.

Cũng nhận ra rằng bằng cách tập trung vào phần mềm chức năng, đó là đúng giờ và dễ dàng bảo trì, bạn sẽ nhận được sự công nhận mà bạn tìm kiếm. Các nhà phát triển có kinh nghiệm sẽ đến gặp bạn và nói "Người đàn ông mà mô-đun bạn viết được thiết kế tốt. Tôi chỉ phải thực hiện một thành phần để cắm nó vào dự án của mình." trái ngược với "Tôi đã phải làm lại toàn bộ mô-đun mà bạn đã viết chỉ để sử dụng nó trong một thành phần khác? Bạn thậm chí đã nghe nói về Bob Martin hay Ward Castyham chưa?"

TLDR: Bạn không đơn độc. Công nhận kỹ năng đạt được tốt nhất là sản phẩm phụ của việc giải quyết vấn đề một cách thông minh.


0

Đối với tôi, mã quá thông minh thường cố gắng giải quyết các yêu cầu trong tương lai tưởng tượng thay vì tập trung vào các yêu cầu ngày nay. Cái bẫy lớn!

Mã quá phức tạp 0% không phải là mục tiêu có thể đạt được. Có lẽ thậm chí không phải là mục tiêu tốt nhất để phấn đấu. Mã quá phức tạp là xấu, nhưng bạn phải thử những điều mới để phát triển như một lập trình viên. Bạn không nên thử chúng trên mã sản xuất nếu bạn có thể tránh nó. Không giống như máy móc, con người mắc sai lầm.

Mã đánh giá giúp. Dành nhiều năm để sửa mã "thông minh" của người khác giúp. Tập trung vào những gì khách hàng thực sự cần ngày hôm nay giúp.

Các trường học và doanh nghiệp có đội ngũ nhân viên dọn dẹp và bảo trì nhân viên. Mã cần dọn dẹp và bảo trì quá! Khi có thể, hãy dọn dẹp mớ hỗn độn (đặc biệt là của riêng bạn)! Tôi nghĩ đó là điều tốt nhất có thể làm.


-2

Ngoài những lời khuyên tốt được đưa ra cho đến bây giờ (xem lại mã, gỡ lỗi, phương pháp TDD), bạn nên (đọc lại) theo thời gian (những cuốn sách hay nhất imho) về thực hành mã hóa tốt:

  • Lập trình viên thực dụng
  • Mã hoàn thành
  • Mã sạch

và những người khác, tùy thuộc vào công nghệ bạn sử dụng.


-2

Chỉ cần nhớ YAGNI - Bạn không cần nó .

lập trình viên không nên thêm chức năng cho đến khi thấy cần thiết ...

YAGNI là một nguyên tắc đằng sau thực tiễn XP về "làm điều đơn giản nhất có thể có thể làm việc" (DTSTTCPW). Nó có nghĩa là được sử dụng kết hợp với một số thực tiễn khác, chẳng hạn như tái cấu trúc liên tục, thử nghiệm đơn vị tự động liên tục và tích hợp liên tục. Được sử dụng mà không tái cấu trúc liên tục, nó có thể dẫn đến mã lộn xộn và làm lại lớn ...

Theo những người ủng hộ cách tiếp cận YAGNI, sự cám dỗ để viết mã không cần thiết vào lúc này, nhưng có thể trong tương lai, có những nhược điểm sau:

  • Thời gian sử dụng được lấy từ việc thêm, kiểm tra hoặc cải thiện các chức năng cần thiết.
  • Các tính năng mới phải được gỡ lỗi, ghi lại và hỗ trợ.
  • Bất kỳ tính năng mới nào cũng áp đặt các ràng buộc đối với những gì có thể được thực hiện trong tương lai, vì vậy một tính năng không cần thiết có thể ngăn cản các tính năng cần thiết được thêm vào trong tương lai.
  • Cho đến khi tính năng này thực sự cần thiết, thật khó để xác định đầy đủ những gì nó nên làm và kiểm tra nó. Nếu tính năng mới không được xác định và kiểm tra đúng cách, nó có thể không hoạt động chính xác, ngay cả khi cuối cùng là cần thiết.
  • Nó dẫn đến sự phình to mã; phần mềm trở nên lớn hơn và phức tạp hơn.
  • Trừ khi có thông số kỹ thuật và một số loại kiểm soát sửa đổi, tính năng này có thể không được biết đến đối với các lập trình viên có thể sử dụng nó.
  • Thêm tính năng mới có thể đề xuất các tính năng mới khác. Nếu các tính năng mới này cũng được triển khai, điều này có thể dẫn đến hiệu ứng quả cầu tuyết đối với tính năng leo ...

3
Trong khi điều này có thể đúng - chi tiết hơn sẽ làm cho câu trả lời này tốt hơn nhiều.
ChrisF
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.