Maybe it is was an idea waiting to happen, or waiting to be popularised, but it seems we largely have Dijkstra to thank that the languages we do our work in are largely expressed in block-structured loops and conditionals rather than a maze of twisty little GOTO statements, all alike.
…we should answer Question 9 by checking the last option — “Some other race” — and writing in “American.” It’s a truthful answer but at the same time is a way for ordinary citizens to express their rejection of unconstitutional racial classification schemes.
— Sending a Message with the Census - Mark Krikorian - The Corner on National Review Online
I wait for guests and they are 15 hours late
So how much shorter are your programs if you write them in Lisp? Most of the numbers I’ve heard for Lisp versus C, for example, have been around 7-10x. But a recent article about ITA in New Architect magazine said that “one line of Lisp can replace 20 lines of C,” and since this article was full of quotes from ITA’s president, I assume they got this number from ITA. If so then we can put some faith in it; ITA’s software includes a lot of C and C++ as well as Lisp, so they are speaking from experience.
My guess is that these multiples aren’t even constant. I think they increase when you face harder problems and also when you have smarter programmers. A really good hacker can squeeze more out of better tools.
As one data point on the curve, at any rate, if you were to compete with ITA and chose to write your software in C, they would be able to develop software twenty times faster than you. If you spent a year on a new feature, they’d be able to duplicate it in less than three weeks. Whereas if they spent just three months developing something new, it would be five years before you had it too.
And you know what? That’s the best-case scenario. When you talk about code-size ratios, you’re implicitly assuming that you can actually write the program in the weaker language. But in fact there are limits on what programmers can do. If you’re trying to solve a hard problem with a language that’s too low-level, you reach a point where there is just too much to keep in your head at once.
—
Bonus points to any one who can explain all the different things that are horribly wrong with this quote.
Thursday morning, employees at a Best Buy in South Brunswick walked into the store to find a pile of debris, a hole in the roof, and a bunch of missing laptops. Theft, to be sure — but how did the plunderers avoid the spider web of alarms? According to Police Sgt. James Ryan, the thieves managed to climb a gas pipe to scale the building, and used some type of suction device to lift a hole in the roof. Ryan speculates that they then lowered themselves through the hole into the store, managing somehow to keep themselves ten feet above the floor at all times, evading the store’s motion sensors. They even kept behind store banners throughout the operation, thus shielding their faces from security cameras. Upon swiping $26,000 worth of Apple laptops, they scurried out the same way they’d come in.
— ‘Mission Impossible’-Style Best Buy Thieves Swipe Laptops, Baffle Cops
I know, I’m a few years late on this.
But still. Better late than never, right?
Typically I despise the “software development is engineering” analogy. The process of developing software is so very little like building a bridge or building a house (in any modern sense, at least) that it often seems to cause more harm than good to make the comparison in the first place. But last night Erin was watching a show on HGTV, and I realized that there is a rather striking analogy that makes sense:
Looking over poorly-written software is much like looking over a poorly-constructed house.
On the outside, the house may look fine; it may even be the nicest looking house on the block. If you talk to the people living in the house, they may say that they love the house, except for a couple of minor things that need fixing (after all, they hired you for something, right?).

Once you get in and start inspecting the house’s internals, though, you start to see problems. Electrical wiring is backwards. Gas lines are run through dangerous and/or illegal areas. Drainage is poor at best, and you see signs that the foundation has been eroding away. There are patches of insulation that are flat-out missing from the walls. Load-bearing structures aren’t built with the appropriate materials. The plumbing is a tangled mesh of rusting copper. The house is unsafe, and unless it receives a lot of attention from someone who knows what they’re doing, it won’t really be safe any time soon.
Software can be a lot like that. On the outside, it can look like a very attractive piece of software, and the users can really enjoy using it (except for a couple of things that they’d like you to change, but that’s easy, right?).

Once you get inside the code, though, you can find a fragile mess. Poor error handling, convoluted logic that doesn’t cover all the use cases. There are comments in the code that are less than useless because they’re totally wrong about what the code does or why it’s doing it. Application data isn’t always handled safely. The application tries to behave concurrently but most of the operations aren’t thread-safe. To top it all off, there’s no documentation and even less automated tests, which means you have no idea how the program is supposed to work, and even if you did know that, you would have no way to verify that it was working properly.
In both cases, when you take this information to the client, the typical response is going to be “but it works, why should I pay you to fix it?” Of course, when you’re talking about houses, the response is “because your house isn’t up to the code that’s mandated by law, and above that if some of these safety issues aren’t resolved, you and your family are exposed to serious risks to your health and safety.” When you’re talking about software, the best answer you can give is “Well, I know it hasn’t caused you any problems yet, but it’s highly likely that it will in the future unless you let me rework it for you.”
In other words, where the opinions of a general contractor can be backed by physical evidence and codes and regulations, even though the house appears safe, the opinions of a programmer can only be backed by the opinions of the programmer unless there’s a demonstrable problem with the software. There’s no easy way to convince a client that there are fundamental flaws with their code, and even if you do there’s no way to convince them it’s worth training unless they already trust you and have bought into your expertise on coding.
Wouldn’t it be nice if we - as an industry - had a set of codes and regulations we could leverage to improve software? I’m not sure what those regulations would look like, or how we’d enforce them - software developers can’t agree on how many spaces to use for indentation, much less on whether they should write automated tests - but I think it’s something worth thinking about. Nothing unnecessary or specific - no “you must use x testing library,” or “you must have all your software developers in one room,” because those only serve specific agendas. Nothing that requires ‘certification’ or anything else that can be used to make money; probably just some sort of open-source document that programmers can recognize as an authority on, generally, how things should be done. Imagine how much better our industry could be if we tried to standardize on disciplines that take steps towards preventing disaster projects, and were able to use those standards to convince clients that their software needs to be made better?
Would it mean that the client would always let us make these changes? Of course not. There’s a lot less risk in the statement that “your program might crash often” than there is in the statement that “your house might burn down.” Also, I’d like to hope that no codes we create would ever be legally binding. What it would do, however, is lend strength to what you bring to the client; rather than it being you saying “You should pay me to fix these problems that you don’t really understand, but trust me, they’re problems,” there can be an industry-sanctioned document that says “Here’s the problem this programmer is telling you about, here’s why it’s a problem, and here are the risks you should consider before you decide whether to let him fix it for you.”
Just a thought… maybe a crazy one at that. But, just like a contractor who comes in and works on a house, your reputation becomes tied to every piece of software you touch. Wouldn’t it be nice if you had some better tools to convince clients that the code they have needs to be fixed?
This started as a conversation on Twitter, but I’m finding it far too difficult to explain everything to everyone in 140-character bursts, so I’m going to write this out in a blog post and hopefully that will help everyone else help me :)
I’ve recently been convicted, as you may have noticed, that I don’t do enough reading. Specifically, I don’t do enough reading related to my career in Software Development. I’m not keeping up with my field, and that’s going to come back to bite me if I don’t remedy it.
So I’ve compiled a rather large list of books that I would like to read. Some of these books I already have in hard copy form but just hadn’t gotten around to reading. Several I’ve already acquired in PDF form. Several others I have yet to acquire.
Let me lay a few things out:
Given all that, my first thought was that it would be nice to have an eReader of sorts, perhaps like the Kindle or the Nook. At first blush this seemed like a perfect solution - I could read PDFs without worrying about “glow,” and ultimately the costs would recoup themselves when I purchased PDFs rather than hard copies of books. There’s also a convenience factor in that I don’t have to start collecting stacks of books that will likely be useless in a few years.
But so far it seems like PDFs suck in general on the Kindle (but not the Kindle DX), and that the Nook just seems to suck in general when compared to the Kindle. There’s this crazy thing called the iPad coming out sometime soon, but it “glows.” It also does a lot more than I would really want or need it to do.
The DX is almost $500, which makes it almost prohibitive (I’m still considering it from a convenience angle, but I’d have to go through a lot of PDFs in order to make it worthwhile financially).
So, any other angles/reviews/etc. I should be aware of?