Programming does indeed have aspects in which you get lots of immediate feed back so that you can be successful with minimal rationality. But in many cases, getting that feed back is itself a skill that requires abstract reasoning (What corner cases should I be testing?). Other aspects of programming in which feedback can be slow or expensive include: How maintainable is this code? Will other programmers understand how to use my library? How will this program perform on large problems? How could an unauthorized user abuse this program?
Programming does indeed have aspects in which you get lots of immediate feed back so that you can be successful with minimal rationality. But in many cases, getting that feed back is itself a skill that requires abstract reasoning (What corner cases should I be testing?). Other aspects of programming in which feedback can be slow or expensive include: How maintainable is this code? Will other programmers understand how to use my library? How will this program perform on large problems? How could an unauthorized user abuse this program?