Another reason that the discipline of Computer Science seems hard is that when writing programs, you must pay extreme attention to minute details. As in extreme extreme, extreme, very fine grained, attention to lots and lots and lots and lots of small, little, itty bitty, details for extended periods of time. Programmers must tell the computer every single little, itty bitty, thing that must be done to solve the problem. And all these little itty bitty things must be done in the correct order, and often repetitively. Computers are exceedingly stupid. They literally do exactly what the program(s) instruct them to do. You can’t assume the computer will “know what you mean.” Putting a program together has a lot in common with putting a puzzle together. If even one small piece of the puzzle is out of place or oriented in the wrong direction, the puzzle is not correct. Keeping track of the minutia means that programmers must have very, very, good memory. Programmers must remember a lot of things, including the syntax of the language, the set of prewritten functions available to use, the variables and functions you have created and how you are using them, the techniques you have used in the past that can be applied to the current problem, the bugs that you have had in the past so you can avoid them, or at least recognize their symptoms. In short, programmers must keep track of a very large set of details all at the same time. It takes time to develop this kind of a memory. This is part of learning to program. Once you have learned this skill, it is not so hard to keep track of all the minutia related to programming. Yet another reason CS seems “hard” is that Computer Scientists must be able to think abstractly, and on several levels simultaneously. You must be able to compartmentalize pieces of a program in to “little black box” tasks which perform useful activities, but which hide some of the details so you don’t have to think about all of them all of the time. Also, Computer Science involves significant amounts of science, math, and engineering at many levels. Yet, at the same time, Computer Scientists must be very creative and intuitive, as creating efficient, clean, correctly executing code, which solves a given problem, is still largely an art form.
Computer Science requires extreme attention to detail, a really good memory, an ability to think abstractly, and the use of creativity and intuition. Students can learn to do all of these things with sufficient time and practice.