MƯỜI CHẶNG

Con bọ mang tên Bug

App điểm danh báo Minh vắng học, dù Minh ngồi ngay bàn đầu, tay còn giơ cao chưa hạ xuống. Máy tính không biết nói dối. Vậy cái sai đó từ đâu chui ra — và vì sao nó luôn có cách bắt được tận gốc?

cái vướng này không tự nhiên mà có nó luôn có một chỗ sai cụ thể
CHẶNG 1

Cái tên bị báo "vắng học"

Sáng thứ Hai, phòng Tin có một chuyện rất lạ.

CLB Tin học của trường Ánh Dương vừa tự viết xong một app điểm danh nho nhỏ — mỗi bạn vào lớp thì mở điện thoại, bấm đúng tên mình trong danh sách, là coi như có mặt.

Minh vào lớp từ sớm, ngồi bàn đầu như mọi hôm, mở app, bấm đúng ô "Minh", còn giơ tay chào cô giáo nữa. Xong xuôi hết.

Đến cuối ngày, cô giáo mở bảng tổng hợp ra xem — dòng của Minh hiện chữ đỏ: "VẮNG HỌC."

Lớp 7A — điểm danh Minh — VẮNG HỌC Bống — có mặt Minh: đang ngồi ngay đây mà!
Minh có mặt thật, bấm điểm danh thật. Vậy con số đỏ "vắng học" đó từ đâu ra?
CHẶNG 2

Cả lớp được một trận cười

Minh vừa buồn cười, vừa ấm ức thật sự.

Bống trêu: "Ơ, cậu trốn học từ hồi nào vậy? Ngồi cả buổi bên cạnh tớ mà app bảo cậu vắng, giỏi thật."

Minh không thấy vui tí nào. Minh có mặt thật. Minh bấm điểm danh thật. Không hề có chuyện gì mập mờ ở đây cả — vậy mà app cứ khăng khăng báo sai.

Cả lớp được một trận cười, còn Minh thì cứ thắc mắc mãi: nếu mình làm đúng hết mọi bước, tại sao kết quả vẫn sai?

"cậu trốn học giỏi thật!" ? Minh: mình làm đúng hết mà, sao lại sai?
Bống thấy buồn cười. Minh thì chỉ thấy một câu hỏi treo lơ lửng, chưa có lời giải.

Điều Minh chắc chắn

Máy tính không "ghét" Minh, cũng không tự dưng "nói dối". Vậy chỉ còn một khả năng: đâu đó trong cái app này có một chỗ đang làm sai việc của nó.

CHẶNG 3

Máy tính không tự nói dối — vậy sao lại sai?

Câu hỏi mà cả nhóm CLB Tin học ngồi lại để tìm câu trả lời.

Máy tính không có cảm xúc, không có lý do gì để "ghét" riêng một bạn học sinh nào. Nó cũng không tự nhiên đổi ý giữa chừng.

Vậy nếu Minh làm đúng-y mọi bước — mở app, bấm đúng tên, đúng lớp — mà kết quả vẫn ra sai, thì cái sai đó phải nằm ở đâu đó khác. Nhưng ở đâu?

Thầy Huy được mời tới xem thử. Thầy không đoán mò, mà mở thẳng đoạn lệnh app điểm danh ra đọc — chỗ máy so sánh tên bạn vừa bấm với tên đã lưu sẵn trong danh sách lớp.

if (ten_bam == "Minh") { danhSach.diemDanh(ten_bam) } // danh sách lưu: "minh" thầy Huy: đọc kỹ từng dòng, không đoán mò
Không đoán bừa — thầy Huy đọc đúng-y dòng lệnh máy đang thật sự chạy.
CHẶNG 4

À — một chữ hoa, một chữ thường

Chỉ khác nhau đúng một chi tiết nhỏ xíu.

Thầy Huy chỉ vào màn hình: "Đây rồi. Danh sách lớp lưu tên bạn là «minh» — chữ thường hết. Nhưng khi các em viết lệnh so sánh, các em lại so với «Minh» — chữ M viết hoa."

"Minh" "minh" với người, cùng một cái tên — với máy, hai chuỗi chữ khác nhau
Máy tính so sánh từng ký tự đúng-y-hệt. Hoa với thường, với nó, là hai thứ khác nhau hoàn toàn.

Vì hai chuỗi chữ đó không khớp đúng-y-hệt, máy kết luận: "chưa tìm thấy tên này trong danh sách đã điểm danh" — nên ghi "vắng học", dù Minh đã bấm đúng nút, đúng tên, đúng mọi thứ.

CHẶNG 5

Cái tên gọi cho chuyện này: Bug

Một chữ ngắn gọn cho một chuyện rất cụ thể.

Trong thế giới máy tính, một lỗi kiểu như vậy — chỗ mà lệnh viết ra không khớp với điều người viết thật sự muốn — được gọi là bug.

Không phải mọi thứ "sai" đều là bug. Máy hỏng phần cứng không phải bug. Mất điện không phải bug. Bug là khi chương trình vẫn chạy, vẫn "sống", nhưng kết quả nó cho ra lại không đúng với ý người viết.

Vì sao gọi là "con bọ"?

Cái tên bắt nguồn từ một câu chuyện có thật: có lần một chiếc máy tính đời rất cũ chạy sai, người ta mở ra kiểm tra thì tìm thấy... một con bướm đêm thật kẹt trong mạch máy, làm hỏng tín hiệu. Từ đó, người ta quen gọi mọi lỗi phần mềm là "bug" — dù ngày nay hầu như chẳng còn con bọ thật nào cả, chỉ còn lỗi trong dòng lệnh.

một câu chuyện xưa
Chiếc máy tính đời rất cũ, và một con bọ thật kẹt bên trong — nguồn gốc của cái tên "bug".
CHẶNG 6

Bản chất thật sự của một con bug

Đây là chặng quan trọng nhất — đọc kỹ nhé.

Bug không phải máy tính "nổi loạn" hay tự dưng hỏng hóc ngẫu nhiên. Máy tính vẫn đang làm đúng-y những gì nó được lệnh — y hệt bài học về CPU và Thuật toán mà em từng gặp: máy chỉ làm đúng lệnh, không tự suy luận ý định.

Vấn đề nằm ở chỗ: bản thân lệnh đó — do người viết ra — có một chỗ chưa nói rõ, hoặc nói sai với điều họ thật sự muốn. Máy không hề "hiểu lầm" gì cả; nó chỉ làm đúng-y một lệnh mà chính lệnh đó đã có vấn đề.

Vì bug luôn bắt nguồn từ một chỗ cụ thể như vậy — một điều kiện viết chưa đủ, một bước bị bỏ sót, một phép so sánh nhầm — nên nó luôn tìm ra và sửa được, nếu chịu khó dò đúng chỗ.

ĐIỀU NGƯỜI VIẾT THẬT SỰ MUỐN "so đúng tên, dù hoa hay thường" LỆNH THẬT SỰ ĐÃ VIẾT RA "so đúng-y từng chữ, kể cả hoa/thường" máy chỉ đọc được ô bên phải — ô bên trái nằm trong đầu người viết
Máy không thấy được điều người viết đang nghĩ trong đầu. Nó chỉ thấy đúng-y những gì đã gõ ra thành lệnh — hai ô đó lệch nhau chính là bug.
CHẶNG 7

Một ví dụ khác, không cần máy tính điện tử

Ngay cả cái máy tính bỏ túi cũ kỹ cũng "bug" theo kiểu này.

Nếu em bấm nhầm phím trừ thành phím cộng khi làm phép tính, máy tính bỏ túi vẫn cho ra một kết quả — chỉ là kết quả đó không phải điều em định tính.

12 7 + 5 = định bấm 7 − 5, nhưng tay bấm nhầm +
Máy không "sai" — nó tính đúng-y-hệt phép cộng mà nó nhận được. Chỉ là đó không phải phép tính người bấm định làm.

Máy tính bỏ túi không hề hỏng. Nó chỉ làm đúng-y-lệnh-nhận-được — giống hệt chuyện app điểm danh ở trên, chỉ khác quy mô.

CHẶNG 8

Nếu không ai hiểu đúng về bug thì sao?

Hiểu sai về bug còn nguy hiểm hơn chính con bug.

Nếu ai cũng nghĩ "máy tính tự dưng lỗi, chẳng biết vì sao, chắc do số nó xui" — sẽ chẳng ai buồn ngồi tìm nguyên nhân thật. Phần mềm cứ lỗi mãi, sửa chỗ này lại hỏng chỗ khác, vì không ai thật sự truy tới gốc.

CÁCH NGHĨ LÀM MỌI THỨ TỆ HƠN "Chắc máy dở hơi thôi."
"Tắt đi bật lại là hết."
"Kệ đi, thỉnh thoảng nó vậy."
CÁCH NGHĨ ĐÚNG "Chắc chắn có một chỗ sai cụ thể."
"Mình dò được, chỉ là chưa dò."
"Sửa xong sẽ hết hẳn, không phải may rủi."

Chính vì tin rằng bug luôn có nguyên nhân tìm được, CLB Tin học mới không bỏ cuộc — và cuối cùng tìm ra đúng một chữ hoa lạc chỗ.

"tắt đi bật lại" quay vòng mãi, lỗi vẫn còn nguyên "dò đúng chỗ sai" tìm đúng dòng sai, sửa xong là hết hẳn
Một đường vòng quanh mãi không tới đâu. Một đường đi thẳng tới đúng chỗ cần sửa.
CHẶNG 9

Em đã gặp bug ở đâu rồi

Nhiều hơn em nghĩ đấy.

Một tựa game bị "đứng hình" đúng ở một màn cụ thể, lặp đi lặp lại — thường là một bug rất cụ thể trong đúng đoạn đó, không phải máy em yếu.

Có lúc web ngân hàng hiện sai số dư trong vài phút rồi tự trở lại bình thường — đó thường là một bug vừa được đội kỹ thuật vá xong.

Tự kiểm tra nhanh

Chọn một đáp án cho mỗi câu, bấm Kiểm tra để xem gợi ý.

1. Vì sao app điểm danh báo Minh "vắng học" dù Minh có mặt?

2. Bug có tự nhiên biến mất theo thời gian, không cần ai sửa không?

3. Bấm nhầm phím trừ thành phím cộng, kết quả sai — lỗi đó là do máy tính hay do lệnh nhận được?

Còn câu hỏi nào của riêng em?

Không cần đúng hay sai — chỉ cần là điều em thật sự đang thắc mắc.

    Chưa có câu hỏi nào. Câu đầu tiên em nghĩ ra thường là câu đáng hỏi nhất.

    Cuộn nốt xuống dưới nhé — sắp xong trang này rồi!

    CHẶNG 10

    Kể lại cho bạn trong 30 giây

    Đủ ngắn để nói trong lúc xếp hàng ăn trưa.

    Bug không phải máy tính sai —
    mà là người viết lệnh
    có một chỗ chưa nói rõ ý mình.

    Lần sau nghe ai than "máy này dở hơi lắm", em có thể thử nói: "Chắc không phải máy dở hơi đâu, chắc có một chỗ lệnh viết chưa đúng ý thôi — dò được đấy."