Trải nghiệm của một cựu lập trình viên Microsoft khi làm việc trên BitLocker cho Windows 8 đã gây ra những cuộc thảo luận về những hạn chế của các công cụ phát triển nội bộ của Microsoft. Câu chuyện này tiết lộ việc ngay cả những tác vụ đơn giản như cập nhật thông báo lỗi cũng có thể trở thành những thách thức phức tạp do những ràng buộc của công cụ.
Vấn đề với thông báo lỗi tĩnh
Lập trình viên này đã gặp phải một vấn đề khả năng sử dụng phổ biến khi làm việc trên hệ thống cấu hình của BitLocker. Khi các quản trị viên thiết lập các chính sách mã hóa vượt quá giới hạn hệ thống, người dùng sẽ thấy những thông báo lỗi mơ hồ như Độ dài mật khẩu tối thiểu của BitLocker quá cao mà không biết giới hạn thực tế là gì. Mục tiêu rất đơn giản: thay đổi những thông báo này để cụ thể hơn, chẳng hạn như Độ dài mật khẩu tối thiểu của BitLocker không thể vượt quá 20.
Tuy nhiên, các yêu cầu bản địa hóa của Microsoft đã tạo ra một rào cản kỹ thuật. Tất cả văn bản hiển thị cho người dùng phải nằm trong các tệp .mc
riêng biệt để phục vụ mục đích dịch thuật, trong khi các giới hạn thực tế được định nghĩa như các hằng số trong mã C++. Sự tách biệt này có nghĩa là không có cách nào đơn giản để tham chiếu các hằng số C++ trong các thông báo lỗi.
Kiến trúc Hệ thống Thông báo Lỗi của Microsoft:
- Văn bản hiển thị cho người dùng được lưu trữ trong các tệp
.mc
để bản địa hóa - Các hằng số C++ được định nghĩa riêng biệt trong các tệp header
- API
ShowError()
chỉ chấp nhận ID tài nguyên, không phải chuỗi định dạng - Không có cơ chế tích hợp sẵn để tham chiếu các hằng số C++ trong các tệp thông báo
Giải pháp tiền xử lý của Raymond Chen
Khi lập trình viên này hỏi xin sự giúp đỡ trên một danh sách gửi thư nội bộ, Raymond Chen - lập trình viên Windows nổi tiếng đằng sau blog The Old New Thing - đã đề xuất sử dụng bộ tiền xử lý C trên các tệp .mc
. Điều này sẽ cho phép các tệp thông báo lỗi tham chiếu đến cùng các hằng số được sử dụng trong mã C++, giữ mọi thứ đồng bộ.
Mặc dù về mặt kỹ thuật là hợp lý, giải pháp này yêu cầu phải sửa đổi hệ thống xây dựng phức tạp của Microsoft. Cuối cùng, lập trình viên đã chọn không triển khai nó, lo sợ rủi ro phá vỡ bản dựng hàng đêm mà hàng trăm đồng nghiệp phụ thuộc vào.
Giải pháp tiền xử lý của Raymond Chen:
- Chạy bộ tiền xử lý C trên các tệp
.mc
trước khi biên dịch - Cho phép các tệp thông báo tham chiếu trực tiếp đến các hằng số C++
- Yêu cầu sửa đổi cấu hình hệ thống xây dựng
- Có nguy cơ làm hỏng các bản build đêm cho toàn bộ nhóm phát triển
Phản ứng cộng đồng làm nổi bật những vấn đề rộng lớn hơn
Câu chuyện này đã gây tiếng vang với các lập trình viên, những người coi nó như biểu tượng của những vấn đề lớn hơn với các thực hành phát triển của Microsoft. Một số thành viên cộng đồng lưu ý rằng các hệ sinh thái khác như gettext từ lâu đã hỗ trợ định dạng thông báo động, đặt câu hỏi tại sao Microsoft lại thiếu khả năng tương tự cho sản phẩm hàng đầu của họ.
Cách làm của Microsoft là làm mọi thứ ngược lại, biến cái có thể thành không thể, và bao bọc các API đơn giản, dễ hiểu đằng sau 16 lớp trừu tượng với những cái tên khủng khiếp.
Những người khác chỉ ra rằng chính API ShowError()
bị hạn chế, chỉ chấp nhận ID tài nguyên thay vì chuỗi định dạng có thể bao gồm các giá trị động. Lựa chọn kiến trúc này buộc các lập trình viên phải dùng những cách giải quyết tạm thời vốn không cần thiết.
Góc nhìn hiện đại về công cụ kế thừa
Mười sáu năm sau, lập trình viên phản ánh rằng giải pháp tiền xử lý của Raymond Chen vẫn cảm thấy bất ngờ và không rõ ràng. Điều này cho thấy vấn đề không phải là thiếu kiến thức của lập trình viên, mà là một khoảng trống trong hệ sinh thái công cụ nội bộ của Microsoft.
Cuộc thảo luận tiết lộ rằng ngay cả tại Microsoft, khi làm việc trên chính Windows, các lập trình viên đôi khi thiếu những cách chuẩn để hoàn thành các tác vụ cơ bản. Nỗi sợ phá vỡ các hệ thống xây dựng phức tạp có thể làm tê liệt tiến bộ trên những cải tiến tưởng chừng đơn giản.
Câu chuyện này phục vụ như một lời nhắc nhở rằng ngay cả các công ty công nghệ lớn cũng có thể có công cụ nội bộ tạo ra ma sát không cần thiết cho chính các lập trình viên của họ, có thể ảnh hưởng đến chất lượng của các sản phẩm mà hàng triệu người dùng phụ thuộc vào.
Tham khảo: I Once Appeared in The Old New Thing