Ming the Mechanic:
Why software stinks

The NewsLog of Flemming Funch
 Why software stinks2004-03-23 06:08
by Flemming Funch

Brief article in Salon.com (requires looking at an annoying commercial to read it) about some software luminaries' ideas about what programming is about, and how it can be done better. Hardware seems to keep following Moore's Law: it gets twice as fast, or half as expensive, every 18 months or so. But software does at best improve linearly. So most of the increased potential in hardware is wasted by messy and inefficient programming. The software is the bottleneck.

Programming is still mostly an art, not a science. I guess that's part of what I like about it. You pretty much have free hands to implement a requirement any way you feel like, as long as it ends up working. But it also means it is extremely hard to manage the complexity and to make good predictions about how long a certain task will take. And most solutions are extremely wasteful and often sloppy.
[Charles] Simonyi believes the answer is to unshackle the design of software from the details of implementation in code. "There are two meanings to software design," he explained on Tuesday. "One is, designing the artifact we're trying to implement. The other is the sheer software engineering to make that artifact come into being. I believe these are two separate roles -- the subject matter expert and the software engineer."

Giving the former group tools to shape software will transform the landscape, according to Simonyi. Otherwise, you're stuck in the unsatisfactory present, where the people who know the most about what the software is supposed to accomplish can't directly shape the software itself: All they can do is "make a humble request to the programmer." Simonyi left Microsoft in 2002 to start a new company, Intentional Software, aimed at turning this vision into something concrete.
Well, it can certainly make sense to separate the two - defining the solution and actually implementing it. Although not very well when we're talking systems analysts who decide what to do and programmers who do it. But maybe if the second part could be more or less automatic and directly driven by the representation of the design.

But everybody doesn't agree that it just takes a better way of writing the software. Rather a fundamental re-thinking of many things. But even in the energetic open-source scene, where people really are free to do whatever they'd actually want, we aren't particularly seeing fundamental changes in how things are done.
"There's this wonderful outpouring of creativity in the open-source world," [Jaron] Lanier said. "So what do they make -- another version of Unix?"

Jef Raskin jumped in. "And what do they put on top of it? Another Windows!"

"What are they thinking?" Lanier continued. "Why is the idealism just about how the code is shared -- what about idealism about the code itself?"
Yeah, how about a more fundamental revolution? Why am I stuck with a desktop metaphor on my screen, when my own desktop already had too few dimensions to it. We could do so much more with computers. But it is not easy to invent something totally different. I haven't, even though I'd love to. Those smart folks in the article have invented amazing new things in their time, but even they know it doesn't really add up to much compared to what is possible. We're limited by a tendency to define the next thing based on what we already know. That can even be a rather viable business strategy, as this funny quote from Bill Gates years ago illustrates:"The best way to prepare is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and I fished out listings of their operating systems."Yeah, and it still shows, Bill. Imagine he instead had invented something fundamentally new.

[< Back] [Ming the Mechanic]



23 Jun 2004 @ 14:28 by ming : Open source
Not sure how you got that out of it. Yes, of course it doesn't inherently solve any production issu to make something open source. Somebody still has to make a good program. But the point in not necessarily whether a given project will happen faster as open source or as a proprietary commercial project. Sure, most often programmers would get it done faster if they were paid a full time wage. But the magic of open source happens on the bigger level. When the code then can be shared, and others can build on it. And there's both real competition and real collaboration towards doing it the best possible way. Then even a well-organized 100 billion dollar company doesn't really have much chance in the long run.  

15 Nov 2004 @ 05:14 by ov : Lion
I recognize you from wiki work with DeJoe. Have you seen {link:tikiwiki.org/tiki-index.php|tikiwiki.org} yet? I've just been introduced to it, don't know anything about it, it is supposed to be an open source development.

More general question, how small do you think a bomb proof kernal could be, if it didn't have bells and whistles added on for marketing purposes?  

15 Nov 2004 @ 11:35 by ming : Programming
Yeah, I'm a programmer. And I agree, the best thing to do for the people who have the smarts, the vision, the skills and the patience to do it is to work on such things. Build the protocols, the infrastructure and the security mechanisms that makes lots of things possible.

But many people merely want to solve a particular problem, but they unnecessarily get stuck in programming problems. People who maybe wouldn't be capable of solving hard protocol issues. In many situations they're trying to solve problems that could have been solved fairly universally in advance. Take a spreadsheet. Many people just need to see how some numbers behave if we pass them through certain formulas. Setting up those formulas in a spreadsheet program is programming to a sense. But the easy kind where you just concentrate on what you want. If they actually had to do the same thing in C++, most people would waste a lot of time and quite likely not get what they wanted. But somebody has given them easy-to-use universal tools for solving that kind of problems.

When somebody has invented xml-rpc or soap, I might get a tool that makes me do a soap call in a one-liner. Whereas, if I had to program all that from scratch, I might never get off the ground.

So, yes, certain things can not be done with some slick, generic user interface. Somebody actually has to figure out how to do it efficiently and reliably. But they might do that once, and the result might be used many times.

It takes many man-years to design and build a certain model of automobile. But once it is there, I can just get in and drive. And I might even be an expert at it. Even though I might be incapable of participating in the construction process.  

19 Dec 2014 @ 10:39 by Cleo @ : IzHyHnrqAeNEXnMl
I was wondering if you ever cosnidered changing the page layout of your website? Its very well written; I love what youve got to say. But maybe you could a little more in the way of content so people could connect with it better. Youve got an awful lot of text for only having one or two pictures. Maybe you could space it out better?  

23 Dec 2014 @ 07:53 by Matias @ : cHJibgFxXZYaolVZL
שלום.הייתי שמח לדעת מהי מסגרת הזמן לשאלה כזו ובאיזו שפה כותבים את הקוד.בכל מקרה הנה הפתרון שלי בפייתון (לקח כשעה לתכנת)****** אזהרת ספויילר *******class Shape: def __init__(self, params): self.params = prcamsalass Circle(Shape): def get(self): x,y,r = self.params return (x+r, y+r), (x-r, y-r)class Line(Shape): def get(self): x1, y1, x2, y2 = self.params return (max(x1,x2), max(y1,y2)), (min(x1,x2), min(y1,y2))class Point(Shape): def get(self): x,y = self.params return (x,y),(x,y)def parse(): f = open(r'c:\temp\input', 'r') t = int(f.readline()) res = [] for _ in range(t): prob = [] n = int(f.readline()) for _ in range(n): arr = f.readline().split(' ') typ = arr[0] params = [int(x) for x in arr[1:]] if typ == 'c': prob.append(Circle(params)) elif typ == 'p': prob.append(Point(params)) elif typ == 'l': prob.append(Line(params)) res.append(prob) f.readline() f.close() return resdef printmax(points): x = [p[0] for p in points] y = [p[1] for p in points] print min(x), min(y), max(x), max(y)if __name__ == '__main__': probs = parse() for prob in probs: ps = [] for shape in prob: ps += shape.get() printmax(ps)  

30 Apr 2016 @ 01:10 by Kory @ : BMYQMBMZCerus
Random comment. Will you change the new layout of the frontpage (July 2012 revision) or decrease the remtemcndaoions in the mid pane? The recommendation channels in the right pane is enough. Now I can hardly find the video updates in the mid pane of the channels I subscribed too as a recommendation is shown after every subscription video update. Ridiculous how this ever got implemented.  

Other stories in
2014-11-01 17:33: The conversation of work
2007-02-24 14:20: Writing books in HTML/CSS
2007-02-05 15:21: Software is hard
2006-11-19 21:30: Thingamy
2005-12-14 15:15: Ruby on Rails
2005-03-19 16:04: Comment and Refererrer Spam
2005-02-23 21:34: Wikipedia
2005-02-22 17:32: Mail
2005-02-10 16:00: More Google wizardry
2005-02-04 15:14: The Six Laws of the New Software

[< Back] [Ming the Mechanic] [PermaLink]? 

Link to this article as: http://ming.tv/flemming2.php/__show_article/_a000010-001159.htm
Main Page: ming.tv