Đây là câu hỏi hay gặp của các bạn newbie. Với những bạn mới tiếp cận Java mà search sơ sơ trên internet thì sẽ thấy Java là cái gì đó rất cũ kỹ, rất cổ xưa, rất "legacy"... Nói chung Java là dành cho người già, giới trẻ nên học cái gì hype hơn thời thượng hơn như NodeJs, Go, Rust...
Search tài liệu thì các bạn chỉ thấy các tutorial cực kỳ cổ xưa, làm những trang web bằng JSP/Servlet, package ra WAR file rồi deploy trên các servlet container như Tomcat, Jetty... So boring, chán bỏ con mẹ ra, học Java làm éo gì?
Nhưng! Nhưng Java hiện đại rất rất khác, chỉ có điều với ecosystem cực khủng và số lượng tài liệu cực kỳ đồ sộ các bạn newbie sẽ chết chìm trong dòng thác lũ thông tin trước khi code được một dòng code Java tử tế. Cho nên để dẫn đường cho các bạn tôi sẽ tóm tắt một số cái chính trong hệ sinh thái Java kinh khủng khiếp kia để các bạn có thể biết đường mà tự bơi.
1. JDK - Java Development Kit
Java từ cái hồi Oracle đổi license phức tạp vcl
1. OpenJDK là bản open-source, chỉ có source code, thằng này của community, không của riêng thằng nào.
2. Oracle mang OpenJDK về build ra binary đặt tên là Oracle OpenJDK - bản này free. Ngoài ra còn một phiên bản enterprise là Oracle JDK - bản này phải mua, có thêm thắt mấy cái của riêng Oracle và dc support.
3. Community lấy OpenJDK build ra binary gọi là AdoptOpenJDK - cái này free. Hiện tại recommend dùng thằng này.
4. RedHat cũng mang OpenJDK về build binary riêng, cái này RedHat hỗ trợ.
5. Azul mang OpenJDK về thêm thắt một số tính năng build ra binary, bản free là Zulu, bản enterprise là Zing.
6. Mấy anh khác cũng mang OpenJDK về build và phát hành binary của riêng mình.
Về thương hiệu
Cái tên Java SE hiện tại chỉ có Oracle dc dùng, mấy anh khác muốn dùng phải mua quyền. Anh nào không mua quyền thì chỉ được gọi là Java SE compability.
Tóm lại
OpenJDK là source-based, cái này phiên bản chuẩn.
Các anh tự đem về thêm mắm muối build ra binary.
Oracle có 2 bản binary là Oracle OpenJDK và Oracle JDK.
Java SE là thương hiệu của riêng Oracle, mấy anh khác không mua quyền thì chỉ dc gọi là Java SE compability.
2. J2SE, J2EE, J2ME, Java SE, Java EE, Java ME
J2SE, J2EE, J2ME là tên gọi cũ quên nó đi, reset khỏi não đi.
Java ME coi như chết đem chôn rồi, quên luôn đi.
Java EE thì Oracle đã donate cho community, coi như rũ bỏ trách nhiệm. Hiện tại đã đổi tên thành Jakarta EE và là dự án 100% community-driven.
Java SE cái này mới là cái còn lại của Oracle và vẫn do Oracle nắm. Java SE là thương hiệu có bản quyền của Oracle, cấm anh nào nhận vơ.
3. Nhập môn Java
Đầu tiên để bước vào thế giới Java thì phải học Java SE hay chính xác hơn là học Java language cái đã.
Từ Java 9, Oracle đã thay đổi chu kì phát hành. Từ Java 8 trở về trước thì vài năm mới có một phiên bản mới, còn kể từ Java 9 thì cứ 8 tháng là Oracle cho ra một phiên bản mới và cứ khoảng 3 năm lại có một bản LTS (Long-Term Support).
Hiện tại (01/2021) bản mới nhất là Java 15, còn phiên bản LTS là Java 8 và Java 11. Tôi recommend các bạn sử dụng Java 11 LTS cho production, còn bản Java 15 để vọc vạch feature mới.
3.1. Cài đặt JDK
Hiện nay recommend sử dụng AdoptOpenJDK (
https://adoptopenjdk.net/) thay vì Oracle JDK.
Chọn Java 11 và JVM HotSpot.
3.2. Cài đặt IDE
Java hiện nay có 3 IDE lớn là IntelliJ IDEA, Eclipse và NetBeans. Tôi recommend dùng IntelliJ đơn giản vì nó tốt nhất.
Ngoài IDE nên cài thêm một text editor để xem code nhanh khi cần thiết tôi recommend Sublime Text vì nó nhanh nhẹ.
3.3. Học gì đầu tiên?
Chẳng nơi nào tốt hơn học từ chính thằng cha dượng của Java (Oracle)
https://docs.oracle.com/javase/tutorial/index.html
Tuy tutorial của Oracle viết rất cô đọng súc tích nhưng sẽ khó cho người mới nên tôi recommend đọc cuốn "Core Java" của Cay S. Horstmann.
https://horstmann.com/corejava/
Ngoài ra tôi recommend cuốn "Java How to Program" của Deitel.
https://deitel.com/java-how-to-program-11-e-early-objects-version/
Ok với 3 tài liệu phía trên đã đủ cho bạn học Java nhưng phải học gì đầu tiên?
Các bạn chỉ cần học phần ngôn ngữ nắm chắc class, object, inheritance, polymorphism là đủ (khoảng 4-5 chương đầu của Core Java). Các tính năng advanced hơn của ngôn ngữ như lambda, default method... chưa cần thiết ngay.
4. Học cơ bản Java SE rồi thì học gì nữa?
//...
//... từ từ update tiếp