From Peter Seibel’s interview with Guy Steele in Coders at Work:
Seibel: It is easier to write software now because of advances we’ve made?
Steele: Well, it’s much easier now to write the kinds of programs we were trying to write 30 years ago. But I think our ambitions have grown tremendously. So I think programming is probably a more difficult activity than it was 30 years ago. … it’s not possible to understand everything that’s going on anymore.
That’s a very good question! I’ve only been writing software for nearly a decade, but I think it’s gotten harder. It’s also possible that I’ve grown enough to be dealing with harder problems. So there’s a moving goal post effect at play that effects everybody and makes the avenue to answer this question ambiguous.
This question also reminds me of the classic Paul Halmos paper “Has Progress in Mathematics Slowed Down?” where he concludes, no, progress has not slowed down, and in fact, has accelerated and the entire field has gotten enormously more difficult. I don’t agree with him though, since he leans on the fact that Mathematics has progressed so much in the past century that we no longer can have a universal Renaissance Man of math. There being far, far too much material to know, and the number of ultra-specialized fields has exploded, and even cross-disciplinary fields now are themselves ultra-specialized. I’ve read that the last “Renaissance Men” of math were Poincare, Von Neuman and Kolmogorov—geniuses at the summit making significant contributions to multiple fields of math, stats, physics who could be said to truly understand the big picture and also know about each of the pieces. Following Halmos, when the universalists of multiple fields disappear, it’s good evidence that overall progress and difficulty has gone way up. I don’t think CS even has a list of universalists, since it changes so quickly, even the best of the best from decades ago would know nothing about many of the things being studied and commercialized now. If change doesn’t settle down, CS may never even have a universalist. I guess that makes CS one of the most difficult fields?
@korch: You and I may hold a minority opinion. Whenever I say that software development has gotten harder, most developers think I’m nuts. They focus on how individual tasks have gotten easier rather than on how expectations have risen.
Regarding CS departments, some of the first computer science professors speculated on whether CS would even be an academic department decades down the road. Some argued that CS would not be a distinct discipline but would be absorbed into domains of application. There’s no danger of CS departments going away, but they’re no longer the home of all things computational either.
I think it’s a mixed bag, and it depends upon what you’re programming for. Programming an application in Java is certainly “easier” than doing something similar in FORTRAN IV, in the ’70s… and far easier than doing it in assembly language (which I spent a lot of time doing, back on IBM 360 & 370 systems). And we have IDEs to help us along, with quick lookups of syntax and variable declarations, cross-referencing, and such.
On the other hand, understanding how J2EE works, and putting together a robust web service can be daunting, and is much more involved than what we did when we punched a FORTRAN program on a deck of cards.
I think it’s not a straightforward question with a simple answer.
When David Hilbert gave his famous “Mathematical Problems” talk at the 2nd International Congress of Mathematics in Paris in 1900, he was able to lay out the entire field and a century’s worth of research in 23 problems.
I don’t think that’s possible for any field anymore. It’s a measure of how far we’ve come, and the staggering rate at which we add to our knowledge every day.
… it’s not possible to understand everything that’s going on anymore.
This is hardly an argument for programming being harder today than it was 30 years ago. On the contrary, this is an argument that programming is easier, as the level of abstraction has increased. Today, I can write complex software and do not have to know how a CPU works.
There are two questions being mixed up here, I think.
Has programming become harder? I disagree. The first Fortran compiler took some 15 years to implement. Today I can write a compiler with the same functionality in probably half a year.
Are programs created to solve harder problems than before? Yes.
@Frederik, I agree that you don’t (usually) need to know how a CPU works anymore. The level of abstraction has indeed increased. But when something goes wrong, when the abstractions leak, you may have to dig through several layers until you can troubleshoot your problem. Maybe you can work on a team where most people work at a high level, but there’s a senior person everyone turns to when things break.
Some of the abstractions we depend on are very good and we hardly ever need to look inside the black box. But others are not as reliable or as well-documented. You have to experimentally determine how framework features really work. It’s as if you are zooming down the highway working at a high level, then suddenly you run into a brick wall and have to tunnel under it before you can get back on the highway.
It depends on what type of programming. For instance a graphing program is easier to write if it is simply a graphing program, but now it would be expected to be a drawing program as well, with everything dynamically updated. There are a lot of things that nobody thought about like 3-d points, and data sourced from the web or databases, dynamic graphs output to movies and you have a lot of technologies to learn.