Tư duy tính toán
Đã giới thiệu| English | Ý nghĩa |
|---|---|
| computational thinking/ˌkɒmpjuːˈteɪʃənl ˈθɪŋkɪŋ/ | Tư duy tính toán |
| abstraction/əbˈstrækʃn/ | Trừu tượng hóa |
| decomposition/ˌdiːkɒmpəˈzɪʃn/ | Phân rã |
| pattern recognition/ˈpætn ˌrekəɡˈnɪʃn/ | Nhận diện mẫu |
| algorithm/ˈælɡərɪθəm/ | Thuật toán |
| function/ˈfʌŋkʃn/ | Hàm |
| module/ˈmɒdjuːl/ | Mô-đun |
| sub-problem/sʌb ˈprɒbləm/ | Vấn đề con |
| procedure/prəˈsiːdʒə/ | Thủ tục |
| structure chart/ˈstrʌktʃə tʃɑːt/ | Biểu đồ cấu trúc |
Một bản đồ cố ý sai lệch
- Năm 1931, Harry Beck, một kỹ sư vẽ đang thất nghiệp, đã vẽ lại bản đồ hệ thống tàu điện ngầm London.
- Anh ta loại bỏ địa lý thực tế: mọi tuyến trở thành đường thẳng và mọi ga cách nhau đều đặn.
- Bản đồ "sai" nhưng ngay lập tức dễ sử dụng hơn. Mọi bản đồ metro trên thế giới hiện nay đều sao chép phong cách này.
- Beck chỉ giữ lại những gì hành khách cần: các ga và cách chúng liên kết. Đó chính là tư duy máy tính trước khi có máy tính tồn tại.
Tư duy tính toán là gì
- Bộ công cụ tư duy để phân tích một vấn đề và thiết kế giải pháp mà máy tính có thể chạy.
- Chương trình nêu hai trong số chúng: trừu tượng hóa và phân rã.
- Hai yếu tố khác hỗ trợ: nhận diện mẫu và thiết kế thuật toán.
Trừu tượng hóa
- Trừu tượng hóa nghĩa là giữ lại các đặc điểm cốt lõi của vấn đề và bỏ qua chi tiết không liên quan, tạo ra một mô hình đơn giản hơn.
- Bản đồ tàu điện ngầm giữ lại các ga và tuyến và loại bỏ địa lý.
- Tên biến ẩn đi địa chỉ bộ nhớ; hàm ẩn đi một khối code dưới cái tên; lớp chỉ giữ lại các thuộc tính hệ thống cần thiết.

Trừu tượng hóa chỉ giữ lại đặc điểm cốt lõi của vấn đề và loại bỏ chi tiết không liên quan
Trừ抽象 nghĩa là:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Trừ抽象 hóa đơn giản hóa vấn đề xuống những yếu tố cốt lõi. Chia nhỏ thành các phần là phân rã.
Một bản đồ tàu hỏa giữ lại các ga và tuyến đường nhưng bỏ qua địa lý thực tế là một ví dụ về trừ抽象 hóa.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Nó giữ lại những gì quan trọng (các ga, các kết nối) và loại bỏ phần còn lại — đúng như cách trừ抽象 hóa hoạt động.
Mục đích và lợi ích
- Mục đích: tạo ra một mô hình đơn giản hơn của vấn đề chỉ chứa các chi tiết cần thiết để giải quyết nó.
- Lợi ích: vấn đề dễ hiểu và lập trình hơn; chương trình nhỏ hơn và viết, kiểm thử nhanh hơn; cùng mô hình có thể tái sử dụng cho vấn đề tương tự.
- Giám khảo hỏi về mục đích và lợi ích riêng biệt. Hãy học cả hai.
Chọn tất cả các phát biểu là lợi ích của trừ抽象 hóa.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Trừ抽象 hóa loại bỏ chi tiết, vì vậy việc giữ lại mọi chi tiết là ngược lại với nó, và nó cũng không nói gì về phần cứng. Ba lợi ích thực sự là sự dễ hiểu, kích thước/tốc độ phát triển, và khả năng tái sử dụng.
Ví dụ minh họa: một mô hình trừu tượng
- Một quán cà phê lưu trữ, đối với mỗi khách hàng thẻ thành viên: ID, tên, địa chỉ nhà, email, số điện thoại di động, ngày sinh, điểm thưởng, và ngày ghé thăm cuối cùng.
- Một module mới gửi email phiếu ưu đãi cho khách hàng chưa ghé thăm trong 30 ngày. Nó cần dữ liệu nào?
- Cần: ID (để tra cứu khách hàng), email (để gửi), tên (để cá nhân hóa tin nhắn), ngày ghé thăm cuối cùng (để chọn ai nhận).
- Không cần: địa chỉ nhà, số điện thoại di động, ngày sinh, điểm thưởng. Việc bỏ qua chúng chính là trừu tượng hóa.
Module email phiếu giảm giá trong ví dụ minh họa cần những mục nào? Chọn tất cả các đáp án đúng.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Email gửi đi, ngày lần ghé thăm gần nhất để xác định ai đủ điều kiện, và ID để tra cứu khách hàng. Địa chỉ bưu chính và ngày sinh không đóng vai trò gì trong một phiếu giảm giá qua email, do đó một mô hình trừ抽象 hóa của module này sẽ loại bỏ chúng.
Phân tách
- Phân rã nghĩa là chia một vấn đề lớn thành các vấn đề con nhỏ hơn, mỗi vấn đề dễ giải quyết hơn.
- Tìm các phần chính → chia mỗi phần thành các tác vụ con → dừng lại khi mỗi phần đủ nhỏ để viết code trực tiếp → giải quyết chúng và kết hợp lại.
- Mỗi vấn đề con trở thành một module chương trình: một thủ tục hoặc một hàm.

Phân rã một chương trình thành các module và sub-modules
Phân rã nghĩa là:
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Phân rã tách một nhiệm vụ lớn thành các bài toán con nhỏ hơn, có thể giải quyết riêng biệt.
Mỗi bài toán con được tạo ra bởi phân rã trở thành một module chương trình: một thủ tục hoặc một ____.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Nội dung chương trình chính xác: phân rã dẫn đến khái niệm về một module chương trình — một thủ tục hoặc một hàm.
Ví dụ minh họa: chương trình đặt vé rạp hát
- Một rạp chiếu phim có nhiều màn hình muốn có chương trình cho phép khách hàng đặt chỗ ngồi.
- ShowFilms() liệt kê các phim, màn hình và giờ bắt đầu.
- ChooseSeats() hiển thị sơ đồ chỗ ngồi, nhận lựa chọn của khách hàng và kiểm tra các chỗ trống.
- TakePayment() tính giá, xử lý thanh toán bằng thẻ và in vé.
- Ba module, mỗi module đủ nhỏ để thiết kế, viết code và kiểm thử độc lập.
Nối mỗi phần của thiết kế đặt vé rạp chiếu phim với định nghĩa của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Ba module, mỗi cái làm một công việc, và một biểu đồ cấu trúc để hiển thị cách chúng liên kết với nhau.
Tại sao phân rã? Câu trả lời 3 điểm
- Mỗi bài toán con nhỏ enough để thiết kế, viết code và kiểm thử riêng biệt.
- Các lập trình viên khác nhau có thể làm việc trên các module khác nhau cùng lúc.
- Một module đã tồn tại hoặc một thủ tục thư viện có thể được tái sử dụng, và lỗi dễ tìm hơn vì nó nằm trong một module duy nhất.
- Sơ đồ của sự phân rã là biểu đồ cấu trúc (chủ đề 12).
Bốn trụ cột
- Phân rã: chia nhỏ vấn đề. Nhận diện mẫu hình: phát hiện những gì lặp lại, để một giải pháp phục vụ nhiều phần.
- Trừu tượng hóa: loại bỏ chi tiết không quan trọng. Thiết kế thuật toán: viết giải pháp từng bước một.
- Trong thực tế, bạn sử dụng chúng theo thứ tự khoảng đó, và đi vòng lại nhiều lần.
Giải quyết một vấn đề theo cách tính toán
Tiến hành qua bốn trụ cột theo thứ tự bạn sẽ sử dụng chúng — phân rã vấn đề, nhận diện sự lặp lại, loại bỏ chi tiết không cần thiết, sau đó viết các bước.
Nối mỗi trụ cột của tư duy tính toán với ý nghĩa của nó.
Difficulty 2/5 · 140 coins + a small bonus on first completion today
Bốn trụ cột — phân rã, nhận diện mẫu hình, trừ abstract, sau đó thiết kế thuật toán.
Sắp xếp các bước của tư duy tính toán theo thứ tự hợp lý.
Difficulty 3/5 · 200 coins + a small bonus on first completion today
Phân rã nó, tìm kiếm sự lặp lại, loại bỏ đến yếu tố cốt lõi, sau đó viết các bước.
Đừng nhầm lẫn giữa chúng
- Trừu tượng hóa loại bỏ chi tiết; phân rã chia nhỏ vấn đề. "Chia nó thành các phần nhỏ hơn" không phải là mô tả của trừu tượng hóa.
- Một câu trả lời "mô tả" cần có cách thức, không chỉ một từ: hãy nói cái gì bị chia nhỏ, thành cái gì, và mỗi phần trở thành gì.
- Gắn câu trả lời với tình huống. Một câu trả lời về phân rã mà không bao giờ nhắc đến hệ thống kho hàng, rạp chiếu phim hay cửa hàng sẽ mất một điểm.
Trong một câu hỏi "mô tả phân rã", một câu trả lời không bao giờ nhắc đến ngữ cảnh (cửa hàng, rạp chiếu phim) vẫn có thể đạt điểm tối đa.
Difficulty 1/5 · 100 coins + a small bonus on first completion today
Các phương án chấm điểm giới hạn câu trả lời chung chung: câu hỏi kiểm soát kho gần đây yêu cầu "tối đa 2 điểm nếu không đề cập đến kiểm soát kho". Hãy nêu tên các mô-đun và dữ liệu riêng của tình huống.
Bạn đã nắm vững
- trừu tượng hóa = giữ những yếu tố cốt lõi, bỏ qua chi tiết không liên quan → một mô hình đơn giản hơn
- phân rã = chia một vấn đề lớn thành các bài toán con → mỗi phần trở thành một thủ tục hoặc hàm
- lợi ích của phân rã: thiết kế/write code/kiểm thử riêng biệt, chia sẻ công việc, tái sử dụng module, tìm lỗi nhanh hơn
- luôn mô tả bằng cách sử dụng các module và dữ liệu chính xác của tình huống