Chào các bạn!

Lâu lâu ngồi lướt DZone thấy bài hay lại dịch cho anh em nào lười đọc tiếng Anh =)) Bài dịch này và các bài sau (nếu có) mình sẽ giữ nguyên nhân xưng của tác giả để các bạn đọc dễ theo dõi.

Một trong những yêu cầu tôi nhận được nhiều từ các đọc giả là tạo một Lộ trình dành cho Java developer. Java là lĩnh vực chuyên môn của tôi, không có vấn đề gì để tạo ra một lộ trình, nhưng tôi phải mất nhiều thời gian hơn để tạo ra nó vì thời gian rảnh của tôi hạn chế. Dù sao, tôi cũng sẵn sàng chia sẻ lộ trình phát triển Java của mình với tất cả các bạn.

Lộ trinh này là con đường không bị cản trở về cách trở thành một chuyên gia Java, trả lời các câu hỏi hóc búa như: Java developer nên học những công nghệ nào? Công cụ nào làm cho bạn trở thành một Java developer hơn? Và cuối cùng, các Java developer phải học những framework nào?

Một trong những điều tôi đã thử với lộ trình này là giữ cho nó càng ngắn gọn càng tốt nhưng vẫn đủ nội dung cần thiết. Tôi đã tránh đề cập đến các lựa chọn thay thế, đặc biệt là khi nói đến các thư viện và công cụ, và cũng gặp vấn đề với các công cụ và thư viện theo tiêu chuẩn công nghiệp.

Tôi đã giữ lộ trình khá đơn giản, chỉ bao gồm một số nội dung cần thiết để hầu hết mọi người đều có thể theo dõi, nhưng nếu các bạn quan tâm, tôi sẽ nghĩ đến việc viết một bài tiếp theo: Lộ trình cho Java developer 2.0 để thêm một số thứ nâng cao như JVM internals, profiling, modules, Cloud-Native Java, containers, Docker and Kubernetes, và nhiều hơn nữa.

Nhân tiện, bạn không cần phải hiểu hết mọi thứ trên lộ trình này để trở thành một Rockstar. Trên thực tế, bạn thậm chí không cần phải quan tâm tới chúng nếu bạn không muốn. Thay vào đó, hãy sử dụng lộ trình này như một điểm khởi đầu để dẫn đường cho quá trình học của bạn. Let’s get started.

Kỹ năng bắt buộc cho bất kỳ Java developer nào

Bây giờ, hãy cùng nhau khám phá lộ trình cho Java developer và tìm hiểu những công cụ, framework, thư viện và API nào bạn nên biết.

1. Công cụ

Phần công cụ của lộ trình được chia thành 2 phần chính.

  • Đầu tiên, IDE của bạn là công cụ chính của bạn và có thể thực hiện hầy hết mọi thứ bạn yêu cầu như biên dịch, chạy, debug, profile, test, compare các file code, refactoring, và nhiều chức năng khác. (Phần này tác giả không đề cập cụ thể, nhưng như trước mình đã có bài chém gió thì khuyên dùng IntelliJ :D)

Nên học ngôn ngữ lập trình nào? Nên chọn IDE nào cho lập trình Java?

  • Phần thứ 2 là build tool, cái mà bạn cần để build và deploy các project của mình, như Maven, Gradle. Cả 2 cái đó đều tuyệt vời. Tôi có liệt kê cả ANT, nhưng nó dành cho các project cũ. Còn đối với các project mới thì tôi thích dùng Maven hoặc Gradle.

2. API JDK

Điều quan trọng tiếp theo là cần tìm hiểu các API JDK, nó rất rất quan trọng đối với hầu hết các Java developer. Đây là một phần khá lớn và đó là lý do tại sao nó được chia thành các lĩnh vực cốt lõi như Java Collections framework, Java Concurrency, Java IO, và Java 8 APIs. Hãy khám phá từng cái này.

2.1 Java Collections

Đây là một trong những Java API cần thiết nhất mà mọi Java developer nên học. API này cung cấp các cấu trúc dữ liệu tiêu chuẩn trong Java như linked list, set, stack, queue, hash table, priority queue, và một số thứ khác.

Ít nhất bạn phải biết về những cấu trúc sử dụng hàng ngày như ArrayList, HashMap, HashSet, LinkedHashSet, TreeSet,… Mỗi cấu trúc có những tính chất khác nhau của riêng nó. Ví dụ ArrayList là một mảng động có thể mở rộng; HashMap là một cấu trúc tiêu chuẩn của bảng băm (Hash table) và có thể được sử dụng để lưu trữ các cặp key-value; Tương tự, HashSet là một cấu trúc không cho phép các phần tử trùng lặp.

2.2 Java Concurrency

Sau Java Collections, API quan trọng tiếp theo trong Java là về multi-thread và concurrency, tôi tin chắc rằng nếu bạn muốn trở thành một Java developer có trình độ tốt, bạn phải có kiến thức và vững chắc về API Java Concurrency.

Bạn không chỉ cần hiểu sâu về các khái niệm cơ bản như Thread, Runnable, Object locking, Synchronization, mà bạn còn nên làm quen với các khái niệm như deadlock, livelock, race conditions và cách xử lý khi nó xảy ra.

Bạn cũng nên tìm hiểu về các khái niệm tiên tiến như Java synchronizers (được thêm từ Java 5) Ví dụ CyclicBarrier, CountDownLatch, Phaser, CompleteableFuture,… cùng với Futures và làm thế nào để thực hiện bất đồng bộ trong Java.

2.3 Java IO

Tôi đã phỏng vấn hơn 100 lập trình viên Java và tôi đã nhận thấy một kiểu: Tất cả đều có rất ít kiến thức về API Java IO và NIO so với Java Collections và Java multi-thread. Tôi có thể hiểu rằng nhiều người dành nhiều thời gian để học 2 cái đó nhưng bạn không thể bỏ lại API quan trọng này.

Nếu bạn phải code một ứng dụng Java core thực tế, bạn sẽ cần phải sử dụng các class như File, InputStream, OutputStream, Reader, Writer từ gói java.io, đó là core của Java IO. Tương tự bạn cũng cần phải biết về ByteBuffer, FileChannel, Selector và các class quan trọng khác từ java.nio nếu bạn muốn viết một ứng dụng socket-based.

Thật không may không có nhiều tài liệu chuyên môn về việc dạy Java IO và Java NIO, nhưng  The Complete Java Masterclass là một tài nguyên tuyệt vời để làm chủ API này. Bạn sẽ tìm thấy rất nhiều khái niệm cần thiết từ API này trong khóa học.

2.4 Các tính năng của Java 8

Bây giờ, API tiếp theo và một API cần thiết khác mà Java developer nên tìm hiểu là tất cả các tính năng của Java 8, Java 8 đã cách mạng hóa cách thức mã hóa và lập trình ngày nay. Để trở thành Java developer vào năm 2019, bạn phải biết cách sử dụng biểu thức Lambda, Stream, Optional class và new Data and Time API.

Nếu không biết các API này, sẽ rất khó để viết một ứng dụng Java vào năm 2019. Hầu hết các thư viện hiện tại đã ngừng hỗ trợ các phiên bản thấp hơn Java 8, điều đó có nghĩa là tốt nhất bạn nên tìm hiểu các tính năng Java 8 ngay bây giờ thay vì sau này. Đã 5 năm kể từ khi Java 8 được phát hành, vì vậy bạn thực sự không còn lý do gì để giải thích.

3. Framework

Điều tốt nhất về Java là nó có một hệ sinh thái sinh động, có nghĩa là có rất nhiều framework và thư viện cho hầu hết mọi thứ. Thông thường, tôi không đề xuất một Java developer tìm hiểu về một framework cho đến khi họ cần sử dụng nó trong một project, nhưng có một số framework và thư viện mà tôi tin rằng mọi Java developer đều nên biết như Spring, Spring Boot, Hibernate, Log4j, JUnit, …

3.1 Spring Framework

Nếu bạn muốn trở thành một Java developer có kỹ năng tốt, tôi thực sự khuyên bạn nên tìm hiểu Spring framework trước tiên. Đây là một trong những framework Java phổ biến nhất, hầu hết mọi ứng dụng Java mà tôi đã làm việc trong 5 năm qua đều sử dụng framework này.

Spring Framework cho phép các lập trình viên viết code sạch, dễ test và maintain hơn thông qua các tính năng như Dependency Injection và Inversion of Control. Nó cũng có API phong phú cho hầu hết các nhiệm vụ hàng ngày, đó là lý do tại sao mọi Java developer nên học Spring Framework.

3.2 Hibernate

Framework thứ 2 mà tôi khuyên mọi Java developer nên học là Hibernate, dựa trên JPA (Java Persistence API). Nói chính xác hơn, Hibernate có trước JPA, nhưng vì JPA là một API tiêu chuẩn implement lớp persistence trong Java, Hibernate cũng implement nó.

Bây giờ, tại sao bạn nên học Hibernate? Chà, bởi vì hầu hết các ứng dụng Java mà bạn làm việc sẽ phải tương tác với database, và kinh khủng khi xử lý thao tác với database trong Java bằng cách sử dụng JDBC mà không có Hibernate.

Nó cung cấp một số tính năng cần thiết như caching và transaction out-of-the-box, nghĩa là bạn có thêm thời gian để tập trung vào xử lý logic ứng dụng hơn là implement caching trong ứng dụng của bạn. Điều này cải thiện hiệu năng của ứng dụng Java, đây là lý do quan trọng nhất của tôi để sử dụng Hibernate. (Đoạn này của tác giả làm mình cũng hơi confuse một chút, cũng có thể do đọc chưa rõ nghĩa, vì thực tế Hibernate là một ORM, mà ORM là nó sẽ phải mất thêm 1 nỗ lực nhất định cho việc mapping giữa entity trong database với Java object, cho nên nếu so sánh về hiệu năng thì chắc chắn sẽ có sự chênh lệch, sử dụng Hibernate sẽ chạy chậm hơn sử dụng JDBC thuần ở một phần nào đó, nhưng bù lại thì lập trình viên sẽ code ít hơn/nhanh hơn/ít lỗi hơn/maintain dễ hơn khi database thay đổi cấu trúc)

3.3 Spring Boot

Đây là một framework khác mà tôi khuyên mọi Java developer nên học cả năm 2019 và những năm tới. Spring Boot mang triết lý đơn giản hóa của Spring giúp làm việc với Spring dễ dàng hơn (cá nhân mình thấy phải nói là dễ dàng hơn rất nhiều, giống như kiểu đang so sánh giữa việc nấu cơm có thịt rau phải pha thêm cả nước chấm với việc úp bát mỳ tôm ăn liền vậy :v )  Giống như Spring giúp tạo ứng dụng Java dễ dàng hơn, Spring Boot giúp tạo ứng dụng Java dựa trên Spring dễ dàng hơn.

Tính năng tự động cấu hình sẽ loại bỏ hết khó khăn khổ cực liên quan đến việc cấu hình ứng dụng Spring. (Thông thường với Spring, để tạo được project java bạn phải cấu hình đủ thứ liên quan đến Bean, application context, webmvc, servlet, webserver,… Nhưng đối với Spring Boot thì bạn chỉ cần create and run, run bằng method public static void main như hồi sinh viên, ngay cả tomcat/jetty cũng được nhúng sẵn vào Spring Boot. Công việc của bạn giờ chỉ dành thời gian chính cho việc code logic thay vì ngồi lần mò cấu hình project. Spring Boot giúp cho Java beginner cũng có thể dựng được project hoàn chỉnh trong thời gian ngắn và dễ dàng không cần đến những người kinh nghiệm)

Tương tự, các starter POM được nhóm lại thành dependency thành các POM có thể tái sử dụng một cách đơn giản.

4. Testing

Kiểm thử là một kỹ năng thiết yếu cho bất kỳ Java developer nào, đặc biệt là unit testing, integration testing, và automation testing. Ở mức tối thiểu, mọi Java developer nên làm quen với JUnit và Mockito, hai trong số các unit testing và mock phổ biến nhất.

Mình nói thêm về mock test. Mock ở đây là cách thức giả lập hành vi của class hoặc request/response của API. Có 2 trường hợp sau khá phổ biến và cần sử dụng mock

  • Quá trình phát triển các hệ thống tích hợp qua API, vì cả 2 bên cùng đang phát triển nên đều chưa cung cấp được API cho đối tác làm việc, vì vậy mỗi request từ hệ thống A sang hệ thống B qua API thì sẽ được thay thế bằng request từ hệ thống A sang Mock service để giả lập bản tin response của hệ thống B, có thể giả lập bản tin bất kỳ theo yêu cầu
  • Quá trình unit test cần kiểm thử các method, nhưng có 1 số object chỉ có giá trị khi chạy chương trình (như HttpServlet/HttpRequest,….) vì vậy cần dùng đến Mock object để giả lập giá trị cho các object này

Nếu bạn biết Unit testing và Mock, và biết cách sử dụng chúng để tạo một bài unit test một cách hiệu quả, bạn sẽ là một Java developer tốt hơn khá nhiều so với việc không có chúng.

Có nhiều thư viện tiên tiến hơn cũng tồn tại như Cucumber cho Bussiness-driven testing, Robot Framework để test tích hợp, nhưng không có thay thế nào cho JUnit, bạn sẽ luôn cần JUnit.

Khi nói đến thư viện cho Mock, bạn sẽ có một vài lựa chọn như PowerMock, Mockito và EasyMock, nhưng tôi thực sự khuyên bạn nên tìm hiểu Mockito vì đây là một thư viện tuyệt vời và cũng có nhiều lập trình viên hay công ty lập trình Java đang sử dụng nó. Nó đang dần trở thành thư viện chuẩn để tạo các đối tượng giả trong Java.

Nếu bạn muốn học JUnit và Mockito, tôi đã chia sẻ rất nhiều tài nguyên như sáchkhóa học, bạn có thể kiểm tra những thứ đó để tìm hiểu thêm.

5. Utility Libraries

Sức mạnh thực sự của Java nằm trong hệ sinh thái phong phú của các thư viện nguồn mở. Bạn sẽ thấy các thư viện thực hiện hầu hết mọi thứ trong Java từ đăng nhập học máy, từ gửi request HTTP đến phân tích cú pháp JSON và nhiều hơn nữa.

Ngoài ra, Java cũng may mắn có các thư viện tiện ích như Apache Commons và Google Guava, hai thư viện này bổ sung hiệu quả cho các thư viện JDK. Tôi cũng chia sẻ danh sách 20 API và thư viện Java cho các Java developer.

Tôi khuyên các bạn xem qua danh sách đó, rất có thể bạn đã biết 1 nửa trong số đó, chúng rất hữu ích và giúp bạn viết chương trình Java tốt hơn, nhanh hơn.

Cảm ơn các bạn đã đọc bài dịch!

Nguồn: https://dzone.com/articles/the-2019-java-developer-roadmap

One Reply to “Lộ trình cho Java developer 2019”

Bình luận