Chào các bạn, chúng ta đều biết rằng việc học lập trình vốn không phải là dễ dàng và không phải ai cũng có đủ kiên trì để học và học tốt được.
Với các bạn sinh viên học lập trình nói riêng và những người học lập trình nói chung thì chắc hẳn đều đã nghe đến khái niệm “Cấu trúc dữ liệu và giải thuật”.
Và chúng ta cũng được khuyên là nên học, nên tìm hiểu về những kiến thức này. Vậy tại sao lập trình viên lại nên học cấu trúc dữ liệu và giải thuật thì mình sẽ cùng các bạn điểm qua một vài lý do trong bài viết này.
Mục Lục Nội Dung
#1. Đó là kiến thức nền
Chắc hẳn các bạn ở đây từng được nhiều người khuyên là học gì thì học, nhưng phải nắm chắc kiến thức nền, kiến thức cơ bản rồi phải không ạ !
Vậy như thế nào là kiến thức nền, kiến thức cơ bản? Và tại sao chúng lại quan trọng đến vậy?
Thứ nhất, đối với việc học lập trình nói chung thì kiến thức cơ bản là các kiến thức liên quan đến kiểu dữ liệu, câu lệnh điều khiển, câu lệnh điều kiện… Những kiến thức này không của riêng ngôn ngữ lập trình nào cả.
Cấu trúc dữ liệu và giải thuật cũng vậy. Đó là các kiến thức liên quan đến cách tổ chức giữa dữ liệu và các giải thuật trên từng tổ chức dữ liệu đó. Nó là chung cho các ngôn ngữ lập trình.
Vậy còn câu hỏi tại sao nó lại quan trọng thì sao? Vâng, các bạn biết đó, một chương trình máy tính muốn chạy được phải có dữ liệu và các thuật toán.
Việc đảm bảo được dữ liệu tổ chức theo cấu trúc phù hợp và được thực thi với một thuật toán hợp lý sẽ tăng hiệu suất lên rất nhiều.
#2. Giúp rèn luyện khả năng tư duy
Như mình đã từng đề cập nhiều lần trong các bài viết trước về khái niệm tư duy trong học lập trình – đó là tư duy giải quyết vấn đề.
Các vấn đề càng mới, càng khó thì càng mang tính rèn luyện cao. Với môn học cấu trúc dữ liệu và giải thuật, chúng ta sẽ vận dụng những kiến thức về cấu trúc dữ liệu (mảng, ngăn xếp, hàng đợi…) và các thuật toán (quy nạp, quay lui, tìm kiếm, sắp xếp, quy hoạch động…) để giải quyết các vấn đề đó sao cho tối ưu nhất.
Không chỉ tối ưu về mặt thời gian mà khi chương trình viết ra phải tối ưu cả về bộ nhớ và không gian lưu trữ. Đó chính là cái khó của môn học này.
Đôi khi cùng một vấn đề nhưng lại có nhiều cách giải quyết khác nhau, bạn buộc phải tìm xem đâu là cách giải quyết tối ưu nhất.
#3. Là một công cụ đánh giá hiệu quả
Theo như mình biết thì đây là một trong những môn học mà số lượng sinh viên có tỷ lệ bị trượt nhiều nhất.
Hồi học môn này, mình may mắn không bị trượt nhưng điểm số cũng không quá cao mặc dù mình đã rất chăm chỉ.
Vậy tại sao nó lại là một công cụ đánh giá hiệu quả? Đơn giản vì nó khó, không phải bạn cứ chăm chỉ là được, cũng không phải cứ may mắn là được, lại càng không phải lười học cũng qua.
Nhiều trường đại học chọn môn này là một trong những môn học mũi nhọn trong chương trình đào tạo. Với phương châm đào tạo ra các kỹ sư giỏi có khả năng giải quyết vấn đề tốt và nhanh thì đây chính là một công cụ rất hữu ích.
Chắc hẳn bạn từng nghe về các kỳ thi lập trình như ACM, ICPC… và thấy được các bạn có giải cao thường được các tập đoàn lớn trao học bổng hoặc tuyển thẳng vào làm.
Có thể nói kiến thức về cấu trúc dữ liệu và giải thuật là một trong những kiến thức nền, nó mang tính đánh giá khá cao.
#4. Có nhiều ứng dụng trong thực tế
Hồi mới học môn này mình thấy nó khó quá, lại nghe mấy ông anh review là học ra cũng chẳng dùng đến nên cũng không quá đào sâu.
Sau một thời gian đi làm thì mấy thấy họ nói đúng nhưng chưa đủ. Đúng là ở chỗ các kiến thức này ít khi được áp dụng một cách trực tiếp, nhưng chưa đúng ở chỗ là họ bảo chẳng bao giờ áp dụng.
Mình lấy ví dụ hơi chuyên môn một chút đó là: Hồi mới đi làm mình hay code 2 vòng for lồng nhau dẫn đến nhiều trường hợp số lượng bản ghi lớn => chương trình sẽ bị chậm.
Sau này mình biết đến việc dùng Map (một cấu trúc dữ liệu dạng key-value) thay cho vòng for bên trong sẽ giảm mức độ phức tạp và tiết kiệm thời gian hơn rất nhiều, hơn nữa nó cũng làm tăng hiệu năng của ứng dụng nữa.
Ngoài ra, khi bạn làm thực tế nhiều khi bạn chỉ việc gọi hàm (API) và truyền tham số mà không để ý bên trong hàm đó hoạt động như thế nào.
Ví dụ về hàm binarySearch()
trong Java chẳng hạn, nếu bạn không học về thuật toán tìm kiếm nhị phân thì bạn làm sao mà hiểu được ý nghĩa bên trong hàm này. Có đúng không ạ !
Đôi khi bạn không nhận ra ứng dụng của môn học cấu trúc dữ liệu này, nhưng thực ra là bạn vẫn đang làm việc với chúng hàng ngày đó.
#5. Kết luận
Đọc thêm:
- [SHARE] 5 thái độ của một lập trình viên thành công
- TOP 10 Web Framework tốt nhất, đáng dùng nhất – Phần 1
Vậy là trong bài viết này mình đã cùng với các bạn điểm qua một vài lý do để các bạn lập trình viên “nên” học môn cấu trúc dữ liệu và giải thuật để phục vụ cho công việc của các bạn sau này.
Đây thực sự là một môn học nền tảng giúp bạn rèn luyện tư duy, có thể không cần phải quá giỏi nhưng mình khuyên các bạn đã, đang và sắp học lập trình thì nên học môn này nhé. Đặc biệt là các bạn “tay ngang” có ý định chuyển qua học lập trình.
OK. Hẹn gặp lại các bạn trong các bài viết tiếp theo nha !
CTV: Nguyễn Đức Cảnh – Blogchiasekienthuc.com