Blog

Tư duy xử lý vấn đề

“Tất cả mọi người đều nên học lập trình,
bởi vì nó sẽ dạy bạn cách để tư duy” (Steve Jobs, 1995)

Trong bài phỏng vấn với Robert Cringley năm 1995, Steve Jobs (Founder của tập đoàn công nghệ Apple) khi được hỏi về những chương trình ông viết khi còn trẻ đã trả lời: “Nhưng điều quan trọng hơn là, chúng chẳng liên quan gì đến ứng dụng thực tế cả. Vấn đề là sử dụng chúng như một tấm gương phản ánh quá trình tư duy của bạn. Để thực sự biết cách để nghĩ.”

Trích dẫn vắn tắt trên đã tóm gọn sức mạnh và tầm ảnh hưởng của tư duy lập trình đến toàn thể nhân loại. Rằng vấn đề không phải học lập trình chỉ để ‘lập trình’, vấn đề là ở chỗ nó dạy ta cách tư duy, cụ thể là tư duy xử lí vấn đề.

Tư duy xử lí vấn đề

Nòng cốt (Core) của việc học lập trình là tư duy lập trình, hay nói cách khác, là tư duy xử lí vấn đề. Đây là bản chất của việc lập trình. Nếu bạn không nắm rõ tính chất cốt lõi này, việc học lập trình sẽ chỉ giống như ‘xây lâu đài trên cát’, bởi nền tảng mà từ đó nó xây dựng nên không tồn tại.

Thế nào là tư duy lập trình

Lập trình là việc thiết kế một trình tự xử lí theo qui tắc nhằm giải quyết một bài toán hay vấn đề (thường được ứng dụng trong lập trình máy tính để triển khai các giải thuật). Theo đó, tư duy lập trình được hiểu là việc tư duy nhằm giải quyết vấn đề, đặc trưng bởi tính trình tự (hay tuần tự), nguyên tắc (tính điều kiện) và trong sáng (không có tính nước đôi, không thể vừa đúng vừa sai trong cùng một trường hợp nhất định). Một vài kiểu tư duy lập trình có thể kể tới ở đây như: Tư duy cục bộ/toàn bộ (local/global), Tư duy xử lí đầu vào/đầu ra (Input – Handle – Output)

1. Tư duy local/global

Hướng tư duy này trong lập trình giúp người học khoanh vùng các đối tượng và tầm ảnh hưởng, nhìn rõ các quy ước định sẵn trong một khu vực nhất định và cấu trúc hệ của toàn bộ hệ thống. Một cách dễ hiểu như khi ta bước tới một vùng đất mới, ta phải học cách sử dụng ‘ngôn ngữ’ ở đó, các quy ước chung được định sẵn như danh xưng, nội quy, … Phân biệt một cách tương đối giữa cục bố và toàn bộ giúp người học lập trình có thể hiểu được cách thức vận hành nhiều khi ‘trông có vẻ vô lý’ nhưng thực chất vẫn hợp lí.

VD: Bạn sinh ra trong gia đình có anh chị em là lập trình viên và họ đều là những người ít nói. Bạn nghĩ rằng đa số mọi lập trình viên có vẻ ít nói và trầm tính. Cho đến một ngày bạn gặp gỡ một nhóm lập trình viên khác, vui vẻ và cởi mở.

Tư duy lập trình hiểu rõ tính tương đối của các hệ quy chiếu (các góc nhìn), từ đó tìm ra vị trí đứng sao cho phù hợp để giải quyết vấn đề.

Có những nan đề trong đời sống khi bạn càng cố giải quyết, mọi thứ càng lộn xộn. Hướng tư duy local/global đã chỉ ra, khi đâm đầu vào một bài toán ‘dường như không thể giải quyết’, điều tốt nhất nên làm là lùi lại một bước để nhìn lại tổng thể một lần nữa trước khi bắt tay vào giải quyết, tránh trường hợp bị sa lầy trong tư duy luẩn quẩn.

2. Tư duy Input – Handle – Output (I – H – O)

Bên cạnh việc xử lí vấn đề theo Local/Global kiểu không gian, Tư duy I – H – O cho thấy sự vận động của mọi vấn đề đều có thể được cắt nghĩa như một hàm (tư duy theo trục Thời gian), luôn bao gồm các biến đầu vào, công việc xử lí và kết quả đầu ra.

Tư duy xử lí vấn đề kiểu lập trình biết được giới hạn của bản thân trong việc tính toán, cụ thể là nhiều khi chúng ta không thể ước lượng được chính xác tất cả các biến đầu vào (VD: bạn là nhà đầu tư và bắt đầu quan sát thị trường biến động, không ai là người nắm đủ thông số để xác quyết nó sẽ dịch chuyển như thế nào.). Tuy nhiên cùng lúc, tư duy xử lí kiểu này phủ nhận tính ngẫu nhiên, ‘không gì xảy ra là không có nguyên nhân’. Tư duy I – H – O dạy chúng ta về cách thao tác vấn đề bằng việc chia nhỏ vấn đề (Input ở đây có thể là Output ở kia) và xử lí tuần từ ( Input -> Handle -> Output). Xác định được rõ ràng đầu ra (có thể là mục tiêu, kết quả mong muốn, …), phương pháp xử lí rõ ràng (Handle đúng, rõ ràng, trình tự) và nắm rõ các biến Input (có thể là nguồn lực cá nhân, tiền vốn, …) sẽ  giúp chúng ta giải quyết được vấn đề.

Ngoài 2 tư duy xử lí vấn đề kể trên, còn có rất nhiều điều chúng ta đáng học trong lập trình (tư duy tái sử dụng, tư duy phân luồng, tư duy tổ chức), kể cả khi bạn không phải một lập trình viên. Nhiều trường lớp đào tạo hiện nay chỉ tập trung chủ yếu vào dạy lập trình mà bỏ quên đi cốt lõi trong vấn đề tư duy xử lí vấn đề, khiến cho đa số học viên phần nhiều chán nản vì cảm thấy kém ứng dụng (khi nghĩ rằng học code thì chỉ để code).

Tham khảo khóa học nâng cao của chúng tôi

Ở đây, chúng tôi không ngần ngại đưa tư duy xử lí vấn đề vào một trong những trọng tâm giảng dạy, nhằm phục vụ tốt nhất cho các học viên mong muốn tìm hiểu lập trình ở cả trong và ngoài ngành, nâng cao tính ứng dụng của lập trình vào trong công việc cũng như đời sống.

Đăng ký học thử miễn phí ngay để trải nghiệm

Leave a Reply

Your email address will not be published. Required fields are marked *