Hacker News new | ask | show | jobs
What is the hardest thing in Computer Science?
33 points by sidntrivedi 2247 days ago
"There are only two hard things in Computer Science: cache invalidation and naming things." — Phil Karlton
20 comments

I like the variation on that quote:

"There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors."

Haha...BTW, if I may ask, what do you find the hardest in Computer Science?
Semi serious answer: people!
Not semi serious. Absolutely serious. As soon as you start writing a program that takes more than one person to complete, or where you're writing not for you to be the one and only user, people problems come in. And I'm just talking about communicating intent and design among people. The bigger the project, the more that's a problem.

Then there's the unrelated problem of dealing with other peoples' personalities. The bigger the project, the more different people, and the more this aspect is a problem as well.

I remember once on a complex project a senior manager going "That may be what I asked for, but its not what I want" and in a startup I joined where the CEO was adamant that any feature he could think of could be implemented in less than 48 hours - and this was a video technology/devices startup not a web app!

I've made horrific technical mistakes at various points in my career - but at least it is possible to learn straightforward lessons from those. Learning about people - now that's a challenge!

I find it quite interesting that a natural inclination of some people is to believe that if it was simple for someone to think, in some way, of the feature they want, that it should also be simple to implement. Have seen this a lot.
Lmao Right to the point :D
Incidentally, do you mean Computer Science in the theoretical sense or the actual practical practise of developing stuff?
Umm..the whole actual development workflow i guess.
Security.

It needs to be built into every phase of computing, starting with the CPU micro-code, going through network protocols, up to the topmost JS framework layer.

Screw up one piece and you may end up with a major vulnerability.

Many software project owners avoid it due to complexity. To some extent, even academia sometimes eschews it.

There's one more layer above that: the user. That is to say it's a social problem as much as a technical one.
Umm..what about Compilers and their implementation? Isn't it hard?

PS: I find them the hardest.

compilers do a known thing. security means protecting against unknown things.
I get your point. Seconded.
Making your code so simple (and well documented!) that it can be understood by programmers with much less experience than you, while not compromising speed or functionality.

“Everything should be made as simple as possible, but no simpler.”

-Albert Einstein

This is the one I strive for. Making a challenging thing self-evident and appear like it wasn't that much work, even when it was an explosion of code later distilled.
1) Keeping up with an ever growing and changing tech environment.

2) Dreading visiting my parents, because you always hear:'Oh good, come here and look at this problem I have'. My wife even volunteers me to fix other peoples stuff, which is real annoying.

Am I the only one who don't mind fixing stuff like that. I sometimes do get satisfaction of making things work no matter how trivial.
I have this weird polarity in the work I enjoy.

I'm like you in that I enjoy just making things work, even when they're trivial. I particularly like doing it for other individuals.

On the other hand, I also enjoy harder research problems. Obsessing and learning new things quickly is probably the biggest joy I get out of work.

What I hate is the middle ground. I hate solving trivial problems, but in a high-pressure environment, for people I'm only circumstantially committed to.

The hardest things so far will probably be one of the unsolved problems in computer science that you can see here:

https://en.wikipedia.org/wiki/List_of_unsolved_problems_in_c...

People--including end-users and non-technical managers.
Predicting what users will do with your software.
If I'm being cheeky, its other people.
Determining the next Busy Beaver number. Every time you determine one, a harder problem takes its place. And eventually the problem becomes unsolvable, as only finitely many values can be determined.
Telling the difference between Computer Science and Software Engineering.
Haha XD
Printers.

More seriously, robustness/security. Everything we “engineer” is incredibly fragile. Nothing is built and able to be “done” if it needs continuous security maintenance for its entire life.

I don't know about hard to understand but if we are talking about getting things right:

- Concurrency

- Building distributed systems (databases, messaging systems, distributed file systems, etc)

- Low level programming

Not exactly computer science but the hardest thing I've found is preparing for algorithmic coding interviews.
The hardest thing is to accept that you don't really need CS as a software developer. Even programming tasks - digging into legacy code, implementing features etc. - requires no CS knowledge, and programming is just one thing sw devs do.

Other words: there's no CS topic which helps you during an estimation meeting.

I have a simple theory on why it is hard to name classes ;)

- https://thomasvilhena.com/2019/10/why-is-it-hard-to-name-cla...

Determining when something is done, because you always feel like you can improve on it.
Learning about topics that are professionally useful, but in which I have absolutely no interest.

In my case, web development.

Creating a `complete` (in a mathematical sense) computing system.
There's some cool work in this area though! :D
Any context about this? Any links about a complete computing system?
Complexity
I'd like to hear some reasoning behind that. Maybe more adjectives?

IMHO Complexity, in general, is good. Nature conserves it when its adaptive.

I don't mean to sound flippant but there actually seems to be lots of different hard problems in computer science, or computing (to be honest I'm not sure which we're talking about here) but all of the ones that I know of are hard due to complexity. Our science is good at reductionism, finding fundamentals, but when it comes to complex systems it simply informs our inadequate simulations. So I think the hardest problems in computer science will exist where we try and apply it in the real world to complex machines. In computing there are many hard things to make, databases, operating systems, programming languages, the list goes on - and they are hard because they are big and complicated and so making them is hard because to some extent it doesn't matter how much resource or intelligence you have because the problems that arise in complex systems start to get chaotic and intractable.
trust