Bug là gì? Tại sao lại gọi thứ đó là bug?

Bug là gì? Tại sao lại gọi thứ đó là bug?
Photo by Elegance Nairobi from Unsplash

Làm việc trong lĩnh vực IT, chắc không ai xa lạ với thuật ngữ “bug”. Nó mang nghĩa là thứ gì đó không hoạt động đúng như mong đợi. Vậy chính xác bug là gì? Và tại sao lại gọi là bug mà không phải một cái tên nào khác?

Bug là lỗi của máy tính (hoặc phần mềm)

Bug theo từ điển Cambridge có nhiều nghĩa, trong đó nghĩa đen là các loài côn trùng nhỏ (“a very small insect”). Còn nghĩa bóng là các thiết bị nghe trộm, chắc do hình dáng của chúng giống như những con bọ.

Trong lĩnh vực phần mềm thì nó không có nghĩa như thế. Bug hay gọi đầy đủ là “computer bug” hoặc “software bug” là thuật ngữ chỉ những lỗi không cố ý (đương nhiên rồi, lỗi cố ý được gọi là tính năng 😁) khiến cho chương trình máy tính hoạt động không như mong muốn.

Bug có thể xuất phát từ nhiều nguyên nhân khác nhau. Trong lập trình, bug có thể đến khi lập trình viên mắc sai lầm khi viết code. Ví dụ, lập trình viên không lường hết được các khả năng có thể xảy ra, khiến chương trình hoạt động không như mong đợi trong một vài trường hợp nhất định. Hành động tìm và sửa bug gọi là debug.

Bug có thể phân ra thành một số loại như sau:

  • Bug tính toán: Máy tính có nhiều giới hạn khi mã hóa dữ liệu số thực. Đôi khi, sai số trong tính toán đủ lớn có thể khiến chương trình hoạt động sai.
  • Bug interface: Lỗi khi các hệ thống khác nhau kết nối với nhau nhưng không tương thích về interface. Ví dụ kết nối thông qua API nhưng kiểu dữ liệu không khớp.
  • Bug logic: Lỗi xảy ra khi code của chương trình được viết sai logic, dẫn đến chương trình chạy sai hoặc crash.
  • Bug cú pháp: Lỗi này đến từ mã được viết code sai cú pháp. Các ngôn ngữ lập trình khác nhau có cú pháp khác nhau. Do đó, việc sử dụng cú pháp từ ngôn ngữ này có thể gây ra lỗi cho ngôn ngữ khác.
  • Bug team work: Đây là một lỗi phát sinh khi có sự hiểu nhầm khi team work. Ví dụ, sự khác biệt giữa tài liệu và sản phẩm.

Ngày nay, khi phần mềm cũng như công nghệ thông tin có mặt hầu như trong mọi lĩnh vực của đời sống, bug là một vấn đề lớn. Cách đây hơn 20 năm, một nghiên cứu của National Institute of Standards and Technology cho thấy, bug gây tổn thất 59.5 tỉ đô-la mỗi năm cho nền kinh tế Mỹ. Tôi không tìm được nghiên cứu nào mới hơn nhưng khá chắc con số chỉ có tăng chứ không giảm.

Không chỉ về kinh tế, những năm gần đây, với sự phát triển của công nghệ, ảnh hưởng của bug càng ngày càng lớn hơn. Đã có trường hợp bug có thể gây chết người.

Tại sao lại gọi là bug?

Vậy tại sao lỗi của máy tính lại được gọi là bug? Lỗi của máy tính không có một liên hệ nào với nghĩa đen về những loài côn trùng nhỏ.

Theo hiểu biết hạn hẹp của tôi, thuật ngữ “bug” được sử dụng trước khi máy tính được phát minh. Không rõ ai là người đưa ra thuật ngữ này. Một số ghi chép còn lại là Thomas Edison, một nhà phát minh sống ở thế kỷ 19 đã từng sử dụng thuật ngữ này.

Edison sử dụng thuật ngữ này để chỉ những vấn đề khó cần giải quyết, hoặc những lỗi kỹ thuật cần sửa. Ông đã dùng thuật ngữ này trong một bức thư vào năm 1878:

You were partly correct, I did find a ‘bug’ in my apparatus, but it was not in the telephone proper. It was of the genus ‘callbellum’. The insect appears to find conditions for its existence in all call apparatus of Telephones.

Mặc dù vậy, Edison không phải là người nghĩ ra thuật ngữ “bug”. Thuật ngữ này đã xuất hiện rất lâu trước đó, và ông ấy chỉ đơn giản nghe được ở đâu đó và dùng lại nó mà thôi. Côn trùng cũng được dùng trong thành ngữ để chỉ những thứ gây hại, ví dụ “fly in the ointment”. Nên “bug” với nghĩa vấn đề về kỹ thuật có thể đã được sử dụng trong một cộng đồng nào đó.

Trong thế giới máy tính, người đầu tiên (theo ghi chép) nhận ra lỗi có thể xảy ra trong lập trình là Ada Lovelace, người được coi là lập trình viên đầu tiên. Nhưng lúc đó, bà không gọi nó là “bug”. Bà đã mô tả vấn đề về máy Analytical Engine như sau:

To this it may be replied that an analysing process must equally have been performed in order to furnish the Analytical Engine with the necessary operative data; and that herein may also lie a possible source of error. Granted that the actual mechanism is unerring in its processes, the cards may give it wrong orders.

Theo như Ada Lovelace, cơ chế tính toán của máy không có lỗi. Nhưng dữ liệu của nó được đưa vào bởi con người, và nó hoàn toàn có thể có sai sót. Việc đưa vào những chỉ dẫn sai có thể khiến máy đưa ra những kết quả sai. Vào thời của bà, máy tính còn chưa được phát minh, ngay cả máy Analytical Engine cũng chưa được hoàn thiện, nhưng những gì bà mô tả vẫn còn đúng đến tận ngày nay (và sẽ tiếp tục đúng rất lâu nữa).

Câu chuyện của tiến sĩ Grace Hopper thì sao?

Không rõ thuật ngữ bug được đưa vào máy tính từ khi nào. Rất nhiều năm qua, hầu hết sách, báo, tạp chí, v.v… đều cho rằng thuật ngữ “bug” bắt nguồn từ câu chuyện của tiến sĩ Grace Hopper vào năm 1947.

Tôi còn nhớ khá rõ tiêu đề bài báo tôi đã đọc từ nhỏ (nhưng không nhớ đọc ở đâu). Đó là “Bug – xác con rệp” để diễn giải về nguồn gốc và ý nghĩa của thuật ngữ này. Lúc đó, tôi không biết tiếng Anh nên không biết đọc từ “bug” thế nào, máy tính cũng chỉ nhìn thấy trên ti vi. Bài báo nói gì tôi cũng tin hết. Nhưng sau này nghĩ lại, bài báo đó có nhiều điểm chưa đúng.

Thực ra, ngay từ tiêu đề nó đã sai, có lẽ do dịch sai tiếng Anh. Không có con rệp nào cả, mà là một con bướm đêm (moth) đã bay vào hệ thống relay (rơ-le) của máy tính Harvard Mark II. Hầu hết câu chuyện được kể đều cho rằng con bướm đêm là nguyên nhân khiến máy tính bị trục trặc. Tiến sĩ Grace Hopper cùng đồng nghiệp trong lúc tìm và sửa lỗi đã tìm ra con bướm đêm, bà dán xác nó vào log book và note lại một câu “huyền thoại” được dẫn đi dẫn lại nhiều lần:

First actual case of bug being found.

1947 logbook
Nguồn: Computer History Museum

Câu chuyện này được biết đến rộng rãi vì tiến sĩ Hopper kể nó trong một cuộc phỏng vấn vào năm 1968:

When we were debugging Mark II, it was over in another building, and the windows had no screens on them and we were working on it at night, of course, and all the bugs in the world came in. And, one night she conked out, and we went to look for the bug and found an actual large moth, about four inches wing span, in one of the relays beaten to death, and we took it out and put it in the log book and pasted scotch tape over it, and as far as I know, that’s still in the historical log book up at Harvard.

Một con bướm đêm thực sự đã bay vào máy tính Havard Mark II năm 1947. Thế nhưng, nó không phải là nguồn gốc của thuật ngữ “bug”. Thậm chí, con bướm đêm đó cũng không phải nguyên nhân gây ra lỗi. Có lẽ tiến sĩ Hopper là người có khiếu hài hước và bà chỉ muốn note lại điều gì vui vẻ một chút.

Sau một thời gian tìm “bug” (lỗi phần mềm hoặc phần cứng) của máy tính Mark II, bà (hoặc đồng nghiệp của bà) đã thực sự tìm ra “bug” (côn trùng) theo nghĩa đen. Do đó, bà đã lưu nó lại với câu note nổi tiếng “First actual case of bug being found”. Xét theo ngữ cảnh và ý nghĩa của câu này, có thể thấy rằng, bà đã nghe được thuật ngữ “bug” ở đâu đó từ trước và chẳng may đã gặp “bug” thật.

Cũng từ câu chuyện tiến sĩ Hopper đã kể, con bướm đêm trong tình trạng “beaten to death” – bị đè chết – cho thấy nó đã bị relay của máy tính tác động vật lý. Nhưng sau đó, các relay vẫn tiếp tục hoạt động. Điều này hoàn toàn có thể hiểu được, vì máy tính thời đó là máy tính cơ – điện tử và tác động nhỏ như vậy không thể khiến nó bị hỏng được. Ngay cả với bảng mạch điện tử của máy vi tính ngày nay cũng chưa chắc đã hỏng khi có côn trùng bay vào chứ đừng nói đến máy tính dùng relay.

Có thể nói rằng, con bướm đêm trong máy tính Havard Mark II không phải là “bug” đầu tiên, cũng không phải nguồn gốc của từ “bug”. Nhưng nó đã tồn tại ở đó, như một biểu tượng của vấn đề khó khăn và phức tạp mà bất cứ ai làm trong ngành IT cũng phải đối mặt. Câu chuyện này không phải nguồn gốc của từ “bug” trong máy tính, nhưng nó đã khiến cho tất cả mọi người đều biết đến “bug”.

Tôi xin lỗi nếu bài viết có bất kỳ typo nào. Nếu bạn nhận thấy điều gì bất thường, xin hãy cho tôi biết.

Nếu có bất điều gì muốn nói, bạn có thể liên hệ với tôi qua các mạng xã hội, tạo discussion hoặc report issue trên Github.