Ngôn ngữ lập trình nào tốt nhất, có thực sự ngôn ngữ không quan trọng?
Ngôn ngữ lập trình nào xịn nhất ?
Bắt gặp câu hỏi này đã rất lâu, từ ngay khi mình còn đi học (đâu đó năm 2016, 2017), lúc mới chập chững học xong C, vừa học tới C#, Java, OOP ... Thời điểm đó với mình C# là ngôn ngữ lập trình tuyệt vời nhất, còn lại PHP, Java, Python chỉ là đồ gân gà.
Học C thì phải học cách quản lý bộ nhớ bằng calloc, malloc... Quả thực rất khó với 1 người lười học lí thuyết mà lại siêng code như mình - cái kẻ vừa mới khám phá thế giới máy tính, chỉ muốn nhìn được output dưới console để vỗ đùi cười haha chứ chưa quan tâm cái code nó đang làm gì
, chưa kể IDE nó cũng rất SIDA, lỗi này lỗi khác. Cho tới khi mình qua học C#, 1 chân trời mới xuất hiện: IDE visual studio xịn xò, muốn gì có nấy, cú pháp nếu không nhớ thì đã có Intellisense gợi ý cho, dotnet framework support mọi thứ cho windows form để mình có thể làm giao diện. Yeah, chắc cũng nhờ nó mà mới chỉ học qua C và C# trong vài tháng mà mình đã có thể viết được 1 app windows form, đưa đi thi khoa học kĩ thuật của tỉnh hẳn hoi 😂😂.
Yay, sau khi đi làm được mấy năm, và thậm chí mình còn vừa bỏ đi việc làm với ngôn ngữ/framework mà mình thích (dotnet C#) để tìm 1 vị trí mới với ngôn ngữ khác (Go/Nodejs) thì mình không còn suy nghĩ thượng tôn ngôn ngữ
nữa :D. Khi đi làm thì chỉ có ngôn ngữ phù hợp nhất, chứ tuyệt nhiên không có ngôn ngữ tốt nhất.
Phù hợp ở đây là về:
- Nhân lực: Nhân lực của dự án/ team có mạnh về nó hay không ?
- Tính chất dự án: Dự án yêu cầu phát triển nhanh hay yêu cầu về performance, có cần kết hợp với SDK nào hay phải tích hợp phần mềm bên thứ ba nào hay không ? Tính chất nghiệp vụ của dự án có gì đặc thù không ? Cần xử lý tiền tệ hay xử lý về bigdata...
- Community, Ecosystem: Cộng đồng, hệ sinh thái hỗ trợ nhiều không ?
Vân vân và mây mây, trên đây chỉ là vài điều chính để chúng ta có thể cân nhắc.
Túm cái quần lại: Không có ngôn ngữ nào ngon nhất, chỉ có ngôn ngữ ngon hơn / phù hợp hơn. Tuy nhiên PHP vẫn là đồ gân gà, C# muôn năm :> 🦜
Ngôn ngữ có quan trọng không ?
Chốt luôn câu trả lời: CÓ và KHÔNG. (Mình trả lời với tư cách là 1 backend-fullstack dev)
Hầu hết những người hỏi câu hỏi này, chắc mục đích là muốn chọn 1 ngôn ngữ phù hợp để làm ngôn ngữ chính cho công việc. Đại loại các bạn làm Game thì cũng muốn chọn luôn C++ hay C#, còn làm backend thì muốn đi theo Java hay dotNET, PHP, Javascript, Golang...
Ngôn ngữ quan trọng
Ngôn ngữ cực kỳ quan trọng, theo mình, nếu bạn vừa ra trường, kinh nghiệm chưa nhiều, chưa nắm vững được 1 ngôn ngữ, chưa thành thạo được nó thì mức lương của bạn sẽ khó tiến cao hơn.
Nắm vững 1 ngôn ngữ đồng nghĩa với việc bạn hiểu sâu hơn về cách chương trình hoạt động sẽ giúp bạn biết nguyên nhân dẫn tới vấn đề là gì, phải giải quyết vấn đề trong code như thế nào...
Ngôn ngữ quan trọng nhưng hệ sinh thái của ngôn ngữ đó cũng quan trọng không kém!
Rõ ràng, khi bạn làm về Java, chắc hẳn bạn sẽ tiếp xúc những món công nghệ xoay quanh Java, bạn làm dotNET hay PHP cũng sẽ tiếp xúc những công nghệ xoay quanh chúng mà thường được sử dụng, bạn không chỉ tập trung vào học và vận dụng ngôn ngữ thôi mà còn phải học để sử dụng những công cụ đó nữa.
Chưa hết, với mỗi ngôn ngữ bạn sẽ tư duy theo cách khác nhau, vì mỗi ngôn ngữ phù hợp với mục đích nhất định.
Khoan ! đến đây chắc chắn sẽ có người bảo rằng, "thằng này xạo, không cần biết cu cậu làm ngôn ngữ gì, chỉ cần nắm vững overview knowledge, cách các component hoạt động thì việc làm quen 1 ngôn ngữ mới không khó".
Chính xác, chúng ta đến với phần tiếp theo:
Ngôn ngữ không quan trọng
Dạo quanh 1 vòng các trang web tuyển dụng, và xem lại quá trình phỏng vấn của mình, tôi thấy đa số các cuộc phỏng vấn sẽ tập trung 1 trong 2, hoặc cả 2 thứ sau:
- Kỹ năng của bạn, bạn làm được gì, bạn biết gì về công nghệ mà bạn làm. Ví dụ bạn làm dotnet core thì bạn có biết EF Core làm việc như thế nào không? Bạn xử lý vấn đề trong dự án như thế nào ? Bạn áp dụng pattern nào để xử lý chúng? Những câu hỏi phỏng vấn này tập trung vào kinh nghiệm làm việc của bạn.
- Tập trung vào tư duy design và kĩ năng, kiến thức về cấu trúc dữ liệu và giải thuật.
Thường thì công ty nào tập trung vào cả 2 hoặc chú trọng điều 2 đều trả lương rất cao, vì họ biết rằng 1 người đã rất giỏi về kiến thức cơ bản và kĩ năng tư duy, giải quyết vấn đề thì việc làm quen 1 ngôn ngữ khác là không khó.
Đó là lý do mà những công ty lớn khi tuyển dụng software engineer đều không quan tâm bạn làm về ngôn ngữ gì, nhưng bài test về design/ coding challenge của họ đều rất khó. Bù lại lương của những công ty này trả rất cao.
Tổng kết
Yay, ngôn ngữ đến cuối cùng cũng chỉ là công cụ để lập trình. Mấu chốt vẫn ở lập trình viên. Nếu bạn đang ít kinh nghiệm và muốn ổn định, đi rộng hơn, nên focus vào 1 ngôn ngữ/framework nào đó để quen với hệ sinh thái, lúc đi tìm việc cũng sẽ dễ hơn.
Khi bạn cảm thấy bạn đã đủ cứng rồi, background knowledge/kiến thức nền tảng đã vững, bạn có thể tập trung vào cấu trúc dữ liệu/ giải thuật và system design, tập trung sâu hơn vào phía dưới (low level) xem những vấn đề mà công nghệ phía dưới xử lý là gì, dùng thuật toán nào và cấu trúc dữ liệu nào.
Lúc đó thì chắc cú bạn sẽ không quan tâm ngôn ngữ nào nữa, trừ phi bạn cuồng 1 ngôn ngữ nào và muốn trở thành master ngôn ngữ đó :D.
Happy coding!