3. การคิดอย่างมีตรรกะ: สิ่งนี้อาจดูเหมือนชัดเจน แต่ก็ไม่เป็นเช่นนั้น โปรแกรมเมอร์ทั่วไปมักจะแก้ปัญหายากๆ ด้วยการเดา หากคุณโชคดี คุณอาจเดาถูก แต่ถ้าคุณไม่โชคดี มันก็จะยาก ปัญหาคือการคาดเดาไม่สามารถจำกัดขอบเขตของสาเหตุที่เป็นไปได้ได้อย่างมีประสิทธิภาพ โปรแกรมเมอร์ที่ดีจะคาดเดาและทดสอบเพื่อแยกแยะความเป็นไปได้ต่างๆ เช่น บล็อกโค้ดเพื่อดูว่าปัญหายังคงเกิดขึ้นหรือไม่