Back to posts

Think Like a Developer #4 Algorithm Thinking - "Nghĩ theo bước, không nghĩ theo cảm tính"

17 tháng 3, 2026 101 views Administrator
Think Like a Developer #4 Algorithm Thinking  - "Nghĩ theo bước, không nghĩ theo cảm tính"

Bạn muốn app tự động gửi email nhắc hẹn. Nghe đơn giản. Cho đến khi bạn nhận ra mình không biết "tự động" nghĩa là gì.

Bạn mở Lovable lên. Gõ: "Tạo tính năng tự động gửi email nhắc hẹn cho khách hàng."

AI chạy. Code ra. Bạn test thử. Email gửi ngay lập tức khi khách đặt lịch. Không phải trước 1 ngày. Không phải trước 1 giờ. Gửi ngay. Lúc đặt. Vô nghĩa.

Bạn sửa prompt: "Gửi email trước 24 giờ." AI sửa. Nhưng giờ nó gửi cho tất cả mọi người, kể cả người đã hủy lịch. Bạn sửa tiếp. Nó gửi đúng người nhưng gửi 3 lần. Bạn sửa tiếp. Nó gửi 1 lần nhưng vào lúc 3 giờ sáng.

Bạn ngồi đó, frustration, nghĩ "tính năng nhỏ xíu mà sao khó vậy?"

Không khó. Bạn chỉ chưa nghĩ hết các bước.

Và đây là kỹ năng mà developer nào cũng có: Algorithm Thinking. Nghĩ theo bước. Từng bước một. Trước khi viết dù chỉ một dòng code.

Developer luôn vẽ "flow" trước khi code

Khi developer nghe "gửi email nhắc hẹn tự động", đầu họ không nghĩ về email. Đầu họ bắt đầu vẽ ra một chuỗi các bước:

Bước 1: Khách hàng đặt lịch hẹn thành công

Bước 2: Hệ thống lưu lịch hẹn + thời gian hẹn

Bước 3: Hệ thống kiểm tra: lịch hẹn nào đến hạn trong 24 giờ tới?

Bước 4: Với mỗi lịch hẹn tìm được, kiểm tra: lịch này còn active không? (chưa bị hủy?)

Bước 5: Nếu còn active, kiểm tra tiếp: đã gửi email nhắc chưa?

Bước 6: Nếu chưa gửi, gửi email + đánh dấu "đã gửi"

Bước 7: Ghi log để biết email nào đã gửi, lúc nào

7 bước. Rõ ràng. Không thiếu. Không thừa.

Và khi đưa 7 bước này cho AI, nó sẽ build chính xác. Vì bạn đã nghĩ hộ nó phần khó nhất: logic.

AI rất giỏi viết code. Nhưng AI không giỏi đoán ý bạn. Khi bạn nói "tự động gửi email", AI phải tự quyết hàng tá thứ: gửi khi nào, gửi cho ai, gửi mấy lần, gửi trong điều kiện nào. Nó đoán sai là chuyện bình thường.

Nhưng khi bạn nói "kiểm tra mỗi giờ, lọc lịch hẹn active trong 24 giờ tới, chưa gửi nhắc thì gửi, đánh dấu đã gửi" thì AI không cần đoán. Nó chỉ cần dịch từng bước ra code.

Ví dụ đời thường: Buổi sáng của bạn là một algorithm

Bạn đã dùng Algorithm Thinking mỗi ngày mà không biết.

Nghĩ về buổi sáng đi làm. Bạn không nghĩ "đi làm" rồi bay ra khỏi nhà. Bạn nghĩ theo bước:

Chuông reo. Tắt chuông. Nằm thêm 5 phút (hoặc 15). Dậy. Vào toilet. Đánh răng. Rửa mặt. Thay đồ. Kiểm tra điện thoại. Ăn sáng hoặc bỏ qua. Lấy chìa khóa. Ra cửa. Khóa cửa. Gọi Grab hoặc lấy xe.

Mỗi bước xảy ra theo thứ tự. Bạn không đánh răng trước khi dậy. Bạn không khóa cửa trước khi ra cửa.

Và có những bước có điều kiện. NẾU trời mưa THÌ mang áo mưa. NẾU hết cà phê THÌ mua ở 7-Eleven. NẾU muộn THÌ bỏ qua ăn sáng.

Đó chính là algorithm. Một chuỗi các bước, có thứ tự, có điều kiện.

Developer gọi cái "NẾU... THÌ..." đó là If/Then. Và nó xuất hiện ở mọi nơi trong phần mềm.

NẾU user chưa đăng nhập THÌ hiện trang login.

NẾU giỏ hàng trống THÌ hiện "Giỏ hàng trống".

NẾU thanh toán thành công THÌ chuyển sang trang cảm ơn.

NẾU thanh toán thất bại THÌ hiện thông báo lỗi + nút thử lại.

Mỗi tính năng trong app của bạn đều chứa hàng chục cái NẾU... THÌ... như vậy. Và nếu bạn không nghĩ ra trước, AI sẽ phải tự đoán. Và nó sẽ đoán thiếu.

Tại sao "nghĩ theo cảm tính" gây lỗi?

Nghĩ theo cảm tính là nghĩ kiểu: "App cho người dùng đặt hàng, thanh toán, xong nhận hàng."

Nghe ổn. Nhưng thiếu rất nhiều bước ở giữa.

Đặt hàng: Người dùng thêm sản phẩm vào giỏ. Nhưng nếu sản phẩm hết hàng thì sao? Nếu người dùng thêm số lượng nhiều hơn tồn kho thì sao? Nếu người dùng thêm rồi đổi ý muốn xóa thì sao?

Thanh toán: Chọn phương thức thanh toán. Nhưng nếu thẻ bị từ chối? Nếu mất mạng giữa chừng? Nếu thanh toán thành công nhưng server chưa kịp ghi nhận?

Nhận hàng: Giao đến địa chỉ. Nhưng nếu không có ai nhận? Nếu khách muốn đổi địa chỉ sau khi đặt? Nếu hàng bị hỏng?

Mỗi "khoảng trống" giữa các bước là một chỗ app sẽ bị lỗi.

Developer nhìn thấy khoảng trống vì họ có thói quen nghĩ theo bước. Bạn cũng có thể, chỉ cần một công cụ đơn giản.

Công cụ: Flowchart bằng giấy bút

Bạn không cần phần mềm gì hết. Lấy tờ giấy, cây bút. Vẽ 3 thứ:

Ô vuông: một hành động (ví dụ: "Người dùng bấm Đặt hàng")

Ô hình thoi: một điều kiện, một câu hỏi (ví dụ: "Sản phẩm còn hàng không?")

Mũi tên: nối các ô lại với nhau, chỉ hướng đi

Ví dụ: Flow đặt hàng

Người dùng bấm "Đặt hàng"

→ Sản phẩm còn hàng?

→ CÓ → Chuyển sang trang thanh toán

→ KHÔNG → Hiện thông báo "Hết hàng"

Trang thanh toán → Người dùng chọn phương thức

→ Thanh toán thành công?

→ CÓ → Tạo đơn hàng + gửi email xác nhận

→ KHÔNG → Hiện lỗi + nút thử lại

Đơn giản. Nhưng cực kỳ hiệu quả.

Khi bạn vẽ flow xong, bạn sẽ nhìn thấy ngay những chỗ mình chưa nghĩ tới. "Ơ, nếu người dùng bấm quay lại giữa chừng thì sao?" "Ơ, nếu hết session thì sao?" Những câu hỏi này xuất hiện tự nhiên khi bạn vẽ ra giấy.

Và khi bạn đã có flow, prompt cho AI trở nên cực kỳ rõ ràng.

Từ flowchart đến prompt

Lấy ví dụ tính năng "đăng ký tài khoản".

Nếu không vẽ flow, bạn prompt: "Tạo trang đăng ký tài khoản."

AI sẽ tạo một form có email, password, nút đăng ký. Xong. Nhưng thiếu hàng tá thứ.

Nếu bạn vẽ flow trước:

1. Người dùng vào trang đăng ký

2. Nhập email, password, nhập lại password

3. Bấm đăng ký

4. NẾU email đã tồn tại THÌ hiện "Email đã được sử dụng". Dừng.

5. NẾU password dưới 8 ký tự THÌ hiện "Password cần ít nhất 8 ký tự". Dừng.

6. NẾU confirm password không khớp THÌ hiện lỗi. Dừng.

7. Tất cả pass? Tạo tài khoản + gửi email xác nhận

8. Người dùng mở email, bấm link xác nhận

9. Tài khoản active, chuyển về trang login

Giờ bạn prompt:

"Tạo trang đăng ký tài khoản. Gồm các bước:

1. Form có 3 ô: email, password, confirm password

2. Khi bấm đăng ký, kiểm tra email đã tồn tại chưa. Nếu rồi, hiện lỗi.

3. Kiểm tra password có ít nhất 8 ký tự. Nếu không, hiện lỗi.

4. Kiểm tra confirm password khớp với password. Nếu không, hiện lỗi.

5. Nếu tất cả pass, tạo tài khoản và gửi email xác nhận.

6. Hiện trang thông báo: Vui lòng kiểm tra email để xác nhận."

Rõ ràng. Cụ thể. AI không cần đoán bước nào.

Bạn thấy sự khác biệt chứ? Từ 1 câu mơ hồ thành 6 bước chi tiết. Và tất cả bắt đầu từ 5 phút vẽ flow trên giấy.

Kỹ thuật "Walkthrough": Đi bộ qua flow của chính mình

Sau khi vẽ flow, developer có một thói quen nữa: walkthrough. Tức là tự mình "đi" qua từng bước, đóng vai người dùng.

Bạn nhắm mắt tưởng tượng: mình là người dùng. Mở app. Thấy gì? Bấm gì? Xong rồi thấy gì tiếp? Rồi bấm gì tiếp?

Ở mỗi bước, hỏi:

"Nếu mọi thứ đúng, chuyện gì xảy ra tiếp?"

"Nếu có gì sai, chuyện gì xảy ra?"

"Nếu người dùng bấm quay lại thì sao?"

"Nếu người dùng không làm gì (idle) thì sao?"

Kỹ thuật này đơn giản nhưng bắt được rất nhiều lỗi trước khi chúng xảy ra. Bạn không cần biết code để walkthrough. Chỉ cần tưởng tượng và hỏi "rồi sao nữa?"

Kết hợp với 3 bài trước: Flow hoàn chỉnh

Đến bài 4, bạn đã có 4 công cụ tư duy. Hãy xem chúng kết hợp thế nào:

Bước 1 (Decomposition, bài 1): Chia ý tưởng app thành các phần nhỏ

Bước 2 (Pattern Recognition, bài 2): Nhận diện mỗi phần thuộc pattern gì

Bước 3 (Abstraction, bài 3): Xác định level chi tiết phù hợp cho mỗi phần

Bước 4 (Algorithm Thinking, bài 4): Vẽ flow chi tiết cho từng phần trước khi prompt AI

Ví dụ: "App giao việc cho team"

Decomposition: Auth, danh sách task, tạo task, assign task, notification

Pattern Recognition: Auth, CRUD (task), List/Filter, Notification

Abstraction: Bắt đầu với CRUD task, chưa cần notification

Algorithm Thinking: Vẽ flow cho "tạo task":

1. Người dùng bấm "Tạo task"

2. Nhập tiêu đề + mô tả

3. Chọn người được assign

4. Chọn deadline

5. Bấm tạo

6. NẾU chưa có tiêu đề THÌ hiện lỗi. Dừng.

7. NẾU chưa chọn người THÌ hiện nhắc nhở. Dừng.

8. Tất cả pass? Tạo task + hiện trong danh sách + gửi notification cho người được assign

Từng bước rõ ràng. AI chỉ cần dịch ra code.

Template Prompt: Copy-paste ngay

Trước khi nhờ AI build bất kỳ tính năng nào, dùng prompt này để AI giúp bạn vẽ flow:

Tôi muốn build tính năng [mô tả tính năng].

Trước khi code, hãy giúp tôi vẽ flow chart cho tính năng này.

Với mỗi bước, cho tôi biết:

1. Hành động của người dùng hoặc hệ thống

2. Điều kiện cần kiểm tra (nếu có)

3. Kết quả nếu đúng và kết quả nếu sai

Liệt kê dạng từng bước, dùng "NẾU... THÌ..." cho các điều kiện.

Chưa cần code, chỉ cần flow.

Sau khi có flow, review rồi dùng prompt tiếp:

Dựa trên flow ở trên, hãy build tính năng này.

Đảm bảo xử lý đúng mọi điều kiện đã liệt kê.

Với mỗi trường hợp lỗi, hiển thị thông báo rõ ràng cho người dùng.

Trước và sau khi áp dụng Algorithm Thinking

TRƯỚC:

Prompt: "Tạo tính năng quên mật khẩu."

Kết quả: AI tạo 1 form nhập email và 1 nút gửi. Bấm gửi thì không có gì xảy ra. Không có bước xác nhận. Không có trang đặt password mới. Không xử lý email không tồn tại.

SAU:

Prompt: "Tạo tính năng quên mật khẩu theo flow:

1. Người dùng bấm 'Quên mật khẩu' ở trang login

2. Hiện form nhập email

3. Bấm gửi, kiểm tra email có trong hệ thống không

4. NẾU không có, hiện 'Email không tồn tại'

5. NẾU có, gửi email chứa link reset password (có thời hạn 15 phút)

6. Hiện trang thông báo 'Kiểm tra email của bạn'

7. Khi người dùng bấm link, mở trang nhập password mới

8. Nhập password mới + xác nhận password

9. Bấm lưu, kiểm tra password đủ mạnh

10. NẾU đủ, cập nhật password + chuyển về trang login với thông báo thành công

11. NẾU link hết hạn, hiện 'Link đã hết hạn, vui lòng thử lại'"

Kết quả: Tính năng hoàn chỉnh, xử lý đúng mọi trường hợp.

Bài tập thực hành (15 phút)

Chọn 1 trong các tính năng sau (hoặc dùng tính năng từ app bạn đang build):

1. Đăng ký tài khoản mới

2. Thêm sản phẩm vào giỏ hàng

3. Đặt lịch hẹn

Làm theo 3 bước:

Bước 1 (5 phút): Lấy giấy bút, liệt kê TỪNG BƯỚC mà người dùng và hệ thống cần thực hiện. Đừng bỏ qua bước nào, dù nhỏ.

Bước 2 (5 phút): Với mỗi bước, hỏi "Có điều kiện gì cần kiểm tra không?" Thêm các NẾU... THÌ... vào flow.

Bước 3 (5 phút): Dùng flow đó viết 1 prompt chi tiết cho AI. Mỗi bước trong flow = 1 dòng trong prompt.

Bài tiếp theo: State Thinking -- "Mọi thứ đều có trạng thái." App đặt hàng của bạn bị lỗi: khách thanh toán rồi nhưng đơn vẫn hiện "chưa thanh toán". Tại sao? Vì bạn chưa nghĩ về state.