The hardest thing about Computer Science?

<p>Hopefully some CS students/grads can provide input. We all know Computer Science is extremely difficult (or, that's what I hear). My question is, what are specific components of CS that make it difficult? More specifically, what are the most difficult components of the science.</p>

<p>Is it remembering the rules for programming? Is it thinking logically or analytically? Is it the math? Is it just developing an interest for it? Incompetent teachers? The long hours? Or something else?</p>

<p>I understand that different components are going to be difficult for different people. I'm interested in what makes it difficult for most people, or what made it difficult for you personally.</p>

<p>All input is welcomed! Any information is good for me. Thanks!</p>

<p>I always struggled with the areas related to Automata Theory. This topic can be covered in CS courses called (depending on the school):</p>

<ul>
<li>Theory of Computation</li>
<li>Theory/Organization of Programming Languages (parts of the course)</li>
<li>Compiler Theory (parts of course)</li>
<li>Computational Complexity (parts of the course)</li>
</ul>

<p>While I can see how this topic and the above courses can help make a well-rounded “computer scientist”, very rarely do they come into play on most software engineering jobs…except for “Theory/Organization of Programming Languages”, where most of the course molds you to be able to learn new programming languages quickly.</p>

<p>I was a Math major who kinda “double/dual majored” in CS, so the Math did not bother me. If fact, majoring in Math has its advantages for those who want to focus in software because you can “pick and choose” your CS courses…and basically just take the “hot” courses that employers are looking for.</p>

<p>Developing problem solving skills is hard.</p>

<p>I would say the logic involved to solve problem is the hardest part to develop at first as others have mentioned.</p>

<p>I find it difficult to remember how the different classes interact. Within each class, though, I can do pretty well.</p>

<p>I go to a specialized Math class in my high school. A good Math foundation has its advantages, as you’re used to the concept of problem solving. Sometimes you solve the problem along with your program too. </p>

<p>One problem which my Math teacher did mention is that sometimes the view of Math and CS differ.
For example, if your solution to a problem leads to finding the maximum value of a finite sequence, you’re done. Mathematically all finite sequences have max and min. And so mathematicians don’t quite care what happens afterwards. In fact if asked to propose an algorithm to find max and min, most of us would look at all the numbers and see if each one is larger than those preceding it. In other words, it’s a process that takes n steps to deal with a sequence of n numbers.</p>

<p>Whereas the CS guys would keep dividing the given sequence into two and find max and min of the smaller sequences. This process takes only log_2 (n) steps.</p>

<p>So when n becomes large, we can see that the CS guys obviously triumph. :D</p>