Get in touch
or send us a question?
CONTACT

HỌC THUẬT TOÁN ĐỂ LÀM GÌ >???

Bài viết này sẽ giúp trả lời câu hỏi “Học thuật toán để làm cái gì?”, cũng như có cái nhìn khách quan hơn về thuật toán.

Thuật toán còn gọi là giải thuật, bạn có thể đọc ở nhiều nguồn để hiểu thêm về nó. Cụ thể thì nó là một tập hợp hữu hạn các hướng dẫn được xác định rõ ràng, có thể thực hiện được bằng máy tính, thường để giải quyết một lớp vấn đề hoặc để thực hiện một phép tính. Các thuật toán luôn rõ ràng và được sử dụng chỉ rõ việc thực hiện các phép tínhxử lý dữ liệusuy luận tự động và các tác vụ khác. Nói dễ hiểu hơn, mỗi một bài toán giống như một chiếc hòm chứa đựng kho báu (kết quả, đáp án), và chiếc chìa khoá để mở cái hòm đó chính là “giải thuật”. Nếu dùng sai chìa khoá, bạn vẫn có thể mở được hòm, nhưng mà sẽ mất nhiều thời gian, hoặc mở được hòm thì kho báu ở bên trong bị méo mó, không toàn vẹn. Sử dụng đúng chìa khoá, sẽ giúp bạn lấy được kho báu 1 cách dễ dàng, nhanh chóng.

Học thuật toán để… trả lời phỏng vấn

Những người bênh vực thuật toán thường bảo rằng: Các công ty lớn như Google, Amazon, Facebook rất quan tâm tới thuật toán khi phỏng vấn. Điều này là hoàn toàn có thật! Bạn sẽ phải viết code lên bảng, giải thích code và thuật toán khi PV ở các công ty này.

Tuy vậy, không phải công ty lập trình nào cũng như Google, Amazon, Facebook. Theo kinh nghiệm của mình và bạn bè, các công ty Việt Nam chỉ hỏi một số thuật toán cơ bản khi tuyển dụng (Bạn mình PV Ansadara bị hỏi thuật toán dầu loang và DFS).

Các công ty này cũngcần tuyển người làm việc được ngay, biết cách sử dụng công nghệ. Do vậy, đừng quá chăm chăm vào thuật toán, mà còn phải bỏ thời gian học hỏi và sử dụng công nghệ nữa nhé.

Cũng đừng quá tự tin là giỏi thuật toán thì học công nghệ nhanh thôi. Cần trải qua một thời gian làm việc lâu dài thì mới nắm hết được được điểm mạnh yếu, kĩ thuật và kinh nghiệm khi dùng ngôn ngữ/công nghệ nhé.

Học thuật toán để giải quyết vấn đề, nâng cao tư duy 

Thuật toán ở khắp nơi quanh ta. Bản thân Google mạnh mẽ như vậy là nhờ thuật toán tìm kiếm của nó. Chức năng recommendation của Amazon có được cũng nhờ thuật toán. Đến cả những tin tức hiện hằng ngày trong New Feed trên Facebook của bạn cũng do thuật toán định đoạt.

Một số lĩnh vực trong lập trình cần sử dụng rất nhiều thuật toán như: render đồ hoạ, mã hoá dữ liệu, driver, machine learning, data mining… Mỗi lĩnh vực sẽ cần những thuật toán riêng. Phải nắm vững các thuật toán này thì bạn mới có thể làm việc trong lĩnh vực đó.

Việc giỏi thuật toán cũng giúp bạn tìm ra hướng giải quyết vấn đề nhanh hơn, viết code mạch lạc hơn. Nắm vững thuật toán, cấu trúc dữ liệu, bạn sẽ ước tính được độ phức tạp của code, đánh giá code chạy nhanh hay chậm, có scalable hay không.

Đây đều là những kĩ năng vô cùng cần thiết. Để thành một lập trình viên giỏi, bạn cần phải rành rẽ thuật toán (Cơ bản là được, không cần cao siêu đâu).

Đừng quá thần thánh hoá thuật toán!

Ở Việt Nam, do các kì thi tin học đều chú trọng vào phần thuật toán, giải toán nên chúng ta có xu hướng “thần thánh hoá thuật toán”. Điều này dẫn đến tình trạng Việt Nam được giải tin học này nọ nhưng chẳng có phần mềm nào nổi bật cả.

Để lập trình giỏi, ta cần rành thuật toán. Tuy nhiên, giỏi thuật toán không có nghĩa là bạn sẽ thành lập trình viên giỏi. Trong một số lĩnh vực khác như phần mềm doanh nghiệp, mobile, phần lớn các chức năng chỉ là “thêm bớt xoá sửa”.

Requirement của các phần mềm này thường hay thay đổi, dẫn đến việc thay đổi code. Lúc này, thuật toán hay, code chạy nhanh không quan trọng bằng việc hiểu đúng requirement, tổ chức dữ liệu, thiết kế cấu trúc code, viết code sao cho dễ đọc, dễ bảo trì.

Chốt lại là …

Xem qua, thuật toán có vẻ khá khó nhằn và phức tạp. Tuy vậy, những kiến thức cơ bản về thuật toán cũng không nhiều. Quanh đi quẩn lại cũng chỉ có: Cấu trúc dữ liệu Stack, Queue, Binary Tree, Linked List, … và một số thuật toán như: Dynamic Programming, Backtrack, DFS, … Bạn hoàn toàn có thể tự học và dần nắm vững chúng.

Nếu bạn không rành thuật toán, không giải được các câu hỏi hóc búa, bạn vẫn có thể là lập trình viên tốt. Lớp mình ngày xưa có hai đứa vừa học làm freelance, làm web PHP kiêm luôn SEO…v..vv..

Code đơn giản, giải quyết yêu cầu kiếm tiền cho người dùng, chẳng cần gì thuật toán. Vì vậy, đừng e ngại thuật toán, nhưng cũng đừng thần thánh hoá nó. Cứ xem nó là một skill, học nhiều luyện nhiều sẽ giỏi thôi.