A STORY OF PROGRAMMING

Trong kỷ nguyên công nghiệp 4.0, Nhu cầu cao về lập trình viên, nhà phát triển và nhà khoa học dữ liệu đã thu hút nhiều bạn trẻ tham gia vào lĩnh vực CNTT. Thông thường, những bạn mới bắt đầu có xu hướng bỏ qua một số vấn đề cốt lõi, cơ bản và tìm thẳng code mẫu để cố gắng rút ngắn thời gian học tập hoặc chạy đua với thời hạn công việc. Tuy nhiên khi một lập trình viên giải quyết một vấn đề về lập trình, hoàn thiện code có lẽ là bước cuối cùng. Trong bài viết này, tôi sẽ hướng dẫn bạn 5 bước mà tôi tin rằng sẽ hướng bạn tới cách tiếp cận chính xác để học lập trình.

Tập giải quyết vấn đề trên giấy.

Đúng vậy, trước khi bắt đầu thực sự lập trình, bạn cần tóm tắt rõ đầu vào, đầu ra của vấn đề cũng như những hướng giải quyết ra giấy. Việc này không chỉ giúp lập trình viên hiểu rõ hơn vấn đề mà còn tổng hợp những ý tưởng mơ hồ, tạo điều kiện cho phương án giải quyết rõ ràng và tối ưu xuất hiện.

Nghiên cứu các thuật toán và cấu trúc dữ liệu

Thuật toán và cấu trúc dữ liệu có vẻ xa vời nhưng thực ra lại rất gần gũi. Thuật toán là một tập hợp các bước, khi được tuân theo, sẽ giải quyết một vấn đề cụ thể. Cấu trúc dữ liệu nghiên cứu cách để biểu diễn cùng một dữ liệu theo nhiều dạng khác nhau. Nghiên cứu thêm về thuật toán và cấu trúc dữ liệu giúp bạn có thêm nhiều lựa chọn, phương án giải quyết vấn đề.

Ví dụ: bài toán tìm phần tử có giá trị xác định của mảng có 1 triệu phần tử, bạn cần 1 triệu phép so sánh để hoàn thành. Nhưng nếu mảng đó đã được sắp xếp, bạn chỉ tốn chưa đến 20 phép so sánh, thậm chí với cấu trúc bảng băm (hash table) bạn chỉ cần 1 phép so sánh duy nhất. Vậy nên, thuật toán và cấu trúc dữ liệu là 2 yếu tố quan trọng nhất mà ai cũng cần học, đúng như câu nói nổi tiếng của Niklaus Wirth:

Programs (Chương trình) = Data Structures (Cấu trúc dữ liệu) + Algorithms (Giải thuật)

Đọc về lý thuyết độ phức tạp.

Khi bạn đã có trong tay nhiều phương án giải quyết rồi, làm cách nào có thể đánh giá phương án nào tốt hơn, tối ưu hơn? Lý thuyết độ phức tạp sẽ giải quyết việc này.

Độ phức tạp là một thang đo để đánh giá thuật toán trong trường hợp xấu nhất. Máy tính, mặc dù có khả năng thực hiện lượng phép tính ấn tượng, nhưng có những hạn chế của chúng. Nếu bạn phát triển một thuật toán quá phức tạp mà các máy tính hiện tại không thể chạy nó, thì điều đó là vô nghĩa.

Bắt đầu bằng mã giả

Nhưng trước khi bạn ngồi vào máy tính và bắt đầu viết code, lời khuyên của tôi là hãy triển khai các thuật toán của bạn bằng mã giả trước. Như chúng ta vừa thảo luận, thuật toán là một tập hợp các bước được sử dụng để giải quyết một vấn đề cụ thể. Mã giả được định nghĩa là “mô tả các bước của thuật toán bằng ngôn ngữ đơn giản”. Đó là một cách giải thích quá trình suy nghĩ của bạn với người khác chứ không phải với máy tính. Tuy không trực tiếp giúp giải quyết vấn đề, nhưng khi bạn làm việc với 1 team, việc giúp tất các thành viên hiểu được thuật toán lại mang ý nghĩa rất lớn.

Lựa chọn ngôn ngữ lập trình

Khi bạn đã nắm vững lý thuyết giải quyết vấn đề, thuật toán và độ phức tạp, bạn có thể tự tin áp dụng bằng bất kỳ ngôn ngữ lập trình nào. Giống như khi đến Nga thì phải học tiếng Nga vậy, bạn cần lựa chọn ngôn ngữ lập trình phù hợp từng trường hợp, hoàn cảnh. Có ngôn ngữ chuyên dùng để lập trình thiết bị di động, có ngôn ngữ lại chỉ để lập trình web. Theo wikipedia có tới hơn 700 ngôn ngữ lập trình, tuy nhiên chúng đều có cùng các khái niệm như từ vựng, biến, vòng lặp, kiểu dữ liệu,… Vì vậy, bất kể bạn bắt đầu với ngôn ngữ lập trình nào, bạn cũng có thể học cú pháp khác ngay lập tức, miễn là nền tảng của bạn vững chắc.

Bài viết đã nêu lên được 5 bước định hướng tới cách tiếp cận chính xác để học lập trình. Khi nắm được kiến thức nền tảng thì những bài tập lập trình khó nhằn sẽ trở nên dễ dàng hơn rất nhiều.

Tham gia CLB tin học với chúng mình để nhận thêm nhiều lời khuyên hơn tại ITMO BRAIN !!!