Sadece insan olduğumuz ve hataya yatkın olduğumuz hakkındaki cevapları görüyorum, bu çok doğru ... ama sorunuzu başka bir bakış açısıyla görüyorum.
Ne düşündüğünü olabilir hata içermeyen programlar yazmak, ancak bu genellikle zaten 10 veya 12 kez yazdım programlardır. Aynı programı sıfırdan yazdığınızda, nasıl yapılacağını zaten biliyorsunuz: problemi biliyorsunuz, teknikleri biliyorsunuz, kütüphaneleri, dili , zihninizi görüyorsunuz . Tüm modeller her seviyede var.
Bu bana çok basit programlarla oluyor çünkü programlamayı öğretiyorum. Onlar benim için basit ama öğrenciler için zor. Ve tahtada birçok kez yaptığım sorunların çözümlerinden bahsetmiyorum. Tabii ki bunları biliyorum. Gerçekten iyi bildiğim kavramları (öğretdiğim kavramları) kullanarak bir şeyi çözen ~ 300 hatlı programlar. Bu programları planlama yapmadan yazıyorum ve sadece çalışıyorlar ve tüm detayları bildiğimi hissediyorum, hiç TDD'ye ihtiyacım yok. Birkaç veya üç derleme hatası alıyorum (çoğunlukla yazım hataları ve benzeri şeyler) ve hepsi bu. Bunu küçük programlar için yapabilirim ve ayrıca bazı insanların daha karmaşık programlar için yapabileceğine inanıyorum. Bence Linus Torvalds veya Daniel J. Bernstein gibi insanlar zihnin bu kadar netliğine sahipler, hatasız bir kodlayıcıya en yakınlar. Eğer senderinlemesine şeyler anlamak , yapabileceğini düşünüyorum. Bunu sadece basit programlar için yapabilirim, dediğim gibi.
Benim inancım, daima seviyenizin çok üstünde olan programlar yapmaya çalışırsanız (yıllarca bunu yaptım), kafanız karışır ve hatalar yaparsınız. Sonunda problemi anladığınızda, çözümünüzün işe yaramayacağını aniden anladığınız gibi büyük hatalar ve probleminizi çözmekten alıkoyacak veya kodu berbat hale getirebilecek kadar karmaşık değişiklikler yapmak zorundasınız. TDD'nin bu durumlar için olduğuna inanıyorum. Başa çıkmakta olduğunuz sorunu aşmadığınızı biliyorsunuz ve bu nedenle güçlü bir temeliniz olduğundan emin olmak için her yere testler yaptınız. TDD, 10.000 fit'lik görüşü çözmüyor. Daima mükemmel temiz kodlarla çevrelerde yürüyebilirsiniz.
Bununla birlikte, yeni bir şey yapmaya çalışırsanız, ancak bu seviyenizin hemen üstünde ise , programınızı mükemmel veya neredeyse mükemmel hale getirebilirsiniz. Bence "bilgi sınırında" hangi programların olduğunu bilmek gerçekten zor, ama teoride öğrenmenin en iyi yolu bu. Aslında programları çok sıfırdan yeniden yazıyorum. Bazı insanlar bunu yapar, ancak çok fazla zamana ve sabra ihtiyacınız vardır, çünkü önemsiz olmayan bir programı üçüncü kez tekrarlarsanız, ilk kez olduğu gibi heyecanlanmazsınız.
Bu yüzden benim tavsiyem: sadece bu şey için hatasız bir program yazana kadar bir şey anladığınızı sanmayın. Ve daha sonra bildiğiniz bu iki kavramı derinlemesine aynı programda birleştirmeye çalışın. Neredeyse ilk seferinde doğru yapacağına eminim. En iyi yollardan biri, önemsiz olmayan yazılımı ilk kez çok fazla çaba harcayan bir şeyi yeniden yazmaktır (şu anda bunu Android uygulamaları ile yapıyorum). Her başladığımda bir şeyi değiştiriyorum ya da bir şeyler ekliyorum, sadece biraz eğlence eklemek için, ve daha iyi, daha iyi ve daha iyi olduğumu söyleyebilirim ... belki de hatasız değil ama gerçekten gurur duyuyorum.