views:

1181

answers:

23

I know this is an open-ended question, but I am very curious about how the collective minds of brilliant programmers here think about this one?

What do you think is the most difficult/challenging/demanding programming branch or discipline?

For example, AI, Graphics, Networking, cryptography, etc.

+4  A: 

Embedded. Often very poor debugging tools, and very limited resources so every byte still matters.

Joel Coehoorn
+8  A: 

Real-time embedded-device programming.

mfx
+10  A: 

Security - needed everywhere, but you can never be done.

Oded
+15  A: 

Threading - doing it properly, avoiding race conditions and deadlocks in a reliable way.

Flint
A: 

Testing. So much to cover.

harriyott
+3  A: 

Game Programming, especially at EA, ;)

Jon Homan
+3  A: 

As stand-alone, crypto is harder to do "right".

As "something that must be in every code base", security in general: usually not taken into account until the last minute (if ever!)

JJarava
+2  A: 

My guess would be 3D graphics and video game physics.

Brian G
+11  A: 

Documentation.

euphoric
+1  A: 

From my experience at University this year, I would have to say Artificial Intelligence. Simply because you have to make so many judgement calls and because it's so hard to test and debug.

fluffels
+6  A: 

I think the question is based on a false premise - that is that any one programming discipline can be the hardest. Hard problems can be found anywhere as long as you look hard enough.

Many seasoned developers seem to have problems with lock-free concurrency though.

Hank
+1  A: 

Audio and video search by recognising the content in them

Varun Mahajan
+9  A: 

I would have to agree with the person who said "real time embedded devices". Too many factors to take into consideration. You absolutely cannot compromise on CPU cycles, and memory is really hard to come by as well. And not to mention the difficulties in debugging thanks to lack of tools and the fact that you just cannot put "printfs" to see what you are getting. Also you are not just dealing with logic, you are dealing with hardware. If something does not work, there might be a 100 different possible points of failure. I wrote a device driver in linux for a graphics card once, and THAT was horrible, i can only imagine what this would be like.

Mostlyharmless
+1  A: 

It will sound different than answers above, but i believe the most challenge discipline is Communication.

A: 

"Reuse and Adaptation" can be challenging

  • Taking legacy code/design on one platform, understanding it and then 'relying' n it for a newer product on an entirely different o/s platform while meeting new performance metrics.
Jay
+4  A: 

Whichever one you least like doing. For example, some folks here hate writing docs. I enjoy it. You might as well ask what's the best ice cream flavor.

For those who deal with accounting - that would be Oxballs Sorbet, the weird new flavor from Baskin Robbins
DarenW
A: 

Writing everything with O(log n) or better complexity.

Sev
+2  A: 

User interface design.

Everybody sucks so badly at it that when someone does something only somewhat good, they rack in billions: look at Apple and Google.

Everything else, you can solve by putting good programmers and good management at it.

ddaa
+3  A: 

Real-time multithreaded physics

DesertShadow
A: 

Documenting your work well nough for future reference/reuse/extending by another.

+1  A: 

Easily Quantum Computing. At my university, it is standard for half the class to fail this course and very few truly understand the concepts. Quantum physics itself can be quite counter-intuitive, simply because human minds were not evolved to think in quantum.

echoblaze
+2  A: 

I think it was The Mythical Man Month that stated System Programming is 10x harder than Compiler Programming which is 10x harder than application programming. I believe 'harder' is in reference to time taken as a metric, though I would say it also requires greater skill and background knowledge. Steve Yegge has made the case that compiler programming separates the men from the boys. Which I guess is why I'm writing one myself!

kronoz
+2  A: 

I would have to say cryptography, simply because it requires large cross-disciplinary knowledge in computer science and in pure mathematics.

Physics game engine design can also be quite challenging, since the equations governing the in-game physics are relatively simple & straightforward kinematics, but their implementation & optimization requires more knowledge and creativity.

[Edit: If you really want to blow your brains out, take a look at quantum cryptography. Shor's classic paper is a good starting point, and is strikingly elegant for such an awkward combination of applied computer science and physics).

jperras