3 tháng 3, 2009

Java - 10 năm nhìn lại

Cũng tháng 5 này, cách đây 10 năm (1995), ngôn ngữ lập trình Java ra đời với rất nhiều kỳ vọng của giới công nghệ. Được quảng cáo như thứ ngôn ngữ viết một lần - chạy mọi nơi, cùng với sự phát triển của Internet, Java được xem như là một "cứu tinh", một ngôn ngữ sẽ dần thay thế tất cả các ngôn ngữ lập trình khác. Thành thật mà nói, quả thật Java đã đạt được rất nhiều những thành công trong suốt một thập kỷ vừa rồi. Thế nhưng, Java đã thất bại về nhiều mặt nếu ta xét trên khía cạnh những gì người ta trông đợi về nó. Tạp chí Infoworld vừa mới có một bài viết nhìn lại 10 năm phát triển của Java. Bài viết sau đây như là một tổng hợp của tớ về những điểm mạnh và yếu của Java, cũng như giới thiệu một số bài viết phê bình về Java.

Tại sao Java?

Một trong những hạn chế của phần lớn các ngôn ngữ lập trình là khả năng tương thích. Lấy ví dụ bạn viết một phần mềm trong C và biên dịch nó trong môi trường Windows, cho ra một file chạy .exe. Chương trình mà bạn mới tạo ra sẽ chỉ chạy trên Windows. Để chạy chương trình này trên một hệ điều hành khác, như Linux chẳng hạn, bạn sẽ cần phải biên dịch lại trên Linux. Bạn có thể tự hỏi liệu đó có phải là vấn đề hay không, nhưng cần nhớ rằng không phải ai cũng có chương trình biên dịch và không phải ai cũng biết cách biên dịch một chương trình, chưa kể vấn đề không tương thích giữa 2 môi trường. Điều này tạo rất nhiều khó khăn trong việc phát triển, phân phát, hướng dẫn sử dụng phần mềm.

Thêm vào đó là sự ra đời của mạng Internet, nơi mà sự đa dạng về cấu hình máy của người truy cập là rất lớn. Nhu cầu cần có một ngôn ngữ lập trình có thể chạy trên mọi cấu hình máy tính càng trở nên cấp thiết. Và đó chính là lí do ra đời của ngôn ngữ lập trình Java.

Tháng 5 năm 1995, hãng Sun cho ra đời ngôn ngữ lập trình Java - quảng cáo nó như là một ngôn ngữ lập trình "viết một lần - chạy mọi nơi" (write once - run anywhere). Java giải quyết vấn đề tương thích bằng cách thay vì biên dịch trực tiếp từ mà nguồn (con người hiểu được) sang mã máy (mã nhị phân 1-0 chỉ có máy hiểu được), các chương trình sẽ được biên dịch sang một mã trung gian. Các thiết bị máy tính sẽ được trang bị một phần mềm gọi là máy ảo Java (Java Virtual Machine), giúp biên dịch mã trung gian này tương ứng với cấu hình của mỗi máy và chạy chương trình.

Mặc dù như vậy thì chưa hoàn toàn giải quyết một cách triệt để vấn đề, giải pháp này có một lợi điểm đặc biệt quan trọng là người dùng không cần phải làm gì cả - chỉ cần thiết bị của họ hỗ trợ công nghệ Java, một điều mà hầu như tất cả các hãng thiết kế đều làm. Java đạt được một thành công quan trọng khi thuyết phục Netscape hỗ trợ Java Virtual Machine trong trình duyệt Netscape Communicator (tại thời điểm đó, Netscape Communicator phổ biến nhất), khiến Java hứa hẹn trở thành một ngôn ngữ của Internet. Thế nhưng, Java đã không được như vậy…

Thực tế của Java

Nếu so sánh những gì đã đạt được, Java thậm chí còn đánh mất nhiều thứ hơn. Thực tế giờ đây của Java: Ứng dụng viết bằng Java chỉ đếm trên đầu ngón tay. Java cũng không đóng vai trò gì đáng kể trong sự phát triển của các ứng dụng Web. Mặc dù đạt được một số thành công trong lĩnh vực di động, Java cũng không hoàn toàn có một lợi thế rõ ràng nào so với các ngôn ngữ khác (đặc biệt là công nghệ .NET của Microsoft gần đây). Đâu là lí do của những thất bại này?

Thực tế mà nói, Java có đầy đủ các yếu tố để thành công. Java, được xây dựng trên ý tưởng từ C và C++, là một ngôn ngữ lập trình hướng đối tượng rất mạnh. Cái ý tưởng dùng một trình máy ảo để đảm bảo các phần mềm viết bằng Java có thể chạy bất kỳ đâu không phải là một ý tưởng tồi, nếu không muốn nói là rất thành công (bằng chứng là công nghệ .NET của Microsoft gần đây cũng dựa trên ý tưởng này). Java cũng là một ngôn ngữ mã nguồn mở (mặc dù Sun giữ quyền kiểm soát những thay đổi).

Có rất nhiều lý do giải thích nguyên nhân dẫn đến thực tế hiện tại của Java, bao gồm cả yếu tố kỹ thuật cũng như chiến lược phát triển. Chưa thật sự nắm rõ Java, tớ xin không bàn về các yếu tố kỹ thuật ở đây. Một số liên kết đến các bài viết bàn về những điểm yếu kỹ thuật của ngôn ngữ Java có thể tìm thấy ở cuối bài.

Một trong những nguyên nhân được đề cập đến nhiều nhất là chiến lược phát triển. Mặc dù bạn có thể dùng bất kỳ phần mềm biên tập nào để viết Java, và trình biên dịch Java được cho miễn phí, nhưng với một ngôn ngữ với nhiều thư viện như Java thì để phát triển sẽ đòi hỏi cần phải có một môi trường hỗ trợ mạnh. Và các phần mềm phát triển này không rẽ chút nào. Gần đây có Eclipse là một môi trường mở, miễn phí và cũng rất mạnh phần nào giải quyết vấn đề này.

Ứng dụng viết bằng Java chạy rất chậm so với các phần mềm được viết riêng biệt cho từng loại máy. Như đã nói ở trên, Sun giải quyết vấn đề tương thích bằng cách chuyển mã nguồn sang mã trung gian và sử dụng phần mềm máy ảo để biên dịch mã trung gian này. Vì chạy trên một môi trường "gần như là giả lập", một phần mềm viết bằng Java không thể nào chạy nhanh như các phần mềm chạy trực tiếp. Mặc khác, một giới hạn rất rõ ràng của Java là về mặt giao diện. Sẽ là rất khó để có thể viết một phần mềm bằng Java với giao diện tùy biến với nhiều hiệu ứng. Giao diện Swing được đưa ra để giải quyết phần nào vấn đề này nhưng quả thật không ai muốn ứng dụng của mình nhìn chính xác giống như những ứng dụng khác, đặc biệt là khi sự phát triển của phần cứng cho phép có thể có các ứng dụng với giao diện đồ họa mạnh. Những yếu tố này dẫn đến thực tế là hầu như không có ứng dụng dành cho máy tính cục bộ nào viết bằng Java.

Cần nhớ rằng Java sẽ chí bộc lộ rõ lợi thế của mình trong môi trường Internet (các ứng dụng được đặt trên máy chủ) và di động. Viết các ứng dụng Java không phải là vấn đề quá khó khăn, nhưng tìm nơi để đưa nó vào hoạt động là cả một vấn đề. Sự phức tạp của cơ chế hoạt động bên trong Java đẩy chi phí máy chủ Java lên quá cao. Giá các phần mềm Java vì vậy cũng bị đẩy lên cao. Đây chính là nguyên nhân dẫn đến việc ngay cả trên môi trường Internet cũng không có mấy ứng dụng viết bằng Java (nói cho chính xác là so với các ngôn ngữ khác như PHP, ASP,…)

Ở trên là 2 yếu tố chủ quan. Cần kể thêm một yếu tố khách quan là xu hướng phát triển của ứng dụng Internet không hoàn toàn như những gì mà người ta trông đợi trong giai đoạn đầu của nó. Trong những ngày đầu của Internet, mọi người đều nghĩ đến một tương lai mà các phần mềm như Word, Excel được chứa trên máy chủ. Người dùng chỉ việc vào một trang web và mở ứng dụng đó ra làm việc. Các ưng dụng Internet không phát triển theo hướng đó, ít nhất là cho đến bây giờ. Câu hỏi bây giờ không phải là liệu những ứng dụng như vậy có khả thi hay không, mà là liệu chúng có cần thiết hay không. Các ứng dụng Web ngày nay vẫn có thể đạt đến mức tiện lợi gần như các ứng dụng bình thường mà không cần phải dùng đến Java (điển hình như Gmail). Thêm vào đó là sự ra đời của các công nghệ khác như Flash, cũng có khả năng tương thích cao như Java, khiến cho nhu cầu cần dùng Java càng ít hơn.

Phải chăng Java đang trở thành một Pascal thứ 2?

Hầu như tất cả những ai theo học máy tính đều phải học Pascal. Pascal là một thứ ngôn ngữ hoàn toàn không có khả năng áp dụng vào thực tế, nhưng nó được chọn như là một thứ ngôn ngữ nền tảng, kinh điển được dạy cho mọi sinh viên công nghệ thông tin. Java giờ đây cũng gần như vậy.

Tất nhiên, không giống như Pascal, Java vẫn là một ngôn ngữ có khả năng áp dụng vào thực tế rất mạnh. Nhưng nếu xét về vai trò thì sẽ thấy là vai trò của Java ngày nay trong việc dạy lập trình quan trọng hơn nhiều so với vai trò của nó trong việc ứng dụng. Java là một ngôn ngữ lập trình hướng dối tượng rất, rất mạnh. C++ cũng là một ngôn ngữ lập trình hướng đối tượng nhưng nó không được rõ ràng như Java. Có thể nói cách nhanh nhất để nắm khái niệm về lập trình hướng đối tượng là thông qua Java. Đó chính là lí do tại sao ngày nay Java được xem như là một ngôn ngữ bắt buộc phải học cho mọi sinh viên công nghệ thông tin.

Hỏi các sinh viên học công nghệ thông tin xem liệu họ có thích Java không thì 9/10 trả lời là có và rất thích. Nhưng nếu hỏi bạn có định sử dụng Java như là một ngôn ngữ chính để viết phần mềm sau này không thì số người trả lời có chỉ đếm trên đầu ngón tay. Tại sao vậy? Ngoài các yếu tố đã kể ở trên, còn một yếu tố khách quan khác nữa. Hãy thử tự đặt mình là người tuyển nhân viên. Bạn có thật sự cần một người biết Java? Liệu một người biết Java có thêm được lợi thế nào không? Có lẽ là không bởi hầu như tất cả các sinh viên ra trường đều được xem như là đã biết Java. Một sinh viên nếu nói là biết .NET chắc chắn sẽ có ân tượng cao hơn nhiều. Điều này cũng giống như không ai hỏi một sinh viên có biết ngôn ngữ Pascal hay không vậy.

Tất nhiên, cũng có những công ty chỉ tuyển những người rất giỏi về Java, và lương có thể sẽ rất cao, nhưng số công ty như vậy không nhiều. Java giờ đây giống như một môi trường để khám phá nhiều hơn là ứng dụng. Java có thể sẽ không trở thành một Pascal thứ 2 do vẫn có rất nhiều lĩnh vực đòi hỏi những tính năng của Java, nhưng cá nhân tớ cho rằng vai trò của nó có lẽ sẽ ngày càng giống với Pascal hơn.

Một số bài viết phê bình khác về Java

Như đã nói ở trên, bản thân cách thức Sun viết ra ngôn ngữ Java cũng còn rất nhiều những lổ hổng, giới hạn trong thiết kế. Tớ không có đủ khả năng êể viết về chủ đề này nên xin giới thiệu một số bài viết của các chuyên gia khác về mặt này:

A java Critique: bàn chi tiết về một số điểm yếu trong cách thức thiết kế của Java.

(Slightly Skeptical) Java Page: Bạn sẽ tìm thấy rất nhiều những bài viết khen/chê cũng như so sánh Java với các ngôn ngữ khác ở trang này.

A Critique of Java bởi Harold Thimbleby (tài liệu pdf)

A Quick Critique of Java bởi Brian Wilson

From http://nguoitapviet.info

1 nhận xét:

  1. ,mình cũng có trang ứng dụng tạo cv miễn phí và đây là hướng dẫn cách viết CV dành cho kế toán mới ra trường .
    Cách Viết CV Dành Cho Kế Toán Mới Ra Trường or cach viet cv danh cho ke toan moi ra truong

    Trả lờiXóa