This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: help center.

closed as not constructive by Mark Trapp Nov 22 '11 at 19:22

As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
If this question can be reworded to fit the rules in the help center, please edit the question.

3

I think this largely depends on the person learning the subject, and the person teaching it
–
Mahmoud HossamFeb 8 '11 at 8:19

+1 Compilers was the most difficult and the most rewarding.
–
dietbuddhaJan 31 '11 at 5:40

3

It was up there with the most over all work, and good prep for grunt coding, but I don't think it was all that difficult. Maybe harder without the using YACC or whatever tools we used, I dunno.
–
Peter TurnerJan 31 '11 at 15:09

5

why was that the hardest? Because you had to write code?
–
user1249Jan 31 '11 at 23:05

4

Compilers are really only difficult because most of the theory dates to times of insanely severe hardware constraints and a lot of the formal instruction hasn't advanced too far beyond that. Take a look at Let's Build A Compiler to see how easy compiler-writing can be if you approach it from a different angle.
–
Mason WheelerFeb 1 '11 at 17:04

1

@Martin York, as a compiler writer I think that complexity of implementing compilers is overestimated severely. In general, a compiler is much simpler than an interpreter. I suspect it's a Dragon Book and its kind are to blame, they're proposing the most complicated ways of doing simple things and paying too much attention to the least important step, namely parsing.
–
SK-logicFeb 1 '11 at 20:13

I think that question depends on the teacher you had, and how that subject was organized in your career.

Analyzing algorithms can be as hard as someone wants. Take in count that there are unsolved problems, and not only that: problems that can't be solved.

The thing is that you can have a problem, and if you know it can't be solved, that's perfect. But what if you don't? You can spend a lot of time trying to demonstrate it's NP-Complete, or trying to find a polynomial time solution to solve it.

Demonstrating NP-Completness is not easy. Yes, lots of problems are known, but the thing is to find the reductions to demonstrate that it's NP-Complete. And what if you spend lots of hours/days/months trying to demonstrate it, and it can be solved in polynomial time? :)

There are also other subjects, like Compilers, Group theory and Primitive Recursive Functions that can be as hard as the subject plan or the teacher wants ;)

Operating Systems, especially the part that has anything to do with threading.

And the reason isn't because it was that hard to make 5 philosophers eat pizza with a fork. The reason is because writing multithreaded code is in and of itself difficult and not necessarily easy for the human (at least male - according to my wife) mind to compute.

Remember, when it comes to shared-memory multithreading, the computer is a sneaky swine that is out to get you. Doubly so when dealing with a multicore processor; one core can be distracting you in front of your eyes where you're watching, and the other can then go behind you and stab you in the back.
–
Donal FellowsFeb 8 '11 at 9:38

Kernel Design anyone ?
Well I don't really know how it's done and what is the targeted features for an OS, but for me thinking about designing a kernel must be a daunting task.

I also think about computer security; I don't really know what makes a system unsafe except of course, obvious buffer overflows, XSS and SQL injections.

I'm not sure, but there seems that some algorithms are also unsafe; look at the MetaSploit project, it lists all type and kinds of security breaches: you can see there are a lot of ways a program can be flawed.

There are many awkward topics in the field, but my picks for sheer persistent difficulty are those involving Global System Properties. Examples of this general topic include:

Safe and deadlock-free multi-threading

Security

These are hard because you're after something that only exists when everything is correct; you need a global system property and yet virtually all the tools available (and all the ones that scale to real problems in my experience) only really do local reasoning. It's the process of going from reasoning about the pieces of the program to the whole shebang that's hard, particularly because it's entirely possible to have pieces that are all correct in themselves but where there still are subtle bugs because the components are incorrectly arranged; the bugs can be undesirable emergent characteristics…

Management Information Services
During my college period i used to have one management subject each semester which totally made me mad.
Tough! well subjects like Compiler Design, OS Design etc are tough but they are really Interesting and challenging. I really messed in subjects like Management Information System / Services etc as they are full of boredom and you have to go through lots of theory.

Full of boredom because they're talking about the conceptual intricacies of each system, whilst half the people never wrote any system themselves (but they surely did use a variety of). Also, the seminals use so many loaded words yet fail to provide a real life example in plain English. Like decision support systems... couldn't you just drop a few screenshots of Google Analytics reports, FML, just to get the students on the same page before you run off having an intellectual orgasm in front of the audience.
–
Filip DupanovićJan 31 '11 at 14:14

really? I mean, each person is different, but I think there are lots (I mean, lots) of topics harder than just pointers. For example, Computer's Architecture, Assambler that in some way are related to pointers ;)
–
Oscar MederosJan 31 '11 at 6:03

Design and Analysis of Algorithms. It isn't so much that it's hard to understand and analyze known algorithms, it's that designing and analyzing new algorithms for hard problems is difficult, and requires a broad understanding of many areas and practice in applying many different techniques.

I like your answers (and I didn't forget upvoting them), like compiler, kernel, etc., but most of programmers never met these problems. There is a bit easier, but more common issue: concurrency - threads, locking. It's very easy to write a program which produces magical errors, if we make even a small bug in the concurrency architecture.

So, I say, it's not the hardest issue in computing, but because it's commonly used, it is a dangerous one.

It's probably because I cut my teeth on FORTRAN and APL, but the shift from strictly procedural languages to objects has been something I've struggled with for years. It doesn't help that so-called 'experts' write conflicting articles and tutorials on what it means to be object oriented and the best/proper ways of constructing object oriented programs.