Đoàn Xuân Dũng
(DungDX)
New Member
(Bài viết này tôi đã gửi trước đây. Nhưng mới gửi lên được vài ngày thì forum bị down. Nay gửi lại, để xem các bác có ai chia sẻ chung suy nghĩ và đánh giá không).
Trao đổi với các lập trình viên
Chào các anh em lập trình viên,
Nhân lúc giao thời, dựa trên quan điểm cá nhân, thử nhìn lại chặng đường tiêu biểu đã đi qua của công nghiệp phần mềm (chỉ xét từ thời điểm mà thế hệ chúng ta quan sát được) và đoán (bừa) những việc sẽ tới khoảng 3-5 năm nữa; từ đó suy tính xem các lập trình viên nói chung nên làm gì. Mong cùng trao đổi với các bạn. Trong phân tích sau đây, việc phân chia các giai đoạn phát triển của ngành software chỉ mang tính tương đối; và một giai đoạn được định nghĩa dựa trên sự nổi trội của khuynh hướng công nghệ chủ đạo trong giai đoạn đó, chứ không tính từ khi công nghệ đó mới phôi thai cho đến khi nó chấm dứt hẳn:
* (Giai đoạn 1) Các năm khoảng cuối 80 đến 93 - 94: DOS và các hệ thống character mode thống trị. Các lập trình viên chủ yếu xây dựng sản phẩm trên nền tảng này. Khuynh hướng phát triển (theo thời gian) là từ các ứng dụng stand-alone cho đến các ứng dụng networked (thông qua khả năng của OS hoặc bản thân ứng dụng networked thực sự).
* (Giai đoạn 2) Khoảng 94 - 98: Windows thống trị. Các lập trình viên quay sang lập trình cho môi trường đồ họa. Khuynh hướng là từ các công cụ quá độ (C for Win, Pascal for Win,... với các thư viện support GUI) chuyển dần lên trào lưu lập trình visual, rồi mở rộng ứng dụng ra client/server. Thị trường thời điểm này vẫn có chỗ cho những developer với skills cũ (của giai đoạn 1), nhưng các cơ hội đã giảm đi rất nhiều.
* (Giai đoạn 3) Khoảng 98 đến 2004: WWW thống trị. Các lập trình viên ào ào xông vào lĩnh vực Internet, mà phần lớn là Web. Khuynh hướng là từ ứng dụng đơn giản (Web tĩnh (thực ra cũng chưa phải là ứng dụng),...), đến ứng dụng thực sự (các công nghệ Web nội dung động,...), đến xây dựng ứng dụng Web dựa trên các component, các ứng dụng multi-tier triển khai trên Application Servers,... Thị trường cho các developers có skills của giai đoạn 2 vẫn còn, nhưng bị thu hẹp nhiều. Các lập trình viên chỉ có skills của giai đoạn 1 có thể coi như là chết hẳn.
Nhưng các công nghệ Web component vẫn chưa đủ cho sự phát triển của E-Business; chi phí xây dựng ứng dụng vẫn quá lớn do nhiều thứ vẫn phải develop from scratch; các applications vẫn khó communicate với nhau do sự khác biệt platform,... Điều đó, cộng với sự kỳ vọng quá cao của mọi người vào Internet đã dẫn tới cuộc khủng hoảng DotCom trầm trọng thời gian qua, với hiện tượng là phần lớn các E-Business sụp đổ hoặc điêu đứng.
* (Giai đoạn 4) Dự đoán khoảng 2004 - 2008: Để khắc phục tình trạng trên, các công nghệ mới ra đời, và định hướng mũi nhọn là Web Service. Khi đó, Internet có lẽ sẽ phát triển dần dần tới một mô hình nào đó tương tự hệ điều hành, với các Web Service như là các API. Khi cả thế giới theo trào lưu này, số lượng API sẽ cực kỳ phong phú dẫn tới việc phát triển các ứng dụng sẽ đơn giản và rẻ hơn nhiều; các Business Process sẽ dễ communicate với nhau hơn (bất chấp platform) do được support bởi các chuẩn giao tiếp mới (dựa trên XML). Và một điều đặc biệt, applications' user interface sẽ trở nên rất linh hoạt và phong phú; users sẽ không còn bị trói chặt vào bàn làm việc của mình, và PC sẽ dần mất đi vị thế thống trị, trong khi các mobile devices và các thiết bị tiêu dùng thông minh sẽ tăng dần thị phần. Trong giai đoạn này, hottest skills sẽ xoay quanh việc phát triển và sử dụng Web Services, và lập trình ứng dụng cho các new application delivery channels (PDA, Cell phone,...). Thị trường cho skills giai đoạn 3 bị thu hẹp nhiều. Các skills client/server thuần túy kỹ thuật hoặc các biến thể của nó (skills giai đoạn 2) có thể coi như chết hẳn. Chỉ có những client/server developers với các skills về các package products phổ biến (Oracle Financials, SAP, PeopleSoft,...) mới có thể sống được.
* (Giai đoạn 5) 2008 - ... : Không biết sẽ là cái gì. Nếu Internet hình thành dần theo kiểu như một hệ điều hành lớn, thì phải chăng quá trình phát triển tiêu biểu của một OS sẽ lặp lại? Từ cái nhân (IP, các protocols dựa trên đó,...), cho đến hệ thống các API (Web Services), rồi ra đời các dịch vụ, các tools phát triển, rồi đến các sản phẩm, hệ thống và ứng dụng xây dựng dựa trên các API và các dịch vụ, các tools,...?
Những phân tích trên cho thấy điều gì? Tạm kết luận (bừa) một câu như sau: hottest skills tại một thời điểm luôn là những kỹ năng tương ứng với trào lưu công nghệ chủ đạo tại thời điểm đó (tất nhiên); và những skills lạc hậu khoảng 2 giai đoạn sẽ hầu như không còn cơ hội gì (?), nhất là trong những thị trường lao động cạnh tranh cao như US.
Điều này có ý nghĩa gì đối với các lập trình viên (và những người làm software nói chung)? Khi chuẩn bị bước chân vào industry, phần lớn các developers sẽ có sự đầu tư kỹ càng nhất và do đó cũng nắm vững nhất các skills phù hợp với xu thế công nghệ đương thời. Nhưng technologies thay đổi rất nhanh; một trào lưu thường có tuổi đời tồn tại trung bình khoảng 4-6 năm. Điều đó có nghĩa là các skills sẽ nhanh chóng lạc hậu sau vài năm. Và khi chuyển sang một giai đoạn mới, những skills của giai đoạn trước đó vẫn còn tồn tại được, nhưng sẽ khó khăn hơn nhiều; còn skills của giai đoạn trước đó nữa thì không có nhiều cơ hội sống sót, nhất là khi thị trường trong tình hình suy thoái (như hiện nay). Các lập trình viên không nên để mình bị rơi vào hoàn cảnh này; nếu vì nhiều điều kiện khác nhau hạn chế, cùng lắm là chịu chấp nhận lạc hậu một giai đoạn thôi. Nhưng nếu vẫn muốn làm công tác chuyên môn sâu về kỹ thuật, và muốn mình có khả năng cạnh tranh tốt, luôn được high demand, không e sợ khi bị quẳng ra market bất kỳ lúc nào, và nếu chưa có được ideas gì thực sự nổi trội mà vẫn phải sống nhờ skills, thì không còn lựa chọn nào khác, phải luôn update skills để mình luôn tương đương với trào lưu đương thời (ở đây, chỉ nói đến technical thuần tuý; không xét đến các yếu tố khác như kinh nghiệm, bản lĩnh nghề nghiệp,...). Như vậy, trong cuộc đời làm nghề, một developer chuyên nghiệp có lẽ trung bình sẽ phải trải qua khoảng 3-5 lần thay đổi skills lớn (nhắc lại rằng đây là thay đổi cơ bản về cả khuynh hướng; còn các thay đổi nhỏ như các công nghệ, ngôn ngữ cụ thể,... thì là việc hàng tháng, hàng năm). Lưu ý rằng trong các lúc giao thời, thường tồn tại các công nghệ quá độ (vốn bắt nguồn từ các công nghệ phục vụ cho giai đoạn trước), được bổ sung, phát triển thêm tính năng của giai đoạn sau để kéo dài thêm sự sống cho skills tương ứng. Các loại quá độ này thường không ưu việt bằng các công nghệ "native" của giai đoạn sau, và thường suy tàn khi giai đoạn kế tiếp đi được khoảng nửa chặng đường (cũng có thể có những ngoại lệ khi công nghệ quá độ sẽ trở thành chủ đạo của giai đoạn mới). Các developers với skills cũ nên mạnh dạn rời bỏ các công nghệ quá độ khi các công nghệ "native" đã sẵn sàng.
Tóm lại, các lập trình viên bây giờ nói chung nên làm
gì? "Thời thế tạo anh hùng"; những lúc giao thời, luân
chuyển giai đoạn, tranh tối tranh sáng như thế này chính
là thời cơ dụng võ cho các anh em thoả chí tang bồng mà
thi triển tài năng, nảy sinh ý tưởng. Nếu không có sự
suy thoái của công nghệ mainframe và các máy tính lớn,
dẫn đến sự ra đời của PC và bước sang giai đoạn
mới "máy tính đến mọi nhà", thì làm sao đẻ ra được
anh trọc phú Bill Gates? Bởi vậy, các anh em còn đang ngồi
trên ghế nhà trường hãy quăng hết sách vở vô bổ; ta
cùng nhau nghiên cứu xây dựng nên hệ điều hành mới
cho cell phone, để 20 năm sau, nắm trong tay hàng chục tỷ
USD, cùng nhau chung hưởng phú quý: rượu ngon, dê béo,
gái đẹp,... chẳng mãn nguyện lắm ư???:mrgreen: (j/k).
Tóm lại, các lập trình viên bây giờ nói chung nên làm gì? Nên nhìn tới tương lai: Web Services và Mobile Devices.
Các anh em developers nghĩ sao?
Trao đổi với các lập trình viên
Chào các anh em lập trình viên,
Nhân lúc giao thời, dựa trên quan điểm cá nhân, thử nhìn lại chặng đường tiêu biểu đã đi qua của công nghiệp phần mềm (chỉ xét từ thời điểm mà thế hệ chúng ta quan sát được) và đoán (bừa) những việc sẽ tới khoảng 3-5 năm nữa; từ đó suy tính xem các lập trình viên nói chung nên làm gì. Mong cùng trao đổi với các bạn. Trong phân tích sau đây, việc phân chia các giai đoạn phát triển của ngành software chỉ mang tính tương đối; và một giai đoạn được định nghĩa dựa trên sự nổi trội của khuynh hướng công nghệ chủ đạo trong giai đoạn đó, chứ không tính từ khi công nghệ đó mới phôi thai cho đến khi nó chấm dứt hẳn:
* (Giai đoạn 1) Các năm khoảng cuối 80 đến 93 - 94: DOS và các hệ thống character mode thống trị. Các lập trình viên chủ yếu xây dựng sản phẩm trên nền tảng này. Khuynh hướng phát triển (theo thời gian) là từ các ứng dụng stand-alone cho đến các ứng dụng networked (thông qua khả năng của OS hoặc bản thân ứng dụng networked thực sự).
* (Giai đoạn 2) Khoảng 94 - 98: Windows thống trị. Các lập trình viên quay sang lập trình cho môi trường đồ họa. Khuynh hướng là từ các công cụ quá độ (C for Win, Pascal for Win,... với các thư viện support GUI) chuyển dần lên trào lưu lập trình visual, rồi mở rộng ứng dụng ra client/server. Thị trường thời điểm này vẫn có chỗ cho những developer với skills cũ (của giai đoạn 1), nhưng các cơ hội đã giảm đi rất nhiều.
* (Giai đoạn 3) Khoảng 98 đến 2004: WWW thống trị. Các lập trình viên ào ào xông vào lĩnh vực Internet, mà phần lớn là Web. Khuynh hướng là từ ứng dụng đơn giản (Web tĩnh (thực ra cũng chưa phải là ứng dụng),...), đến ứng dụng thực sự (các công nghệ Web nội dung động,...), đến xây dựng ứng dụng Web dựa trên các component, các ứng dụng multi-tier triển khai trên Application Servers,... Thị trường cho các developers có skills của giai đoạn 2 vẫn còn, nhưng bị thu hẹp nhiều. Các lập trình viên chỉ có skills của giai đoạn 1 có thể coi như là chết hẳn.
Nhưng các công nghệ Web component vẫn chưa đủ cho sự phát triển của E-Business; chi phí xây dựng ứng dụng vẫn quá lớn do nhiều thứ vẫn phải develop from scratch; các applications vẫn khó communicate với nhau do sự khác biệt platform,... Điều đó, cộng với sự kỳ vọng quá cao của mọi người vào Internet đã dẫn tới cuộc khủng hoảng DotCom trầm trọng thời gian qua, với hiện tượng là phần lớn các E-Business sụp đổ hoặc điêu đứng.
* (Giai đoạn 4) Dự đoán khoảng 2004 - 2008: Để khắc phục tình trạng trên, các công nghệ mới ra đời, và định hướng mũi nhọn là Web Service. Khi đó, Internet có lẽ sẽ phát triển dần dần tới một mô hình nào đó tương tự hệ điều hành, với các Web Service như là các API. Khi cả thế giới theo trào lưu này, số lượng API sẽ cực kỳ phong phú dẫn tới việc phát triển các ứng dụng sẽ đơn giản và rẻ hơn nhiều; các Business Process sẽ dễ communicate với nhau hơn (bất chấp platform) do được support bởi các chuẩn giao tiếp mới (dựa trên XML). Và một điều đặc biệt, applications' user interface sẽ trở nên rất linh hoạt và phong phú; users sẽ không còn bị trói chặt vào bàn làm việc của mình, và PC sẽ dần mất đi vị thế thống trị, trong khi các mobile devices và các thiết bị tiêu dùng thông minh sẽ tăng dần thị phần. Trong giai đoạn này, hottest skills sẽ xoay quanh việc phát triển và sử dụng Web Services, và lập trình ứng dụng cho các new application delivery channels (PDA, Cell phone,...). Thị trường cho skills giai đoạn 3 bị thu hẹp nhiều. Các skills client/server thuần túy kỹ thuật hoặc các biến thể của nó (skills giai đoạn 2) có thể coi như chết hẳn. Chỉ có những client/server developers với các skills về các package products phổ biến (Oracle Financials, SAP, PeopleSoft,...) mới có thể sống được.
* (Giai đoạn 5) 2008 - ... : Không biết sẽ là cái gì. Nếu Internet hình thành dần theo kiểu như một hệ điều hành lớn, thì phải chăng quá trình phát triển tiêu biểu của một OS sẽ lặp lại? Từ cái nhân (IP, các protocols dựa trên đó,...), cho đến hệ thống các API (Web Services), rồi ra đời các dịch vụ, các tools phát triển, rồi đến các sản phẩm, hệ thống và ứng dụng xây dựng dựa trên các API và các dịch vụ, các tools,...?
Những phân tích trên cho thấy điều gì? Tạm kết luận (bừa) một câu như sau: hottest skills tại một thời điểm luôn là những kỹ năng tương ứng với trào lưu công nghệ chủ đạo tại thời điểm đó (tất nhiên); và những skills lạc hậu khoảng 2 giai đoạn sẽ hầu như không còn cơ hội gì (?), nhất là trong những thị trường lao động cạnh tranh cao như US.
Điều này có ý nghĩa gì đối với các lập trình viên (và những người làm software nói chung)? Khi chuẩn bị bước chân vào industry, phần lớn các developers sẽ có sự đầu tư kỹ càng nhất và do đó cũng nắm vững nhất các skills phù hợp với xu thế công nghệ đương thời. Nhưng technologies thay đổi rất nhanh; một trào lưu thường có tuổi đời tồn tại trung bình khoảng 4-6 năm. Điều đó có nghĩa là các skills sẽ nhanh chóng lạc hậu sau vài năm. Và khi chuyển sang một giai đoạn mới, những skills của giai đoạn trước đó vẫn còn tồn tại được, nhưng sẽ khó khăn hơn nhiều; còn skills của giai đoạn trước đó nữa thì không có nhiều cơ hội sống sót, nhất là khi thị trường trong tình hình suy thoái (như hiện nay). Các lập trình viên không nên để mình bị rơi vào hoàn cảnh này; nếu vì nhiều điều kiện khác nhau hạn chế, cùng lắm là chịu chấp nhận lạc hậu một giai đoạn thôi. Nhưng nếu vẫn muốn làm công tác chuyên môn sâu về kỹ thuật, và muốn mình có khả năng cạnh tranh tốt, luôn được high demand, không e sợ khi bị quẳng ra market bất kỳ lúc nào, và nếu chưa có được ideas gì thực sự nổi trội mà vẫn phải sống nhờ skills, thì không còn lựa chọn nào khác, phải luôn update skills để mình luôn tương đương với trào lưu đương thời (ở đây, chỉ nói đến technical thuần tuý; không xét đến các yếu tố khác như kinh nghiệm, bản lĩnh nghề nghiệp,...). Như vậy, trong cuộc đời làm nghề, một developer chuyên nghiệp có lẽ trung bình sẽ phải trải qua khoảng 3-5 lần thay đổi skills lớn (nhắc lại rằng đây là thay đổi cơ bản về cả khuynh hướng; còn các thay đổi nhỏ như các công nghệ, ngôn ngữ cụ thể,... thì là việc hàng tháng, hàng năm). Lưu ý rằng trong các lúc giao thời, thường tồn tại các công nghệ quá độ (vốn bắt nguồn từ các công nghệ phục vụ cho giai đoạn trước), được bổ sung, phát triển thêm tính năng của giai đoạn sau để kéo dài thêm sự sống cho skills tương ứng. Các loại quá độ này thường không ưu việt bằng các công nghệ "native" của giai đoạn sau, và thường suy tàn khi giai đoạn kế tiếp đi được khoảng nửa chặng đường (cũng có thể có những ngoại lệ khi công nghệ quá độ sẽ trở thành chủ đạo của giai đoạn mới). Các developers với skills cũ nên mạnh dạn rời bỏ các công nghệ quá độ khi các công nghệ "native" đã sẵn sàng.
Tóm lại, các lập trình viên bây giờ nói chung nên làm
gì? "Thời thế tạo anh hùng"; những lúc giao thời, luân
chuyển giai đoạn, tranh tối tranh sáng như thế này chính
là thời cơ dụng võ cho các anh em thoả chí tang bồng mà
thi triển tài năng, nảy sinh ý tưởng. Nếu không có sự
suy thoái của công nghệ mainframe và các máy tính lớn,
dẫn đến sự ra đời của PC và bước sang giai đoạn
mới "máy tính đến mọi nhà", thì làm sao đẻ ra được
anh trọc phú Bill Gates? Bởi vậy, các anh em còn đang ngồi
trên ghế nhà trường hãy quăng hết sách vở vô bổ; ta
cùng nhau nghiên cứu xây dựng nên hệ điều hành mới
cho cell phone, để 20 năm sau, nắm trong tay hàng chục tỷ
USD, cùng nhau chung hưởng phú quý: rượu ngon, dê béo,
gái đẹp,... chẳng mãn nguyện lắm ư???:mrgreen: (j/k).
Tóm lại, các lập trình viên bây giờ nói chung nên làm gì? Nên nhìn tới tương lai: Web Services và Mobile Devices.
Các anh em developers nghĩ sao?