Nói Chuyện Về Java - nói dối e blog

Nói Chuyện Về Java

Hôm nay nhận được một lá thư từ độc giả, vô tình theo địa chỉ email tìm đến blog của anh ấy. Thấy anh ấy đang bàn luận về Java, tôi liền nhớ lại những suy nghĩ cũ và muốn chia sẻ vài điều. Trang blog đó có thể xem tại đây:

Cách đây năm năm, khi tôi còn là một tín đồ trung thành của C++, từng có thời kỳ cực kỳ khinh thường Java. Có lẽ vẫn còn người nhớ tấm danh thiếp cá nhân tôi in khi làm lập trình viên tự do thời bấy giờ - trên đó thậm chí còn ghi dòng chữ “Tôi không quan tâm đến Java” một cách đầy kiêu ngạo.

Thời gian trôi qua, con người cũng dần thay đổi. Khi viết cuốn sách của mình, thái độ của tôi với Java đã dịu dàng hơn nhiều. Đến nay, sau thêm một năm nữa trôi qua, tôi có thể nói rằng mình đã thực sự yêu thích Java, đồng thời hiểu biết về nó cũng ngày càng sâu rộng.

Vẫn còn nhớ rõ trong hội nghị C++ gần đây, có một cuộc tranh luận thú vị về các mẫu thiết kế (design pattern). Có người nhận xét rằng nhiều chuyên gia C++ dù trình độ cao nhưng lại khá xa lạ với những khái niệm mà lập trình viên hiện đại nên thuộc nằm lòng. Trong khi đó, chỉ cần là lập trình viên Java mới vào nghề, họ đã có thể tranh luận sôi nổi về việc nên áp dụng mẫu thiết kế nào cho bài toán cụ thể.

Điều này cho thấy rõ sự khác biệt trong cách tiếp cận vấn đề giữa hai cộng đồng ngôn ngữ. Có lẽ như một người bạn từng đùa rằng Java đã “đóng gói” quá nhiều thứ, khiến lập trình viên không còn đất dụng võ, đành tập trung hết vào các mẫu thiết kế để thể hiện bản thân. Còn C++ thì ngược lại, luôn có hàng tá cách để bạn chứng minh trí tuệ của mình qua từng dòng mã.

Một ví dụ khác rất điển hình: Khi một tính năng mới được công bố trong cộng đồng Java, dù có làm toàn bộ chương trình trên thế giới chậm đi 10%, phần lớn lập trình viên vẫn sẽ vỗ tay hoan hô. Dù sao thì danh tiếng về hiệu năng của Java đã “vỡ mặt” từ lâu, nên họ cũng chẳng còn bận tâm. Nhưng nếu chuyện tương tự xảy ra với C++, dù chỉ là 0.1% hiệu năng bị ảnh hưởng, chắc chắn sẽ bị ném đá tơi bời và tranh cãi không hồi kết, đến mức không thể đưa vào tiêu chuẩn ISO trong cả thập kỷ. Đối với lập trình viên Java, họ luôn kỳ vọng vào những đột phá mới từ các chuyên gia phát triển máy ảo, chỉ cần một báo cáo công bố công nghệ mới giúp tăng tốc Java là lập tức hào hứng đón nhận.

Phải thừa nhận rằng C++ và Java tồn tại ở hai tầng nhận thức hoàn toàn khác nhau. C++ phát triển trực tiếp từ mô hình máy tính, từng chi tiết nhỏ đều liên kết chặt chẽ với nhau. Trong khi Java lại nhảy vọt lên một cấp độ cao hơn, tạo ra khoảng trống giữa lập trình viên và phần cứng, vô tình định hướng cộng đồng tập trung vào các vấn đề ở tầng cao hơn - điều này chưa hẳn đã xấu.

Trong cuốn sách của tôi, góc nhìn vẫn còn nhiều giới hạn, vẫn còn nặng tư duy theo kiểu C++. Có lẽ dần dần, ngành công nghiệp game sẽ trở thành cứ điểm lớn nhất của cộng đồng C++ mà thôi.

P/s: Tôi có cảm giác rằng công nghệ .NET đang có xu hướng vượt qua Java. Về mặt SIMD, các compiler của Intel đang tập trung phát triển công nghệ vector hóa, cho phép compiler C++ tự động sinh ra mã sử dụng SIMD một cách hiệu quả với kết quả rất khả quan.

0%