#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 1)

Trong thời đại công nghệ phát triển mạnh mẽ như hiện nay, việc một kỹ sư IT có thể làm nhiều ngôn ngữ lập trình là một lợi thế rất lớn. Công nghệ đang thay đổi thế giới một cách nhanh chóng và việc học thêm ngôn ngữ lập trình được xem là một cách đầu tư thông minh vào tương lai, mở ra những trải nghiệm công nghệ mới và tạo ra được nhiều giá trị 'awesome' hơn cho xã hội.

Quyết tâm không để bản thân thụt lùi trước sự phát triển không ngừng của ngành công nghệ, các Sunner dưới đây với tinh thần ham học hỏi, không ngại khó, đã 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*.

Hãy cùng Sun* News tìm hiểu về câu chuyện thử thách bản thân ở những ngôn ngữ lập trình mới của các Sunner này nhé!

Trước đây, Hoàng Huê (CEV07) đã có cơ hội tiếp xúc với nhiều ngôn ngữ lập trình như C/C++, Java, PHP, Node.js, Python từ khi học Đại học. Sau khi vào Sun*, Huê có “bén duyên” thêm với PHP và Laravel. Cứ như thế, hiện giờ Huê đã bỏ túi được kha khá tips học JavaScript( Vue.js, Redux-Saga), Scala, Golang cho người mới bắt đầu.

"Khi mình học một ngôn ngữ mới, mình hay có thói quen so sánh ngôn ngữ mới đó với những ngôn ngữ mình đã từng học trước đây. Khi đó sẽ có những điểm giống nhau để  mình trau dồi thêm kiến thức lập trình căn bản. Và cũng có những điểm khác nhau mà mình hay gọi vui là "sự khác biệt thời đại" bởi vì mỗi ngôn ngữ gắn liền với một thời kì của công nghệ, cũng giống như các nền văn minh của nhân loại vậy. Sau đó mỗi khi gặp một bài toán cụ thể, mình sẽ đều có tư duy giải quyết bài toán đó bằng nhiều "nền văn minh" khác nhau và lựa chọn xem cách nào hiệu quả nhất.” - Huê chia sẻ.

Tùy vào tính chất dự án và ngôn ngữ mới mà Huê sẽ có các phương án tiếp cận "kỹ lưỡng". Với những ngôn ngữ yêu cầu tìm hiểu "chỉ đủ dùng" thì Huê sẽ mất tầm 3-5 ngày làm việc để học.

Theo Huê, phần khó khăn nhất có lẽ là tìm được nguồn tài liệu phù hợp và cách đọc nó làm sao cho hiệu quả. Nếu đã qua được bước đó thì mọi thứ sẽ dễ dàng hơn. 

Mặc dù có nhiều điểm khác biệt trong các ngôn ngữ nhưng có 2 mảng mà ngôn ngữ lập trình nào cũng có đó là cấu trúc dữ liệu và giải thuật. Vì thế, khi nói về các tips để chinh phục ngôn ngữ mới mà mình đã áp dụng, Huê nhấn mạnh các điểm sau:

- Hãy đóng vai một nhà thám hiểm tìm hiểu nền văn minh mới, bỏ túi những điều giống nhau và so sánh những điều khác nhau, nó sẽ khiến quá trình học của bạn thú vị hơn đó.

- Sau khi đã bỏ túi được khá nhiều trang bị mạnh mẽ, bạn có thể bắt đầu đi đánh quái trên trang https://www.codewars.com/ hoặc 1 số trang khác phù hợp với lĩnh vực của bạn. Lựa chọn bài toán phù hợp và thử giải với nhiều ngôn ngữ xem sao.

- Điều quan trọng nhất là đừng bỏ dở giữa chừng, hãy đặt mục tiêu tìm hiểu "đủ dùng" hay "kỹ lưỡng" và hoàn thành nó.

Thời điểm đầu, Xuân Cương (CEV06) học PHP và dự án đầu tiên làm là dự án nội bộ S*Book khi còn thực tập tại Sun*. Đến hiện tại, Cương đã nắm giữ cho mình số lượng ngôn ngữ lập trình “khủng”, PHP, Javascript, Ruby,  Python và Rust.

“Có lẽ xuất phát từ việc bản thân mình không phải kiểu thích bị gò bó trong 1 ngôn ngữ, mình không sợ cái mới, chỉ sợ bản thân không theo kịp kiến thức mới. Đối với mình, chỉ cần dự án cần thì dù dự án dùng ngôn ngữ không phải thế mạnh của mình, mình vẫn sẵn sàng học hỏi và thử thách bản thân. Bởi mình quan tâm nhiều hơn đến việc mình sẽ học được gì, có làm được không." - Cương chia sẻ quan điểm của mình. 

Thực tế, theo Cương, để xác định khoảng thời gian cụ thể để chuyển đổi qua được ngôn ngữ khác khá khó. Thường anh chàng sẽ mất 1 tuần để tìm hiểu và chuyển qua làm dự án mới với ngôn ngữ mới, sau đó mất thêm 1 tháng vừa tìm hiểu, vừa làm để hoàn thành công việc từ mức dễ đến khó. Đối với các dự án gấp hơn, đòi hỏi vào là làm được luôn thì lúc này phải "học thầy không tày học bạn".

Chia sẻ về khoảng thời gian học thêm những ngôn ngữ mới, Cương cho hay: “Khó khăn đầu tiên và cũng là điều mình sợ nhất, đó là dự án toàn anh em chưa từng làm ngôn ngữ lập trình mới mà dự án yêu cầu, lúc này không có người từng trải dẫn đường rất dễ lạc lối. Tiếp đến là về thời gian, mình chưa kịp tìm hiểu kỹ về ngôn ngữ lập trình đấy, lúc làm rất dễ gặp phải những lỗi dù đơn giản nhưng vì không hiểu bản chất nên không biết cách xử lý.

“Để giải quyết các khó khăn này, cần nhất là tìm hiểu thật kỹ ngôn ngữ lập trình mới mình đang học. Dành thêm nhiều thời gian lúc rảnh để tìm hiểu docs, tìm hiểu những project để hiểu thêm về ngôn ngữ lập trình mới. Chịu khó hỏi những bạn đã làm, những người chuyên gia khi thấy có vấn đề chưa rõ. Xem các risk của các dự án khác để tránh gặp phải.” - Cương nói thêm.

Việc hiểu và làm nhiều ngôn ngữ lập trình khiến Cương cảm thấy vui hơn, vì nếu code một ngôn ngữ lâu sẽ dễ thấy nhàm chán. Việc hiểu biết nhiều ngôn ngữ lập trình đã giúp Cương có cơ hội để tham gia nhiều dự án thú vị hơn, giúp bản thân thấy hứng thú hơn với công việc. Hơn hết, Cương vẫn có thể áp dụng những kiến thức hay của ngôn ngữ này qua ngôn ngữ khác.

Khi mà bạn nắm vững kiến thức về ngôn ngữ mới thì hầu như không có khó khăn gì lớn, trừ khi bạn chuyển đổi qua 2 dạng ngôn ngữ lập trình có nhiều sự khác biệt. Ví dụ như mình từng chuyển từ PHP qua JavaScript và gặp sự cố khá hi hữu. Khi JS thực hiện các hàm của WebAPIs thì các hàm này sẽ bất đồng bộ. Trong 1 phút lơ đãng mình đã call dữ liệu api mà không dùng callback, có lẽ đang nghĩ code PHP và loay hoay mãi không hiểu sao không lấy được dữ liệu. Code rõ ràng không sai, lục tìm 1 lúc không thấy lỗi nhưng cũng không lấy được dữ liệu, qua test code PHP lại thấy lấy được. Lúc này mình không hiểu chuyện gì, đang sai ở đâu nên có chút bực bội. Nghĩ lại thấy khá ngáo!' - Cương chia sẻ lại kỉ niệm đáng nhớ!

Những bí quyết Cương đã đúc kết được sau thời gian tự tìm tòi, học hỏi ngôn ngữ mới gồm:

- Đọc 1 repo dự án, hay nhất vẫn là repo trên github: đọc những repo trên github bạn sẽ học được rất nhanh cách code, cách phân chia thư mục và cả những chia sẻ hay từ cộng đồng.

- Sử dụng AI: viết mấy dòng text bạn sẽ nhanh chóng có được khung đoạn code cần thiết.

- Học theo đúng quy trình bài bản, cụ thể:

1. Xác định ngôn ngữ đó thuộc loại nào, ngôn ngữ biên dịch hay thông dịch, bậc cao hay bậc thấp, có hướng đối tượng hay không, có đồng bộ hay bất đồng bộ,... để khi làm có thể tránh được rất nhiều lỗi do không hiểu bản chất của ngôn ngữ lập trình mình đang làm.

2. Docs không thể bỏ qua để hiểu sâu hơn, rộng hơn.

3. Nắm được cú pháp, xem các project example github để nhanh chóng học được cú pháp và phong cách viết code, cách phân chia thư mục,...

4. Nếu có thời gian đừng ngại demo thử và nhớ cài 1 trình phân tích code tĩnh.

Nói về mục tiêu trong thời gian tới, Cương cho biết: “Mục tiêu ngắn hạn của mình là có thể trở thành 1 leader có thể cân được các dự án với nhiều ngôn ngữ khác nhau, khi bản thân đã đủ vững với những gì mình đã được học và làm.”

Sỹ Trường (CEV09) ban đầu học ngôn ngữ lập trình là C và Java, sau đó chuyển sang học Objective C để làm app mobile IOS. Đến thời điểm hiện tại, Trường đã làm qua các ngôn ngữ lập trình như: Objective C, Swift, Javascript, Typescript. Ngoài ra ở nhà trong thời gian rảnh Trường cũng vọc vạch thêm 1 số ngôn ngữ như Move, Rust và Solidity…

Nói về quãng thời gian học ngôn ngữ mới, Trường cho biết: “Trung bình, để có thể code được ở mức cơ bản thì mình mất khoảng 3 đến 5 ngày. Khó khăn mình hay gặp nhất lúc đó là còn chưa quen cú pháp ở các ngôn ngữ và IDE. Lúc này, cách xử lý đơn giản nhất của mình là sẽ tự code demo những mini project cho quen, sau đó search thêm các tips và tool cho IDE mới để thuận tiện cho việc code và debug.”

“Việc học đa dạng ngôn ngữ sẽ giúp mình có góc nhìn đa chiều và sẽ có nhiều cơ hội để tham gia những dự án khác nhau sử dụng ngôn ngữ lập trình khác nhau. Có 1 câu chuyện khá thú vị là khi mình bắt đầu chuyển từ code Objective C sang Swift thì mình rất hay bị quen tay dùng dấu chấm phẩy sau mỗi dòng code, Objective C thì bắt buộc có nhưng Swift thì nó lại không cần.” - Trường nói thêm.

Bí quyết học ngôn ngữ của Trường cũng khá đơn giản, bởi theo Trường, để code được một ngôn ngữ mới không cần mất quá nhiều thời gian để học kỹ và học sâu. Cụ thể hơn:

- Tìm hiểu về điểm mạnh của ngôn ngữ đó trước và có thể học những cú phạm cơ bản. 

- Bắt tay vào làm 1 số mini project demo, kết hợp với google và ChatGPT để đào sâu hơn dần dần chúng ta sẽ học được. 

“Khi bạn đã học được 1 ngôn ngữ mới là lúc đó đã vượt qua được cái rào cản là nỗi sợ, từ đó học tiếp các ngôn ngữ tiếp theo cảm giác nó sẽ dễ và nhẹ nhàng hơn. Trong thời gian tới, mình muốn chuyển hướng sang quản lý dự án để có thêm góc nhìn về tổng thể 1 dự án, ngoài việc code ra thì để 1 dự án thành công nó sẽ cần những yếu tố gì.” - Trường chia sẻ.

Như bao người, khi mới tìm hiểu về ngôn ngữ lập trình, Thanh Tuấn (CEV03) đã học qua về Pascal trong chương trình tin học phổ thông. Sau đó, Tuấn tự học thêm Visual Basic để tạo một số App có giao diện trên Windows và lên đến đại học thì học thêm C, C++, Java, PHP, Javascript. 

Sau một thời gian làm việc, Tuấn đã chọn PHP làm ngôn ngữ chính vì tính đơn giản, nhanh gọn của nó. Gia nhập Sun*, Tuấn chủ yếu làm với PHP và Javascript, thỉnh thoảng cũng có dự án yêu cầu các ngôn ngữ Go, NodeJS, C++, Java nên Tuấn cũng “triển” luôn.

Chia sẻ về quãng thời gian học ngôn ngữ mới, Tuấn cho biết: “Về thời gian học thì đối với những dự án cũ đã có code sẵn, để làm được thì chỉ mất thời gian đọc qua tài liệu của ngôn ngữ, framework và cấu trúc source code là có thể làm được vì có cấu trúc, code mẫu rồi, chỗ nào chưa biết thì google, song song với đó thì đọc thêm tài liệu để biết được nhiều và hiểu sâu hơn. Còn với những dự án mới thì cần nhiều thời gian hơn để nghiên cứu cấu trúc source code mà ngôn ngữ hay framework đó hay dùng, cách áp dụng, triển khai, rồi làm project demo. Nói chung, để code chạy được thì nhanh nhưng muốn code ngon và optimize thì sẽ mất nhiều thời gian hơn.”

“Các ngôn ngữ được cải tiến liên tục và cũng không ngừng học hỏi lẫn nhau, làm cho chúng trở nên giống nhau ở nhiều mặt, nên việc tiếp cận cũng không khó. Syntax cũng không phải vấn đề, vì đa phần mình sẽ không nhớ hết được tất cả cú pháp, function mà vẫn phải google để đọc lại tài liệu. Khó khăn chủ yếu đến từ các khái niệm mới mà ở ngôn ngữ mới mới có, ví dụ từ PHP sang NodeJS phải nắm vững được các khái niệm về lập trình bất đồng bộ, event loop, promises, async/await, từ PHP sang Go thì có thêm Goroutines, Channels. Từ PHP sang C++ thì có con trỏ, static type,...” - Tuấn nói thêm.

Để giải quyết những vấn đề trên, Tuấn đã tiến hành đọc kỹ tài liệu và thực hành thật nhiều. 

“Các tutorial chủ yếu giúp mình làm nhanh hơn, còn để hiểu sâu thì tốt nhất cứ phải cày sâu tài liệu offical của ngôn ngữ framework, tham khảo code của các thư viện trên github. Theo mình, nếu nắm vững các kiến thức cơ bản và cũng nên tập trung những kiến thức này trước thì việc chuyển đổi ngôn ngữ không là vấn đề (các kiến thức về OOP, design patterns, các nguyên tắc SOLID, DRY, KISS, kiến trúc máy tính (bộ nhớ memory, CPU), cơ sở dữ liệu và index, cấu trúc dữ liệu (list, key-value, stack, queue, tree,...) và thuật toán (tìm kiếm, sắp xếp, caching data,..), các kỹ thuật debugging và logging,...).” - Tuấn cho hay.

Việc học nhiều ngôn ngữ đã giúp Tuấn trở nên đa năng hơn, làm được nhiều thứ, học được những khái niệm mới, những cách lập trình mới, những cách làm tối ưu hơn. Dù thỉnh thoảng cũng khiến Tuấn bị loạn ngôn ngữ một chút như đang code PHP lại dùng let, const, hay code Javascript lại dùng đô-la cho tên biến (tên biến trong PHP luôn phải bắt đầu bằng ký tự $)... nhưng đó đều là những trải nghiệm thú vị và xứng đáng. 

Sunner có thể tham khảo những bí quyết học ngôn ngữ mới của Tuấn như:

- Đối với những bạn mới đi làm: Không nên học lan man nhiều ngôn ngữ mà hãy tập trung vào các kiến thức cơ bản trước, bắt đầu với ngôn ngữ nào cũng được và học chuyên sâu về nó trước. Sau đó, muốn học các ngôn ngữ khác cũng dễ và nhanh hơn.

- Đọc nhiều (đọc kỹ tài liệu, đọc và review code của người khác), thực hành nhiều và chia sẻ kiến thức (take note hoặc viết bài chia sẻ, học nhóm,...).

Hãy cùng chờ đón những bước tiến nhảy vọt của các Sunner này trong thời gian sắp tới nhé!

***Phần 2 của bài viết này sẽ lên sóng trong vài ngày tới!

#ngôn ngữ lập trình

#học ngôn ngữ lập trình mới