Why Software Really Fails, And What to Do About It. Submitted for publication, January 2010. Compares software engineering to traditional engineering (mechanical, structural, architectural). Looks at why software projects fail more often than traditional engineering projects, and proposes some solutions to this well-known problem. Click here to read draft.
Podcast about Software Engineering and Computer Science. SE-Radio.net, November 2009. An interview on this podcast that focuses on software engineering about my recent article on this topic. Click here to listen.
The Missing Theory of Refactoring. Dr. Dobbs Journal, October 2009. Refactoring is a powerful method for improving the design of software, but there have always been some open questions about this helpful method: When should software be refactored? Which refactoring transformation is appropriate in a given situation? Why does refactoring improve design? This article answers these questions, by supplying an overall theoretical framework for refactoring. As a good theory should, the framework suggests new refactorings for areas of software design not yet addressed. Click here to read.
Is Software Patentable? IpWatchdog.com, June 2009. I weigh in on the debate about whether software is inherently patentable, and argue that OF COURSE it is. Click here to read.
Software Engineering ≠ Computer Science. Dr. Dobb's Journal, June 2009. Software engineering is different, in a frustrating way, from other disciplines of computer science, such as computability and complexity. It is harder to define concepts in software engineering and harder to prove results. This essay proposes an explanation for these problems, and shows what kinds of progress can be made. Click here to read.
A Software Schedule Ain't Nothin' But a Piece of Paper. Developer.com, March 2008. A somewhat humorous look at software schedules, real and imaginary, with practical tips to avoid software project crises. Click here to read.
All Source Code Should Be Open. Developer.com on 8/26/02. A provocative essay which argues software quality would be improved worldwide if every software product included a copy of its source code. The article generated a lot of discussion on LinuxToday. I then wrote a follow-up piece (11/26/02) based on the discussion and reader feedback. The follow-up was linked by Slashdot and generated even more lively discussion. Here is the original article, and the follow-up piece.
A Quagmire in the Tar Pit. Developer.com on 5/13/02. This article looks at the dilemma faced by software managers given the current proliferation of software development methods, including CMM, ISO-9000, Extreme Programming, and Rapid Development. Each requires a large investment of time and effort to learn and implement, so which one should an organization commit to? Is one best for all uses? Are any worthwhile? Click here to read.
It's Not About Lines of Code. Developer.com on 3/11/02 and Slashdot on 3/18/02. What makes a programmer highly productive? Is it lines of code per day? Lines of good code? In this article, I examine the concept of software productivity. I look at some of the standard definitions for productivity and show why they are wrong. I then propose a new definition that captures what programming really is about. Click here to read.
Are There Limits to Software Estimation? Developer.com on1/7/02 and Slashdot on 1/11/02. This article responds to a paper by J.P. Lewis and explores questions about our underlying ability to estimate the development effort for software projects. The article explains results from complexity theory and information theory and shows how these apply (and don't apply) to software estimation. Click here to read.
Most Software Stinks! Slashdot on 9/4/01 and Developer.com on 9/7/01. Discusses the current state of software design and concludes that much of it is poor. Proposes a set of guidelines for creating higher quality software by following the lead of beautiful physical buildings. Click here to read. (This article generated over 700 comments on the Slashdot discussion board. Here is a reply to some of the comments that I wrote for Developer.com)
Why Software Engineering is Not B.S. Dr Dobb's Journal, April 18, 2001. Examines the status of software engineering within the field of computer science. Argues that software engineering's low standing is not justified and explains why it should be taken more seriously. Click here to read.
Open Source Projects Manage Themselves? Dream On. Lotus Developer Network, Sept 12, 2000. Challenges one of the central tenets of Eric Raymond's essay The Cathedral and the Bazaar, that open source projects are self-managing. This article was linked by Slashdot, LinuxToday, NewsForge and many other sites. Click here to read. (Eric Raymond replied to the article above here. I replied to Eric here
What the Linux Community Needs to Grok. LinuxToday and Slashdot, February 14 and 15, 2000. Describes the angry reaction of some Linux fans to previous articles I wrote and the lessons I learned from this. Outlines four fundamental ideas that the Linux community should "grok" (understand deeply) if Linux is to be adopted widely. Click here to read. (The article above generated over 500 comments on the Slashdot discussion board. I replied to those comments here. The reply generated another 200 comments.)
A Software Trend Worth Its Buzz. Boston Globe, February 15, 2000. Provides an overview of the Capability Maturity Model (CMM) for software project management and considers whether its use should be expanded. Click here to read.
Healing Sick Software Projects. Boston Business Journal, November 12, 1999. Describes how to rescue a software project that is in trouble. Discusses the common reasons software projects go awry and what to do about each one. Click here to read.
Creating Poetry In Software. Boston Globe, July 6, 1999. Draws a parallel between the design of buildings and the design of software. Shows that creating software which is "beautiful" leads to software that is better by objective measures as well. Click here to read.
Improve Your Company's Ability to Estimate Software-Development Cycles. Datamation, April 1999. Argues that software engineers should have greater input to project schedules, and presents specific methods for doing so. Click here to read.
Developing Software On Time. Boston Globe, March 2, 1999. Compares software development to construction of a new house, and shows that software can be finished on schedule, just as most buildings are. Click here to read.
Analysis of a Software Version of DES. Cryptologia, July 1990. Provides a technical analysis of a software version of the Data Encryption Standard. The version studied here was proposed by Robert Scott as an algorithm that easily could be implemented in software. (The original DES was designed for hardware implementation.) Click here to read.
Approximation Algorithms for NP-Hard Problems. May 1984 (Master's thesis). Begins with a review of complexity theory in computer science, particularly the classes of problems known as NP-Complete and NP-Hard. The thesis then discusses algorithms that provide a rapid approximate solution to problems whose exact solution might require too much time. There are several classes of these approximation algorithms, which are defined and examined. Finally, the thesis focuses on one particularly interesting NP-Hard problem and an approximation algorithm for it. Click here to read.
Accurate Estimation of the Number of Tuples Satisfying a Condition. (with G. Piatetsky) ACM SIGMOD conference 1984. We present a new method for estimating the number of tuples satisfying a condition of the type attribute rel constant, where rel is one of "=", ">", "<", "≥", "≤". Our method gives highly accurate, yet easy to compute, estimates. We store information about attribute values as a list of distribution steps (histograms where buckets, instead of having equal width, have equal height). These distribution steps provide an upper bound on the error when estimating the number of tuples satisfying a condition. The estimation error can be arbitrarily reduced by increasing the number of steps. Finally, we show how to use sampling to compute a close approximation of the distribution steps very quickly. The major applications of our method are in query optimization and in answering statistical queries. Click here to read.