GIỚI THIỆU VỀ JAVA


Bài này được viết với mục đích giới thiệu về Java, một trong những nền tảng và ngôn ngữ phổ biến nhất.

Cái tên Java chỉ đến 3 phần khác nhau: ngôn ngữ Java (Java language), Java runtime và các thư viện Java. Gom chung cả 3 cái lại, ta gọi nó là Java platform.

👉 Ngôn ngữ Java được tạo ra với cú pháp tương tự C/C++/C#, những người đã thành thạo các ngôn ngữ này có thể chuyển sang học ngôn ngữ Java trong vòng 2 nốt nhạc. Việc học gần như chỉ là so sánh xem có gì giống và khác, như các kiểu dữ liệu, các cấu trúc điều khiển, hỗ trợ OOP… Sẽ không có gì ngạc nhiên nếu một người giỏi C# chỉ sau 1 ngày có thể tham gia vào dự án Java.Tương tự các ngôn ngữ khác, Java cũng có nhiều phiên bản khác nhau, và thể hiện qua các bản đặc tả (https://docs.oracle.com/javase/specs/).

Thành phần thứ hai là Java runtime, tức tất cả những gì để chương trình Java thực thi, đây là phần phức tạp, và mất rất nhiều thời gian để làm chủ. Để hiểu sâu được, bạn cần hiểu những thứ bên dưới giúp chương trình thực thi: quản lý bộ nhớ, class loader, mã bytecode, bộ dọn rác, JIT… Nếu ai học Java chắc hẳn đã từng gặp lỗi Class Not Found khi chạy chương trình, và cũng loay hoay không biết vì sao code mình dịch xong mà khi chạy nó cứ báo không tìm thấy. Muốn xử lý được, bạn sẽ cần biết cách Java runtime tìm các file class: các thư mục, và thứ tự nó sẽ tìm kiếm.Các trình runtime cũng sẽ có các bản đặc tả của nó, trong bản đặc tả đó người ta sẽ mô tả các tính năng nó hỗ trợ, bạn có thể xem trong đường link phía trên.

Thành phần thứ ba là lớn nhất và mất thời gian học nhất: các thư viện Java. Các thư viện được cung cấp sẵn rất lớn, và hầu như chúng ta chỉ bắt đầu với những thứ cơ bản: io, xml, util, swing, awt, net… các phần còn lại sẽ chỉ cần học khi nào cần tới.

👉 Bởi các thư viện Java rất lớn, và vì Java được hỗ trợ trên rất nhiều loại thiết bị, từ các máy chủ cỡ lớn phục vụ hàng ngàn user, các máy tính để bàn, các thiết bị công nghiệp, đến các thiết bị cầm tay… nên sẽ hợp lý hơn khi chia các tập thư viện theo các lớp thiết bị khác nhau. Từ đó người ta phân các tập thư viện này ra làm 3 loại chính:

– Java Standard Edition (Java SE): Đây là bộ Java cơ bản, chứa các thành phần chính để chương trình Java có thể chạy được, như máy ảo Java, các kiểu dữ liệu, các lớp cơ bản mà hầu như chương trình nào cũng cần đến… Bạn có thể viết tất cả các loại chương trình chỉ với Java SE.

– Java Enterprise Edition (Java EE): Được xây dựng trên nền Java SE, tức các chương trình viết trên Java EE thực chất vẫn là các chương trình Java SE, tuy nhiên Java EE cung cấp thêm các thư viện cũng như môi trường thực thi phục vụ các ứng dụng lớn, các dịch vụ trên máy chủ… Nếu bạn viết một ứng dụng web, bạn sẽ phải dùng một công nghệ Java EE nào đó, biên dịch với các thư viện JavaEE (và tất nhiên cả JavaSE), rồi chạy trên các máy chủ JavaEE (JavaEE server), một số server có thể kể ra như Tomcat, JBoss, Weblogic… Mỗi công nghệ trên JavaEE cũng có một đặc tả và phiên bản, khi tạo ra các JavaEE server, người ta sẽ phải theo hỗ trợ một số công nghệ khác nhau, các công nghệ được hỗ trợ có thể rất khác nhau giữa JavaEE server.

– Java Micro Edition: Được thiết kế cho các thiết bị nhỏ với tài nguyên hạn chế. Khác với Java EE, Java ME không dựa hoàn toàn trên Java SE, tập thư viện trên Java ME chỉ là một tập con của Java SE. Trước thời dại smart phone với Android và iOS, hầu như tất cả các điện thoại đều hỗ trợ Java ME.

👉 Vậy còn Java trên Android?Java trên Android là một platform được thiết kế riêng cho Android, tạm coi nó không phải là Java ME, cũng không phải là Java SE “thuần chủng”, tức không phải thư viện nào trong bộ Java SE cũng được hỗ trợ. Các phiên bản Android trước đây dựa trên Apache Harmony, sau này dựa trên Open JDK. (Thật sự tôi chưa nghiên cứu nhiều về Android source nên chỉ biết dựa trên các tài liệu đọc được).

Hiện tại để viết app trên Android, bạn có rất nhiều lựa chọn khác “hiện đại” hơn: Kotlin, Flutter, RN…

👉 Java hiện tại vẫn đang là một trong những nền tảng phổ biến nhất, ngôn ngữ Java vẫn luôn góp mặt trong các bảng xếp hạng ngôn ngữ phổ biến hàng năm. Đặc biệt trong các ứng dụng lớn, yêu cầu bảo mật cao. Có nhiều lý do cho việc này:

– Thứ nhất là các ứng dụng Java luôn được chạy trên một máy ảo, máy ảo này cách ly ứng dụng khỏi hệ thống và kiểm soát tất cả các thao tác mà ứng dụng thực hiện.

– Thứ hai, Java được thiết kế để “Viết một lần, chạy mọi nơi”, bạn có thể viết, dịch chương trình trên Windows, sau đó triển khai trên một máy chủ Linux hay Unix. Có một điều mà ai cũng biết, đó là các máy chủ Unix được các nhà quản trị tin cậy hơn Windows về mặt bảo mật, và thường xuyên là lựa chọn đầu tiên khi triển khai các ứng dụng tài chính, ngân hàng… các ứng dụng này có vòng đời dài, thời gian phát triển và số tiền đầu tư vào rất lớn. Vì vậy sẽ còn rất lâu chúng mới bị thay thế, đặc biệt trong hoàn cảnh Java vẫn còn làm rất tốt nhiệm vụ của nó.

Nếu đặt ra câu hỏi tại sao JavaScript cũng có khả năng viết một lần chạy mọi nơi, nhưng lại không được ưa chuộng như Java, ta có thể trả lời như sau:

– JS trên server, hay nói cụ thể hơn là NodeJS còn rất non trẻ, cách đây 10 năm, khi Java đang phát triển mạnh mẽ thì NodeJS chỉ mới ra đời.

– Để xây dựng một ứng dụng phức tạp với JS rất khó, có lẽ sẽ dễ dàng hơn với JS khi chia nhỏ ra thành các service, hoặc dùng JS để phát triển các microservice. Nhưng nên nhớ Docker – công nghệ đứng phía sau mô hình này cũng chỉ mới ra đời từ 2013.

– JS không hỗ trợ một mô hình OOP bài bản và hoàn chỉnh như Java. Đúng là JS có OOP, nhưng thật sự rất khó để áp dụng kiến thức OOP designing vào JS. Khi đạt đến một độ phức tạp nhất định, Java cho phép tổ chức, viết code, duy trì đơn giản hơn JS. Docker/NodeJS/microservice giúp giải bài toán phân tán dễ dàng, nhưng JavaEE cũng có EJB và các công nghệ liên quan, vốn được thiết kế để xây dựng các ứng dụng phân tán, đa tầng (multi-tier), về độ mềm dẻo (flexible) có thể không bằng microservice, nhưng đối với các ứng dụng đã triển khai, với mô hình hạ tầng có sẵn thì việc chuyển đổi sang microservice cũng không đem lại lợi ích gì.

👉 Vậy có còn nên học Java không?

Như trên đã nói, Java gần như xuất hiện trong top 3 của tất cả các bảng xếp hạng ngôn ngữ lập trình phổ biến (tìm kiếm với từ khóa “programming languages popularity”), vì vậy hiển nhiên bạn không cần phải lo lắng về độ phổ biến của nó. Tuy nhiên nên nhớ là hiện tại Java thường được dùng phát triển các ứng dụng lớn, hoặc các phần core, vậy nên bạn sẽ phải học nhiều thứ hơn trước khi có thể bắt đầu – bù lại bạn sẽ có thể tham gia sâu hơn, vào nhiều loại dự án khác nhau.

👉 Java và JavaScript, cái nào hơn?

Thật sự trước khi xuất hiện v8/NodeJS, câu hỏi trên là một câu hỏi hài hước ☺️. JS chủ yếu chạy trên trình duyệt, còn Java chạy trên máy chủ hoặc desktop, Java đã từng chạy trên trình duyệt (Java applet) nhưng đó là dĩ vãng xa xưa rồi, vậy nên có thể coi hai thứ này vốn không dẫm lên chân nhau. Nhưng hiện tại, các ứng dụng JS, cũng như các framework dựa trên nền tảng này vô cùng phong phú. Với JS, bạn có thể học và bắt đầu công việc nhanh hơn Java, bạn cũng không cần biết nhiều về OOP, chỉ cần vài tháng bạn đã có thể đi làm được rồi. Đây là một lợi thế rất lớn, nhưng nên nhớ không phải tự nhiên Java lại trở thành một ông lớn trong các nền tảng phát triển ứng dụng như vậy.

Một trong những điều nguy hiểm nhất là bạn tự hài lòng với bản thân: tôi đã rành JavaScript rồi, tôi tự mình làm được một ứng dụng từ A đến Z, tôi thấy JavaScript làm được tất cả những gì .NET, Java làm được. Vậy tại sao tôi phải học thêm một thứ khác? Nó cũng giống như câu hỏi: Tôi biết sửa TV rồi, sao còn phải học sửa điện thoại? (câu trả lời dành cho bạn).

Tôi luôn khuyến khích các bạn học rộng ra, bởi chỉ khi học rộng, bạn mới thấy những hạn chế của nền tảng mà bạn đang theo đuổi, và quan trọng hơn, khi đó bạn mới biết nên học sâu vào cái gì 😏. Phần mềm là thứ thay đổi rất nhanh, cái bạn thành thạo hôm nay có khi sang năm chẳng ai dùng nữa. Bạn luôn phải tìm hiểu xem tương lai sẽ có những gì, đánh giá nó, đặt cược vào nó, học sâu vào TRƯỚC KHI những người khác học.

Có như vậy bạn mới trở thành người dẫn đầu được.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: