I like the variation on that quote:<p>"There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors."
Security.<p>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.<p>Screw up one piece and you may end up with a major vulnerability.<p>Many software project owners avoid it due to complexity. To some extent, even academia sometimes eschews it.
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.<p>“Everything should be made as simple as possible, but no simpler.”<p>-Albert Einstein
1) Keeping up with an ever growing and changing tech environment.<p>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.
The hardest things so far will probably be one of the unsolved problems in computer science that you can see here:<p><a href="https://en.wikipedia.org/wiki/List_of_unsolved_problems_in_computer_science" rel="nofollow">https://en.wikipedia.org/wiki/List_of_unsolved_problems_in_c...</a>
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.
Printers.<p>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:<p>- Concurrency<p>- Building distributed systems (databases, messaging systems, distributed file systems, etc)<p>- Low level programming
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.<p>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 ;)<p>- <a href="https://thomasvilhena.com/2019/10/why-is-it-hard-to-name-classes" rel="nofollow">https://thomasvilhena.com/2019/10/why-is-it-hard-to-name-cla...</a>