Làm thế nào để bạn đối phó với mã xấu cố ý?


21

Có rất nhiều câu chuyện về mã xấu cố ý, không chỉ trên TheD DailyWTF mà còn trên SO. Các trường hợp điển hình bao gồm:

  • Có một cấu trúc lãng phí thời gian vô ích (ví dụ: một vòng lặp trống đếm đến một giá trị lớn) để các lập trình viên có thể dễ dàng "tăng tốc" ứng dụng bằng cách loại bỏ nó khi chúng được giao nhiệm vụ.
  • Cung cấp cố ý gây hiểu lầm, sai hoặc không có tài liệu để tạo ra các yêu cầu hỗ trợ đắt tiền.
  • Dễ dàng tạo ra các lỗi, hoặc tệ hơn là tạo ra mặc dù mọi thứ đều hoạt động tốt, khóa ứng dụng để yêu cầu một cuộc gọi hỗ trợ đắt tiền để mở khóa.

Những điểm này hiển thị một thái độ độc hại ít nhiều (mặc dù đôi khi vô tình), đặc biệt là điểm đầu tiên xảy ra khá thường xuyên.

Làm thế nào một nên đối phó với các cấu trúc như vậy? Bỏ qua vấn đề, hoặc chỉ loại bỏ mã vi phạm? Thông báo cho người quản lý của họ, hoặc nói chuyện với người giới thiệu "tính năng"?


10
Là "đôi khi do tai nạn" hay là "cố ý xấu"? Tôi không thấy làm thế nào nó có thể là cả hai.

Câu trả lời:


7

Hầu hết các mã xấu là do thiếu hiểu biết và giải pháp là giáo dục.

Mã xấu cố ý là hoàn toàn khác nhau, do một cái gì đó hoàn toàn không liên quan đến kinh nghiệm của lập trình viên hoặc phần còn lại của dự án. Như vậy, bạn phải tìm hiểu lý do tại sao họ phá hoại mã nhằm mục đích và giải quyết vấn đề đó. Điều này có nghĩa, thường thì không, chính trị văn phòng, và đó hiếm khi là một tình huống dễ chịu cho bất cứ ai.

Làm thế nào tôi sẽ xử lý các mặt chính trị phụ thuộc vào nhiều trường hợp (không nêu ở trên). Làm thế nào tôi có thể xử lý mã này trước tiên để đảm bảo rằng tôi không phải là người hiểu lầm về vấn đề đó, đó thực sự là mã xấu, sau đó sửa các thiếu sót rõ ràng. Nếu hợp lý có thể, viết các bài kiểm tra rằng mã xấu sẽ thất bại. Kiểm tra kỹ mà tôi đã hiểu chính xác có nghĩa là nói chuyện với người đã viết mã. Điều đó nên được thực hiện theo một cách rất đẹp, lịch sự, mà không giả định ý định, và có thể giúp tìm ra lý do cơ bản (chính trị) cần thiết sau này.

Vận chuyển quan trọng hơn sự hoàn hảo của tháp ngà, nhưng có hai điểm đáng để giải quyết. Sửa chữa những thiếu sót rõ ràng giúp bạn đạt được 80% kết quả với 20% nỗ lực và loại trái cây treo thấp đó hiếm khi bị bỏ qua. Nhưng quan trọng hơn, nếu bạn không giải quyết lý do cơ bản (chính trị), rất có thể mã xấu cố ý sẽ được viết và gây ra nhiều vấn đề hơn nữa và có thể ngăn chặn việc vận chuyển.


28

Tôi chưa bao giờ (trong 20 năm lẻ) gặp phải mã xấu cố ý, nhưng các ví dụ bạn trích dẫn dường như (ít nhất là đối với tôi, nhưng IANAL) là cố gắng lừa gạt nhà tuyển dụng hoặc khách hàng, vì vậy bạn có thể có pháp lý nghĩa vụ chỉ ra cho người quản lý của bạn.


2
Đã đồng ý. Không ai viết mã cố ý xấu. Họ đang giải quyết một vấn đề và họ đang giải quyết nó theo cách tốt nhất mà họ biết. Họ có thể sai lầm, thiếu hiểu biết, không biết gì, v.v. Nhưng tôi thực sự không thể hiểu một nhà phát triển cố tình viết một cái gì đó họ biết là xấu.
Dan Ray

8
Ngay cả khi không hợp pháp, ít nhất là có một nghĩa vụ đạo đức.
Nông dân Chris

@ChrisFarmer Bạn không thể tách rời nghĩa vụ đạo đức khỏi bối cảnh rộng hơn - có một số bối cảnh trong đó mã xấu cố tình đại diện cho sự phản kháng tập thể hợp pháp, cả về kinh tế hay chính trị. (Và một hợp đồng lao động chỉ xứng đáng được tôn vinh một cách thiện chí khi mối quan hệ mà nó chính thức hóa không mang tính khai thác cá nhân hay cấu trúc.)
user234461

11

Phụ thuộc vào văn hóa của công ty. Thường xuyên hơn không, đơn giản là công việc của bạn không phải là sửa chữa và dọn sạch tất cả các mã xấu.

Từ Coders tại nơi làm việc , Jamie Zawinski nghĩ về việc áp đảo, cũng có thể được áp dụng trong tình huống này:

Vào cuối ngày, tàu điều chết tiệt! Thật tuyệt khi viết lại mã của bạn và làm cho nó sạch hơn và đến lần thứ ba, nó sẽ thực sự đẹp. Nhưng đó không phải là điểm mà bạn không ở đây để viết mã; Bạn đang ở đây để vận chuyển sản phẩm.

Có rất nhiều lập trình viên và mã xấu ở ngoài đó, và chỉ cần cố gắng sửa tất cả chúng khi bạn gặp nó, với chi phí của dự án / nhiệm vụ hiện tại, có thể đơn giản là không có giá trị nếu sản phẩm "đang hoạt động". Quá thường xuyên, tất cả chúng ta chỉ là những lập trình viên băng keo.

Xem thêm bài của Joel Spolsky: Lập trình viên ống băng


+1 Tôi thực sự là một fan hâm mộ của khái niệm vận chuyển sản phẩm. Tôi nghĩ rằng quá nhiều hồ sơ kỹ thuật chỉ thiếu khái niệm đó.

+1 tôi cũng vậy. Có quá nhiều "Mã sạch" - nhiều loại sách, v.v., ngoài đó chứng thực một quan điểm sai lệch về những gì quan trọng. Chất lượng mã chỉ rất quan trọng. Những người chiến thắng không phải là những người có sản phẩm tốt nhất. Đó là những người có một sản phẩm đủ tốt được vận chuyển đủ nhanh.
Joonas Pulakka

4
Tôi nghĩ rằng bạn đã bỏ lỡ điểm trong câu hỏi - anh chàng nói về mã cố ý xấu , không chỉ đơn giản là mã được viết bởi các lập trình viên xấu.
Hila

@Hila Tôi tin rằng quan điểm của tôi vẫn còn cho dù mã xấu có cố ý hay không. Trừ khi đó là một vấn đề nằm trong danh sách dự án / nhiệm vụ được giao, không phải là trách nhiệm của một lập trình viên băng keo để sửa chữa và làm sạch tất cả các mã xấu . Văn hóa ngoài kia không hàn lâm và để viết mã sạch / đẹp. Đó là về vận chuyển và hỗ trợ một sản phẩm / kinh doanh. Cá nhân tôi rất thích sửa tất cả các mã xấu mà tôi gặp phải, nhưng tôi không thể dành 100% thời gian cho việc đó-- Đơn giản là tôi sẽ không bao giờ có thể hoàn thành nhiệm vụ / dự án được giao cho tôi.
spong

3
@sunpech Nhưng làm sạch mã xấu cố ý không giống như chỉ làm sạch bất kỳ mã nào. Đây không phải là làm cho ứng dụng của bạn trở nên "đẹp" hơn, mà là về việc sửa mã có hại được đưa vào mục đích đó. Nó giống như nói rằng một bác sĩ không nên lấy kéo một đồng nghiệp đã quên bên trong bệnh nhân bởi vì phẫu thuật tim là về cứu sống chứ không phải là những mũi khâu đẹp như thế nào.
Hila

4

Thái độ đó là triệu chứng của một cái gì đó tồi tệ hơn.

  • Là quản lý khuyến khích cạnh tranh của nhà phát triển?

  • Tinh thần đồng đội ở đâu?

  • Là nhiệm vụ được giao bởi người khác ngoài chính đội?

  • ...

Trong mọi trường hợp, loại bỏ mã vi phạm là không đủ. Khiếu nại với người quản lý của anh ấy chắc chắn sẽ không giúp cải thiện tinh thần đồng đội.

Tôi sẽ cố gắng nói chuyện trực tiếp với người đó và cố gắng hiểu tại sao bằng cách hỏi nhiều câu hỏi mà không phán xét anh ta. Toàn đội phải làm điều đó mà không bị áp lực.

Trong hầu hết các trường hợp, hành vi mang tính xây dựng đó đặt vấn đề thực sự (vấn đề tồi tệ hơn) dưới ánh sáng, và sau đó bạn có thể giải quyết nó.

Nếu nó thực sự không hoạt động. Xóa nhà phát triển đó khỏi nhóm.


4

Nếu tôi nghĩ đó là cố ý thì có lẽ tôi sẽ sa thải anh chàng! Nếu đó là kết quả của việc ai đó không phải là một lập trình viên đủ giỏi, tôi sẽ làm việc với các kỹ năng của anh ta. Nếu nó được đẩy từ trên cao xuống thì có lẽ tôi sẽ bắt đầu tìm kiếm một công việc mới.


2

Làm thế nào một nên đối phó với các cấu trúc như vậy? Bỏ qua vấn đề, hoặc chỉ loại bỏ mã vi phạm? Thông báo cho người quản lý của họ, hoặc nói chuyện với người giới thiệu "tính năng"?

Tùy thuộc vào bối cảnh, bất kỳ một trong số đó có thể là phù hợp nhất. Các khả năng khác bao gồm, yêu cầu chuyển sang một dự án khác, nhận một công việc mới và nhiều hành vi khác nhau về đạo đức và / hoặc tính hợp pháp.

Tuy nhiên, do chúng tôi không biết sự thật và những người thực sự có liên quan, không có cách nào mà một người ở vị trí bạn đang mô tả nên chú ý nhiều đến lời khuyên của chúng tôi / trị giá 2 xu.

Nếu đây là một tình huống thực tế mà bạn đang nói đến, có thể đáng để nói một lời im lặng với người quản lý của bạn , hỏi lời khuyên của họ về những gì bạn nên làm. Nếu có thể hãy cố gắng thực hiện cuộc trò chuyện về những gì bạn có thể / nên làm, không phải về việc chỉ ngón tay. Nếu có thể, đừng gọi tên. Có một cơ hội công bằng rằng người quản lý của bạn đã hiểu rõ vấn đề.

Nhưng mặt trái là bạn có thể thổi nó ra khỏi tỷ lệ. Hãy suy nghĩ lâu và chăm chỉ về điều đó trước khi bạn làm bất cứ điều gì. Hãy nghĩ về hậu quả, bao gồm cả khả năng bất kỳ bước nào bạn thực hiện có thể gây tác dụng ngược với bạn ... thật tệ.

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.