Java là một trong những ngôn ngữ lập trình phổ biến nhất trong nhiều thập kỷ. Số lượng lập trình viên học Java vẫn đang tăng lên nhanh chóng. Trong vô vàn những lựa chọn nhân sự như vậy, làm thế nào để bạn- 1 DEV Java trở nên nổi bật, đánh bại các đối thủ tiềm năng khác? Đó là toàn bộ nội dung bài viết dưới đây, đọc kĩ nhé !

1. Có được cơ sở vững chắc và ý tưởng rõ ràng về các nguyên tắc OOP

Java là một ngôn ngữ hướng đối tượng, vì vậy thay vì đánh giá thấp các nguyên tắc OOP, bạn nên nỗ lực để có được kiến thức sâu sắc về khái niệm này. Tìm hiểu cách áp dụng các nguyên tắc OOP khi lập trình và có được kiến thức chuyên sâu về mô hình hóa đối tượng, các nguyên tắc SOLID, các mẫu thiết kế, kế thừa ... Đừng chủ quan nhé.

2. Đọc sách bao hàm những nguyên tắc OOP

Nắm vững những khái niệm này sẽ giúp bạn dễ dàng xây dựng các dự án áp dụng các nguyên tắc OOP. Nhiều khái niệm được đề cập trong một số cuốn sách cổ điển mà tôi cho rằng bắt buộc phải đọc đối với các Dev Java

  • “Design Patterns: Elements of Reusable Object-Oriented Software” tác giả “Gang of Four”
  • “Clean Code” tác giả “Uncle Bob” Robert Martin
  • “Clean Architecture” tác giả “Uncle Bob” Robert Martin
  • “Refactoring” (2nd edition) Tác giả Martin Fowler và Kent Beck
  • “Extreme programming explained” tác giả Kent Beck
  • “Test Driven Development: By Example” tác giả Kent Beck

3. Quen thuộc với Spring Framework

Spring Framework đóng vai trò quan trọng trong sự phát triển Java hiện đại. Các thành phần Spring framework, như Spring MVC và Spring Boot, thường được các công ty sử dụng để xây dựng Microservice hoặc ứng dụng web. DEV nào hiểu tất cả các ưu điểm của Spring framework sẽ có nhiều khả năng tỏa sáng hơn trong lĩnh vực của họ, biến một method Java cục bộ thành quản lý vận hành hoặc remote procedure - thủ tục từ xa.

Nếu bạn chưa từng sử dụng Spring trước đây, thì bước đầu tiên là tự làm quen với những thứ thiết yếu của Spring, như các nguyên tắc Dependency Injection (DI), Inversion of Control (IoC) và Spring MVC nói chung.

Cột mốc quan trọng tiếp theo chắc chắn là Spring Boot và các khả năng của nó trong việc xây dựng và chạy các ứng dụng web. Tìm hiểu về các annotation quan trọng mà nó cung cấp và cách sử dụng, đồng thời xem xét các annotation của Spring nói chung (đặc biệt nếu bạn có nền tảng XML).

Những cái như @Repository, @Service và @Controller hoặc @RequestMapping sẽ trở thành những người bạn thân thiết. Bước đầu khi học, bạn hãy cố gắng tạo một ứng dụng web nhỏ bằng cách sử dụng chúng. Trong quá trình học, bạn cần hiểu rõ về các design pattern và cách các annotation sẽ tương tác với nhau.

Bạn sẽ ngạc nhiên khi thấy khởi chạy ứng dụng Spring Boot dễ dàng như thế nào, so với các tùy chọn triển khai khác mà bạn có thể đã sử dụng với Java trước đây. Từ khi có Spring Boot , các Dev Java yêu đời hơn là có thật! SB cho phép bạn chỉ cần lấy một tệp .jar “bao gồm tất cả” là có thể chạy được, bạn có thể chạy trực tiếp dòng lệnh trên máy tính của mình, từ Docker container hoặc triển khai như một dịch vụ Linux bình thường và đặt nó sau Nginx nếu bạn không sử dụng Docker trong sản phẩm.

Thành phần Spring tiếp theo mà bạn chắc chắn sẽ muốn tìm hiểu càng sớm càng tốt là Spring Security. Mọi thứ bạn cần để thiết lập quyền truy cập thích hợp vào các endpoint và dịch vụ của bạn nói chung, xác thực và ủy quyền, đăng nhập, đăng ký và các nhà cung cấp bảo mật khác nhau, bạn sẽ tìm thấy ở Spring Security.

Một phần khá quan trọng của Spring mà bạn từng bắt gặp trong dự án là Spring Data . Nó cung cấp một sự trừu tượng hóa thuận tiện và trang nhã cho việc truy cập dữ liệu. Nó không phải là một ORM và không phải là một triển khai JPA - nó chỉ cung cấp một sự trừu tượng linh hoạt, cho phép bạn giảm số lượng mã cần thiết để thao tác dữ liệu. Công việc trở nên đơn giản và dễ dàng hỗ trợ.

Cuối cùng, một thành phần đáng được đề cập rõ ràng (đừng quên rằng toàn bộ Spring là rất lớn) là Spring AOP (Lập trình hướng theo khía cạnh). Nó cung cấp một cách để bao gồm các chú thích khác nhau để kiểm soát nhiều khía cạnh khai báo mã của bạn, chẳng hạn như logging, exceptions, hay transactions. Hiểu được triết lý và cách tiếp cận này sẽ giúp bạn có thêm động lực trong bất kỳ cuộc phỏng vấn việc làm nào.

Không nghi ngờ gì rằng Spring là một con cá lớn trong thế giới Java, nhưng nó không phải là duy nhất. Không phải mọi Dev Java đều muốn phục tùng sự thống trị của Spring - một số muốn chuyên môn hóa các công nghệ khác và đi sâu hơn trong domain khác nhau. Đối với những nhà phát triển này, tôi sẽ gợi ý Java EE stack. Mặc dù cũ nhưng nó vẫn còn tồn tại, đặc biệt là trong các dự án lớn, cũ hơn.


Tham khảo khoá học Java Spring Boot Fullstack offline tại Techmaster


4. Tìm hiểu các thư viện và API thiết yếu

API và thư viện gắn liền với Java framework, bắt buộc phải biết chúng nếu bạn muốn đánh bật các đối thủ. API và các thư viện là một phần không thể thiếu của hệ sinh thái Java và có cộng đồng lớn thứ hai trên trang web StackOverflow Q&A.

Đây là một chủ đề cực kỳ rộng - tôi có thể dành viết hàng tá bài blog về nó - nhưng nói chung, kiến thức chuyên sâu về các API cốt lõi, thư viện chính và thư viện bên thứ ba, cũng như Bộ phát triển Java (JDK), từng ấy là đủ xét xem một nhà phát triển Java có kỹ năng cao hay không. Nhưng đừng nhầm lẫn, kể cả các chuyên gia cũng không biết tất cả các API và mọi thành phần trong các Thư viện. Bạn chỉ cần hiểu rõ ràng về Apache Commons, Guava, Maven cũng như một vài API và thư viện chính khác là đủ.

5. Học sâu Java 11

Gần đây, cộng đồng DEV Java đã chứng kiến việc phát hành phiên bản cuối cùng của Java 15. Tuy nhiên, quy trình phát triển phần mềm trong Java domain thường khá chậm khi áp dụng các phiên bản mới của bất kỳ thứ gì - nguyên tắc “nếu nó không bị hỏng , thì đừng sửa ”đặc biệt được áp dụng trong các dự án doanh nghiệp.

Mọi thay đổi nhỏ xảy ra trong các dự án đó phải phù hợp với các yêu cầu bảo mật cao và thông thường là sử dụng các công nghệ cũ hơn. Ví dụ, trong hệ thống ngân hàng, hãng hàng không hoặc bảo hiểm, bạn khó có thể gặp bất kỳ công nghệ nào 5 năm tuổi hay trẻ hơn. Đây là nơi mà cũ hơn có nghĩa là ổn định, đáng tin cậy và an toàn

Tuy nhiên, các phiên bản mới cũng đang dần dần được chấp nhận trong các lĩnh vực này. Sau mỗi bản phát hành mới, ngày càng nhiều công ty sẽ yêu cầu DEV làm quen với các tính năng mới. Java 8, một bước đột phá lớn vào thời đó, phải mất vài năm để trở thành một tiêu chuẩn mới. Bạn chắc chắn sẽ không trụ được, nếu không nắm vững Stream API , các phương thức giao diện mặc định, Lambda Expression, Java time API và các tính năng khác của phiên bản này.

Các phiên bản Java khác tiếp tục hành trình áp dụng tính năng đang hoạt động. Phiên bản LTS tiếp theo là Java 11 - đây là phiên bản mà bạn thường gặp trong các yêu cầu công việc ngày nay. Nhiều công ty sẽ không chuyển đổi cho đến khi LTS tiếp theo được phát hành, được cho là Java 17 sẽ ra mắt vào tháng 9 năm 2021. Vậy thì chắc chắn bạn nên nắm thật chắc các đặc trưng của Java 11 trước khi tìm việc mới nhé

Các phiên bản Java sau này, lên đến 15 phiên bản như đã đề cập ở trên, vẫn đang trong quá trình xây dựng mở rộng thêm, một số phiên bản mới nhất đã bắt đầu được chấp nhận và đưa vào sử dụng. Ví dụ: đã có bản phát hành Amazon Corretto 15.

Dù thế nào đi nữa, bạn luôn phải sẵn sàng cho việc cập nhật sử dụng các phiên bản Java mới nhất ! Luôn sẵn sàng cho những điều mới mẻ.

6. Tập trung vào JVM

Java không tồn tại nếu không có JVM (Máy ảo Java). Đây là một công cụ thực thi cho phép các ứng dụng Java chạy trên bất kỳ nền tảng nào có thể. Vì vậy, nếu bạn muốn tham gia vào một nhóm các nhà phát triển Java giỏi, việc hiểu rõ các nguyên tắc làm việc của JVM là điều bắt buộc. Ngoài ra, kiến thức về máy ảo sẽ giúp bạn giải quyết vấn đề trong quá trình code. Vì vậy, trong số những thứ khác, hãy đảm bảo nắm vững các luồng hệ thống JVM và cách Java được thực thi trong môi trường runtime.

7. Các phương thức phát triển phần mềm

Nếu bạn muốn đi trước nhiều lập trình viên Java khác, bạn nên đặc biệt chú ý đến các phương thức, khung tư duy về phát triển phần mềm . Trước hết, hãy làm quen với Agile và đặc biệt là SCRUM, nhưng cũng phải hiểu về Waterfall và sẵn sàng làm việc với nó. Khi mà nhiều DEV lựa chọn phương thức phát triển phần mềm tùy thuộc vào sở thích của khách hàng, thì việc biết nhiều phương pháp trong số đó sẽ giúp bạn vượt lên trên và được chú ý đó.

8. Làm quen với Kiểm thử tự động - Automation test

Điều phân biệt một DEV Java xịn với 1 DEV Java chưa xịn là khả năng viết kiểm thử tự động. Bất kỳ loại kiểm thử nào không- thủ công đều có thể được coi là tự động: Unit, integration và các loại khác. Học ngay nhé. Bạn cũng nên tìm hiểu cách phân phối các dự án theo cách mà Test là một phần của quy trình CI / CD và code sẽ không được sử dụng nếu một số phần quan trọng chưa được Test.

Dưới đây là quy trình phát triển và triển khai khi bao gồm Test:

1. Bạn phát triển một thành phần của ứng dụng và bao phủ nó bằng Unit test cho đến khi chuyển sang phần tiếp theo.

Nếu thực hiện theo phương pháp này một cách kỹ lưỡng, bạn có thể nhận thấy cách nó ngầm buộc bạn phải giữ mô-đun tốt của mã. Triển khai Unit test tốt là thứ cho phép bạn chạy mã thành phần của mình một cách riêng biệt. Bạn không thể sử dụng cơ sở dữ liệu, các API bên ngoài hoặc dựa vào các lớp khác.

Cung cấp dữ liệu demo đã được tổng hợp lại một cách chính xác, lưu ý đến tất cả các trường hợp hiếm như giá trị rỗng hoặc null và kiểm tra xem bạn có nhận được kết quả như mong đợi hay không. Sau khi test, bạn có thể chắc chắn rằng phần này của ứng dụng chạy ổn, không có lỗi và có thể dựa vào logic của nó ở những nơi khác. JUnit 5 và Mockito lúc này sẽ cực kì hữu ích - hãy nắm vững và sử dụng chúng mỗi ngày.

Ngoài ra, một lợi thế khác là sử dụng Test-Driven Development(TDD) khi bạn viết các Test case và test thử nghiệm ngay cả trước khi viết mã thành phần. Dưới đây là một câu chuyện thú vị về việc đôi khi TDD có thể tiết kiệm cho bạn bao nhiêu thời gian gỡ lỗi.

2. Sau khi tất cả các thành phần được code với quy trình như trên, bạn cần tiếp tục kiểm tra tích hợp tự động.

Trong hầu hết các trường hợp, điều đó chỉ có nghĩa là tận dụng ứng dụng của bạn như một tập lệnh đơn giản, chạy nó với một số dữ liệu đầu vào và kiểm soát đầu ra (thường thực hiện với Docker container). Tuy nhiên, đôi khi nó có nghĩa là test các thành phần riêng biệt, nhưng lần này là sử dụng các tài nguyên bên ngoài có thực như cơ sở dữ liệu hoặc tệp lưu trữ.

Dù thế nào, hãy nghĩ về những trường hợp input hiếm, kiểm tra xem ứng dụng của bạn có thể xử lý những trường hợp này một cách chính xác hay không.

3. Cuối cùng, bạn nên nhúng Test vào đường dẫn CI / CD.

Một cách cổ điển hiện đại là khi bạn gửi mã của mình vào Git repository, theo yêu cầu commit, pull request hoặc merge- hợp nhất vào một nhánh cụ thể, Hook sẽ được kích hoạt. Thao tác này chạy một tập lệnh triển khai và tận dụng Docker container, container này sẽ cố gắng tạo ứng dụng hoặc hình ảnh Docker, tùy thuộc vào việc triển khai.

Dù bằng cách nào, với điều kiện là ứng dụng đã được tạo thành công (và bạn sẽ tự động được bảo vệ khỏi các ứng dụng có sai sót), ứng dụng sẽ cố gắng chạy tất cả các thử nghiệm của bạn trong container, cả Unit và Intergration. Nếu bất kỳ test nào không thành công, toàn bộ quá trình sẽ không thành công và Git tự động không phê duyệt Pull request hoặc kết quả là ứng dụng không được tạo.

Một số chi tiết của quy trình này sẽ khác nhau, nhưng nói chung, phương pháp phân phối ứng dụng này sẽ mang lại cho bạn khả năng kiểm soát chất lượng rõ ràng, giúp bạn tiết kiệm hàng giờ chữa cháy khi ứng dụng của bạn gặp sự cố trong sản phẩm.

  1. Đánh bóng kỹ năng viết mã của bạn

    Code là thực hành. Bất kể bạn đọc bao nhiêu cuốn sách, chúng sẽ không hiệu quả bằng việc bạn đã trau dồi kiến thức trong thực tế. May mắn thay, viết mã ngày nay không quá nhàm chán như bạn nghĩ - có rất nhiều nền tảng web luyện tập viết mã trở nên hấp dẫn, thú vị hơn: Codewars, Cyber-Dojo, CodeChef, CodinGame...


Bài lược dịch từ BetterProgramming