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?
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."
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?
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ó.
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.
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."
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ứ.
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.
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.
Đâ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ỗ.
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.
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ô.
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.
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ỗ.
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.
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?
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!
Đủ ngắn để nói trong lúc xếp hàng ăn trưa.
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."