13 Jan, 2021
Học công nghệ nào
Tuần trước, một sinh viên trong lớp kĩ nghệ phần mềm của tôi đã hỏi tôi: “Công nghệ phần mềm phức tạp thế và thay đổi thường xuyên, ngôn ngữ lập trình nào em cần học? Công nghệ nào em cần biết để tôi có thể có tương lai tốt hơn khi em tốt nghiệp?”
Tôi bảo anh ta: “Không thể tiên đoán được tương lai. Nếu bạn nhìn vào công nghệ ngày nay, bạn có lẽ sẽ bị lẫn lộn bởi vì có nhiều thế. Tuy nhiên, có một số xu hướng mà bạn có thể cần để ý tới. Từ xu hướng ngôn ngữ lập trình, có lẽ Java và C# sẽ tiếp tục chi phối thị trường trong vài năm tới. Tôi nghĩ Java vẫn là ngôn ngữ lập trình được cần nhất ngày nay và C# có lẽ là thứ hai. Tất nhiên, một số công ti vẫn dùng C và C++. Tôi không biết công ti nào dùng Pascal, nó là ngôn ngữ máy tính tốt cho dạy học và vẫn được dạy ở một số đại học nhưng không được dùng trong công nghiệp. Có các ngôn ngữ lập trình khác như Ruby, Scala, Perl, Python, và Groovy nhưng ứng dụng của chúng rất giới hạn vì chúng chưa phổ biến trong công nghiệp.
Dựa trên xu hướng công nghiệp hiện thời, tôi nghĩ “Phần mềm như dịch vụ” (SaaS) sẽ là quan trọng khi các công ti bắt đầu áp dụng nó vào kinh doanh của họ. Biến thể khác của khá niệm SaaS là “Tính toán mây”. Khu vực này đang được “quảng cáo” bởi nhiều nhà tư vấn và nhà cung cấp phần mềm như khu vực tăng trưởng nhanh nhất. Tuy nhiên, có nhiều vấn đề như an ninh và giao thức truyền phải được giải quyết trước khi nó sẽ được công nghiệp chấp nhận. Với loại xu hướng này, Kiến trúc hướng dịch vụ Service Orient Architecture (SOA) và tích hợp ứng dụng toàn công ti Enterprise Application Integration (EAI) sẽ phổ biến vì chúng là quan trọng cho nhiều công ti, đặc biệt trong khu vực thương mại điện tử để tạo ra kinh doanh doanh nghiệp với doanh nghiệp Business to Business (B2B).
Dựa trên các xu hướng công nghệ, tôi nghĩ cả Dot.Net và J2EE sẽ tiếp tục chi phối khuôn khổ phát triển và thị trường nền do sức mạnh và sự hỗ trợ công nghiệp của họ. Có J2EE “nhẹ cân” mà đơn giản và dễ dùng hơn nhiều cho người phát triển Java, đang được đề xướng trong công nghiệp. Enterprise Java Bean (EJB), kiến trúc để thiết lập cấu phần chương trình chạy trên phần máy phục vụ của mạng máy tính, có có từ nhiều năm nay và vẫn phổ biến với nhiều nhóm kiến trúc doanh nghiệp. Tuy nhiên, có khuôn khổ ứng dụng “nguồn mở” cho cả Java và Dot.Net có tên là “Spring” hiện đang hấp dẫn số đông các tín đồ. Dựa trên việc làm được liệt kê trên vài websites, số việc làm cho người phát triển Spring đang tăng trưởng nhanh gấp đôi EJB.
Từ khu vực khuôn khổ web, tôi nghĩ xu hướng sẽ vẫn là JSP, Strut và GWT và Web Flow khi có nhu cầu lớn cho các khu vực này. Các khu vực khác như Velocity và Seam cũng đang làm tốt nhưng việc mở ra việc làm mới vẫn còn bị giới hạn. Từ khu vực máy phục vụ ứng dụng Java, Java Application Server, tôi nghĩ Oracle Application Server có lẽ là mạnh nhất nhưng Web-Sphere và JBoss cũng tăng trưởng nhanh để bắt kịp. Các công nghệ phục vụ ứng dụng khác như Glassfish và Geronimo đang tăng trưởng nhưng không tốt được như các nơi khác.
Từ khu vực bình chứa web Java, tôi nghĩ Tomcat vẫn chi phối thị trường nhưng Resin và Jetty cũng đang tăng trưởng nhanh nữa. Khó mà dự báo ai sẽ là kẻ thắng trong vài năm tới. Trong phần gắn thêm cho trình duyệt web, tôi nghĩ cả “Flash” và “Silverlight” vẫn trong cuộc đua giành vị trí đầu, “Flash” vẫn có nhiều người dùng trong khu vực phát triển web nhưng Microsoft đang đẩy “Silverlight” được dùng bởi các đối tác của nó và có nhiều việc làm mở ra trong khu vực đặc biệt này ngày nay.
Khó mà dự đoán tương lai trong công nghệ bởi vì nó thay đổi rất nhanh. Việc nóng ngày nay có thể là lạnh trong vài năm tới. Xu hướng công nghiệp chỉ có thể giúp đỡ bạn đặt ra mục đích của mình hay để tập trung vào điều bạn cần biết nhưng không đảm bảo việc làm. Tuy nhiên, trong hai tới bốn năm sắp tới, nếu bạn là người phát triển phần mềm có kĩ năng lập trình Java và C# và tri thức “Spring”, bạn sẽ làm việc tốt. Bạn cũng nên biết cách phát triển ứng dụng web bằng JSP, Struts hay Web Flow và cách thực hiện nó trên Tomcat hay Oracle Application Servers thì bạn có thể là người có giá trị trong thị trường việc làm. Nếu bạn có tri thức về “Flash” hay “Silverlight” thì bạn sẽ không có vấn đề gì trong tìm việc trong khu vực phát triển “khách hàng giầu”. Nếu bạn là người phát triển có kinh nghiệm ưa thích công việc tích hợp thì bạn cần học về Kiến trúc hướng dịch vụ “Service Orient Architecture” (SOA) và tích hợp ứng dụng doanh nghiệp Enterprise Application Integration (EAI). Tôi tin rằng “tính toán mây”, “Spring”, “GWT”, “Sliverlight” là các khu vực mà một số trong các bạn có thể muốn học thêm.
—-English version—-
What technology to study?
Last week, a student in my software engineering class asked me: “Software technology is so complex and changes often, what programming language that I need to study? What technologies that I need to know so I can have better future when I graduate?”
I told him: “It is impossible to predict the future. If you look at the technology today, you probably will be confused because there are so many. However, there are some trends that you may want to pay attention. From a programming language trend, probably Java and C# will continue to dominate the market in the next few years. I think Java is still the most wanted programming language today and C# is probably second. Of course, some companies are still using C and C++. I do not know of any company using Pascal, it is a good computer language for teaching and still being taught in some universities but not being used in the industry. There are other programming languages such as Ruby, Scala, Perl, Python, and Groovy but their applications are very limited as they are not popular in the industry yet.
Based on current industry trends, I think “Software-as-a-Services” (SaaS) will be important as companies are beginning to apply it to their business. Another variable of the SaaS concept is “Cloud computing”. This area is being “Advertised” by many consultants and software vendors as the fastest growing area. However, there are several issues such as security and transfer protocols that must be solved before it will be accepted by the industry. With this kind of trend, the Service Orient Architecture (SOA) and Enterprise Application Integration (EAI) will be popular as they are important to many companies, especially in the e-commerce area for the creation of the Business to Business (B2B).
Based on technology trends, I think both Dot.Net and J2EE will continue to dominate the development framework and platform market due to their industry strengths and supports. There is a “lightweight” J2EE which is much simpler and easier to use for Java developers that is being promoted in the industry. Enterprise Java Bean (EJB), the architecture for setting up program component that run in the server parts of a computer network, has been around for many years and is still popular with many enterprise architecture groups. However, there is an “open source” application framework for both Java and Dot.Net called “Spring” that currently attract quite a number of followers. Based on the job listed on several websites, the number of jobs for Spring developers is growing twice faster than EJB.
From the web framework area, I think the trend would still be JSP, Strut and GWT and Web Flow as there are large demands for these areas. Other such as Velocity and Seam are also doing well but there are limited job openings. From the Java Application Server area, I think Oracle Application Server is probably the strongest but Web-Sphere and JBoss are also growing fast to catch up. Other application server technologies such as Glassfish and Geronimo are growing but not as well as the others.
From the Java web container area, I think Tomcat is still dominating the market but Resin and Jetty is also growing fast too. It is difficult to predict who will be the winner in the next few years. In the web browser plug-in, I think both “Flash” and “Silverlight” are still in the race for the top position, “Flash” still has a lot of users in the web development area but Microsoft is pushing “Silverlight” to be used by its partners and there are many job openings in this particular area today.
It is difficult to predict the future in technology because it changes very fast. Today’s hot jobs could be cold in the next few years. The industry trends can only help you to set your goals or to focus on what you need to know but not a guarantee for jobs. However, in the next two to four years, if you are a software developer with Java and C# programming skills and “Spring” knowledge, you will do well. You should also need to know how to develop web applications with JSP, Struts or Web Flow and how to implement it on Tomcat or Oracle Application Servers then you could be a valuable person in the job market. If you have knowledge of “Flash” or “Silverlight” then you will have no problem finding work in the “rich client” development area. If you are an experienced developers that prefer more integration works then you need to learn about “Service Orient Architecture” (SOA) and Enterprise Application Integration (EAI). I do believe that “Cloud Computing”, “Spring”, “GWT”, “Sliverlight” are areas that some of you may want to learn more.