Cùng đọc bài phỏng vấn của Vinacode với anh Nguyễn Đức Anh, là một cựu sinh viên đã từng đoạt tới 6 giải thưởng cao tại các cuộc thi Olympic tin học trong nước và quốc tế. Hiện tại anh đang là Lập trình viên Big Data tại VCCorp đồng thời là giảng viên khóa cấu trúc dữ liệu - giải thuật kinh điển.

  • Bí quyết từ một cậu học trò nghiện game và trượt đại học trở thành một sinh viên xuất sắc với 6 lần đoạt giải ACM trong nước và quốc tế.
  • So sánh năng lực của sinh viên Việt Nam với các đối thủ khác trong châu Á ở các cuộc thi ACM
  • Các kiến thức và kinh nghiệm từ thời sinh viên nói chung và các cuộc thi nói riêng liệu có hữu ích trong công việc sau này của Developer?
  • Điểm yếu lớn nhất của sinh viên CNTT Việt Nam
  • Tầm quan trọng của tư duy lập trình đối với sinh viên tin học và lập trình viên trong công việc hàng ngày.

Chào anh Nguyễn Đức Anh, anh có thể giới thiệu với độc giả Vinacode đôi chút về background của mình?

Duc Anh Nguyen

Xin chào các bạn độc giả Vinacode. Mình là Nguyễn Đức Anh, hiện đang là lập trình viên Big Data tại công ty cổ phần truyền thông VCcorp, rất vui được ở đây chia sẻ thông tin với các bạn.

Con đường đến với IT của mình thật sự mới chỉ bắt đầu trong 4 năm trở lại đây. Trước đó, mình tiền thân là một cậu học trò mê game, nói trắng ra là “nghiện game” đến mức trượt Đại học, gia đình mình quở trách rất nhiều và mình nộp hồ sơ vào khoa CNTT tại trường ĐH Kinh Doanh và Công Nghệ với lý do có thêm thời gian chơi game. Trước đó, tuy được học tin học từ cấp 1 nhưng hoàn toàn chỉ là học qua loa, có học qua Pascal nhưng nói thật là chả có câu code nào vào được đầu cả.

Vào năm 2012, mình có cơ duyên biết đến đội tuyển Olympic tin học của trường, vượt qua vòng sơ loại, được thầy chủ nhiệm cảm hóa và dần dà cảm thấy trước đây mình đang đuổi theo một giấc mơ ảo và vô bổ nên mình quyết định “cầy top” ở đời thực. Mình bắt đầu học tin học từ con số 0 ở đó. Mình được học về cấu trúc dữ liệu và giải thuật trong 3 năm, có dành được một số giải thưởng nhất định như Olympic tin học HUBT, Olympic tin học Việt Nam, lập trình sinh viên quốc tế ACM/ICPC nhưng cái mình nhận được nhiều nhất đó chính là sự thay đổi về con người, giúp mình thêm tự tin và đầy đủ kiến thức cũng như hành trang để bước vào doanh nghiệp.

Sau 4 năm học tập và rèn luyện, hiện nay mình đã tốt nghiệp loại giỏi tại trường và đang theo đuổi sự nghiệp developer như mình đã nói ở trên.

ACM
Đức Anh cùng đồng đội tại vòng loại ACM/ICPC châu Á 2015

Có ý kiến cho rằng “cách nghĩ có thể tạo nên thành công”, theo anh điều đó có đúng không? Bí quyết vượt qua khó khăn và vượt lên chính mình để từ một cậu học trò trượt đại học trở thành một sinh viên suất sắc với 6 lần đoạt các giải thưởng cao tại các kỳ thi Olympic tin học trong nước và quốc tế của anh là gì?

Mình cũng chưa dám nhận là thành công nên nói câu này phải chăng có hơi quá tầm với. Về phía mình, để “cai nghiện” bất cứ thứ gì cũng cần một ý chí sắt đá, suy nghĩ và việc làm phải nhất quán. Nếu cứ ăn, cứ ngủ lại nuôi mộng việc nhẹ, lương cao thì điều đó chẳng khác gì mong trúng độc đắc mà lại chả bao giờ mua lấy một tấm vé số.

“Đừng làm việc chăm chỉ, hãy làm việc thông minh”. Đó là kim chỉ nam cho mình trong suốt những năm vừa qua. Mong rằng nó cũng có thể giúp được cho các bạn. Để có được những kết quả nói trên thực sự mình phải gửi lời cảm ơn chân thành nhất đến người thầy của mình – chất xúc tác mạnh mẽ giúp mình đến bước đường hôm nay.

Ai cũng chỉ có 24 giờ mỗi ngày mà thôi, hãy sắp xếp một cách hợp lý, sự cố gắng và làm việc đúng hướng, khoa học sẽ đưa bạn ra khỏi chỗ đứng hiện tại.

Hiện tại công việc của anh tập trung nhiều vào các lĩnh vực khá mới mẻ tại Việt Nam như Big Data, Data Mining, Nature Language Processor… Liệu những kinh nghiệm và kiến thức từ các kỳ thi Olympic trước đây có trở nên hữu ích trong công việc này? Anh thường sử dụng những ngôn ngữ lập trình hay công cụ gì để làm việc với chúng?

Kinh nghiệm chinh chiến Olympic không chỉ mang lại cho mình kiến thức, nó còn giúp mình học được cách làm việc khoa học, phương pháp học tập, nghiên cứu riêng lẻ và làm việc theo nhóm. Sự đam mê, tìm tòi đến cái mới của mình chưa bao giờ chững lại, nói thật là mình đang rất hạnh phúc và hài lòng với công việc hiện tại.

Trước đây mình sử dụng C/C++ cho việc lập trình, một năm trở lại đây thì mình sử dụng Java nhưng nó cũng không phải là vấn đề lớn. Theo mình ngôn ngữ chỉ như là công cụ, cốt lõi là cách sử dụng công cụ một cách thực sự hợp lý. Mỗi ngôn ngữ đều có điểm mạnh điểm yếu riêng, người sử dụng nên biết lắp ráp, gia công cho sản phẩm của mình trở nên hoàn chỉnh với ít nhân công và tài nguyên nhất có thể.

Qua các kỳ thi Olympic và lập trình quốc tế, anh có thể đưa ra nhận xét cá nhân về tương quan lực lượng giữa sinh viên Việt Nam và sinh viên các nước bạn?

Nếu so về cấu trúc dữ liệu và giải thuật và tư duy logic, mình thấy các team Việt Nam ta không hề đuối trước bạn bè quốc tế, trong top 10 thì có tới 3 team Việt Nam, thậm chí giải vô địch năm đó thuộc về ĐH Nanyang (Singapore) nhưng 3 thành viên của họ đều là du học sinh đến từ Việt Nam. Mình thiết nghĩ chúng ta có về “chất” nhưng thiếu đi phần “lượng”, có quá ít sinh viên cũng như coder, dev có đào sâu, nghiên cứu về giải thuật, hầu như chủ yếu dựa dẫm quá nhiều vào các open source, framework có sẵn. Cách làm việc kiểu “mì ăn liền” như vậy theo mình đang dần dà làm thui chột đi tính sáng tạo của coder.

Mọi người thường xem nhẹ kiến thức cơ bản. Đó là điểm yếu chết người của đa số sinh viên CNTT Việt Nam. Kiến thức cơ bản ở đây, theo mình gồm có 5 môn học chính: cấu trúc dữ liệu và giải thuật, mạng máy tính, hệ điều hành, kiến trúc máy tính và lập trình căn bản.

Nhiều bạn trẻ vẫn còn mơ hồ về ứng dụng của cấu trúc dữ liệu và giải thuật vào công việc thực tế, vậy theo anh trong thực tế nó có thể ứng dụng để làm gì? Trong công việc hiện tại ở VCcorp anh có cần sử dụng nhiều đến kiến thức về cấu trúc dữ liệu và giải thuật?

Chia sẻ với các bạn, hiện tại mình đang làm ở bộ phận AdOptimization, nôm na là làm mọi cách để quảng cáo được hiệu quả hơn. Nếu chỉ đơn thuần là treo quảng cáo thì dev nào chả làm được, tại sao phải trả lương cao hơn cho dev? Câu trả lời là những người như mình đang góp phần làm cho công việc này ngày càng hiệu quả.

Như việc có rất nhiều con đường để dẫn đến hồ Gươm để xem pháo hoa, nhưng việc đi đường nào ngắn nhất, ít tắc (kẹt) nhất, gửi xe tiết kiệm nhất, là những vấn đề mọi người đều có những câu trả lời khác nhau. Còn doanh nghiệp chỉ quan tâm đến phương án tốt nhất có thể. Chìa khóa là gì? Câu trả lời chính là cấu trúc dữ liệu và giải thuật.

Giải thuật giúp code trong sáng, dễ hiểu, code nhanh, dễ bảo trì, ít lỗi.

Cấu trúc dữ liệu giúp tiết kiệm nhân lực, tài lực, giúp bộ máy hoạt động trơn tru.

Một cải tiến rất nhỏ có thể mang lợi ích cực lớn.

Tại sao nhiều sinh viên CNTT họ không hứng thú học hoặc rất sợ môn cấu trúc dữ liệu giải thuật? 

Đó là vì tư duy ăn xổi của phần đông sinh viên. 

Theo mình nghĩ, với sự phát triển của công nghệ tìm kiếm, việc sở hữu một opensource hay framework trong thời gian chưa đến 1s thì code kiểu “mì ăn liền” đương nhiên đưa ra một kết quả nhanh chóng.

Đứng trên vai người khổng lồ mang lại cảm giác an toàn nhưng sẽ là thảm họa khi bạn nhận ra mình không phải người khổng lồ.

Trong suốt 4 năm làm code thì việc dev như trên mình thấy không phải là hiếm, nhược điểm của code kiểu này là khi phát sinh ra bug thì khó sửa chữa, không biết cách modify theo ý mình mà chỉ áp dụng một cách máy móc chứ chưa tính đến phát triển mở rộng theo ý của mình.

Sinh viên ăn liền thì thường kiến thức không sâu, bị coi thường và khó kiếm được việc. Dev ăn liền thì thường lương thấp và hay bị giao những công việc “tay to”, mang tính chất đắp da đắp thịt cho khung xương do dev chất lượng cao tạo ra nên khó có thể thăng tiến được. Theo mình, chính điều này góp phần khiến cho nghiệp lập trình có “tuổi nghề” thêm phần ngắn ngủi.

fearness

Có một thống kê cho thấy 80% sinh viên tin học ở mọi trường đại học đều học lơ mơ môn cấu trúc dữ liệu giải thuật. Nhiều người mất kiến thức căn bản rồi trở nên chán nản với ngành IT và nhiều bạn thậm chí còn muốn bỏ học nữa. Theo anh thì nguyên nhân này xuất phát từ đâu, và có cách nào để các bạn này có thể lấy lại căn bản chỉ sau 6 tháng?

80%? một con số ấn tượng, các trường Đại Học thì dạy học hời hợt, mang tính chất cưỡi ngựa xem hoa, giới thiệu quá nhiều công nghệ nhưng không dạy họ cách làm ra công nghệ. Bản thân mình cũng thấy môn này khá là khô khan và không trực quan cộng thêm việc giảng dạy mang hơi hướm triết học chắc cũng làm học viên tiếp thu hạn chế.

Còn tâm lý chung khi bị hổng kiến thức đó là trốn tránh thực tại. Mình đã từng như vậy nên cũng hiểu khá rõ. Cái chính là bạn cần nhận ra mình thực sự cần thay đổi và có thái độ tích cực về vấn đề này, nếu có người tác động và thúc đẩy đúng hướng thì càng tốt. Khi bạn có trong tay đầy đủ 3 thứ: ngôn ngữ, thuật toán và công nghệ thì bạn đã có thể tự tạo ra sản phẩm cho mình rồi. 3 thứ này cần được học theo thứ tự và thái độ cầu tiến, nếu có bạn nào đang gặp khó khăn thì có thể liên hệ mình, mình sẽ chia sẻ cũng như thúc đẩy các bạn. “Đồng bệnh tương lân” các cụ dạy thì chưa bao giờ sai có phải không ạ?

Nhiều lập trình viên chỉ cần ứng dụng framework công cụ có sẵn, khi gặp khó khăn thì Google, tìm giải pháp trên StackOverflow mà không cần hiểu sâu cấu trúc dữ liệu, thậm chí họ làm việc vẫn ổn dù hoàn toàn không biết gì về nó. Liệu nghịch lý này cứ tồn tại mãi?

Ví dụ trên của Vinacode giống hệt như con ếch bị luộc chết trong cái nồi được đun nóng từ từ. Việc học hỏi, tìm tòi từ Google hay StackOverflow về lý là tốt, là cần thiết, thậm chí là yêu cầu khi tuyển dụng. Nhưng có lẽ phần lớn đang đi lệch hướng một chút so với yêu cầu. Hoàn thành công việc là tốt, là chuẩn song việc phát triển bản thân cũng rất là quan trọng.

Biết địch biết ta, trăm trận trăm thắng. Muốn làm code thì phải hiểu code, mà muốn hiểu code thì phải học giải thuật, logic rất đơn giản phải không ạ. 5 năm nữa, thời gian khá dài, mình cũng không dám vụng đoán về tương lai, nhưng việc không cần hiểu sâu về cấu trúc dữ liệu thì mình có thể nói là sai lầm ở bất cứ thời điểm nào. Khi bản thân developer đủ độ cứng thì sẽ không cần sợ hãi trước bất cứ sự thay đổi công nghệ nào.

Techmaster via Vinacode