Get in touch
or send us a question?
CONTACT

NÊN HỌC MỘT HAY NHIỀU NGÔN NGỮ

Gần đây mình nhận được một số câu hỏi về chuyện “Nên tập trung vào 1 ngôn ngữ hay là học nhiều ngôn ngữ”. Đây là một vấn đề gây khá nhiều tranh cãi trong cộng đồng lập trình viên.

Thật ra, không có câu trả lời đúng cho câu hỏi này! Trong nội dung bài viết, mình sẽ phân tích những điểm lợi/hại của mỗi lựa chọn. Tuy nhiên, lựa chọn cuối cùng vẫn là do bản thân các bạn nhé.

Thật ra, ngay từ đầu các bạn đã đặt sai câu hỏi! Thay vì hỏi “nên học một hay nhiều ngôn ngữ”, các bạn nên hỏi là “nên phát triển bản thân theo chiều rộng (generalist) hay chiều sâu (specialist)?”.

tumblr_inline_msvsmsrbld1qz4rgp

Thế nào là biết rộng? Biết rộng thì được gì?

Nhiều bạn lầm tưởng rằng chỉ biết sử dụng nhiều ngôn ngữ/công nghệ, mình sẽ thành người biết rộng. Điều này chỉ đúng một phần thôi.

Học rộng có nghĩa là: ngoài việc biết sử dụng nhiều ngôn ngữ/công nghệ, bạn còn phải biết một số thứ ngoài lề khác (lấy requirement, thiết kế giao diện, cài đặt server). Nói cho oách là siêu nhân ôm đủ việc, nói mỉa mai tức thì là ku-li gì cũng làm.

Các cụ có câu “một nghề cho chín còn hơn chín nghề”, nhưng câu này có vẻ không đúng lắm với ngành IT. Khi xây dựng một hệ thống phần mềm, nếu có kiến thức rộng, ta sẽ dễ nắm được cách toàn bộ hệ thống vận hành, giú dễ bảo trì, sửa chữa khi có lỗi xảy ra hơn. Ngoài ra, nếu biết rộng, bạn sẽ có nhiều cơ hội việc làm hơn.

Hiện tại, biết rộng đang dần trở thành xu hướng. Bên cạnh Front-end developer, Back-end developer, nay ta có thêm Full-stack developer. Trước kia Dev (phát triển phần mềm) và Operation (vận hành, bảo trì sản phẩm) được tách riêng ra. Gần đây thì lại gộp luôn là DevOps, developer ngoàiviệc code còn phải biết thêm về setup hệ thống.

dev-ops

Thế nào là biết sâu? Biết sâu thì được gì?

Nhiều bạn biết sâu tức là tập trung thời gian vào 1 ngôn ngữ, không học những thứ khác. Thật ra, biết sâu yêu cầu cao hơn nhiều! Biết sâu tức là biết tường tận tường tận mọi ngóc ngách của ngôn ngữ/công nghệ/lĩnh vực nào đó.

Lấy ví dụ JavaScript, biết rộng tức là bạn có thể sử dụng nhiều framework như AngularJS, VueJS, React, … Biết sâu thì đòi hỏi cao hơn. Ngoài việc học/sử dụng framework, bạn còn phải biết về các khái niệm execution stack, lexical scope, closure,… trong Javascript, cách tổ chức code cho 1 project JS lớn, cách optimize khi code chạy chậm.

Nếu thật sự chuyên sâu một ngôn ngữ/công nghệ nào thì bạn sẽ được nhiều công ty săn đón, với lương khá cao. Cứ hỏi mấy bác senior C++ 5-10 năm trở lên xem lương bao nhiêu là biết.

5544288592_56ff8861d5_o

Tại sao lại vậy? Hãy tưởng tượng bạn đang thèm ăn bò bít tết, bạn sẽ chọn nhà hàng A “Phục vụ đầy đủ các món Á Âu”, hay nhà hàng B “Chỉ chuyên bò bít tết”. Dĩ nhiên là nhà hàng B phải không. Nếu cần tuyển chuyên gia cho 1 mảng nào đó, các công ty sẽ ưu tiên người biết sâu hơn.

Tất nhiên bạn cũng sẽ có gặp một số rủi ro. Do chỉ chuyên sâu một ít ngôn ngữ nên có thể bạn sẽ khó tìm được công việc như ý hơn. Ngoài ra, nếu ngôn ngữ/công nghệ của bạn… tử ẹo thì bạn phải bỏ thời gian ra học và chuyên sâu thứ khác.

Ví dụ, các bác chuyên gia Flash và Silverlight (2 công nghệ đã tử ẹo) sẽ rất khó tìm việc, nhưng nếu tìm được thì lương khá cao vì bây giờ ít người rành 2 cái đấy.

Vậy người coder phải làm sao?

Như mình đã nói, bài viết chỉ phân tích và định hướng chứ không thể trả lời cho bạn được. Lời khuyên hữu ích nhất mà mình có thể đưa ra là:Hãy phát triển kiến thức theo hình chữ T. Học rộng trước, sau đó mới chuyên sâu vào một lĩnh vực.

Kiến thức dạng chữ T tức là bạn sẽ tập trung phát triển kiến thức nền tảng trên nhiều lĩnh vực, sau đó tập trung chuyên sâu vào một ít lĩnh vực mà mình thấy hứng thú.

Với các bạn sinh viên, ở giai đoạn đầu, bạn sẽ không biết mình giỏi cái gì, yếu cái gì, cần tập trung vào thứ gì. Vậy thì cứ học rộng trước đi đã. Khi đã có chút kinh nghiệm với nhiều ngôn ngữ/công nghệ, bạn sẽ dễ lựa chọn hướng phát triển cho bản thân hơn.

Một điều cần lưu ý nữa là nếu bạn đam mê startup thì nên ưu tiên “biết rộng”. Ở giai đoạn đầu khởi nghiệp, nhân sự ít, lập trình viên phải có khả năng đa nhiệm, làm đủ việc. Phát triển sản phẩm startup đòi hỏi bạn phải thông tuệ nhiều thứ để vận hành hệ thống trơn trụ. Ngược lại, nếu đầu quân cho các công ty lớn, họ sẽ ưu tiên người có kiến thức tập trung, hiểu sâu vấn đề.

Kết luận

Điều quan trọng nhất là bạn phải liên tục học tập, biết rộng cũng được, biết sâu cũng được. Nhiều bạn phân vân không biết nên học rộng hay sâu do sợ phí thời gian, kết quả là họ … đứng im một chỗ, không tiến bộ gì cả.

Nếu bạn vẫn chưa rõ mình muốn gì, cứ học đi, đừng ngại tốn thời gian. Cứ tiến về phía trước, rồi sẽ có một con đường mở ra cho bạn.