Tại sao phải học thuật toán?

·

Nếu không học thuật toán + cấu trúc dữ liệu (hai cái không thể tách rời), bạn sẽ không thể hiểu được:

– Tại sao code bạn chạy chậm chỉ vì xin cấp phát nhiều vùng nhớ nhỏ thay vì ít vùng nhớ lớn.

– Tại sao đôi khi không nên dùng index trên các bảng dữ liệu nhỏ.

– Tại sao đôi khi bộ nhớ còn trống nhưng vẫn không xin cấp phát được.

– Tại sao khi copy nhiều file nhỏ lại chậm hơn copy 1 file lớn.

– Làm sao các cơ sở dữ liệu hỗ trợ được ACID.

– Tại sao khi gọi hàm đệ quy nhiều quá sẽ bị stack overflow.

– Làm sao tránh trùng dữ liệu trên các hệ phân tán.

– Tại sao các thư viện về List lại hay dùng Array ở bên dưới thay vì Linked List.

Và vô số ví dụ khác.

Nhưng quan trọng nhất, TT và CTDL giúp chúng ta hiểu cách máy tính xử lý dữ liệu, giải các bài tập TT và CTDL cũng là một cách tuyệt vời để chúng ta “thuộc” cách viết code. Đúng là khi đi làm ít khi nào chúng ta phải viết lại các thuật toán đã có, nhưng thế giới muôn hình vạn trạng, không bao giờ có thuật toán hay sơ đồ khối nào giải quyết chính xác bài toán của bạn, chúng ta sẽ cần ghép nhiều thứ sẵn có lại với nhau để tạo ra giải pháp, nhưng để biết ghép cái gì và ghép như thế nào thì cũng cần phải học.

Tất nhiên tùy nhu cầu mà mỗi người sẽ quyết định cần học sâu tới đâu, bản thân mình thì chỉ học những gì cơ bản là đủ: tìm kiếm, sắp xếp, quy hoạch động, blah blah… Vì mình cũng không có nhu cầu đi phỏng vấn 🥲. Chỉ khi quan tâm tới lĩnh vực nào thì mới đọc sâu vào nó, vì với các thuật toán phức tạp đôi khi để hiểu được có thể phải mất rất nhiều thời gian (ví dụ như các thuật toán mã hóa, RSA, các thuật toán lập lịch CPU như CFS hay EEVDF…). Cá nhân mình không nghĩ học quá sâu sẽ tốt trừ khi đó là yêu cầu công việc của bạn, nên nhớ IT là ngành không chỉ đòi hỏi kiến thức sâu mà còn phải rộng nữa.

Còn nếu khi đi làm bạn vẫn thấy không cần phải hiểu những câu hỏi phía trên thì có thể do công việc của bạn quá đơn giản (và dễ bị thay thế) chăng?

Comments

Leave a Reply

Discover more from Đào Hải Nam blog

Subscribe now to keep reading and get access to the full archive.

Continue reading