Starting with a post on Reddit pointing to the Dijkstra archive, then moving to a reply at kirit.com that says: "Edsger Dijkstra didn't like software engineers."
It's apparent that Dijkstra didn't like gurus, but I'm not so sure he didn't like software engineers. The post at kirit.com is right to point out that the "pseudo science" claim come from the reddit headline, not from Dijkstra. I think Dijkstra was quite a good software engineer and added a lot to the study of software engineering. It would be interesting to know if he was actually at the 1968 NATO conference where we got the term "software crisis". It's entirely possible. But, this whole way of thinking is based on a bad assumption. The assumption is that there is inherent tension between computer science and software engineering, that you can't be both a software engineer and a computer scientist. That's news to me. Software engineering is a huge area in computer science. I got my PhD in it.
Software engineering as an academic area has also been getting a lot more rigorous over the last decade. It seems to be heading the way of the divide in physics between theorists and experimentalists. Until recently (like 6-8 years ago) a good theory was enough to get a SE paper published. Now it usually takes experimental evidence. Here's a great run-down by Joe Ruthruff, a guy I went to school with.
I think I am both a computer scientist and a software engineer, and I know many people who are both. I think this view that software engineering is unscientific is based on the behavior in practice. Software engineering is young, even younger than computers. And, at the moment, there's not much pressure to practice it as a science. As the science matures I expect it to get increasingly harder to act unscientific. It will simply come to be considered unprofessional. You can be pretty bad before you're considered unprofessional now. Software engineering doesn't move as fast as some fields in computer science because it so closely linked to people. Making software engineering better in practice involves getting people to change, which is hard.
Think about the parallels with medical research. What does it take to "prove" that one drug is better than another? Then think about what it would take to convincingly demonstrate that one software engineering practice is better than another.
16 December 2007
Dijkstra and "Pseudo scientific Software Engineering."
Subscribe to:
Post Comments (Atom)


2 comments:
Dijkstra was there.
It's evident from the proceedings that there were two parties at the NATO conferences. One wanted to develop this new (newly named) discipline of Software Engineering based on what was known already to be successful practice:
* test (very) early, test often
* used planned re-work to converge on a good solution
* leverage the new interactive capabilities of computers to build systems by learning about them
* etc. (sounds strangely familiar, yes?)
An another, that wanted software development to be like "real" engineering, to be about correctly deriving correct programs from correct specifications. As if that were what engineers at large do.
This hallucinatory proposition has done the industry great dis-service. Dijkstra was of the second party.
By the time of the second conference the correctness party had somehow managed to frame the debate in their own terms, and we are still getting out from underneath their shadow still.
Great comment, Keith. Thanks for the links to the proceedings. I wasn't aware they were online. Don't know how I missed that.
I agree with you on this distinction between the two camps. Since so many of the essential questions in software engineering are undecidable, the correctness approach is a tough way to go. I think it's part of the human tendency to view an understandable solution to one problem as the certain solution to all problems. Practicality and heuristics can get you where proofs can't go.
Post a Comment