8 comments

[ 3.0 ms ] story [ 34.0 ms ] thread
Programming will always be hard, but only because we're moving faster and faster. Your powerful, time-saving layer of abstraction becomes a library, tool, or platform, and you feel good for a while, but eventually productivity is measured against the new, higher baseline.
Programming is just as hard in general as theorem proving. To understand why thats hard, read up on undecidability, to learn why they're the same intellectual act, read up on the curry howard isomorphism and the like http://en.wikipedia.org/wiki/Curry-Howard_correspondence
This is interesting. I haven't read the Curry-Howard stuff myself, but I found this article interesting. Aaron Sloman argues that Turing machines (or related formalisms like lambda calculus) are actually irrelevant to how computers have developed and how they are programmed. This, or some version of it, appeared in a book on the current state of (good old fashioned) AI, and he turns attention to AI specifically, but makes the case looking at computer technology's development and use more generally.

http://www.cs.bham.ac.uk/research/cogaff/sloman.turing.irrel...

I think programming may be a bit harder because (at the end of the day) it becomes an engineering problem (one of efficient resource utilization). A program certainly has to be correct, but it also must run effectively on reasonably sized machines (less an issue these days for most problems), and implemented in a reasonable amount of time. The latter one is the killer that seems to never be accounted for in CS courses.
this is certainly true when you're considering the finest of algorithmic fu, (yay, that rhymes!) on the other hand, it worth mentioning that when you break out a computerize theorem prover to verify properties of say, a 15 line assembly bootloader, that winds up taking ~ 15k lines of code in the COQ theorem prover http://coq.inria.fr/ (granted a lot of it was in libraries that were reusable)

as far as I can tell, proof engineering is the most technically challenging form of software engineering

1. State. 2. Functional languages.
Because the tasks that we ask the computer to do increase as our ability to handle more complex problems increases. I can ROCK almost any programming assignment and task of 20+ years ago given today's languages and hardware. But the problems are now bigger and more complex.

"Difficult" and "Easy" are moving targets.

Programming would be easier if the language were uniquely suited to solving the problem (e.g. more built in solutions). In general, it is harder than it seems it should be because to create a language that is actually useful to a wide variety of applications, it needs to operate at a sufficiently low level so that you have the greatest equilibrium between ease of writing and function.

Can it be made easier? As a pmb said, not if the problems we are trying to solve are becoming more and more complex. But that's ok since only a limited number of people are actually interested enough (and dare I say capable) of programming. That might be a good thing though since the result is higher quality code/solutions.