Tôi chỉ thấy câu trả lời về việc chúng ta là con người và dễ mắc sai lầm, điều này rất đúng ... nhưng tôi thấy câu hỏi của bạn từ một quan điểm khác.
Tôi nghĩ bạn có thể viết các chương trình không có lỗi, nhưng đó là những chương trình mà bạn đã viết 10 hoặc 12 lần. Lần thứ 13 bạn viết cùng một chương trình từ đầu, bạn đã biết cách thực hiện: bạn biết vấn đề, bạn biết các kỹ thuật, bạn biết các thư viện, ngôn ngữ ... bạn thấy nó trong tâm trí của bạn. Tất cả các mô hình là ở đó, ở tất cả các cấp.
Điều này xảy ra với tôi với các chương trình rất đơn giản vì tôi dạy lập trình. Họ đơn giản đối với tôi, nhưng khó khăn cho các sinh viên. Và tôi không nói về các giải pháp cho các vấn đề tôi đã làm nhiều lần trong bảng đen. Tất nhiên tôi biết những điều đó. Ý tôi là ~ 300 chương trình giải quyết một cái gì đó bằng cách sử dụng các khái niệm mà tôi biết rất rõ (các khái niệm tôi dạy). Tôi viết các chương trình này mà không có kế hoạch và chúng chỉ hoạt động, và tôi cảm thấy tôi biết tất cả các chi tiết, tôi không cần TDD chút nào. Tôi nhận được một vài hoặc ba lỗi biên dịch (chủ yếu là lỗi chính tả và những thứ khác như thế) và đó là lỗi đó. Tôi có thể làm điều này cho các chương trình nhỏ, và tôi cũng tin rằng một số người có thể làm điều đó cho các chương trình phức tạp hơn. Tôi nghĩ những người như Linus Torvalds hay Daniel J. Bernstein có đầu óc minh mẫn như vậy, họ là người thân nhất mà bạn có thể đến với một lập trình viên không có lỗi. nếu bạnhiểu những điều sâu sắc tôi nghĩ bạn có thể làm điều đó. Tôi chỉ có thể làm điều này cho các chương trình đơn giản, như tôi đã nói.
Tôi tin rằng nếu bạn luôn cố gắng thực hiện các chương trình vượt xa trình độ của bạn (tôi đã dành nhiều năm để làm điều đó), bạn sẽ bị nhầm lẫn và mắc lỗi. Những sai lầm lớn như những lỗi mà bạn đột nhiên nhận ra rằng giải pháp của bạn không thể hoạt động, khi cuối cùng bạn đã hiểu được vấn đề và phải thực hiện các thay đổi phức tạp đến mức chúng có thể ngăn bạn giải quyết vấn đề của bạn hoặc làm cho mã trở nên tồi tệ. TDD là cho trường hợp này, tôi tin. Bạn biết rằng bạn không khắc phục được vấn đề mà bạn đang giải quyết và do đó đặt các bài kiểm tra ở mọi nơi để đảm bảo rằng bạn có một cơ sở vững chắc. TDD không giải quyết tầm nhìn 10.000 feet, mặc dù. Bạn có thể đi bộ trong vòng tròn với mã hoàn toàn sạch mọi lúc.
Tuy nhiên, nếu bạn cố gắng làm một cái gì đó mới nhưng chỉ ở trên mức của bạn, bạn có thể làm cho chương trình của bạn hoàn hảo hoặc gần như hoàn hảo. Tôi nghĩ thật khó để biết chương trình nào trong "biên giới tri thức" của bạn, nhưng trên lý thuyết đó là cách tốt nhất để học. Tôi viết lại chương trình từ đầu rất nhiều, thực sự. Một số người làm, nhưng bạn cần rất nhiều thời gian và sự kiên nhẫn vì lần thứ ba bạn lặp lại một chương trình không tầm thường, bạn không cảm thấy phấn khích như lần đầu tiên.
Vì vậy, lời khuyên của tôi là: đừng nghĩ rằng bạn hiểu điều gì đó cho đến khi bạn có thể viết một chương trình không có lỗi chỉ vì điều đó. Và sau đó cố gắng kết hợp hai trong số những khái niệm mà bạn biết sâu vào cùng một chương trình. Tôi gần như chắc chắn rằng bạn sẽ có được nó ngay lần đầu tiên. Một trong những cách tốt nhất là viết lại phần mềm không tầm thường, lần đầu tiên phải mất rất nhiều nỗ lực (tôi đang làm điều này với các ứng dụng Android). Mỗi khi tôi bắt đầu lại, tôi thay đổi một cái gì đó hoặc thêm vào một thứ gì đó, chỉ để thêm một chút niềm vui, và tôi có thể nói với bạn rằng tôi ngày càng tốt hơn và tốt hơn ... có thể không có lỗi nhưng thực sự tự hào.