Kể từ khi JAVA được công bố chính thức từ năm 1995, nó đã thay đổi rất nhiều cái nhìn của chúng ta về Hệ Điều hành. Bill Gate đã từng nói đùa rằng, nó – Hệ Điều hành – không phải là phần cứng mà là phần mềm, là tương lai. (It was not about the hardware but the software which will be the future). Một thập kỷ sau, John Gage (thành viên thứ năm của SUN) đã nói, “Mạng là máy tính” (The Network is the Computer). Và điều này đã nhanh chóng được chứng minh trong thế kỷ 21 này. Tuy nhiên, JAVA đã được xây dựng không phụ thuộc vào Hệ Điều hành và được triển khai qua mạng. JAVA với công nghệ Applet đã khai sinh cho những Ứng dụng Mạng Giàu Tương tác (Rich Network Application hay còn gọi là Rich Internet Application – RIA). JAVA không hoàn hảo và chúng ta liên tục có những bản phát hành khác nhau, tuy nhiên JAVA đã khai sinh một ngôn ngữ lập trình cực kỳ phổ biến.
Trở lại với nội dung bài viết, tác giả Armel Nene (Senior Java developer với kinh nghiệm làm việc trong lĩnh vực tài chính như Barclays, SMBC và công nghiệp game) muốn nhấn mạnh vào những gì mà mọi lập trình viên Java nên biết dù kinh nghiệm của họ có tới đâu đi chăng nữa và cũng không tin rằng một người với kinh nghiệm 5 năm thì không thể bằng một người có kinh nghiệm 10 năm. Mỗi người đều có một phương pháp làm việc tuy nhiên với một người lập trình viên, bạn luôn luôn phải đồng hành cùng công nghệ. Sau đây là 10 điều mà tác giả nghĩ là quan trọng hàng đầu đối với lập trình viên Java.
1. Ghi nhớ những vấn đề căn bản của JAVA và OOP (Remember the basic of JAVA language and OOP paradigm)
Hầu hết mọi LTV chuyên nghiệp dường như quên mất những nguyên lý của mỗi ngôn ngữ. Nói như vậy, không có nghĩa là họ không giỏi, tuy nhiên liệu họ có thể giải thích cho một lập trình viên ít kinh nghiệm tại sao họ sử dụng “interfaces” thay vì sử dụng các “abstract classes” hay tại sao ứng dụng một “pattern” lên một cái khác. Một lập trình viên thường rất kiêu ngạo vì tin rằng họ đã code “đẹp” nhất, tuy nhiên thực tế là mọi người làm việc theo nhóm với kỹ năng và kinh nghiệm khác nhau. Một điều quan trọng nữa là bạn có thể backup đối với các thao tác cũng như đối với mã nguồn. Một câu hỏi rất đơn giản tựa như khi nào nên sử dụng một “String object” thay vì “StringBuilder” hoặc “StringBuffer”. Có thể, bạn nhận thấy nó khá dễ dàng tuy nhiên làm cách nào để truyền đạt cho người khác hiểu.
2. Hiểu biết về tầng công nghệ của mình (Know your technology stack)
Mọi lập trình viên đều phải biết về tầng công nghệ của mình. Điều này có nghĩa là gì? JAVA không giống như những ngôn ngữ khác, JAVA có các tập hợp con như công nghệ J2ME và các tập hợp phía trên như công nghệ Java EE. Chúng ta có kinh nghiệm trong một lĩnh vực nhưng cũng thật quan trọng khi nắm được sự khác biệt giữa các công nghệ của JAVA. Những câu hỏi căn bản như sự khác biệt giữa SWING, Applet, Servlets, EJBs hay như JAVAFX sẽ giúp bạn thêm tự tin. Hầu hết các lập trình viên không biết làm cách nào để điều chỉnh JVM và sự khác biệt giữa môi trường JRE và SDK. Bạn có biết tại sao phải cần cài đặt SDK để chạy Tomcat nhưng chỉ cần JRE để chạy một ứng dụng?
3. Thử nghiệm với nhiều framework khác nhau Java EE (Experiment with various Java EE framework)
Mặc dù không đòi hỏi bạn phải là chuyên gia trong từng framework của Java EE, nhưng nó sẽ tạo ra điểm khác biệt nếu bạn đã quen thuộc với Spring hay EJB. Đó thực sự là một yếu tố mang tính cốt lõi mà CVs của mọi lập trình viên nên có. Lập trình viên cũng nên biết về sự khác biệt giữa Java EE 5 (và sắp tới là Java EE 6) với Spring. Hibernate cũng thật sự rất cần thiết để truy cập dữ liệu tuy nhiên mọi người đã có thể chuyển sang sử dụng JPA. Hibernate cũng tuân theo JPA và do đó không có sự bào chữa nào ở đây cả.
4. Hiểu biết về một ngôn ngữ kịch bản (Know a scripting language)
JAVA có thể là quá nặng nề đối với một số tác vụ đơn giản mà có thể được thực hiện bằng các ngôn ngữ động đơn giản như Python, Perl hay các loại khác. Thực sự, các lập trình viên nên tìm hiểu về ngôn ngữ kịch bản tương ứng mà hệ điều hành mục tiêu cung cập thư viện (shell script).
5. Hiểu biết về cách thức phát triển các dịch vụ web (Know how to develop web services)
Mạng là máy tính, do đó thật sự quan trọng khi hiểu biết về sự khác biệt giữa các framework về web services hiện có. Dữ liệu đã được gom lại nhờ các web services và hướng các services của bạn tới “cloud”. Các lập trình viên SWING có thể sẽ không phát triển các web services nhưng chắc chắn họ sẽ được kết nối với dữ liệu thông qua các web services. Hiểu về sự khác biệt giữa các dạng chuẩn SOAP hay phi chuẩn ReST sẽ giúp lựa chọn ra cái phù hợp cho web services.
6. Biết được làm cách nào và khi nào sử dụng đa luồng cho ứng dụng (Know how and when to multithread your application)
“À, tôi phải đăt nó đúng ở chỗ đó!”. Các lập trình viên nên biết khi nào và tại sao phải đa luồng hóa một ứng dụng, một luồng thông tin nhiều chiều (inter-communication) hay luồng giám sát. Mọi lập trình viên, dù ít kinh nghiệm hay không cũng đều nên biết cách viết một ứng dụng đa luồng.
7. Triển khai Cơ sở dữ liệu sử dụng JDBC và JPA (Database development using JDBC and JPA)
Đây đã là nguyên tắc bất di bất dịch của việc quy trình phát triển. Mọi LTV đều nên biết cách viết các câu truy vấn SQL và cách tạo Cơ sở dữ liệu. Mọi ứng dụng doanh nghiệp đều lưu trữ dữ liệu trong một Hệ Quản trị CSDL quan hệ và đó chính là điều cực kỳ quan trọng mà những kiến thức này trở thành một điều kiện tiên quyết thứ hai. Java EE đã giới thiệu JPA (JDO đã được giới thiệu trước đó) những không phải là có thể ứng dụng được trong mọi tình huống. Do vậy, hiểu được điểm khác biệt và biết được khi nào thì sử dụng cái này thay cho cái kia thì hết sức quan trọng.
8. Biết một ngôn ngữ kịch bản phía client và AJAX là gì (Know a client script languague and what is AJAX)
Mạng là máy tính và Internet là nền tảng triển khai. Java EE và các frameworks khác giữ vai trò thực thi phía server có thể tạo ra thêm các “tải” (load) cho server. Nếu bạn muốn chuyển sang một hệ thống mây (cloud-based system) nơi mà nhà cung cấp tính tiền mỗi tài nguyên mà bạn dùng, vậy tại sao không chuyển việc tính toán sang phía client. AJAX đã gây ra một chấn động lớn vào thời điểm 3 năm trước dù nó không phải là một công nghệ nhưng lại là một cách thức mới để thực hiện các tác vụ đã có sẳn trước đó. Có vô số các AJAX framework dựa trên nền tảng JAVA như GWT hay DWR, những cái mà giúp LTV dễ dàng phát triển các ứng dụng AJAX. Bên cạnh đó, LTV cũng nên biết về nguyên lý của nó
9. Biết được đối thủ cạnh tranh và không tham gia vào các cuộc thảo luận kiểu như “Đâu là IDE tốt nhất” (Know your competitors and do not take part in “what is the best IDE” discusstion)
JAVA không phải là ngôn ngữ duy nhất có thể làm được thứ nó làm. Tuy nhiên, JAVA có lẽ trưởng thành và hoàn thiện hơn so với các ngôn ngữ khác. Hiểu được điểm khác biệt giữa JAVA và .NET hay JAVA và Ruby là một sự trang bị hết sức đáng giá. Bạn cũng cần phải biết khi nào và tại sao lại sử dụng cái này thay cho cái kia, và xin đừng bao giờ tham gia vào các cuộc tranh luận kiểu như “IDE của tôi tốt hơn IDE kia bởi vì…”, điều này sẽ giúp cho cộng đồng JAVA có được nhiều lưa chọn hơn về IDEs, frameworks v.v… Mọi công cụ đều có một vị thế nhất định chẳng hạn như JDeveloper thì tốt hơn cái khác nếu bạn dự định phát triển hoàn toàn trên tầng kiến trúc của Oracle v.v…
10. Biết về ANT (or MAVEN), TOMCAT và các máy chủ ứng dụng mainstream khác (Know ANT , TOMCAT and any other mainstream application server)
ANT, thực tế là ngôn ngữ kịch bản để build các ứng dụng JAVA. MAVEN cũng dần trở nên thông dụng như ANT. Còn TOMCAT, với các LTV, nó có lẽ vĩnh viễn trở thành một ứng dụng phía server để xử lý các servlet và render các trang web có chứa mã JSP.
Sẽ còn rất nhiều thứ, tuy nhiên trên đây có lẽ là 10 điều căn bản đầu tiên mà mọi LTV nên trang bị cho mình.
Trở lại với nội dung bài viết, tác giả Armel Nene (Senior Java developer với kinh nghiệm làm việc trong lĩnh vực tài chính như Barclays, SMBC và công nghiệp game) muốn nhấn mạnh vào những gì mà mọi lập trình viên Java nên biết dù kinh nghiệm của họ có tới đâu đi chăng nữa và cũng không tin rằng một người với kinh nghiệm 5 năm thì không thể bằng một người có kinh nghiệm 10 năm. Mỗi người đều có một phương pháp làm việc tuy nhiên với một người lập trình viên, bạn luôn luôn phải đồng hành cùng công nghệ. Sau đây là 10 điều mà tác giả nghĩ là quan trọng hàng đầu đối với lập trình viên Java.
1. Ghi nhớ những vấn đề căn bản của JAVA và OOP (Remember the basic of JAVA language and OOP paradigm)
Hầu hết mọi LTV chuyên nghiệp dường như quên mất những nguyên lý của mỗi ngôn ngữ. Nói như vậy, không có nghĩa là họ không giỏi, tuy nhiên liệu họ có thể giải thích cho một lập trình viên ít kinh nghiệm tại sao họ sử dụng “interfaces” thay vì sử dụng các “abstract classes” hay tại sao ứng dụng một “pattern” lên một cái khác. Một lập trình viên thường rất kiêu ngạo vì tin rằng họ đã code “đẹp” nhất, tuy nhiên thực tế là mọi người làm việc theo nhóm với kỹ năng và kinh nghiệm khác nhau. Một điều quan trọng nữa là bạn có thể backup đối với các thao tác cũng như đối với mã nguồn. Một câu hỏi rất đơn giản tựa như khi nào nên sử dụng một “String object” thay vì “StringBuilder” hoặc “StringBuffer”. Có thể, bạn nhận thấy nó khá dễ dàng tuy nhiên làm cách nào để truyền đạt cho người khác hiểu.
2. Hiểu biết về tầng công nghệ của mình (Know your technology stack)
Mọi lập trình viên đều phải biết về tầng công nghệ của mình. Điều này có nghĩa là gì? JAVA không giống như những ngôn ngữ khác, JAVA có các tập hợp con như công nghệ J2ME và các tập hợp phía trên như công nghệ Java EE. Chúng ta có kinh nghiệm trong một lĩnh vực nhưng cũng thật quan trọng khi nắm được sự khác biệt giữa các công nghệ của JAVA. Những câu hỏi căn bản như sự khác biệt giữa SWING, Applet, Servlets, EJBs hay như JAVAFX sẽ giúp bạn thêm tự tin. Hầu hết các lập trình viên không biết làm cách nào để điều chỉnh JVM và sự khác biệt giữa môi trường JRE và SDK. Bạn có biết tại sao phải cần cài đặt SDK để chạy Tomcat nhưng chỉ cần JRE để chạy một ứng dụng?
3. Thử nghiệm với nhiều framework khác nhau Java EE (Experiment with various Java EE framework)
Mặc dù không đòi hỏi bạn phải là chuyên gia trong từng framework của Java EE, nhưng nó sẽ tạo ra điểm khác biệt nếu bạn đã quen thuộc với Spring hay EJB. Đó thực sự là một yếu tố mang tính cốt lõi mà CVs của mọi lập trình viên nên có. Lập trình viên cũng nên biết về sự khác biệt giữa Java EE 5 (và sắp tới là Java EE 6) với Spring. Hibernate cũng thật sự rất cần thiết để truy cập dữ liệu tuy nhiên mọi người đã có thể chuyển sang sử dụng JPA. Hibernate cũng tuân theo JPA và do đó không có sự bào chữa nào ở đây cả.
4. Hiểu biết về một ngôn ngữ kịch bản (Know a scripting language)
JAVA có thể là quá nặng nề đối với một số tác vụ đơn giản mà có thể được thực hiện bằng các ngôn ngữ động đơn giản như Python, Perl hay các loại khác. Thực sự, các lập trình viên nên tìm hiểu về ngôn ngữ kịch bản tương ứng mà hệ điều hành mục tiêu cung cập thư viện (shell script).
5. Hiểu biết về cách thức phát triển các dịch vụ web (Know how to develop web services)
Mạng là máy tính, do đó thật sự quan trọng khi hiểu biết về sự khác biệt giữa các framework về web services hiện có. Dữ liệu đã được gom lại nhờ các web services và hướng các services của bạn tới “cloud”. Các lập trình viên SWING có thể sẽ không phát triển các web services nhưng chắc chắn họ sẽ được kết nối với dữ liệu thông qua các web services. Hiểu về sự khác biệt giữa các dạng chuẩn SOAP hay phi chuẩn ReST sẽ giúp lựa chọn ra cái phù hợp cho web services.
6. Biết được làm cách nào và khi nào sử dụng đa luồng cho ứng dụng (Know how and when to multithread your application)
“À, tôi phải đăt nó đúng ở chỗ đó!”. Các lập trình viên nên biết khi nào và tại sao phải đa luồng hóa một ứng dụng, một luồng thông tin nhiều chiều (inter-communication) hay luồng giám sát. Mọi lập trình viên, dù ít kinh nghiệm hay không cũng đều nên biết cách viết một ứng dụng đa luồng.
7. Triển khai Cơ sở dữ liệu sử dụng JDBC và JPA (Database development using JDBC and JPA)
Đây đã là nguyên tắc bất di bất dịch của việc quy trình phát triển. Mọi LTV đều nên biết cách viết các câu truy vấn SQL và cách tạo Cơ sở dữ liệu. Mọi ứng dụng doanh nghiệp đều lưu trữ dữ liệu trong một Hệ Quản trị CSDL quan hệ và đó chính là điều cực kỳ quan trọng mà những kiến thức này trở thành một điều kiện tiên quyết thứ hai. Java EE đã giới thiệu JPA (JDO đã được giới thiệu trước đó) những không phải là có thể ứng dụng được trong mọi tình huống. Do vậy, hiểu được điểm khác biệt và biết được khi nào thì sử dụng cái này thay cho cái kia thì hết sức quan trọng.
8. Biết một ngôn ngữ kịch bản phía client và AJAX là gì (Know a client script languague and what is AJAX)
Mạng là máy tính và Internet là nền tảng triển khai. Java EE và các frameworks khác giữ vai trò thực thi phía server có thể tạo ra thêm các “tải” (load) cho server. Nếu bạn muốn chuyển sang một hệ thống mây (cloud-based system) nơi mà nhà cung cấp tính tiền mỗi tài nguyên mà bạn dùng, vậy tại sao không chuyển việc tính toán sang phía client. AJAX đã gây ra một chấn động lớn vào thời điểm 3 năm trước dù nó không phải là một công nghệ nhưng lại là một cách thức mới để thực hiện các tác vụ đã có sẳn trước đó. Có vô số các AJAX framework dựa trên nền tảng JAVA như GWT hay DWR, những cái mà giúp LTV dễ dàng phát triển các ứng dụng AJAX. Bên cạnh đó, LTV cũng nên biết về nguyên lý của nó
9. Biết được đối thủ cạnh tranh và không tham gia vào các cuộc thảo luận kiểu như “Đâu là IDE tốt nhất” (Know your competitors and do not take part in “what is the best IDE” discusstion)
JAVA không phải là ngôn ngữ duy nhất có thể làm được thứ nó làm. Tuy nhiên, JAVA có lẽ trưởng thành và hoàn thiện hơn so với các ngôn ngữ khác. Hiểu được điểm khác biệt giữa JAVA và .NET hay JAVA và Ruby là một sự trang bị hết sức đáng giá. Bạn cũng cần phải biết khi nào và tại sao lại sử dụng cái này thay cho cái kia, và xin đừng bao giờ tham gia vào các cuộc tranh luận kiểu như “IDE của tôi tốt hơn IDE kia bởi vì…”, điều này sẽ giúp cho cộng đồng JAVA có được nhiều lưa chọn hơn về IDEs, frameworks v.v… Mọi công cụ đều có một vị thế nhất định chẳng hạn như JDeveloper thì tốt hơn cái khác nếu bạn dự định phát triển hoàn toàn trên tầng kiến trúc của Oracle v.v…
10. Biết về ANT (or MAVEN), TOMCAT và các máy chủ ứng dụng mainstream khác (Know ANT , TOMCAT and any other mainstream application server)
ANT, thực tế là ngôn ngữ kịch bản để build các ứng dụng JAVA. MAVEN cũng dần trở nên thông dụng như ANT. Còn TOMCAT, với các LTV, nó có lẽ vĩnh viễn trở thành một ứng dụng phía server để xử lý các servlet và render các trang web có chứa mã JSP.
Sẽ còn rất nhiều thứ, tuy nhiên trên đây có lẽ là 10 điều căn bản đầu tiên mà mọi LTV nên trang bị cho mình.
Đăng nhận xét