Đây là một post trên Phê tê bốc.
Chú Trần Quang Khải hỏi mấy câu khá hay, em trả lời thành một tút luôn, ai đọc được cái gì thì đọc.
Câu hỏi:
"Tương lai tới (5-20 năm) a đánh giá các tình hình các ngôn ngữ sẽ thế nào ạ, ý em là về độ phổ biến, tính ứng dụng... của các ngôn ngữ nhất là trong enterprise software và distributed system, golang hay rust/kotlin/scala có thay thế java/c# ko?
Mất bao năm học và luyện OOP với java e thấy nó cho mình ko chỉ là ngôn ngữ mà cả tư duy phân tích thiết kế và cách viết clean code và xây dựng hệ thống, từ design pattern, solid, đến các loại tdd/ddd... mà giờ thấy nó ko thịnh hành và có ưu thế như xưa cũng thấy tiếc quá. Cảm giác cả đời luyện võ rồi đi đánh nhau lại gặp thằng vác Ak47 ra ???? Thời a ngày xưa chắc cũng làm java thời đầu, sau đấy thì a chuyển dịch thế nào để adapt thời thế mà ko bỏ phí cái cũ ? em cảm ơn ạ."

Trả lời:
Trước hết phải có hai cái disclaimer đã:
1) Anh cũng chỉ là một người bình thường, dự đoán tương lai cũng chỉ là dựa theo tư duy chủ quan của anh. Nhưng lịch sử cho thấy là bọn deep định hướng phát triển theo hướng có lợi cho chúng nó, chứ không phải theo logic, nên không đoán trước hoàn toàn được.
2) Ai mà muốn sống một cuộc đời bình yên, không sóng gió, sống ổn định, sung sướng, không lên voi xuống chó thì không nên nghe lời anh khuyên. Lời anh khuyên là dành cho những người thích mạo hiểm, sống không cần đời và không cần gì.
*
Bây giờ vào nội dung chính.
➪ Theo như anh quan sát thấy trong tình hình industry ở Mỹ, trong vòng 5 năm tới, thì Java và C# vẫn là ngôn ngữ phổ biến để làm enterprise software.
Bên cạnh đó, Python cũng là ngôn ngữ phổ biến vì có mấy cơn sốt DevOps/Cloud, Data Science và AI. Python là một ngôn ngữ tốt, nhưng mà boring. Hơn nữa bây giờ bọn dùng Python cũng không phải là bọn làm enterprise software, nên Python cũng không thay thế Java và C# trong việc làm enterprise software được.
Dù cho Python + Django và Ruby + Rails tốt hơn hàng tỷ lần Java và C#, nhưng cả Python lẫn Ruby rất khó trở thành ngôn ngữ phổ biến trong enterprise software. Tuy nhiên có nhiều hãng lớn cũng dùng Ruby làm enterprise software.
Thậm chí nguyên cái infrastructure của AWS lẫn phần các Brazil package cho software development của Amazon là viết hoàn toàn bằng Ruby, nhưng bọn kỹ sư em chã ở các department khác của Amazon mỗi lần nói đến Ruby thì lại ra cái vẻ chê bai, dè bỉu. Chẳng qua là kỹ năng dùng dynamic typed language của chúng nó kém quá, lại không đủ trình làm meta programming, nên mỗi lần viết Ruby code thì lại sai lung tung, không biết đâu mà sửa.
Có nhiều bọn dùng javascript để viết backend code, nhưng cũng không phổ biến bằng Java và C#. Hơn nữa, chỉ có bọn dân chơi nhà quê, viết code chưa sạch if-else mới tính đến chuyện dùng javascript viết backend code.
Kotlin hay Scala rất khó vào mainstream của các project lớn, vì đặc trưng ngôn ngữ của nó cũng chả khác gì Java, với một số idiot-proof feature, không có incentive gì cho các lập trình viên switch từ Java hay C# sang Kotlin hay Scala.
Về Go và Rust thì cũng khó vào mainstream của enterprise software trong 5 năm tới được, vì hiện giờ các lập trình viên dùng Go và Rust chủ yếu là làm system programming. Các lập trình viên làm enterprise software cũng không thấy incentive gì nhiều khi chuyển từ Java hay C# sang Go hoặc Rust.
Trừ rất ít trường hợp cần tốc độ nhanh, ví dụ như hồi anh viết cái Cryptography Server cho bọn Cisco, để generate certificate, public/private keys cho hàng trăm triệu communication devices, thì phải cần tốc độ xử lý cực nhanh - Hồi đó anh viết con server này bằng Go.
Những thứ liên quan đến docker đa số viết bằng Go, nên Go sẽ phổ biến trong system programming là chủ yếu.
Rust cũng tương tự như Go. Sắp tới, Linux kernel có thêm các component viết bằng Rust, thì Rust cũng chỉ phổ biến trong system programming.
Bây giờ, embedded software dùng cả C, Go và Rust.
Có một vài ngôn ngữ mà chú không nhắc tới, mà lại tương đối phổ biến trong một số niche, là Erlang, và ngôn ngữ khác chạy trên Erlang BEAM VM là Elixir. Erlang và Elixir là hai ngôn ngữ xử lý huge number of concurrent request, massive parallel processing cực tốt.
Do đó, trong industry hiện nay, có nhiều hệ thống cần có parallel processing cực nhiều, rất nhiều concurrent request, nhất là trong Telecom, media ...etc... đều sử dụng Erlang hoặc Elixir.
Hồi anh làm cái startup về dược phục vụ cho tất cả các bệnh viện, bác sĩ, hãng dược của Mỹ cũng dùng Elixir + Phoenix.
Tuy nhiên, trong lĩnh vực enterprise software, trong vòng 5 - 10 năm tới, anh không nghĩ là có ngôn ngữ nào trở nên phổ biến hơn Java hay C#.
Trong những sản phẩm nhố nhăng kiểu chat chiệc, share siệc, làm những thứ vớ vẩn lừa tiền nhà đầu tư như bọn nó đang làm phổ biến bây giờ thì không tính.
Nói về 10 năm hoặc 20 năm nữa thì cũng khó nói. Nhưng trong vòng 10 năm, chắc là không có ngôn ngữ nào phổ biến hơn Java và C# trong việc viết code cho backend của các phần mềm tử tế.
Còn nói về độ phổ biến nói chung, thì từ chục năm nay cho đến có lẽ là chục năm sau, javascript và các quái thai của nó như TypeScript, ES, các library và framework đáng ghê tởm như React, Angular, Vue, Ember, Stimulus ...etc... vẫn là phổ biến nhất.
Nhưng phổ biến nhất không có nghĩa là tốt nhất. Cũng như Java và C# là phổ biến nhất trong lĩnh vực enterprise software, nhưng cũng không phải là công cụ tốt nhất, có productivity cao nhất.
Đến hai mươi năm nữa thì anh không biết thế nào. Biết đâu vài năm nữa lại ra ngôn ngữ lập trình nào tốt, rồi hai mươi năm sau nó thành phổ biến.
➪ Còn chuyện anh adapt thế nào để khỏi lãng phí những ngôn ngữ, công cụ cũ thì nói chung cũng không có ích lợi gì cho người bình thường muốn có cuộc sống ổn định.
Anh bắt đầu làm việc một cách chuyên nghiệp là dùng C/C++ để viết các ứng dụng chạy trên AT&T Unix System V, Linux và Windows. Sau đó vào khoảng 1995 Java ra đời, 1996 bắt đầu truyền khắp thế giới thì anh viết cái hệ thống AI dùng Multi-Agent System ở Đức là dùng Java.
Về sau, khi sang Mỹ, thì dự án làm enterprise software đầu tiên của anh ở Mỹ là viết phần mềm về Healthcare / Medical Insurance cho bọn 3M Healthcare, là viết hoàn toàn bằng C++.
Sau đó anh mới chính thức chuyển sang viết enterprise software bằng Java, làm phần mềm cho manufacturing, từ sản xuất máy bay chiến đấu, tàu chiến, ô tô cho đến quần lót phụ nữ, đều dùng Windchill Core do anh làm trong R&D. Đến hệ thống cyber warfare đầu tiên của Bộ quốc phòng Mỹ dùng tại Iraq năm 2003 là Future Combat System (FCS) cũng dùng Windchill Core.
Sau đó, khi anh đã có hơn chục năm kinh nghiệm làm Java trong enterprise software, thì một ngày đẹp trời, anh vào hiệu sách, thấy có cuốn sách nói đến Ruby. Năm đó cả thế giới chỉ có bốn quyển sách viết về Ruby. Anh mua cả bốn cuốn về nhà đọc, sau khi đọc xong thì anh bỏ job, bỏ Java, chuyển hẳn sang Ruby.
Lúc đó ở Mỹ hầu như không ai biết Ruby là cái gì, và không có công ty nào làm Ruby. Anh cùng mấy chú tốt nghiệp MIT mở một cái startup, làm enterprise software bằng Ruby on Rails, về sau bán được một vài triệu $ cho bọn Washington Post. Tiếp theo, anh với mấy chú tốt nghiệp UC Berkeley mở một startup khác, dùng Ruby On Rails làm enterprise software cho lĩnh vực Footwear and Apparel, đại khái là cho công nghiệp thời trang.
Nhưng lúc này, khủng hoảng kinh tế 2008, 2009 xảy ra, công ty anh bị phá sản. Thế là anh phải đi làm thuê, chuyên tư vấn cho các công ty ở Mỹ từ lớn đến vừa, đến nhỏ, đến startup viết enterprise software bằng Ruby. Sau đó anh cũng mở một startup khác về buôn bán sỉ xe ô tô, cũng dùng Ruby.
Cho đến một ngày kia, anh tình cờ đọc về bọn Ericson của Thụy Điển dùng Erlang trong Telecom, bọn Whatsapp dùng một server chạy Erlang mà handle được một triệu concurrent request, thế là anh quay ra nghiên cứu Erlang và tiếp đó là một ngôn ngữ vừa mới ra đời, không ai biết, là Elixir.
Sau đó vài năm, thì anh làm một cái startup làm về dược phẩm, sử dụng Elixir và Phoenix.
Những thứ khác như Go, Rust, Python, Objective C ...etc... này nọ anh cũng tìm hiểu do thích, và dùng vào công việc khi có requirement thích hợp, chứ không phải là do nó phổ biến. Kể lan man về các ngôn ngữ lập trình anh đã làm, về cuộc đời và sự nghiệp của anh nữa thì quá dài.
♣︎ Đại khái là con đường đi của anh là do thích tìm hiểu công nghệ, ngôn ngữ, công cụ, chứ không phải làm những thứ phổ biến. Do đó anh làm toàn những thứ từ khi nó mới ra đời, hầu như không có ai biết, hầu như không có ai dùng, cũng có nghĩa là hầu như không có job, cũng hầu như không có tiền đầu tư. Một người khác kém may mắn hơn anh mà làm thế thì chết đói từ hai mươi đời rồi.
* Nói về làm thế nào để khỏi lãng phí những cái cũ thì những thứ như Data Structures, Algorithms, phong cách lập trình, phong cách thiết kế sẽ không thay đổi mấy khi mình thay đổi công cụ.
Tuy nhiên, lập trình cũng như kiến trúc phần mềm, nếu chỉ làm một thứ, thì sẽ giống như ếch ngồi đáy giếng. Ví dụ như một người cả đời chỉ biết có OOP, chỉ lập trình với compiler language hoặc hybrid languge, chỉ biết có static-typed language, mà không biết Functional, không biết dynamic-typed language, không biết interpreter language, chỉ biết imperative language mà không biết descriptive language, thì cũng như thằng thầy bói mù, sờ được bộ phận nào của con voi thì biết bộ phận đó.
Thậm chí, nếu chỉ giới hạn trong OOP, imperative language, thì chỉ cần OO Design cho static-typed language và OO Design cho dynamic-typed language là đã khác nhau rất nhiều rồi, có rất nhiều Design Pattern không cần dùng, có rất nhiều phong cách thiết kế có thể rút gọn, tăng productivity cao hơn, làm chương trình ngắn hơn, Object hierarchy ít phức tạp hơn.
Do đó, muốn có một cái nhìn từ nhiều góc, có kiến thức tổng hợp về Computer Science, Software Engineering và Architecture Design, thì phải biết nhiều phong cách lập trình, nhiều loại ngôn ngữ, nhiều phương pháp thiết kế. Vì thế, không có cái gì là lãng phí cả.
Đấy là đang nói về việc nghiên cứu công nghệ, làm vì kiến thức, tri thức, không cần tiền, không cần job, không cần ổn định.
Chứ còn cứ đi trước thời đại, làm những thứ mới vào lúc mà chưa có ai biết, chưa có job, chưa có nhà đầu tư, chưa có tiền thì mau chết lắm. Cuộc đời không phải như bọn em chã mơ mộng vẫn bị bọn tài phiệt nó lừa là "phải sáng tạo, phải đi tiên phong mới tốt" đâu.
Đến như Paul Graham, sư tổ của các loại startup, trùm Y! Combinator chuyên đầu tư tiền cho startup ở Silicon Valley còn phải phát biểu: "Làm startup, làm công nghệ mà ra cái mới, chưa ai làm thì quên mẹ nó đi, không ai ngu mà đầu tư tiền cho chúng mày đâu. Phải làm cái gì có nhiều người làm rồi, mà đưa ra giải pháp tốt hơn".
Lão ấy chắc là deep, nên không nói nốt đoạn cần nói: Phải làm bung xung cho deep, rửa tiền cho deep thì làm cái gì cũng ra tiền được, kể cả là làm những thứ rất ngu như chat chiệc, share siệc, share vợ đợ con và bán quảng cáo online.
➪ Tóm lại là đường ai nấy đi thôi, chứ các chú đừng đi theo con đường của anh, nếu không muốn chết già, chết đói trong một khu rừng hẻo lánh nào đó của thế giới.
_____
Đọc thêm: