Lộ trình này dành cho những ai đang quan tâm đến việc học hỏi để trở thành một Java developer. Nó cũng giúp cho các Java developer hệ thống hóa lại những kiến thức mình có và bổ sung những gì còn thiếu để trở nên một lập trình viên Java hoàn thiện hơn. Bài viết dựa trên bài viết gốc của Javin Paul, một lập trình viên Java kinh nghiệm và là người sáng lập của các website về Java: Javarevisited, java67, and savingsfunda. Bài có bổ sung một số thông tin, các tài liệu tham khảo nhưng cũng lượt bớt một số liên kết khóa học không phù hợp. Bạn có thể tìm các thông tin đó trong bài viết gốc có link ở cuối bài.
Các kỹ năng bắt buộc của Java developer
1. Git & Github
Git là phần mềm quản lý mã nguồn phân tán (Distributed Version Control System – DVCS) được phát triển bởi Linus Torvalds vào năm 2005. Hiện nay, Git trở thành một trong các phần mềm quản lý mã nguồn phổ biến nhất.
GitHub là một nền tảng lưu trữ code để kiểm soát phiên bản và cộng tác (collaboration) trên nền tảng đám mây. Nó cho phép bạn và những người khác làm việc cùng nhau trong các dự án từ mọi nơi.
Xem thêm:
2. Linux
Không chỉ đối với các web developer mà đối với bất kỳ lập trình viên nào, biết về các lệnh Linux rất quan trọng và bạn nên dành một chút thời gian để tìm hiểu chúng. Một số kiến thức về Linux mà bạn nên tìm hiểu trong lộ trình học Java của mình:
- Học cách truy cập Linux systems, dùng GUIs, cách sử dụng command line
- Học cách Linux tổ chức files
- Dùng các lệnh cơ bản như gzip, grep
- Biên soạn chương trình trên vi và vim và các trình soạn thảo khác
- Thực hiện các tác vụ sysadmin mà các developer cần sử dụng
- Viết các Bash scripts
- Tìm hiểu các chức năng Linux liên quan đến Java
3. Cấu trúc dữ liệu và giải thuật (Data Structures and Algorithms)
Đây là những nền tảng của bất kỳ chương trình nào và kiến thức tốt về Giải thuật và Cấu trúc dữ liệu là rất quan trọng. Ít nhất bạn nên quen thuộc với các cấu trúc dữ liệu thiết yếu như mảng (array), danh sách liên kết (linked list), bảng băm (hash table), cây nhị phân (binary tree), hàng đợi (queue), ngăn xếp (stack) và đồ thị (graph.) Bạn cũng cần biết các cấu trúc dữ liệu nâng cao như Trie, B-Tree, AVL tree…
Xem thêm:
4. HTTP / HTTPS
Giao thức HTTP (Hypertext Transfer Protocol) là xương sống của web. Hiểu biết về HTTP, HTTPS ( Hyper Text Transfer Protocol Secure ) là yêu cầu bắt buộc với bất kỳ web developer nào
Tìm hiểu sự khác nhau giữa http và https
5. Nền tản về khoa học máy tính (Computer Science Fundamentals)
Đây là nên tảng thiết yếu cần có cho bất kỳ lập trình viên nào.
6. Design Patterns
Design Patterns (mẫu thiết kế) là một kỹ thuật trong lập trình hướng đối tượng, nó khá quan trọng và mọi lập trình viên muốn giỏi đều phải biết. Design Pattern được sử dụng thường xuyên trong các ngôn ngữ OOP. Nó cung cấp cho bạn các “mẫu thiết kế”, giải pháp để giải quyết các vấn đề chung, thường gặp trong lập trình. Các vấn đề mà bạn gặp phải có thể bạn sẽ tự nghĩ ra cách giải quyết nhưng có thể nó chưa phải là tối ưu. Design Pattern giúp bạn giải quyết vấn đề một cách tối ưu nhất, cung cấp cho bạn các giải pháp trong lập trình OOP.
Design Patterns không phải là ngôn ngữ cụ thể nào cả. Nó có thể thực hiện được ở phần lớn các ngôn ngữ lập trình, chẳng hạn như Java, C#, thậm chí là Javascript hay bất kỳ ngôn ngữ lập trình nào khác. (nguồn: gpcoder).
Nắm vững về Design Partterns là rất cần thiết trong lộ trình h5oc Java của mình. Bạn có thể tìm hiểu thêm về Design Partterns trên Java tại đây
Lộ trình học Java
Hãy cùng nhau khám các công cụ, frameworks, thư viện, API nào mà một Java developer cần học
1. Công cụ (tools)
Tools ở đây có các loại khác nhau:
- Đầu tiên là IDE, Integrated Development Environment, là công cụ chính để biên dịch, chạy chương trình, debug, cấu hình, kiểm tra, so sánh tập tin và code, cấu trúc lại (refactoring) và nhiều tính năng khác.
- Công cụ xây dựng (build tool) được dùng để xây dựng và triển khai các dự án như Maven và Gradle.
- Phần khác quan trọng là các containers như Docker và Kubernetes, các công cụ CI/CD như Jenkins và TeamCity, và các công cụ về Infrastructure automation như Ansible.
Bạn có thể xem thêm về 10 công cụ IDE phổ biến hiện nay
2. JDK APIs
Điều quan trọng tiếp theo cần học là các API JDK, rất rất quan trọng đối với bất kỳ Java developer nào. Đây là một phần khá lớn và đó là lý do tại sao nó được chia thành các thành phần cốt lõi như Java Collections framework, Java Concurrency, Java IO và Java 8 API. Dưới đây là một số chi tiết:
2.1 Java Collections Framework
Đây là một trong những Java API quan trọng mà các Java developer cần phải biết. Các API cung cấp các triển khai cấu trúc dữ liệu chuẩn như linked list, set, stack, queue, hash table, priority queue…. Ít nhất bạn nên biết về tất cả các objects như ArrayList, HashMap, HashSet, LinkedHashSet, TreeSet, v.v. Mỗi object trong số đó có thuộc tính khác nhau như ArrayList là một mảng động có thể phát triển, HashMap là một triển khai tiêu chuẩn của bảng băm và có thể được sử dụng để lưu trữ các cặp khóa-giá trị. Tương tự, HashSet là một triển khai tập hợp không cho phép các phần tử trùng lặp.. Nói tóm lại bạn cần phải học kỹ và nắm rõ về Java Collections Framework.
2.2 Java Concurrency
Sau Java Collections, API tiếp theo, quan trọng nhất trong Java là về đa luồng (multithreading) và đồng thời (concurrency). Nếu bạn muốn trở thành một Java developer có năng lực, bạn phải rõ các lệnh về Java Concurrency API. Bạn không chỉ cần hiểu sâu về các khái niệm cơ bản như Thread (luồng), Runnable, Object locking (đối tượng khóa) và Synchronization (Đồng bộ hóa) mà còn phải làm quen với các khái niệm như deadlock, livelock, race conditions (tranh chấp dữ liệu) và cách giải quyết chúng.
Bạn cũng nên tìm hiểu về các khái niệm Java nâng cao như bộ đồng bộ hóa được thêm vào Java 5 và trong các phiên bản tiếp theo, như là CyclicBarrier, CountDownLatch, Phaser và CompletableFuture, v.v., cùng với Futures và cách thực hiện hoạt động không đồng bộ trong Java.
2.3 Java IO
Có rất ít các Java developer hiểu rõ về Java IO và NIO APIs so với Java Collections và Java Multithreading API. Có lẽ họ chưa thật sự coi trọng các API quan trọng này.
Nếu bạn phải viết ứng dụng Java, bạn sẽ cần sử dụng các classes như File, InputStream, OutputStream, Reader, Writer từ java.io packages, là cốt lõi của Java IO API. Tương tự, bạn cũng cần biết về ByteBuffer, FileChannel, Selector và các lớp quan trọng khác từ API java.nio, nếu bạn muốn viết một ứng dụng dựa trên socket.
2.4 Các tính năng trên Java 8
Là một lập trình viên Java bạn nên học là các tính năng của Java 8, vốn đã làm thay đổi hoàn toàn cách lập trình Java ngày nay. Để trở thành Java developer trong thời điểm này, bạn phải biết cách sử dụng biểu thức Lambda (Lambda expression), Stream API, Optional classes và Date 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 ở thời điểm này. Phần lớn thư viện hiện đã ngừng hỗ trợ phiên bản thấp hơn Java 8, có nghĩa là bạn phải học các tính năng của Java 8 ngay bây giờ hơn là 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ì để trì hoãn nữa.
Mặc dù các tính năng của Java 8 rất cần thiết cho các Core Java developer, nhưng nếu bạn có thể, hãy tìm hiểu tất cả các tính năng mới khác được giới thiệu từ Java 9 đến Java 13 như Modules, var cho các biến cục bộ, static factory method cho các collections, Text Block, String trong Switch và các khái niệm khác.
3. Frameworks
Điều hay ho về Java là nó có một hệ thống sinh thái với nhiều frameworks và thư viện cho hầu hết mọi thứ. Một Java developer không cần phải học một framework cụ thể nào cho đến khi cần sử dụng nó trong dự án của mình. Tuy nhiên, vẫn có một số frameworks và thư viện mà các Java developer nên biết như Spring, Spring Boot, Hibernate, Log4j, JUnit, v.v. Dưới đây là một số chi tiết về các framework này.
3. 1 Spring Framework
Nếu bạn muốn trở thành một Java developer, bạn nên học về Spring Framework đầu tiên trong lộ trình học Java của bạn. Đây là một trong những Java frameworks phổ biến nhất. Spring Framework khuyến khích viết clean code và giúp bạn dễ dàng kiểm tra và bảo trì code bằng cách cung cấp các tính năng như Dependency Injection và Inversion of Control. Spring Framework cũng có API cho hầu hết các tác vụ hàng ngày và đó là lý do tại sao các Java developer nên học framework này.
3.2 Hibernate
Framework thứ hai mà các Java developer nên học là Hibernate, dựa trên JPA (Java Persistence API). Chính xác mà nói, Hibernate ra đời trước JPA, nhưng vì JPA là API tiêu chuẩn để triển khai lớp bền vững (persistence layer ) trong Java nên Hibernate sẽ triển khai nó.
Nhưng tại sao bạn lại nên học Hibernate? Lý do là vì hầu hết các ứng dụng Java mà bạn làm việc trên đó sẽ tương tác với database và việc xử lý database trong Java bằng JDBC mà không có Hibernate framework là rất khó. Nó cung cấp một số tính năng cần thiết như Caching và Transaction, có nghĩa là bạn có nhiều thời gian hơn để tập trung vào logic ứng dụng, sau đó triển caching trong ứng dụng. Điều này cải thiện rất nhiều hiệu suất của các Java application và đó là lý do quan trọng để sử dụng Hibernate.
3.3 Spring Boot
Đây là một framework các Java developer nên học. Spring Boot lấy triết lý đơn giản hóa của Spring và giúp dễ dàng làm việc với chính Spring. 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 (spring-based Java application) dễ dàng hơn.
Các tính năng như cấu hình tự động (auto-configuration ) giúp loại bỏ hầu hết các khó khăn liên quan đến việc cấu hình ứng dụng Spring. Tương tự, các tính năng POM khởi động được nhóm các phụ thuộc thường được sử dụng thành các POM đơn giản có thể tái sử dụng.
3.4 MicroProfile, Micronaut, and Quarkus
Mặc dù việc học Spring Boot và Spring Cloud là đủ để phát triển Microservices trong Java, nhưng bạn có thể khám phá một số framework nâng cao hơn, như Eclipse Microprofile, Micronaut và Quarkus.
3.4.1 Eclipse Microprofile
Eclipse Microprofile là một sáng kiến nhằm mục đích tối ưu hóa Enterprise Java cho Kiến trúc Microservice (Microservice Architecture). Eclipse Microprofile được hỗ trợ bởi Eclipse, một trong những tổ chức hàng đầu của Java và là công ty đứng sau Eclipse IDE phổ biến. Mục tiêu của Eclipse của MicroProfile là xác định các API tiêu chuẩn để xây dựng các dịch vụ vi mô và cung cấp các ứng dụng di động trên các MicroProfile runtimes. Phiên bản hiện tại của Eclipse Microprofile trong 3.2 và đây là một Java framework hữu ích để học.
3.4.3 Micronaut
Đây là một Java framework khác mà bạn có thể học. Micronaut là một Java framework full-stack hiện đại, dựa trên JVM để xây dựng các ứng dụng microservice và serverless. Đó là một framework đa ngôn ngữ (polyglot framework) và cho phép bạn tạo một ứng dụng bằng Java, Kotlin hoặc Groovy. Một số điểm chính của Micronaut là giảm thời gian khởi động, thông lượng cực nhanh (blazing-fast throughput) và sử dụng bộ nhớ tối thiểu.
3.4.3 Quarkus
Quarkus là một Kubernetes Native Java stack được thiết kế riêng cho OpenJDK HotSpot và GraalVM, được tạo ra từ các thư viện và tiêu chuẩn Java tốt nhất. Quarkus điều chỉnh ứng dụng của bạn cho GraalVM và HotSpot để có được thời gian khởi động nhanh đến kinh ngạc và bộ nhớ RSS cực thấp (không chỉ kích thước heap!).
Nó cũng cung cấp khả năng mở rộng tức thì (instant scalability) và sử dụng bộ nhớ mật độ cao (high-density memory) trong các nền tảng điều phối vùng chứa (orchestration platforms) như Kubernetes bằng cách sử dụng một kỹ thuật gọi là khởi động thời gian biên dịch (compile-time boot). Bạn cũng có thể sử dụng cả mã mệnh lệnh (imperative code ) và kiểu phản ứng không chặn (non-blocking reactive style) khi phát triển ứng dụng cho Quarkus.
4. Testing
Testing là một kỹ năng cần thiết cho bất kỳ Java developer nào, đặc biệt là kiểm thử đơn vị (unit testing), kiểm tra tích hợp (integration testing ) và kiểm thử tự động hóa (automation testing). Ở mức tối thiểu, các Java developer nên quen thuộc với JUnit và Mockito, hai trong số các thư viện Unit testing và Mock phổ biến nhất. Nếu bạn biết hai thư viện này và biết cách sử dụng chúng để tạo một bài kiểm tra đơn vị một cách hiệu quả, bạn sẽ là một Java developer tốt hơn nhiều so với khi không biết về chúng. Vì vậy, không nên bỏ qua khi lên kế hoạch cho lộ trình học Java của bạn.
Có nhiều thư viện nâng cao như Cucumber for Business-driven testing, Robot Framework cho integration testing, nhưng không có thư viện nào thay thế cho Junit. Bạn sẽ luôn cần Junit, nhớ là như vậy.
Khi nói đến mocking library, bạn có một số lựa chọn như PowerMock, Mockito và EasyMock. Tuy nhiên, bạn nên chọn học Mockito vì nó là một thư viện rộng lớn, và nhiều developers và công ty Java cũng đang làm chọn như vậy. Nó đang dần trở thành thư viện tiêu chuẩn để tạo các mock objects trong Java.
Bạn có thể tham khảo thêm về Mockito tại đây
6. Utility Libraries
Sức mạnh thực sự của Java nằm ở hệ sinh thái thư viện mã nguồn mở của nó. Bạn sẽ tìm thấy các thư viện để thực hiện hầu hết mọi thứ trong Java từ logging đến machine learning, từ gửi yêu cầu HTTP đến phân tích cú pháp JSON và hơn thế nữa.
Ngoài ra, Java cũng có các thư viện tiện ích như Apache Commons và Google Guava, hai thư viện này bổ sung rất hiệu quả cho các thư viện JDK. Bạn có thể tìm hiểu thêm trong danh sách 20 API và thư viện Java.
Kết luận
Trên đây là lộ trình học và phát triển kỹ năng của các Java developer. Bạn có thể dựa vào đó để có kế hoạch học Java của riêng mình và trở thành một Java developer giỏi hơn. Lộ trình không quá phức tạp và chỉ bao gồm những thứ quan trọng để hầu hết mọi người có thể làm theo. Nhưng nếu bạn muốn mình được nâng cấp lên một mức độ cao hơn bạn cần học thêm JVM internals, Profiling, Modules , Cloud Native Java, Containers và nhiều công nghệ khác.
Xem toàn bộ bài viết về lộ trình học Java của Javin Paul tại đây
Bạn có biết?
tham gia cộng đồng ITguru trên Linkedin, Facebook và các kênh mạng xã hội khác có thể giúp bạn nhanh chóng tìm được những chủ đề phát triển nghề nghiệp và cập nhật thông tin về việc làm IT mới nhất
Linkedin Page:
Facebook Group:
cơ hội việc làm IT : ITguru.vn