I heard that Computer Science is one of the hardest fields of study. Is that true?
Yes. Computer Science is a hard discipline to learn. But, if you are motivated and devote sufficient time to studying the discipline, then it is possible to learn Computer Science.
There is a belief that studying Computer Science is very difficult. The belief that Computer Science is one of the hardest fields to learn. The answer to this question is “Yes.” Computer Science is a difficult field to study and learn for a number of reasons.
There is an entire body of contemporary research dedicated to determining why this is the case, and two general conclusions have been reached:
- Students who are weak in mathematics tend to be weak in programming and therefore weak in Computer Science.
- Students tend to be unprepared for the constructive nature of the Computer Science discipline.
Why is it hard to learn to program?
Computer Science is a hard discipline to learn because learning to program is hard. But, if you are motivated and devote sufficient time to studying the discipline, then it is possible to learn how to program.
Initially Computer Science seems hard because learning to program is challenging. Programming is the first task that Computer Science students must master, and programming requires an extremely logical and methodical approach to solving problems. Students who are weak in mathematics often have to work harder to attain the logical thinking skills necessary to learn to program.
Programming is introduced "cold" to students in a first computer science course and continued in the next several courses. Compared to Mathematics, students learn math starting in kindergarten and continuing all the way through college. It is introduced in small steps, all the way through school. Programming is a similar intellectual skill that takes time to master, usually in about 4-5 courses.
Some students appear to find programming easy and unnecessarily intimidate others into believing they are not suited to computer science. However, most of people learn skills step-by-step over time. Can anyone who has no background in music learn to play a musical instrument really well in one semester? Can someone starting from scratch learn to speak a foreign language fluently with a single course? Unless you are a musical genius, or a young child living in a bi-lingual family, the answer for the vast majority of people is no.
You can almost think of learning to program as equivalent to learning to speak & write in Chinese and Russian at the same time from scratch. Put another way, you can almost think of learning to program as equivalent to taking biochemistry, gross anatomy, physiology, pharmacology, and pathology courses in a MD program at a medical school (these are 6+ credit hour courses that expect you to memorize incredible amounts of information). The difference is that CS courses require you to do the programming to learn the skills, as opposed to memorizing large quantities of information or spending many hours rotely repeating language phrases and idioms.
What does it mean that the discipline of Computer Science is constructive in nature?
Computer Science is a hard discipline to learn because of the constructive nature of the discipline. But, if you are motivated and devote sufficient time to studying the discipline, then it is possible to learn and master every concept when it is encountered.
The discipline of Computer Science is very constructive in nature. In terms of coursework, this means that literally every topic discussed in any one class requires complete mastery of all previous work in that class, and all previous work in other prerequisite classes. Each concept learned is an essential foundation to the next concept(s) that are learned. In other words, once you fall behind in Computer Science, your workload to catch up will double on an almost daily basis, and many students do not realize this. Students must invest a large amount of time in order to master every concept at the time they need to master it. Each concept learned is an essential foundation to the next concept(s) that are learned. Yet, many students tend to be unprepared to invest the time required to learn the discipline.
How much time is required to successfully learn Computer Science?
Even though Computer Science is a hard discipline to learn, if you are motivated and devote sufficient time to studying the discipline, then it is possible to learn Computer Science.
The rule for most college courses is that for each credit hour of a course, students should spend about two hours outside of class studying. This time is spent studying and doing homework. In addition, students can expect to put in an average of 2 – 10 hours per week studying for exams, writing papers, and doing projects.
The rule for each CS programming course on the other hand is that you must put in the same time as for all your other courses, but then you must also put in an additional 15-20 hours each week (sometimes more) doing programming projects, labs, and understanding program examples. It takes time to design programs, write the code, remove syntax errors, and debug the program (removing the logic errors). Each of these tasks is a very time consuming activity for students learning to program. That’s 19 – 32 hours per week, every week for the entire semester (and even more hours in some weeks) for each CS programming course.
Once students master programming and move beyond the initial 4-5 programming courses, the time requirements of each course goes down a little bit. However, you still need to invest significant amounts of time to master more advanced concepts as you are learning them. In addition, although the advanced courses focus on advanced concepts, you are still expected to write significant programs to demonstrate mastery of these concepts, and writing programs takes a lot of time.
So, while it does require dedication, motivation, and lots and lots of time, once you get to the point where you invest the time required, learning the discipline of Computer Science is not much harder than many other science or engineering disciplines. It’s just that the time demands remain high throughout the entire Computer Science degree program due to the constructive nature of the program and the fact that writing programs takes time.
But if I have to put in so much time to study Computer Science, then I won't have time to do other things, will I?
Computer Science requires students to invest a lot of time to learn. But, if you learn good time management skills, you can put in the necessary time to learn the discipline and still have time for other activities.
Many students are not motivated or prepared to invest this amount of time. They are looking for an “easy” discipline that “allows them time for significant extra-curricular or social activities.” They don’t believe that they can have a fulfilling social life in college while putting in this amount of time to study. Fortunately, students who are motivated to invest the necessary time often find that they can also fit in active extra-curricular or social calendars and still be satisfied. The only difference is that CS students must utilize really good time management skills, and must plan for these extra-curricular and social activities.
Are there any other reasons that Computer Science is considered hard?
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.
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.
So what does this all really mean?
In summery, even though Computer Science is a hard discipline to learn, if you are motivated and devote sufficient time to studying the discipline, then it is possible to learn Computer Science.
What this all boils down to is that students must invest a lot of time to learn the discipline of Computer Science. This means that CS students need serious time management skills. Students need to effectively manage time:
- for attending CS classes (a rule of thumb is “Do not skip a CS class (ever) if you can help it,” as every 1 or 2 classes missed tends to impact your letter grade for the course - Yes, it is that important to attend CS classes),
- for studying and doing homework in your CS courses,
- split among other classes for doing other course’s studying and homework,
- allocated to programming (plan on 10-20 hours per week on average, sometimes more),
- allocated to extra-curricular activities and family events,
- allocated to sporting activities (if you are an athlete), including practices and competitions.
Fortunately, most students can learn time management skills that allow them to put in the time required, and yet still have the desired level of extra-curricular and social activities. This is not something that is typically taught in most disciplines (Computer Science included), but there are many excellent resources available on the web which can help students to master time management in a short time frame.
Learning the discipline of Computer Science is a hard and difficult endeavor for most students. However, if you are willing to invest the time and learn serious time management skills, most students can successfully learn the discipline and pursue successful careers in Computer Science fields. You just have to have the correct mindset going in at the beginning.