Technoscreed is a user supported newsletter that talks about science, tech and society in a humorous (or at least very sarcastic) way. Because you need that when you’re dealing with this stuff. Y’know? If you like it, please consider becoming a paid subscriber. Today we're going to take a stab at the never-ending question, "Why is so much software so bad?" The short answer is because so most of it is a Rube Goldberg device, cobbled together from different, barely compatible components, protocols, platforms and languages. Why would you expect it to be good? There's a longer and more nuanced answer. And then there's my answer. What you are about to read (assuming I haven't already bored you or frightened you away) is based on more than 20 years experience as a software engineer, architect, manager and researcher. Plus a few other things. Today, most software is written for the Internet. People are supposed to get to it in their browsers and entire their "data." Data, by the way, means absolutely anything that might be stored in a database. Which basically means everything you type, click, buy, like, comment on, subscribe to, don't subscribe to, watch, listen to, think, feel, do, care about or otherwise interact with in some way¹. But as long as we're talking about data, there's something important you should know. Databases are, themselves, hodge-podgey collections of poorly organized stuff that might, or might not, ever make sense to anyone. Dealing with them is a specialized skill, although most of us who do it are relying on maybe a class or two in college, maybe some blog posts, and random experience picked up on the job. And it's messy because dbs (that's tech speak for databases) weren't made to store everything we try to put into them. Take addresses. You put your address into a lot of databases, especially if you buy stuff online. They need to know where to ship it, right? But you can't just type in your whole address, can you? There's a spot on the form for street address, another one for street address 2, and for city, state and also postal code, which is called that because ZIP codes are US specific and when you have things on the Internet, the people who find you might not be from the US. Did you know that a zip code can't be stored the same as a number? Why, you ask? I once ran into exactly this problem with some software I was trying to integrate into some other software I was working on. It confused me that I would send in a zip code and then it wouldn't be found later. Unless it was. It was inconsistent until I noticed that the ones that couldn't be found were this one: 01001. That’s for a town in Massachusetts. It looks like a perfectly fine binary number, doesn’t it? Ones and zeroes, just the way computers like their numbers! So what could possibly be the problem? Here's the problem. If you were doing math with that, you'd drop the leading zero. You'd work with the number 1,001. But 1,001, isn't a zip code! The database was dumping that leading zero when it stored the number. Zip codes need to be stored as strings (like words and sentences). Meaning, not 1,001 but "01001" so that all of the digits are preserved. The db stores numbers and strings² differently. Because it does. I filed a bug report with the developers and moved on to something else. But do you still wonder why software has problems if something as simple as a zip code is so easy to get wrong? Moving on, did you know that the parts you see in the browser (called the Front End) are only a small part of most applications? That's what we call websites these days. There's so much tooling and logic and programming involved that we call them "applications." Usually, most of the action takes place in the backend, which is where I do most of my work. And, this is fun, the front end and the backend³ are often written in different programming languages! Meaning that they are (mostly but not always) developed by different people, often on entirely different teams. Sometimes there are bugs just because what the person doing the backend didn't quite remember what they told the person on the front end to expect, or vice versa. I was planning on getting into a really funny bit about the differences between programming languages⁴ but I think I've already given you a taste of the pitfalls in software development. There are LOTS more. And sometimes they come down to personalities. I know of a team that became more productive after the man who was their most experienced developer left for another job. And I knew a manager who decided to have an entire application rewritten in a language none of his developers knew much about so that other departments wouldn't be able to poach people for their own high priority projects. This worked about as well as you would expect. Instead of going on with what could easily become a book about software engineering horror stories, I'll leave you with two things. 1) Simple sounding things make software development more complicated. It's nobody's fault that there are different ways to represent words and numbers. Think of it as growing pains. Someday, we won't even have to worry about stuff like that. But for now, everything is more complicated than it seems like it should be. 2) Starliner is making funny noises. I feel compelled to mention this, even though it has absolutely nothing to do with today's topic⁵. But at the same time, I don't want to do an entire article about aliens taking over Starliner, or something. But it's really interesting! Check it out. And be sure to listen to the audio! The Starliner spacecraft has started to emit strange noises 3) There is no three. Literally. My three key is still flaky. I had to hit it about 5 times to get one to show up. Goofy. Anyway, have a nice weekend! --- Here's that prompt: "A group of diverse individuals sitting at desks, intently typing on laptops. The atmosphere is focused and intense. Behind them, the sky is visible, with lines of program code superimposed onto it. The code is filled with visible errors, such as missing semicolons, mismatched brackets, and syntax issues, creating a chaotic, glitchy appearance. The background should have a mix of natural sky colors blending with the digital chaos of the erroneous code." --- Anyone remember a while back when I mentioned that I'm putting together an anthology of short stories I've written? Most of the work is done. I'm debating whether to write one more story to fill it out. Either way, it will be up for sale before the end of the year. I'm so excited! 1 And we're not even talking about stuff that my be collected when you have a chip implanted in your brain. You will someday, too! 2 Technically it's not called a string in the db. It’s called a VARCHAR(). I'm trying to avoid being too technical, though. It's Labor day as I write this and I don't want to engage that part of my brain if I don't have to. Tomorrow it will get a workout. Today, I can be a little lazy. 3 Writing front end as two words and backend as one word is just something I do by habit. I doubt it's considered correct but I don't really care, either. I'm a writer, Jim, not a dictionary! If you want to know what's logical ask Spock! 4 How many Java programmers does it take to change a light bulb? Answer: I think there's a routine for that in Spring. Let me go look at the docs. (Spring is a Java library that was taking over the universe a few years ago. Now I think it’s just an interface to AI). 5 In case you hadn't noticed, today's technology topic is kind of a compromise between helping people understand something complicated and avoiding working too hard because it’s a holiday and I don’t wanna. Hopefully I'll have more ambition by next week! David Vandervort is a writer, software engineer, science and tech nerd (People still use the word ‘nerd’ don’t they?) and all around sarcastic guy. If you liked this article, please consider upgrading to a paid subscription. |