Để phát triển bền vững, lập trình viên Việt Nam cần nắm vững kiến thức về cấu trúc dữ liệu và giải thuật – Phỏng vấn Nguyễn Đức Anh

Lập trình viên Nguyễn Đức AnhCùng đọc bài phỏng vấn của blog 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à một developer chuyên về các lĩnh vực Big Data, Data Mining, Nature Language Processor,… tại công ty truyền thông VCcorp; để nghe anh chia sẻ về:

  • 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 đạt giải cao trong các cuộc thi Olympic tin học trong nước và quốc tế.
  • So sánh về năng lực của sinh viên Việt Nam với các đối thủ khác trong khu vực Châu Á ở các cuộc thi Olympic tin học.
  • Liệu những kiến thức và kinh nghiệm từ các cuộc thi Olympic tin học thời sinh viên có trở nên hữu ích trong công việc sau này của developer.
  • Thực trạng nhiều sinh viên CNTT thường lơ mơ về môn cấu trúc dữ liệu giải thuật và giải pháp cho vấn đề đó.
  • Tầm quan trọng của kiến thức về cấu trúc dữ liệu và giải thuật đối với sinh viên tin học cũng như đối với lập trình viên; và ứng dụng của nó trong công việc thực tế.


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

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.

Được biết anh đã 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 biệt trong năm 2014, anh đã cùng đồng đội tham gia cuộc thi ACM/ICPC vòng loại khu vực Châu Á tại Bangkok Thái Lan, anh có thể chia sẻ về kết quả và những kỷ niệm của cuộc thi đó? Khi thi đấu cọ xát với các đối thủ trong khu vực thì anh thấy điểm mạnh và điểm yếu của các team Việt Nam là gì?

Có thể nói 2014 là một năm để lại rất nhiều kỷ niệm đáng nhớ trong cuộc đời mình. Nó đánh dấu một quãng đường dài mà mình đã đi trong suốt thời gian học tập và cố gắng. Sau giải nhất Olympic tin học cấp trường, được đứng trong danh sách chính thức dự thi Olympic tin học quốc gia, sau đó giành giải nhất vòng loại ACM/ICPC Việt Nam, cuối cùng thì mình cùng đội HUBT lần đầu được bơi ra biển lớn.

Quả thật, lần đầu tiên mình được ra khỏi lãnh thổ Việt Nam, được so tài cùng với bạn bè, đội tuyển đến từ nhiều trường danh tiếng từ các nước như Hồng Kong, Trung Quốc, Nhật Bản, Hàn Quốc, Singapore,… Anh em trong team cũng khá là “ca mơ run”, thuật ngữ giờ gọi là khá “bối rối” nhưng thầy huấn luyện viên có dặn là chỉ cần cố hết sức, đi thi lấy được giải phong cách là đạt yêu cầu. Rank 3/5 Việt Nam là kết quả từ sự cố gắng của cả nhóm, rất tiếc ACM không trao giải như thầy mong muốn.

Nếu so về cấu trúc dữ liệu và giải thuật, 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.

Nguyễn Đức Anh (thứ 3 từ trái sang), cùng với team tham gia cuộc thi ACM/ICPC vòng loại khu vực Châu Á tại Bangkok Thái Lan năm 2014.Nguyễn Đức Anh (thứ 3 từ trái sang), cùng với team tham gia cuộc thi ACM/ICPC vòng loại khu vực Châu Á tại Bangkok Thái Lan năm 2014.

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ể.

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 ạ?

Sắp tới mình sẽ mở một khóa học về Cấu trúc dữ liệu và giải thuật ở bên trung tâm TechMaster. Khóa học là sự đúc kết những kiến thức và kinh nghiệm mà mình đã trải qua trong quá trình học tập và rèn luyện. Hy vọng với cách dạy mới với nhiều ví dụ minh họa sinh động cùng các bài tập từ dễ đến khó sẽ giúp các bạn sinh viên dễ tiếp thu và yêu quý môn học này hơn.

Nguyễn Đức Anh (thứ 2 từ trái sang), cùng với team tham gia cuộc thi ACM/ICPC vòng loại khu vực Châu Á tại Jakarta Indonesia năm 2015.Nguyễn Đức Anh (thứ 2 từ trái sang), cùng với team tham gia cuộc thi ACM/ICPC vòng loại khu vực Châu Á tại Jakarta Indonesia năm 2015.

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? Phải chăng sinh viên CNTT ngày càng thích tạo ứng dụng nhanh, kiểu mỳ ăn liền, ngại học kiến thức khoa học máy tính căn bả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.

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.

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ó. Nhưng trong vòng 5 năm tới điều này có còn đúng nữa không?

Ví dụ trên của anh 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.

Cảm ơn anh đã tham gia phỏng vấn và cung cấp rất nhiều thông tin bổ ích cho độc giả của VinaCode. Chúc anh thành công với các kế hoạch sắp tới.

Cảm ơn VinaCode.

Nếu bạn là một sinh viên CNTT nhưng bị mất kiến thức căn bản về lập trình nói chung và cấu trúc dữ liệu giải thuật nói riêng, hay bạn đang muốn tìm thêm thông tin về các cuộc thi Olympic tin học thì có thể liên hệ với anh Nguyễn Đức Anh qua Facebook, LinkedIn hoặc địa chỉ email danhit187[at]gmail.com.

Theo bạn thì một lập trình viên có cần nắm vững kiến thức về cấu trúc dữ liệu và giải thuật? Hãy chia sẻ suy nghĩ của bạn trong phần bình luận phía dưới nhé!

Các bài viết liên quan:

Về người thực hiện phỏng vấn:

Hồ Sỹ HùngHồ Sỹ Hùng thuộc thế hệ 8x, sinh ra ở Nghệ An, học ở Hà Nội, có vài năm làm việc tại Sài Gòn và Đồng Nai. Anh là lập trình viên có nhiều năm kinh nghiệm trong lĩnh vực: C#, VB.NET, ASP.NET, SQL Server, XML, MVC, Entity Framework, Android… Chi tiết

Advertisements

21 comments on “Để phát triển bền vững, lập trình viên Việt Nam cần nắm vững kiến thức về cấu trúc dữ liệu và giải thuật – Phỏng vấn Nguyễn Đức Anh

  1. Đúng là nếu sinh viên chịu khó nghiên cứu cấu trúc dữ liệu và giải thuật, đi làm tiếp cận và xử lý công việc tốt, nắm băt framework cũng như hệ thống nhanh hơn.

  2. sử dụng qua nhiều framework, em thấy chả bao giờ trơn tru như framework đó quảng cáo, học xài khó chết được, chỗ nào cũng vấp, muốn xài tốt (chỉ xài thôi, không táy máy gì thêm) thì phải hiểu sâu xuống vài level thấp hơn, càng sâu càng tốt, xài càng thuận tay. Thậm chí những library nhỏ, mình hiểu cách nó hoạt động thì dùng cũng dễ hơn rất nhiều. Bởi vậy mới thấy data structure and algorithm rất quan trọng

  3. Mình đã đi làm được 2 năm rồi, cảm thấy mình cũng còn ngu về cấu trúc dữ liệu và giải thuật, hồi đại học thì môn này rớt mấy lần. Liệu bây giờ học lại có được không ta. Vinacode cho lời khuyên.

  4. Đúng là tuổi trẻ tài cao thật, anh ấy rất giỏi Nguyễn đức anh, em đang có chút hâm mộ anh quá, lập trình là cả 1 vấn đề gian nan và cần sự cần cù sáng tạo, không như seo bọn em, seo mấy từ khóa nam khoa mà cứ vật lộn lên xuống, lương thì bèo
    Chúc anh và tác giả bài viết sức khỏe dồi dào và thành công hơn nữa nhé !

  5. Để học và làm lập trình viên bây giờ không quá khó. Chỉ cần có chút tư duy và sử dụng các thư viện đã được viết sẵn là đã có 1 sản phẩm chạy rồi. Nhưng nếu để giải quyết tận gốc rễ thì vẫn phải có kiến thức chuyên sâu. Mình thấy Dev “mì ăn liền” lương tầm 5-6 triệu/tháng là quá cao.

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s