#Làm nghề: Hành trình “chuyển mình” trở thành lập trình viên đa ngôn ngữ của Sunner (Phần 2)

Các ngôn ngữ lập trình được coi là Language of Future – Ngôn ngữ của Tương lai. Chính vì thế, hiểu biết và sử dụng đa dạng các ngôn ngữ lập trình sẽ giúp chúng ta nâng cao năng lực, phát triển bản thân và đáp ứng nhu cầu dự án của công ty, khách hàng đưa ra. Ở Sun*, đã và đang có rất nhiều Sunner “nắm trong tay” nhiều ngôn ngữ lập trình, trở thành một developer đa ngôn ngữ.

Nối tiếp Phần 1 về những Sunner nổi bật với tinh thần ham học hỏi, không ngại khó, hãy cùng Sun* News tìm hiểu thêm về các anh chị em đã quyết tâm học thêm nhiều ngôn ngữ lập trình, thậm chí chuyển đổi ngôn ngữ để trở thành một lập trình viên có thể làm việc đa dạng ngôn ngữ tại Sun* nhé!

Ban đầu, Hùng Phong (CEV11) chỉ tập trung code C/C++ vì muốn nắm rõ tư duy lập trình hơn là chạy theo các ngôn ngữ. Chính vì thế, mãi đến năm cuối Đại học, khi làm đồ án thì Phong mới bắt đầu code React Native và sau đó code iOS cho đến bây giờ.

Theo Phong, ngành IT thường xuyên có sự thay đổi, nếu không nâng cấp bản thân mỗi ngày thì sẽ không tránh khỏi việc “outdated” nên việc thử thách bản thân là điều nên làm để tôi luyện cho mình hành trang vững vàng trong chặng đường tương lai. 

Phong chia sẻ: “Với những ngôn ngữ mình đã tiếp xúc trước đó thì mình chỉ tốn 1-2 ngày để overview dự án và tiến hành làm task luôn. Còn những ngôn ngữ mình chưa tiếp xúc thì có thể mất 1-2 tuần để học căn bản của ngôn ngữ đó cũng như tìm hiểu về framework rồi bắt tay làm task. Trong quá trình đó, mình sẽ vừa làm vừa research để có thể hiểu hơn vì không có cái nào nhớ dai hơn là mình thực hành.”

Nói về những khó khăn khi chuyển nhiều ngôn ngữ, Phong cho hay: “Tất nhiên, việc chuyển qua 1 ngôn ngữ mới khác với main skill của mình trong thời gian đầu không hề dễ dàng. Mình phải tìm nguồn tài liệu tốt để học, làm quen lại các cú pháp mới và các frameworks. Thời gian đầu, mình sẽ học những thứ cơ bản và tìm hiểu về các framework phổ biến của ngôn ngữ đó và thực hành chúng một cách thuần thục nhất.”

Các bước học nhiều ngôn ngữ lập trình Phong đã áp dụng bao gồm:

- Đầu tiên: phải xác định mục tiêu là học ngôn ngữ mới để làm gì

- Tiếp theo là tìm 1 nguồn tài liệu học tốt rồi học những thứ cơ bản để nắm vững các kiến thức

- Sau đó, hãy thực hành lại những gì bạn đã học

- Cuối cùng là hãy tự mình làm 1 project để áp dụng các kiến thức đã được học

“Theo mình, việc biết nhiều ngôn ngữ là 1 điều tốt bởi nó giúp chúng ta mở rộng kiến thức lập trình, khả năng tương tác với các domain khác trong dự án cao hơn. Quan trọng hết, trong ngành IT công nghệ thay đổi liên tục nên việc đa dạng ngôn ngữ lập trình giúp chúng ta linh hoạt hơn và sẵn sàng đối mặt với các thay đổi trong ngành. Vì thế, với tinh thần học, học nữa, học mãi, mình cũng đang tìm hiểu và học Flutter nên thời gian sắp tới hy vọng có thể tham gia 1 vào dự án nào đó về Flutter để có thể học hỏi và cải thiện nhiều hơn ở ngôn ngữ này.” - Phong nhấn mạnh.

Lúc đầu, Anh Tú (CEV05) học và làm việc với ngôn ngữ Ruby và JavaScript. Sau 3 năm làm việc với ngôn ngữ Ruby, Tú quyết định mở rộng kiến thức bằng cách thử sức với các ngôn ngữ khác như PHP, Python và Golang .

đã mất khoảng 1 đến 2 tuần để nắm được các concept cơ bản và làm việc được với 1 ngôn ngữ mới. Thời điểm đó, thường xuyên gặp phải khó khăn khi làm quen với cấu trúc dự án của các ngôn ngữ/framework mới. Để giải quyết dứt điểm tình trạng này, đã tham khảo các dự án có sẵn trên github sử dụng framework đó và thực hành nó.

Không thể phủ nhận, việc học nhiều ngôn ngữ giúp mở rộng kiến thức bởi có những concept ngôn ngữ này có nhưng ngôn ngữ khác lại không, cũng giúp sẵn sàng làm việc ở bất kỳ dự án nào mình muốn. Tuy nhiên, vẫn có đôi lúc gặp phải tình trạng “dở khóc dở cười” khi làm việc ở 2 dự án sử dụng 2 ngôn ngữ khác nhau sẽ rất hay xảy ra tình trạng nhầm lẫn cú pháp của 2 ngôn ngữ. 

“Gần đây mình có sử dụng Github Copilot, nó giúp mình rất nhiều trong công việc và cũng loại bỏ tình trạng trên nữa. Mỗi người sẽ có một cách học hiệu quả khác nhau nhưng với mình, mình cảm thấy học thực chiến là cách học nhanh và hiệu quả nhất. Mình cũng rất cảm ơn UM và PSM đã tin tưởng và trao cho mình cơ hội được làm những dự án với ngôn ngữ mới mặc dù mình chưa từng làm bao giờ. Sắp tới, mình quyết tâm cải thiện và phát triển bản thân, đặc biệt là về technical. Mục tiêu xa là hướng đến trở thành một SA, mình sẽ phải cải thiện kiến thức và kinh nghiệm rất nhiều.” - cho hay.

Lúc đầu, Xuân Hoàng (CEV03) học ngôn ngữ PHP, JavaScript và đến hiện tại, Hoàng đã biết thêm nhiều về các ngôn ngữ khác như TypeScript, Python, NodeJS. Theo Hoàng, việc đa dạng ngôn ngữ giúp đem lại sự đổi mới, refresh lại chiếc đầu nguội, thêm động lực làm việc, ngoài ra còn mở rộng kỹ năng và kiến thức, có linh hoạt tạo cơ hội trong việc tham gia các dự án.

Với Hoàng, thời gian học các ngôn ngữ lập trình là khác nhau, tùy vào tính tương đồng giữa ngôn ngữ lập trình mình đã biết với ngôn ngữ lập trình mới, thường thì để biết cơ bản 1 nnlt sẽ rơi vào khoảng 2-4 tuần.

Hoàng chia ra những khó khăn trong giai đoạn mới học bao gồm:

- Các khái niệm mới: các nnlt đều có những điểm khác biệt, cần phải nắm được điểm khác biệt đó để làm nền tảng sử dụng nnlt được tốt.

- Các cú pháp, ngữ pháp mới cần làm quen, cùng 1 cách xử lý nhưng ở 2 nnlt khác nhau có thể sẽ phải biểu diễn khác nhau.

- Quá trình gỡ lỗi cùng cần phải tìm tòi các công cụ, thử nghiệm để làm quen

- Khả năng cao là trong giai đoạn đầu hiệu suất code sẽ khó được tối ưu vì chưa có kinh nghiệm và kiến thức với các kĩ thuật tối ưu.

- Học nnlt mới đồng nghĩa với việc ngoài học base ra thì cũng cần phải tìm hiểu và học thêm các thư viện mà nnlt đó hỗ trợ.

Để giải quyết các vấn đề này, không còn cách nào khác ngoài việc lặp lại “dây chuyền” công đoạn: Research -> thực hành -> lỗi/chưa đúng expect -> lặp lại quy trình trên.

Hoàng cũng chia sẻ thêm: “Việc gõ nhầm cú pháp ở nnlt đã biết sang nnlt mới hay xảy ra trong giai đoạn đầu, cứ thắc mắc là tại sao nó không chạy, nhưng rồi sau 1 lúc thẫn thờ thì mình chợt nhớ mình đang code ngôn ngữ mới. Hoặc ở bên PHP thì phần A này làm 1 lúc là xong còn ở bên Python thì đợi đấy để châm cứu. Quá trình này cũng giống như là "cơm" và "phở", cần thích nghi và cần có kinh nghiệm. Vì thế, chúng ta hãy cứ học và thực hành, không nên nghĩ nhiều về được và mất, ưng bụng là triển chiêu, để biết rằng bên ngoài bức tường là sự tự do...hoặc không (Cười))".

Hoàng không quên nhấn mạnh việc biết nhiều ngôn ngữ là tốt ở bề ngang, sau khi đã trải nghiệm đủ thì việc quan trọng tiếp theo là bổ sung về chiều sâu, tránh việc "cái gì cũng biết nhưng thực ra lại không biết cái gì".

Thời điểm mới ra trường, Tiến Mạnh (CEV04) chuyên ngôn ngữ PHP nhưng khi làm việc tại Sun*, Mạnh đã bắt đầu làm việc chủ yếu bằng ngôn ngữ Ruby. Theo thời gian, Mạnh đã mở rộng kỹ năng lập trình của mình để nắm bắt nhiều ngôn ngữ và công nghệ mới, bao gồm JavaScript cùng với các framework liên quan như Node.js, TypeScript, và React, cũng như Golang.

Với Mạnh, Mạnh quyết định thử thách bản thân ở các ngôn ngữ mới bởi 6 nguyên do:

- Nhu cầu công việc: Công nghệ mới có thể trở nên phổ biến trong các dự án mới hoặc nhu cầu của công việc hiện tại có thể thay đổi, đòi hỏi kiến thức về ngôn ngữ mới.

- Tăng cơ hội nghề nghiệp: Việc học thêm ngôn ngữ mới có thể mở ra cơ hội nghề nghiệp mới và tăng khả năng cạnh tranh trên thị trường việc làm.

- Sự tò mò và học hỏi: Một số lập trình viên thích học hỏi và muốn khám phá các ngôn ngữ mới để xem chúng có gì đặc biệt và cách chúng giải quyết vấn đề như thế nào.

- Phát triển cá nhân: Học một ngôn ngữ mới có thể giúp cải thiện kỹ năng giải quyết vấn đề và tư duy lập trình.

- Tối ưu hóa hiệu suất: Một số ngôn ngữ có thể cung cấp hiệu suất tốt hơn hoặc cách tiếp cận tối ưu hóa cho một vấn đề cụ thể.

- Xu hướng công nghệ: Các ngôn ngữ lập trình phát triển theo thời gian và có thể xuất hiện các xu hướng mới. Lập trình viên có thể muốn cập nhật với những xu hướng này.

Thông thường, việc nắm vững những kiến thức cơ bản mất khoảng hai tuần, trong khi việc nắm bắt đầy đủ và sâu rộng các kỹ thuật sử dụng cũng như các phương pháp tối ưu hóa có thể mất đến một tháng.

Chia sẻ về những khó khăn gặp phải khi chuyển ngôn ngữ, Mạnh liệt kê những điểm sau: 

- Cú pháp khác biệt: Mỗi ngôn ngữ lập trình có cú pháp riêng của nó. Chuyển từ ngôn ngữ này sang ngôn ngữ khác đòi hỏi việc học cách viết code theo cách mới, điều này có thể gây nhầm lẫn và yêu cầu thời gian để thích nghi.

- Mô hình lập trình: Các ngôn ngữ khác nhau có thể hỗ trợ các mô hình lập trình khác nhau như hướng đối tượng, hàm, thủ tục, hoặc phản ứng. Việc hiểu và áp dụng đúng mô hình lập trình trong ngôn ngữ mới có thể mất thời gian.

- Thư viện và frameworks: Mỗi ngôn ngữ thường đi kèm với một hệ sinh thái thư viện và framework khác nhau. Học cách sử dụng chúng một cách hiệu quả là một phần quan trọng của quá trình chuyển đổi ngôn ngữ.

- Debugging và Tooling, Hiệu suất và tối ưu hóa

- Cộng đồng và hỗ trợ ít

Để vượt qua những vấn đề trên, theo Mạnh: “Chúng nên nên bắt đầu học từ cơ bản và học kỹ lưỡng. Đừng vội vàng chuyển sang các chủ đề nâng cao cho đến khi bạn hiểu rõ cơ bản. Ngoài ra, việc thực hành liên tục, thường xuyên không chỉ giúp cải thiện kỹ năng viết mã, mà còn củng cố kiến thức bạn đã học. Áp dụng những gì bạn học vào việc xây dựng dự án thực tế và dự án càng liên quan đến công việc hoặc sở thích cá nhân, bạn càng có động lực để hoàn thành. Cùng với đó, việc đọc sách, xem video hướng dẫn, và tham gia các khóa học trực tuyến… sử dụng các tài nguyên đa dạng sẽ giúp bạn hiểu rõ hơn về các khái niệm khác nhau. Cuối cùng là tham gia, giao lưu với cộng đồng lập trình viên, các diễn đàn, nhóm trên mạng xã hội, và meetup là nơi tuyệt vời để hỏi câu hỏi, chia sẻ kiến thức và nhận phản hồi.”

Mạnh chia sẻ thêm: “Những nguyên tắc lập trình cơ bản thường không làm mình gặp khó khăn, tuy nhiên, trong quá trình học ngôn ngữ mới, mình vẫn đôi khi mắc phải một số lỗi nhỏ. Chẳng hạn, cách thức so sánh biến trong JavaScript có thể khác biệt so với các ngôn ngữ lập trình khác, một chút nhầm lẫn cũng có thể dẫn đến một số kết quả không mong đợi nếu bạn không chú ý.”

Trong thời gian tới, Mạnh đặt mục mục tiêu phát triển sự nghiệp, tiến tới các vị trí có trách nhiệm cao hơn như là một kỹ sư phần mềm cao cấp, kiến trúc sư phần mềm, hoặc quản lý dự án. Bên cạnh đó, Mạnh luôn nỗ lực để đóng góp cho cộng đồng, tham gia vào các dự án mã nguồn mở, viết blog, hoặc giảng dạy, phát triển cá nhân và cân bằng giữa công việc - cuộc sống.

Quả thật, hiểu biết về nhiều ngôn ngữ lập trình sẽ mở ra cánh cửa cho nhiều vị trí công việc và dự án khác nhau, từ phát triển web đến phân tích dữ liệu, từ phát triển ứng dụng đến hệ thống nhúng. Học nhiều ngôn ngữ giúp phát triển khả năng giải quyết vấn đề và tư duy lập trình một cách linh hoạt bởi mỗi ngôn ngữ đều có cách tiếp cận và mô hình riêng, giúp lập trình viên có nhiều công cụ hơn để tiếp cận các vấn đề. Đặc biệt, nguyên tắc lập trình cơ bản thường giống nhau qua các ngôn ngữ, nhưng cách chúng được áp dụng có thể khác nhau. 

Có thể nói, sự hiểu biết về đa dạng ngôn ngữ lập trình sẽ góp phần làm sâu sắc thêm kiến thức lập trình tổng quát. Chính vì thế, cơ hội dành cho những Sunner biết nhiều ngôn ngữ lập trình là rất lớn!

#Lập trình viên đa ngôn ngữ