Sự khác biệt giữa thực hành lập trình ở trường so với việc lập trình ở các công ty phần mềm thương mại là rất lớn. Giả sử bạn đã viết xong năm dòng code, thì có cả triệu bước tiếp theo trước khi có thể đưa chúng vào sử dụng. Nhiều sinh viên tốt nghiệp ngành khoa học máy tính không có chút xíu kiến thức về làm phần mềm thương mại, ngoài việc viết code.
Eric Lippert là developer chính của các công nghệ liên quan đến ngôn ngữ kịch bản (VBScript và JScript) của Microsoft. Tuy bài viết này làm cho Microsoft có vẻ quan liêu (cũng hơi bị đúng
), nhưng sự quan liêu đó có lí do. Để viết được bất kì phần mềm không có lỗ hổng bảo mật, đều cần có sự quan liêu tương tự.
Khi bổ sung thêm những tính năng vào trong VBScript, nhiều người gửi mail và hỏi tôi rằng làm thế nào để bổ sung thêm các tính năng này. Thông thường các tính năng là "one-off": một tính năng mà giải quyết được nhiều vấn đề. Chẳng hạn như:"Anh cần gọi hàm ChangeLightBulbWindowHandleEx nhưng không có bộ điều khiển ActiveX để làm điều đó và anh cũng không thể gọi Win32 APIs từ script được, vậy anh có thể thêm một phương thức ChangeLightBulbWindowHandleEx vào trong những hàm đã được xây dựng sẵn trong VBScript không? Nó chỉ là năm dòng code thôi mà!"
Tôi luôn bảo cho những người này làm cùng một việc là: nếu nó chỉ là năm dòng code thì bạn hãy tự viết một đối tượng ActiveX đi! Bởi vì vâng, bạn hoàn toàn đúng, nó sẽ làm cho tôi mất khoảng năm phút để thêm tính năng này vào trong thư viện của VBScript. Nhưng sẽ có bao nhiêu nhân viên Microsoft tham gia để thay một cái bóng đèn?
- Một lập trình viên tiêu tốn năm phút trong việc bổ sung thêm phương thức ChangeLightBulbWindowHandleEx.
- Một người quản lí chương trình để viết các chi tiết đặc tả kĩ thuật.
- Một "chuyên gia địa phương hoá" để xem xét lại việc điạ phương hoá các vấn đề này.
- Một "chuyên gia về tính khả hữu" để xem xét lại tính dễ sử dụng và tính hữu ích của các vấn đề.
- Ít nhất là một lập trình viên, một người kiểm tra và một người quản lí chương trình để giải quyết những chỗ yếu kém trong bảo mật.
- Một người quản lí chương trình để thêm vào các model bảo mật.
- Một người kiểm tra để viết kế hoạch kiểm tra.
- Một trưởng nhóm kiểm tra để cập nhật thời gian biểu cho việc kiểm tra.
- Một người kiểm tra để viết những trường hợp kiểm tra và thêm vào cho chúng khả năng tự động hóa.
- Ba hoặc bốn nhân viên kiểm tra tham gia vào trong những lỗi không thể dự đoán trước.
- Một nhân viên viết các báo cáo kĩ thuật để viết các tài liệu.
- Một nhân viên phê bình kĩ thuật để đọc và sửa các tài liệu.
- Một nhân viên biên tập để đọc và sửa các tài liệu.
- Một người quản lí tài liệu nhằm tích hợp các tài liệu mới vào trong phần nội dung, cập nhật nội dung của các bảng, đánh dấu chỉ mục, vv...
- Hai mươi lăm dịch giả để dịch các tài liệu và các thông báo lỗi sang tất cả các ngôn ngữ mà Windows hỗ trợ.
- Một nhóm các nhà quản lí chính để phân công việc cho tất cả những nhân viên này, viết séc và giải trình với Phó giám đốc của họ.
Không có việc nào mất nhiều thời gian cả, nhưng nếu chúng kết hợp lại thì ..., và đây mới chỉ là một việc rất đơn giản. Bạn phải chú ý rằng, tôi đã không làm tất cả những việc mà Joe đã đề cập: điều gì sẽ xảy ra nếu có một lỗi lập trình trong năm dòng code đó? Khi đó, chúng tôi phải thêm vào các khoản chi phí cho việc tìm kiếm lỗi, viết các đoạn code kiểm tra mang tính đệ qui, v.v... Khoảng thời gian năm phút ban đầu đó sẽ được chia đều cho nhiều người, nhiều tuần làm việc và có giá trị lớn, tất cả là để tiết kiệm một vài phút của một. Nhưng điều đó không mang ý nghĩa gì về việc kinh doanh cả. Tại Microsoft chúng tôi cố gắng rất, rất nhiều để không phải phát hành các phần mềm chưa đủ độ chín. Phần mềm hoàn hảo phải chắc chắn rằng là nó hợp lệ, có thể dễ dàng sử dụng các tính năng mà không phải lo lắng gì về các điểm yếu bảo mật. Nhưng chúng tôi phải làm cho nó mang tính đúng đắn bởi vì khi chúng tôi ra phiên bản mới của các script engine, hàng trăm triệu người sẽ áp dụng các đoạn code đó, và mười triệu người sẽ làm lại chương trình một lần nữa.