thảo luận Có nên học Java hay không?

Status
Not open for further replies.
Đâ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ì? :amazed:

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
cám ơn bác bài chia sẻ, đang học java core và sql, đang rất cố gắng bác có vài lời khuyên gì không bác?
 
Java is legacy. Học Java để học cái khác, học Java để thấm nhuần tư tưởng, pattern. Java sẽ không chết ít nhất là trong 10 năm tiếp. Spring bây giờ là 1 phần, Spark, Scala, Hadoop là phần còn lại:cautious::adore:

Sent from Sony XZ1 via nextVOZ
 
cám ơn bác bài chia sẻ, đang học java core và sql, đang rất cố gắng bác có vài lời khuyên gì không bác?
Lời khuyên vẫn là nắm chắc Java SE (Java Core) thôi. Cái này vững thì sau tìm hiểu các thứ khác đơn giản hơn nhiều.
 
Java is legacy. Học Java để học cái khác, học Java để thấm nhuần tư tưởng, pattern. Java sẽ không chết ít nhất là trong 10 năm tiếp. Spring bây giờ là 1 phần, Spark, Scala, Hadoop là phần còn lại:cautious::adore:

Sent from Sony XZ1 via nextVOZ
No, Java is not legacy :doubt:

Java vẫn đang thay đổi từng ngày, Java 17 sắp ra đến đít rồi. Nói thật chứ tôi chạy đến 11 là hết hơi với bọn này. Giờ nó ra toàn cái mới lạ vãi đái lắm. Nào là Valhalla, Loom, Amber, Panama... chạy theo hết cmn cả hơi. :doubt:
 
dạo này thấy Vert.X khá hot, ai có exp gì không share với
Trừ khi bạn có nhu cầu đặc biệt cần tối ưu sâu thì hẵng đụng đến Vert.x chứ dùng bình thường chả có ý nghĩa mấy đâu. Học để mở mang thì vẫn tốt chứ để dùng phổ thông thì không recommend.
 
Trừ khi bạn có nhu cầu đặc biệt cần tối ưu sâu thì hẵng đụng đến Vert.x chứ dùng bình thường chả có ý nghĩa mấy đâu. Học để mở mang thì vẫn tốt chứ để dùng phổ thông thì không recommend.
Thấy ideal của nó khá hay, event loop giống nodejs nhưng là multiple event loop, tận dụng đc tối đa core cpu.Tối ưu sâu là sâu thế nào vậy thím
 
Thấy ideal của nó khá hay, event loop giống nodejs nhưng là multiple event loop, tận dụng đc tối đa core cpu.Tối ưu sâu là sâu thế nào vậy thím
Vertx rất low level không có nhiều tiện ích để phát triển nhanh như đám Spring đâu. Thời gian để phát triển sẽ lâu hơn nhiều.
Nếu vẫn thích dùng Vertx thì có thể dùng Quarkus. Kết hợp high level API của Quarkus đồng thời có thể truy cập xuống low level API của Vertx.
 
Lý thuyết phải đi đôi với thực hành thì nắm sơ được java core thì e nên tự luyện tập bằng cách nào nhỉ.
Trước e học nodejs thì được chỉ làm web chat app :/ không biết java thì làm gì để bao quát được lý thuyết đã học nhỉ :/
 
No, Java is not legacy :doubt:

Java vẫn đang thay đổi từng ngày, Java 17 sắp ra đến đít rồi. Nói thật chứ tôi chạy đến 11 là hết hơi với bọn này. Giờ nó ra toàn cái mới lạ vãi đái lắm. Nào là Valhalla, Loom, Amber, Panama... chạy theo hết cmn cả hơi. :doubt:
JDK11 đổ lên có gì hay với đặc biệt ko thím? Mình toàn xài JDK8 thấy nó cũng ok lắm rồi
 
Khuyến khích học thật sâu Spring, đặc biệt là mấy cái config loằng ngoằng, download luôn source code của nó khi build về mà đọc. Thử debug từ tầng servlet lên spring MVC, rồi xuống spring data. Nhiều anh code spring rầm rầm nhưng ko hiểu được cơ chế liên kết giữa servlet và spring MVC, (bao gồm cả tôi mấy năm trước :D) , ko đào sâu vào cái hay ho của spring được.

Trong spring nó đã implement hầu hết các design pattern nổi tiếng và phổ biến, thể hiện rõ ràng 4 tính cơ bản của OOP. Tôi học xong spring quay lại mới hiểu OOP, đặc biệt là đa hình bản chất là như thế nào :D, ngày xưa cứ nghĩ mình hiểu OOP rồi hoá ra toàn là học vẹt :D
 
Khuyến khích học thật sâu Spring, đặc biệt là mấy cái config loằng ngoằng, download luôn source code của nó khi build về mà đọc. Thử debug từ tầng servlet lên spring MVC, rồi xuống spring data. Nhiều anh code spring rầm rầm nhưng ko hiểu được cơ chế liên kết giữa servlet và spring MVC, (bao gồm cả tôi mấy năm trước :D) , ko đào sâu vào cái hay ho của spring được.

Trong spring nó đã implement hầu hết các design pattern nổi tiếng và phổ biến, thể hiện rõ ràng 4 tính cơ bản của OOP. Tôi học xong spring quay lại mới hiểu OOP, đặc biệt là đa hình bản chất là như thế nào :D, ngày xưa cứ nghĩ mình hiểu OOP rồi hoá ra toàn là học vẹt :D
Bác có thể giải thích rõ hơn chỗ "mấy cái config loằng ngoằng, download luôn source code của nó khi build về mà đọc. Thử debug từ tầng servlet lên spring MVC, rồi xuống spring data" là như nào không bác ? Các config loằng ngoằng là các config như nào vậy bác, download suource code khi build là down cái gì vậy bác e k hiểu lắm. Các debug từ tầng dưới servlet nữa. Em mới học spring hiện mới chỉ biết làm theo các tut có sẵn thôi
 
Bác có thể giải thích rõ hơn chỗ "mấy cái config loằng ngoằng, download luôn source code của nó khi build về mà đọc. Thử debug từ tầng servlet lên spring MVC, rồi xuống spring data" là như nào không bác ? Các config loằng ngoằng là các config như nào vậy bác, download suource code khi build là down cái gì vậy bác e k hiểu lắm. Các debug từ tầng dưới servlet nữa. Em mới học spring hiện mới chỉ biết làm theo các tut có sẵn thôi
1. Config loằng ngoằng : thử config 1 project Spring web, kết nối database, không dùng spring boot xem như thế nào.
2. Download luôn source code của nó : nếu bạn dùng maven hoặc gradle thì khi import thư viện spring nó sẽ download luôn source của thư viện đó (open source). Nói nôm na là bạn có thể đọc được code của các class trong thư viện Spring người ta viết như thế nào. Ko những đọc mà còn debug được vào tận trong thư viện của nó.
3. Thử debug từ tầng servlet lên spring MVC, rồi xuống spring data : Bản chất của java web là servlet (HttpServlet). Bất kỳ framework java web nào đều phải based / thông qua servlet cả. Khi 1 user request lên java web, đầu tiên nó chạy vào webserver(tomcat/glassfish...), rồi qua filter, rồi qua servlet (dispatcherservlet), rồi mới qua controller. Ngoài ra còn xem thêm ApplicationContext của spring web khác j ApplicationContext của app console, nó được khởi tạo khi nào?
4. Tìm hiểu thêm về AOP, từ đó sẽ biết được kỹ thuật reflection trong java (các ngôn ngữ hiện đại khác như C#, python... cũng có kỹ thuật này), sau đó bạn sẽ hiểu rõ hơn cách khởi tạo bean, mapping url, annotation....
5. Sử dụng Spring JPA, tìm hiểu xem repository chỉ là interface, lúc inject vào thì giá trị thực tế của nó là j? Khi bạn hiểu EntityManager bạn sẽ hiểu được tính đa hình nó hoạt động ntn....

Nói chung là nhiều lắm, mình mất hơn 3 năm làm spring + đọc 700 page pdf của nó mới biết được.
 
1. Config loằng ngoằng : thử config 1 project Spring web, kết nối database, không dùng spring boot xem như thế nào.
2. Download luôn source code của nó : nếu bạn dùng maven hoặc gradle thì khi import thư viện spring nó sẽ download luôn source của thư viện đó (open source). Nói nôm na là bạn có thể đọc được code của các class trong thư viện Spring người ta viết như thế nào. Ko những đọc mà còn debug được vào tận trong thư viện của nó.
3. Thử debug từ tầng servlet lên spring MVC, rồi xuống spring data : Bản chất của java web là servlet (HttpServlet). Bất kỳ framework java web nào đều phải based / thông qua servlet cả. Khi 1 user request lên java web, đầu tiên nó chạy vào webserver(tomcat/glassfish...), rồi qua filter, rồi qua servlet (dispatcherservlet), rồi mới qua controller. Ngoài ra còn xem thêm ApplicationContext của spring web khác j ApplicationContext của app console, nó được khởi tạo khi nào?
4. Tìm hiểu thêm về AOP, từ đó sẽ biết được kỹ thuật reflection trong java (các ngôn ngữ hiện đại khác như C#, python... cũng có kỹ thuật này), sau đó bạn sẽ hiểu rõ hơn cách khởi tạo bean, mapping url, annotation....
5. Sử dụng Spring JPA, tìm hiểu xem repository chỉ là interface, lúc inject vào thì giá trị thực tế của nó là j? Khi bạn hiểu EntityManager bạn sẽ hiểu được tính đa hình nó hoạt động ntn....

Nói chung là nhiều lắm, mình mất hơn 3 năm làm spring + đọc 700 page pdf của nó mới biết được.
file pdf nào 700 page về spring vậy bác cho mình xin file đó với
 
JDK11 đổ lên có gì hay với đặc biệt ko thím? Mình toàn xài JDK8 thấy nó cũng ok lắm rồi
Có thêm mấy cái type inference, lambda mở rộng, private interface method... linh tinh. Nói chung cũng nhiều thứ khá tiện.
 
Thằng khác không để ý chứ em đang chờ thằng này ra xem có ngon không :D
Ngày xưa Java nó có cái Green Thread concept từa tựa mà implement cùi quá nên chết toi. Giờ chắc học theo đám Go, Erlang... làm lại cái này để dễ handle concurrency. :doubt:
 
E có học java + spring , mà càng học Spring thì càng khó hiểu các thím ợ :pudency: :pudency:
Sơ sơ cũng viết được cái login , signup phân quyền , Jparepo , các thứ nhưng càng học càng mông lung .Vừa học vừa đọc đống tài liệu về dependency injection , beans, mấy cái config thì kiến thức nó rộng khủng khiếp. sợ thành học vẹt mất
Muốn đi thực tập xin tí kinh nghiệm mà sợ trình độ chưa đến
 
Status
Not open for further replies.
Back
Top