How to choose a programming language?

Nếu bạn đang đọc bài viết này, rất có khả năng trong suốt sự nghiệp code của mình, bạn từng tự hỏi liệu mình nên học ngôn ngữ lập trình nào mới tốt. Hoặc cũng có thể bạn đã nghĩ về nó trước cả khi bắt đầu cuộc đời của một lập trình viên. Thật tốt vì bạn đã ở đây và chúng ta có thể bắt đầu thảo luận về chủ đề này.

Dưới đây là vài tiêu chí mà bạn nên tham khảo và cân nhắc khi đứng trước câu hỏi trên.

Sự phù hợp (Adoption)

  • Công ty nào sử dụng nó?
  • Lĩnh vực mà ngôn ngữ đó được sử dụng?
  • Mục đích chung của nó là gì?

Đầu tiên, bạn cần phải xem xét công nghệ bạn muốn học sẽ được sử dụng trong lĩnh vực nào, ví dụ: máy tự động (C++), ML/AI (Python), liên quan đến server (GO), ứng dụng web (Ruby), dự án doanh nghiệp (Java/C#)...
Tiếp theo, hãy nghĩ về sở thích của bạn. Bạn muốn làm trong môi trường làm việc nào: Các công ty mới thành lập, công ty phần mềm nhỏ, hay tập đoàn lớn? Lĩnh vực công nghệ tài chính hay các tổ chức phi chính phủ? Và hãy tìm công nghệ phù hợp với nó.
Ví dụ: .NET chủ yếu được sử dụng ở các tập đoàn hay công ty lớn, nhưng bạn lại thích làm việc với một công ty nhỏ hơn, bạn có thể cân nhắc việc lựa chọn Ruby.

Cộng đồng (Comunity)

Nhà phát triển (Developers)

Có bao giờ bạn tự hỏi có bao nhiêu dev của một công nghệ cụ thể ở ngoài kia? Liệu Rust hay F# có được nhiều người sử dụng? Theo bạn, điều đó có quan trọng không? Câu trả lời là có, một cộng đồng công nghệ đông dân với tinh thần hỗ trợ nhau là điều tuyệt vời với những người đang mong muốn học hỏi như bạn.
Đa số lập trình viên, khi gặp phải các vấn đề, sẽ tìm kiếm câu trả lời trên Stackoverflow hoặc các blog khác nhau. Sẽ thật tệ nếu vấn đề bạn gặp phải không có nhiều người chia sẻ vì công nghệ đó chỉ có ít người sử dụng.
Càng có nhiều lập trình viên, càng có nhiều vấn đề gặp phải thì càng có nhiều giải pháp được đăng trên Internet. Nếu bạn đang sử dụng một số ngôn ngữ nổi tiếng, bạn có thể gặp phải vấn đề như vậy và được giải đáp. Nhưng nếu bạn thử một số công nghệ lạ thì bạn sẽ ngay lập tức bắt đầu đấu tranh với các lỗi mà bạn không hiểu được, phải tự khắc phục và không ai có thể giúp bạn.

Tuyển dụng (Recruitment)

Khía cạnh này hiếm khi được các dev để ý, đặc biệt là người mới, nhưng bạn nên xem xét nó có phù hợp với các sản phẩm của công ty bạn muốn đầu quân.

Đôi khi bạn có thể trong vai trò của CTO, trưởng nhóm công nghệ và trách nhiệm của bạn là chọn các công cụ, công nghệ và tuyển dụng người mới vào dự án. Rõ ràng là khi chọn một số ngôn ngữ ưa thích (ví dụ: Elm), bạn có thể gặp khó khăn trong việc tìm kiếm những người có kinh nghiệm để tham gia cùng.

Tình huống có thể tương tự khi bạn đang tìm kiếm một công việc mới và các kỹ năng duy nhất bạn có là một số công nghệ chưa được biết đến và không phổ biến.

Người hỗ trợ (Supportors)

Người sáng lập (Creator)

  • Chính xác ai là người sáng lập ra công nghệ đó?
  • Người sáng lập cam kết với cộng đồng như thế nào?
  • Họ có "đáng tin cậy" hay không?

Nó cũng là một khía cạnh quan trọng của công nghệ. Người tạo ra nó có thể tham gia tích cực vào cộng đồng nhưng anh ta cũng có thể rút khỏi đó.

Lấy Elixir là một ví dụ: José Valim, người đồng sáng lập & người tạo ra Elixir thực sự tham gia vào việc phát triển ngôn ngữ. Anh ấy trả lời nhiều nhất có thể trên GitHub, đưa ra phản hồi của mình trên diễn đàn Elixir và tham dự các cuộc họp nhỏ, các hội nghị khu vực để thu hút , khuyến khích mọi người sử dụng Elixir.

Trở lại năm 2012, Martin Oderky, một nhà thiết kế ngôn ngữ Scala, hiếm khi được nhìn thấy trong một số cộng đồng nhỏ. Tất nhiên, thỉnh thoảng anh ấy có nói chuyện, không hẳn tách biệt hoàn toàn với các dev, nhưng có vẻ như có một khoảng cách lớn giữa anh ấy và tất cả các lập trình viên sử dụng Scala. May mắn là mọi thứ đã thay đổi và tốt hơn ở hiện tại.

Hoặc tìm hiểu Ruby on Rails, bạn sẽ thấy một nhà lãnh đạo có tâm và rất lôi cuốn, luôn mong muốn bày tỏ những quan điểm của bản thân.

Công ty (Company)

  • Công ty nào đứng sau một ngôn ngữ?
  • Họ đã đổ bao nhiêu tiền để phát triển ngôn ngữ này?
  • Nó có thường xuyên được cập nhật và hỗ trợ?

Đôi khi, việc tìm hiểu công ty nào đứng sau một ngôn ngữ cũng rất quan trọng. Có phải Google hỗ trợ GO? Facebook đứng đằng sau React? Rust được hỗ trợ bởi Mozilla, C# đến từ Microsoft và Swift được phát triển bởi Apple. Mặt khác, Clojure và Python được cho là hướng đến cộng đồng có thể mang lại những ưu và nhược điểm riêng.

Điều quan trọng tiếp theo là những ông lớn trên cung cấp bao nhiêu tiền để hỗ trợ mở rộng ngôn ngữ. Nếu bạn chắc chắn rằng Oracle phát triển Java hàng năm, bạn sẽ không phải lo lắng về tương lai, nhu cầu thị trường và sự sẵn có của các lời mời làm việc. Nếu bạn thấy rằng Angular sẽ được phát hành 6 tháng một lần, bạn có thể cảm thấy an tâm rằng các tính năng mới sẽ xuất hiện thường xuyên và bạn sẽ có thể lên lịch nâng cấp theo yêu cầu.

Thư viện (Libraries)

  • Có bao nhiêu thư viện có sẵn ngoài kia?
  • Các tích hợp được cung cấp bởi các dịch vụ khác nhau?

Ví dụ nếu bạn muốn sử dụng Ruby hoặc JavaScript, có thể chắc chắn gần như 100% rằng mọi công cụ đều có một số tích hợp với các ngôn ngữ này. Bạn không phải lo lắng về việc viết các tool của riêng mình cho một số API. Bạn sẽ tìm thấy tất cả, thậm chí chính thức, các thư viện để tích hợp với Twitter, Twillio, GitHub, Dropbox... Tuy nhiên nếu chọn Elixir, bạn có thể gặp rắc rối với việc tìm thư viện cộng đồng được duy trì tốt, không nói gì đến những thư viện chính thức.

Vì vậy, nếu bạn có kế hoạch xây dựng một công cụ sẽ phụ thuộc nhiều vào các API bên ngoài và kết hợp nhiều tích hợp, bạn nên cân nhắc một số công nghệ phổ biến hơn là các công nghệ mới và lạ. Hãy nhớ rằng, mục tiêu của bạn là xây dựng các sản phẩm và cung cấp các tính năng kinh doanh, không phải để phát triển các thư viện hoặc tích hợp khác (trừ khi bạn muốn như vậy).

Lương (Salary)

  • Các lập trình viên của ngôn ngữ này có được trả lương cao không?
  • Nhu cầu thị trường cho công nghệ này như thế nào?
  • Có sự cạnh tranh cao giữa các dev?

Hiện tại (How is it currently?)

Cobol bây giờ là một công nghệ được trả lương cao nhưng chính xác tại sao nó lại được trả cao như thế? Có phải bởi vì nó rất hứa hẹn, siêu phổ biến và được áp dụng rộng rãi hay chỉ là nó cũ nhưng nhiều hệ thống dựa vào nó mà không cần chuyên gia?

Bạn có thể rất thích Elm, nhưng một số nghiên cứu chỉ ra rằng không ai sẵn sàng trả cho bạn rất nhiều tiền với công nghệ này. Bạn sẽ được trả bao nhiêu cho ngôn ngữ bạn học được? Đây là câu hỏi luôn đáng được quan tâm.

Xu hướng (Trends)

Đôi khi, ngôn ngữ được trả lương chưa hợp lý theo quan điểm của bạn, nhưng xem xét nhu cầu thị trường, nó lại rất có tiềm năng và đầy hứa hẹn. Nhìn vào Rust chẳng hạn.

Nếu bạn tin một số ngôn ngữ nào đó sẽ phát triển nhanh chóng trong tương lai, bạn có thể đầu tư vào nó ngay bây giờ và khi nó trở nên phổ biến, bạn sẽ là một chuyên gia. Tất nhiên nó mang lại rủi ro vì công nghệ có thể không được áp dụng tốt nhưng hãy tưởng tượng điều gì sẽ xảy ra nếu ngược lại. Bạn sẽ có kinh nghiệm mà không ai có và sẽ có thể làm việc như một chuyên gia. Vấn đề ở đây là "bắt trend" và đưa ra lựa chọn sáng suốt cho tương lai của bạn. 😉 😉

Độ phức tạp (Complexity)

Tuy mang tính chủ quan nhưng vẫn đáng để xem xét: liệu bạn có thích cú pháp của ngôn ngữ đó? Làm thế nào xử lý lỗi, bạn có thể đọc và hiểu code của người khác nhanh như thế nào?

Ví dụ, đọc code Ruby hoặc Python sẽ dễ hiểu đối với những người sử dụng tiếng Anh, nhưng nhìn vào các ngôn ngữ dựa trên C thì có thể bạn sẽ phải rất đau đầu để nắm bắt chính xác những gì đang xảy ra trên mỗi dòng code.

Tất nhiên, theo thời gian, rồi bạn sẽ hiểu nhiều về cú pháp và cách hoạt động của nó và sẽ dần cảm thấy tự tin hơn. Tốt nhất là bạn nên thực hành nhiều và sai nhiều, vì càng sai nhiều sẽ càng nhớ lâu và nhanh tiến bộ hơn.

Công cụ (Tooling)

Ngoại trừ việc có sẵn các thư viện, còn có một phần quan trọng xung quanh ngôn ngữ là các công cụ có sẵn để hỗ trợ phát triển. Chúng có thể bao gồm các IDE, các trình xây dựng, trình biên dịch, phân tích tĩnh, trình định dạng, công cụ kiểm tra và triển khai khác nhau.

Tổng kết (Summary)

Như bạn có thể thấy, có rất nhiều điều cần xem xét khi đứng trước câu hỏi nên lựa chọn công nghệ nào để học, hi vọng bộ câu hỏi bạn vừa đọc có thể giúp bạn đưa ra lựa chọn đúng đắn và hài lòng với quyết định của mình.

Hãy cho mình biết gần đây bạn đã chọn một công nghệ mới nào, bạn đã phân tích nó như thế nào và bạn cảm thấy hạnh phúc như thế nào với lựa chọn của mình nhé!!

Nguồn: https://blog.lelonek.me/how-to-choose-a-programming-language-7805da7ec588?fbclid=IwAR06wwwbj8l0yiPaXsxKxRKOU3x2ftKUX8fA9IMHab3qbmlXXB6FmfTyZeE