vì vậy một số nhà phát triển / quản lý thấy giá trị bằng cách viết ít mã hơn để hoàn thành công việc để chúng tôi có ít mã hơn để duy trì
Đây là một vấn đề mất tầm nhìn về mục tiêu thực tế.
Điều quan trọng là giảm giờ dành cho phát triển . Điều đó được đo bằng thời gian (hoặc nỗ lực tương đương), không phải bằng dòng mã.
Điều này giống như nói rằng các nhà sản xuất ô tô nên chế tạo ô tô của họ với ít ốc vít hơn, bởi vì phải mất một khoảng thời gian khác không để đặt mỗi ốc vít vào. Trong khi đó là chính xác về mặt giáo dục, giá trị thị trường của ô tô không được xác định bởi số lượng ốc vít hoặc không có. Trên hết, một chiếc xe cần phải có hiệu suất, an toàn và dễ bảo trì.
Phần còn lại của câu trả lời là các ví dụ về cách mã sạch có thể dẫn đến tăng thời gian.
Ghi nhật ký
Lấy một ứng dụng (A) không có đăng nhập. Bây giờ tạo ứng dụng B, cùng ứng dụng A nhưng có ghi nhật ký. B sẽ luôn có nhiều dòng mã hơn và do đó bạn cần viết thêm mã.
Nhưng rất nhiều thời gian sẽ chìm vào việc điều tra các vấn đề và lỗi, và tìm ra điều gì đã sai.
Đối với ứng dụng A, các nhà phát triển sẽ bị mắc kẹt khi đọc mã và phải liên tục tái tạo vấn đề và bước qua mã để tìm nguồn gốc của vấn đề. Điều này có nghĩa là nhà phát triển phải kiểm tra từ đầu đến cuối, trong mỗi lớp được sử dụng và cần phải quan sát mọi đoạn logic đã sử dụng.
Có thể anh ấy may mắn tìm thấy nó ngay lập tức, nhưng có lẽ câu trả lời sẽ là ở nơi cuối cùng anh ấy nghĩ đến việc tìm kiếm.
Đối với ứng dụng B, giả sử ghi nhật ký hoàn hảo, nhà phát triển quan sát nhật ký, có thể ngay lập tức xác định thành phần bị lỗi và bây giờ biết nơi để tìm.
Đây có thể là vấn đề của vài phút, giờ hoặc ngày lưu; tùy thuộc vào kích thước và độ phức tạp của codebase.
Hồi quy
Hãy sử dụng ứng dụng A, hoàn toàn không thân thiện với DRY.
Lấy ứng dụng B, là DRY, nhưng cuối cùng lại cần nhiều dòng hơn vì các tóm tắt bổ sung.
Một yêu cầu thay đổi được đệ trình, đòi hỏi phải thay đổi logic.
Đối với ứng dụng B, nhà phát triển thay đổi logic (duy nhất, được chia sẻ) theo yêu cầu thay đổi.
Đối với ứng dụng A, nhà phát triển phải thay đổi tất cả các phiên bản của logic này khi anh ta nhớ nó đang được sử dụng.
- Nếu anh ta quản lý để nhớ tất cả các trường hợp, anh ta sẽ vẫn phải thực hiện cùng một thay đổi nhiều lần.
- Nếu anh ta không quản lý để nhớ tất cả các trường hợp, thì bây giờ bạn đang xử lý một cơ sở mã không nhất quán mâu thuẫn với chính nó. Nếu nhà phát triển quên một đoạn mã hiếm khi được sử dụng, lỗi này có thể không rõ ràng đối với người dùng cuối cho đến tương lai. Tại thời điểm đó, người dùng cuối sẽ xác định nguồn gốc của vấn đề là gì? Ngay cả khi như vậy, nhà phát triển có thể không nhớ những gì thay đổi đòi hỏi, và sẽ phải tìm ra cách thay đổi đoạn logic bị lãng quên này. Có thể nhà phát triển thậm chí không làm việc tại công ty trước đó, và sau đó một người khác bây giờ phải tìm ra tất cả từ đầu.
Điều này có thể dẫn đến lãng phí thời gian rất lớn. Không chỉ trong phát triển, mà còn trong việc săn lùng và tìm ra lỗi. Ứng dụng có thể bắt đầu hoạt động thất thường theo cách mà các nhà phát triển không thể dễ dàng hiểu được. Và điều đó sẽ dẫn đến các phiên gỡ lỗi kéo dài.
Khả năng hoán đổi cho nhà phát triển
Nhà phát triển Một ứng dụng đã tạo A. Mã không sạch cũng không thể đọc được, nhưng nó hoạt động như một bùa mê và đang chạy trong sản xuất. Không có gì đáng ngạc nhiên, cũng không có tài liệu.
Nhà phát triển A vắng mặt trong một tháng do ngày lễ. Yêu cầu thay đổi khẩn cấp được nộp. Không thể đợi thêm ba tuần nữa để Dev A trở lại.
Nhà phát triển B phải thực hiện thay đổi này. Bây giờ anh ta cần phải đọc toàn bộ cơ sở mã, hiểu cách mọi thứ hoạt động, tại sao nó hoạt động và những gì nó cố gắng thực hiện. Điều này mất nhiều thời gian, nhưng hãy nói rằng anh ta có thể làm điều đó trong ba tuần.
Đồng thời, ứng dụng B (mà dev B tạo ra) có trường hợp khẩn cấp. Dev B bị chiếm đóng, nhưng Dev C có sẵn, mặc dù anh ta không biết codebase. Chúng ta làm gì?
- Nếu chúng ta giữ B làm việc trên A và đưa C hoạt động trên B, thì chúng ta có hai nhà phát triển không biết họ đang làm gì và công việc đang được thực hiện dưới mức tối ưu.
- Nếu chúng ta kéo B ra khỏi A và bắt anh ta làm B, và bây giờ chúng ta đưa C lên A, thì tất cả công việc của nhà phát triển B (hoặc một phần đáng kể của nó) có thể sẽ bị loại bỏ. Điều này có khả năng lãng phí ngày / tuần.
Dev A trở về từ kỳ nghỉ của anh ấy và thấy rằng B không hiểu mã, và do đó đã triển khai nó một cách tồi tệ. Đó không phải là lỗi của B, vì anh ta đã sử dụng tất cả các tài nguyên có sẵn, mã nguồn không thể đọc được đầy đủ. Bây giờ A có phải dành thời gian để sửa lỗi dễ đọc của mã không?
Tất cả những vấn đề này, và nhiều vấn đề khác, kết thúc lãng phí thời gian . Có, trong ngắn hạn, mã sạch đòi hỏi nhiều nỗ lực hơn bây giờ , nhưng cuối cùng nó sẽ trả cổ tức trong tương lai khi các lỗi / thay đổi không thể tránh khỏi cần phải được giải quyết.
Quản lý cần phải hiểu rằng một nhiệm vụ ngắn bây giờ sẽ giúp bạn tiết kiệm một số nhiệm vụ dài trong tương lai. Không lên kế hoạch là kế hoạch thất bại.
Nếu vậy, một số đối số tôi có thể sử dụng để chứng minh thực tế là có nhiều LỘC đã được viết?
Lời giải thích goto của tôi là hỏi quản lý xem họ thích gì hơn: một ứng dụng với cơ sở mã 100KLOC có thể được phát triển trong ba tháng hoặc một cơ sở mã 50KLOC có thể được phát triển trong sáu tháng.
Rõ ràng họ sẽ chọn thời gian phát triển ngắn hơn, bởi vì ban quản lý không quan tâm đến KLOC . Các nhà quản lý tập trung vào KLOC đang quản lý vi mô trong khi không hiểu rõ về những gì họ đang cố gắng quản lý.