Câu trả lời ngắn là có, rất quan trọng nhất là đối với sinh viên và người muốn tìm một công việc tốt hơn trong ngành CNTT.
Tại sao học thuật toán quan trọng?
Trước hết Đạt muốn nói về lý do mình đi học CNTT. Có thể là vì thích, có thể là vì chả có gì để học nhưng mà phần lớn người đi học là để khi tốt nghiệp tìm được một việc làm tốt. Khi đó mới có thu nhập để nuôi bản thân giúp đỡ gia đình.
Học tốt giải thuật là một điểm tựa vững chắc cho các bạn tìm việc làm tốt ở một công ty tốt. Đạt tốt nghiệp ở VN gần 10 năm trước, ở cái giai đoạn VN đang phát triển mạnh outsource nên giải thuật không được coi trọng.
Mình cũng không phải là một người nắm được nhiều thông tin và từng có suy nghĩ sai lầm rằng giải thuật cũng không quan trọng lắm bởi vì khi phỏng vấn vào các công ty outsource chả ai hỏi về giải thuật. Khi đi làm cũng không thấy có ứng dụng gì cả thế nên mình hiểu lầm giải thuật không quan trọng lắm, học thì tốt mà không học thì cũng không sao.
Thế nhưng hiện giờ các công ty công nghệ lớn ở nước ngoài rất hay dùng giải thuật để phỏng vấn. Ví dụ dễ thấy nhất là Google, Facebook có tới 2 vòng onsite chỉ hỏi giải thuật, trước đó cũng có phone inteview hỏi về giải thuật. Ngoài các công ty lớn như Google hay Facebook, Microsoft, Amazon … thì các công ty khác cũng hỏi về giải thuật. Thậm chí nhiều công ty công nghệ ở VN cũng đã và đang hỏi về giải thuật (hôm trước mình có đọc một bài về tiki mà không nhớ link, ai có share giúp mình nhé)
Vậy cái lợi lớn nhất của học giải thuật ở đây là giúp mình pass phỏng vấn ở các công ty công nghệ lớn và có khả năng nhảy việc bất cứ lúc nào. Đó là một kỹ năng không thể thiếu trong phỏng vấn. Phỏng vấn cần nhiều kỹ năng hơn chỉ là giải thuật, nhưng giải thuật rất quan trọng.
Để làm rõ hơn về lợi ích của giải thuật, Đạt xin kể về kinh nghiệm của bản thân. Trước đây khi đi phỏng vấn ở VN thì Đạt thấy các công ty sẽ hỏi về kinh nghiệm làm việc, kinh nghiệm về framework cụ thể mà công ty tuyển mình đang làm, kiến thức về ngôn ngữ mà công ty đang tuyển mình đang dùng. Vì vậy Đạt không tập trung vào giải thuật, thế nhưng từ khi chuyển sang làm web backend. Đạt đi phỏng vấn vào Garena cũng được hỏi về giải thuật, lúc đó mình khá ngạc nhiên nhưng cũng may mắn qua được vòng phỏng vấn.
Sau một thời gian vào công ty thì Đạt gặp rất nhiều bạn trẻ từ VN sang hoặc học bên Singapore, các bạn này có một điểm chung là rất giỏi giải thuật và đã từng đi thi ACM (một cuộc thi về giải thuật dành cho sinh viên). Nhờ biết những bạn này thì Đạt bắt đầu học từ họ, trong đó có bạn cực tốt hướng dẫn mình cách học giải thuật như thế nào cho hiệu quả. Các bạn này làm ở Garena một thời gian rồi cũng đi Google/Facebook/Amazon.
Làm ở Garena một thời gian Đạt cảm thấy rằng việc vào được những công ty lớn như Google/Facebook hoặc Amazon là chuyện có thể nếu mình chịu khó luyện giải thuật thật tốt. *
Đạt đã dành khá nhiều thời gian ôn lại giải thuật và thử đi phỏng vấn ở một vài công ty lớn ở Singapore thì khá bất ngờ là mình nhận được nhiều offers hơn tưởng tượng và mức lương cũng tốt không tưởng so với Garena (tạm thời không chia sẻ được thông tin về các công ty Đạt đã trúng tuyển). Thế nhưng cuối cùng Đạt vẫn quyết định ở lại Garena vì lý do cá nhân.
Ở VN thì có cần phải luyện giải thuật hay không?
Câu trả lời vẫn là có. Nếu bạn không muốn đi nước ngoài, ở VN cũng có nhiều công ty công nghệ hỏi rất sâu về giải thuật như Garena ,Shopee ,Grab, Go-Viet, Tiki, Lazada, … ngoài ra còn nhiều công ty khác nữa. Trong thời gian sắp tới ở VN sẽ có nhiều và càng nhiều công ty làm sản phẩm(startup) thay vì chỉ đi làm outsource. Đạt hi vọng sẽ có thêm nhiều công ty công nghệ lớn về VN để làm sản phẩm hơn. Thông thường các công ty này trả lương cao hơn hẳn mặt bằng chung ở VN. Thế nên việc luyện giải thuật là quan trọng.
Thêm nữa, mình không cần phải phỏng vấn vào những công ty này thì mới học giải thuật. Học giải thuật giúp mình tư duy tốt hơn, code tốt hơn. Trong quá trình làm việc Đạt mặc dù không dùng toàn bộ kiến thức có được sau khi luyện giải thuật để áp dụng vào code. Nhưng Đạt áp dụng được tư duy giải quyết vấn đề và áp dụng được một số pattern hay dùng trong khi làm bài vào công việc.
Có một ví dụ nhỏ thế này, trước khi học giải thuật thì Đạt không biết Tries, nhưng khi biết rồi thì cảm giác nó cũng không khó và khá hữu ích khi cần so sánh prefix. Đạt đã áp dụng một phần nhỏ của cách implementation của Tries vào việc so sánh prefix của 2 patterns. Nếu không có kiến thức về Tries thì Đạt sẽ code rất dài, nhưng khi đã biết rồi code nhanh rất gọn.
Hơn nữa, việc học giải thuật cũng giúp mình có thêm nhiều bạn cùng học trong ngành
Bài học rút ra
Sinh viên nên tham gia ACM hoặc chuẩn bị cho ACM(các bạn google thêm), người đi làm nên luyện algorithms, có thể bắt đầu từ leetcode rồi tham gia competitive programming(mình chưa tham gia)
Trong tương lai mình sẽ tranh thủ làm video hướng dẫn giải bài algorithms sao cho đơn giản, dễ hiểu, dễ tiếp cận cho các bạn có thể học thật nhanh.
Note: Đạt cũng đã pass được interview ở Facebook Singapore. Nhưng chưa xác định sẽ đi làm được không vì nhiều lý do