Ngày Đầu Tiên Của Hội Nghị C++
Bài phát biểu mở màn của huyền thoại Lippman về phát triển phần mềm quy mô lớn đã được bạn Trần Sóc dịch thuật xuất sắc :D
Vì tìm được nguồn điện nên tôi có thể ghi chú trực tiếp.
Quả nhiên là bậc tiền bối, ngài bắt đầu bằng những khái niệm trừu tượng. Tôi nghe rất hứng thú nên ghi chép một vài ý chính, dù không nhiều.
Chúng ta vẫn thường nhìn vào tự nhiên để tìm cảm hứng, sau đó áp dụng vào công nghệ. Ngày xưa máy tính không có bộ nhớ, mãi đến khi ông tổ ngành khoa học máy tính John von Neumann nói rằng: “Não người có trí nhớ nên máy tính cũng cần có”. Từ đó mới hình thành khái niệm bộ nhớ.
Ngày nay chúng ta lại nói ngược rằng “Não giống máy tính” - đây là đặt sai vị trí của vấn đề. Con người luôn quan sát tự nhiên để giải quyết vấn đề phần mềm. Ý tưởng độc đáo của Lippman là so sánh phần mềm với sinh vật, từ cấp độ DNA và nhân tế bào cho đến các tầng cao hơn.
Cấu trúc nền tảng của hệ thống là Cấu trúc Dữ liệu & Dòng Dữ liệu - giống như tế bào trong cơ thể sống. Ở cấp ứng dụng, Chức năng Điều hành & Thông tin Kiểu dữ liệu đóng vai trò như các cơ quan trong sinh vật.
Lippman chia sẻ kinh nghiệm từ hàng loạt dự án thất bại: “Các dự án lớn thường dễ sụp đổ thảm hại. Kỹ sư phần mềm vất vả hơn nhiều so với định kiến công việc văn phòng. Mỗi lập trình viên đều không thể thay thế vì mỗi người mang góc nhìn và phong cách code độc đáo, hình thành từ hành trình học tập khác biệt. Nếu bắt đầu học lập trình từ Java hay Pascal, bạn sẽ đánh mất cái nhìn bản chất về lập trình. Việc hình thành thế giới quan về software sẽ bị lệch lạc”.
Ông lấy ví dụ về dự án Visual Studio - một sản phẩm không thành công. Việc dùng .NET cho Windows cũng là thảm họa vì hiệu suất kém. “Tư tưởng phát triển phần mềm của Microsoft có vấn đề sâu xa”. Một dự án tàu đổ bộ Sao Thổ thất bại vì vấn đề viễn thông đặc biệt: tín hiệu bị gián đoạn 5-6 tiếng do đặc tính môi trường. Các phương thức truyền thống hoàn toàn vô dụng.
Có dự án trò chơi trực tuyến đầu tư hàng chục triệu USD vẫn thất bại ê chề. Mặc dù kỹ thuật hoàn hảo, nhưng chỉ hỗ trợ được 40-50 người online đồng thời. Ban lãnh đạo vẫn yêu cầu ra mắt đúng dịp Giáng sinh, coi trọng hình thức hơn chất lượng.
Nhóm kỹ sư từng mơ tưởng viết lại Unix bằng C++ nhưng thất bại do liên minh các công ty (bao gồm IBM, Sun, AT&T) không thống nhất được định hướng. Dự án Plan 9 của Bell Labs dù xuất sắc nhưng không thể thương mại hóa. Lippman nhắc nhở: “Khi chọn công ty, hãy tìm hiểu động cơ thật sự. Nếu công ty chỉ chạy theo lợi nhuận mà không hiểu công nghệ, hãy rời bỏ sớm. Quản lý cần am hiểu chuyên môn, nếu không sẽ dẫn dắt dự án đến vực thẳm”.
Ông liệt kê hàng loạt bi kịch công nghệ: Hệ điều hành OS/2 của IBM, các dự án C++ trong công nghiệp hoạt hình… “C++ không phù hợp cho hệ thống quy mô lớn”, Lippman kết luận. Khi được hỏi ngôn ngữ nào thích hợp, ông dùng ví dụ về Thuyết Tương đối và Cơ học Lượng tử để ám chỉ rằng: “C++ là công trình cá nhân của Bjarne Stroustrup. Ngôn ngữ tương lai cần phát triển tập thể theo phong cách xây dựng tri thức khoa học cộng đồng, không dựa vào cá nhân”.
Trong ngành hoạt hình, họ tạo ra công cụ đăng ký phương thức động, sinh mã kiểu dữ liệu từ chuỗi - thứ khiến hiệu suất giảm hàng chục lần. Tuy nhiên với hệ thống lớn, hiệu suất không còn là mối bận tâm hàng đầu.
Đáng chú ý là câu chuyện về lớp code “ma ám” dùng C++/Lua. Người tạo ra đi xa rồi, để lại đống mã rối như canh hẹ đầy bug. Một đồng nghiệp của Lippman từng xây dựng hệ thống meta-programming (không phải template thông thường) sinh mã C tự động. Dù đạt mục tiêu ẩn đi chi tiết phức tạp, nhưng bị chỉ trích vì “không chuẩn OOP”. Lippman phản biện: “OOP không nằm ở class, mà ở cách xử lý dữ liệu tĩnh và động”.
Cá nhân tôi đồng cảm sâu sắc vì công ty từng dùng hệ thống tương tự. Mỗi khi người phụ trách nghỉ việc, các nhóm lập tức coi việc xóa bỏ hệ thống đó khỏi dự án là “vinh dự”.
Theo Lippman, điểm chung của mọi dự án thất bại là:
- Kéo dài nhiều năm, biến thành “vương quốc đóng cửa”
- Nội bộ chia bè phái, tranh luận về những điều vô bổ
- Quy mô quá lớn khiến không ai nắm hết chi tiết
Giải pháp ông đề xuất là “xoay cấu trúc 90 độ”, xây dựng hệ thống phân tầng dọc (vertical slicing) thay vì chia cắt ngang truyền thống. Tuy nhiên, với quy mô vừa như dự án tôi đang làm, việc duy trì kiến thức toàn cục vẫn là gánh nặng.
Trên đây là một số ghi chú rời rạc từ bài giảng đầy cảm hứng. Nhiều chi tiết thú vị không kịp lưu lại, có thể còn hiểu sai vài điểm. Mong các bạn thông cảm!