[...] Không ai có thể giải thích rõ ràng cho tôi TẠI SAO Điều đó rất quan trọng để hạn chế bản thân bạn trong phạm vi riêng tư để ngăn chặn các lập trình viên khác phá vỡ tính nhất quán của tổ chức dữ liệu.
Trong một nhóm đủ nhỏ với một cơ sở mã đủ nhỏ, thực sự phối hợp tốt với các tiêu chuẩn tốt (có thể chỉ là một người), bạn thường có thể tìm thấy phần mềm đáng tin cậy để mọi dữ liệu mở ra cho mọi người chạm vào với tất cả các trường dữ liệu của một struct
mở rộng tiếp xúc và với struct
định nghĩa rộng mở cho bất cứ ai bao gồm tiêu đề đó để truy cập. Luật Murphy không phải lúc nào cũng áp dụng trong những trường hợp đó.
Nhưng tôi đã làm việc trong kịch bản ngược lại của một cơ sở mã khổng lồ với hàng triệu LỘC có niên đại từ thập niên 80 với một nhóm lớn các nhà phát triển từ khắp nơi trên thế giới, nơi chúng tôi chỉ gặp mặt nhau vài tháng, đôi khi được phối hợp một cách lỏng lẻo hầu như không nói cùng một ngôn ngữ, không có tiêu chuẩn mã hóa nào ngoại trừ SDK mà mọi người thường không tuân theo, dù sao cũng không kiểm tra đơn vị / tích hợp, sử dụng SVN mà không phân nhánh và đôi khi mất 6 tuần mà không kiểm tra mã, chỉ đánh bom chúng tôi với lỗi và Mãi đến lúc đó tôi mới thực sự hiểu giá trị của việc che giấu thông tin và duy trì bất biến .
Tôi đã xử lý các lỗi mà tôi thậm chí không thể tái tạo vấn đề một cách nhất quán trên máy của mình và đôi khi không ai trong chúng tôi có thể giữa cả nhóm. Và cuối cùng khi tôi may mắn có thể tái tạo vấn đề do người dùng báo cáo hoặc một cái gì đó tương tự như nó sau tất cả các loại thử nghiệm và lỗi (và bản dùng thử và lỗi thường mất hàng giờ vì phần mềm của chúng tôi không hiệu quả kết hợp với việc chạy nó trong quá trình gỡ lỗi đối với sản phẩm cuối của người dùng dữ liệu thường mất hơn 15 phút chỉ để tải dữ liệu), tôi sẽ theo dõi nó thành một dạng giống như struct
kiểu chuỗi có len
tập hợp thành số âm, như độ dài chuỗi -921141282
.
Điều đó không bao giờ nên xảy ra, nhưng ai đã làm điều đó? Vì vậy, tôi đã phải thiết lập các điểm dừng bộ nhớ và tìm hiểu, và khi cuối cùng tôi đã làm, nó giống như một sự tương tác xếp tầng của các biến chưa được khởi tạo được sử dụng một cách hợp lý, cuối cùng được thêm vào len
trường chuỗi được đặt thành số rác âm và mã đó không đã được sửa đổi trong năm. Nó bay theo radar.
Và tất cả thời gian đó sau khi gặp phải nhiều lỗi như thế này, tôi tự nghĩ, phần mềm của chúng ta sẽ đáng tin cậy hơn bao nhiêu nếu nó chỉ được sử dụng getters
và setters
? Getters và setters thường chỉ ra các loại thiết kế giao diện tồi tệ nhất có thể, nhưng một setter ít nhất có thể gây ra lỗi xác nhận nếu ai đó cố gắng đặt độ dài của chuỗi thành giá trị âm. Chúng ta có thể đã bắt được năm lỗi đótrước đó vào thời điểm chính xác nó được giới thiệu trong vài giây, không phải là đỉnh điểm của nhiều giờ nỗ lực điều tra. Và đó chỉ là suy nghĩ ích kỷ như một nhà phát triển; nó không bao gồm tất cả các giờ đau buồn mà nó có thể đã cứu cả người dùng và nhóm QA. Bạn biết rằng hệ thống của bạn đang ở một nơi khá tồi tệ khi bạn mơ về việc nó có thể tốt hơn bao nhiêu nếu nó sử dụng setters và getters khi đối mặt với 35 lỗi cuối cùng mà bạn đã dành cả đêm để sửa chữa.
Chúng tôi thậm chí đã có những trường hợp structs
được ghi lại theo cách nói rằng không ai khác nên truy cập vào các trường dữ liệu đó, chỉ để tìm các vị trí trong hệ thống truy cập vào các trường dữ liệu đó.
Vì vậy, đây là những điều bạn chỉ có thể thực sự đánh giá cao nhất bằng cách đối mặt với tình huống xấu nhất đó, nhưng bạn thường sẽ trừ khi bạn đủ may mắn để dành phần còn lại của cuộc đời mình để làm việc với các nhóm nhỏ hơn với các nhóm phối hợp tốt và tiêu chuẩn mã hóa mạnh mẽ.
Mã đẹp trong C ++ [...] là gì?
Đó là một trong những khó khăn. Tôi vẫn đang cố gắng để tìm ra điều đó. Hầu hết các mã tôi cho là đẹp mà tôi đã viết trong nhiều năm qua, hoặc ít nhất là đáng tin cậy và tương đối vượt thời gian và ổn định (không cần / muốn thay đổi) đã được viết bằng C và gần đây là Lua. Tôi vẫn đấu tranh để viết mã C ++ dường như vượt qua thử thách của thời gian đến mức tôi không phản ánh lại nó vài năm sau đó và ít nhất tôi ước mình có thể thay đổi nó. Tôi cảm thấy như mọi thứ trở nên dễ dàng hơn kể từ C ++ 11, nhưng tôi cần vài năm để tìm hiểu xem mã của tôi có thể tồn tại tốt như thế nào mà không cần thay đổi để chắc chắn. Đối với tôi, "vẻ đẹp" cuối cùng là "sự ổn định", vì trong mã không cần và thậm chí không cám dỗ bất kỳ thay đổi nào nữa nhưng vẫn còn phù hợp và hữu ích trong nhiều năm tới, vì điều đó '