February 18, 2015

Does Anyone Actually Want Good Software?

Are there any programmers left that actually care about writing good software? As far as I can tell, the software development industry has turned into a series of echo chambers where managers scream about new features and shipping software and analyzing feedback from customers. Then they ignore all the feedback and implement whatever new things are supposed to be cool, like flat design, or cloud computing, or software as a service.

The entire modern web is built on top of the worst programming language that's still remotely popular. It's so awful that IE now supports asm.js just so we can use other languages instead. With everyone relentlessly misquoting "Premature optimization is the root of all evil", it's hard to get programmers to optimize any of their code at all, let alone get them to care about things like CPU caches and why allocation on the heap is slow and how memory locality matters.

Some coders exist at large corporations that simply pile on more and more lines of code and force everyone to use gigantic frameworks built on top of more gigantic frameworks built on top of even more gigantic frameworks and then wonder why everything is so slow. Other coders exist in startups that use Scala/Hadoop/Node.js and care only about pumping out features or fixing bugs. The thing is, all of these companies make a lot of money, which leads me to ask, does anyone actually want good software anymore?

Do customers simply not care? Is everyone ok with Skype randomly not sending messages and trying (poorly) to sync all your messages and randomly deciding that certain actions are always unread on other computers and dropping calls and creating all sorts of other strange and bizarre bugs? Is everyone ok with an antivirus that demands you sign in to a buggy window that keeps losing focus every time you try to type in your password? Is everyone ok with Visual Studio deciding it needs to open a text file and taking 15 seconds to actually start up an entirely new instance even though I already have one running just to display the stupid file?

It seems to me that we're all so obsessed with making cool stuff, we've forgotten how to make stuff that actually works.

Did you know that every single person I know (except for two people) hates flat design? They don't like it. I don't like it. There's a bunch of stuckup, narcissistic designers shoving flat design down everyone's throats and I hate it. The designers don't care. They insist that it's elegant and modern and a bunch of other crap that's all entirely subjective no matter how hard they try to pretend otherwise. Design is about opinions. If I don't like your design, you can't just go and say my opinion is wrong. My opinion isn't wrong, I just don't agree with you. There's a difference.

However, it has become increasingly apparent to me that opinions aren't allowed in programming. I'm not allowed to say that garbage collectors are bad for high performance software. I'm not allowed to say that pure functional programming isn't some kind of magical holy grail that will solve all your problems. I'm not allowed to say that flat design is stupid. I'm definitely not allowed to say that I hate Python, because apparently Python is a religion.

Because of this, I am beginning to wonder if I am simply delusional. Apparently I'm the only human being left on planet earth who really, really doesn't like typing magical bullshit into his linux terminal just to get basic things working instead of having a GUI that wasn't designed by brain-dead monkeys. Apparently, I'm the only one who is entirely willing to pay money for services instead of having awful, ad-infested online versions powered by JavaScript™ and Node.js™ that fall over every week because someone forgot to cycle the drives in a cloud service 5000 miles away. Apparently, no one can fix the audio sample library industry or the fact that most of my VSTi's manage to use 20% of my CPU when they aren't actually doing anything.

Am I simply getting old? Has the software industry left me behind? Does anyone else out there care about these things? Should I throw in the towel and call it quits? Is the future of software development writing terrible monstrosities held together by duct tape? Is this the only way to have a sustainable business?

Is this the world our customers want? Because it sure isn't what I want.

Unfortunately, writing music doesn't pay very well.

11 comments:

  1. Hear hear brother. I've also thought about this problem and I think the fundamental problem is that software is a cost center when everything is run and managed by MBAs. If eBay for example could get rid of their entire Java stack and still remain a marketplace then they would do it in a heartbeat. eBay is in the business of markets and not in the business of making Java frameworks and so it doesn't take a genius to figure out that their Java is going to be a terrible mess. Other examples abound. Google is in the business of selling ads and making its CEO immortal and if they could do it all without their search infrastructure then like eBay they would do it in a heartbeat.

    As a technologist it upsets you but it shouldn't. Another analogy I can think of is cars. A car takes me from point A to point B and that's all a car is to me. If I could get from point A to point B by some other equally generic means then I would. So when a business is using technology they are using it in the same way I use my car.

    ReplyDelete
  2. I agree with you, fought the same battle, and gave up. I ran out of fucks to give.

    ReplyDelete
  3. Does anyone actually *write* good software?

    ReplyDelete
  4. i agree with about half of your post - http://research.microsoft.com/en-us/people/mickens/ToWashItAllAway.pdf is one of the best things I've ever read. garbage collection and pure functional programming is not the enemy though. they aren't responsible for the bloat, or for how broken all the software is. the only thing that will truly allow people to write correct, functional software with fewer layers between themselves and the hardware is going to be more of that, not less. software is broken because people do a poor job of repeating the same damn thing over and over again. half assed frameworks and testing / development methodologies arise because there's a need for people to take some of the repetition out of things, but the tools they are writing these frameworks in and methodologies for aren't strong enough (which is why they need the frameworks and methodologies in the first place). lower level tools won't help with half of your laundry list of complaints

    but yes, death to javascript and the web browser as an operating system. agh

    ReplyDelete
  5. Define "good software". Like @greenlyblue said, most software is like the "car to go from A to B". Who cares if it's bloatware, if it does its purpose correctly. Even then, bugs are bound to happen with this enormous scale; bugs get fixed.
    Visual Studio being slow? Get up to date, and have a ramdisk or SSD, or use a better alternative (unless you do C#). And submit a bug report.
    Flat Design is horrible, vote with your wallet.
    You happen to use bad/slow software? Switch to one of the dozens of alternatives.
    Inexperienced developers write shitty stuff despite those fancy new languages designed to limit their crapware? News at 11.
    Python/C++/C# etc are tools. For a task you should use the appropriate tool. Not go around doing everything with an electron microscope.
    There's plenty of quality software nowadays, if you look around. Or took the first step to contributing in improving the functionality and correctness/optimisations of software: looking at opensource code.
    Linux with GUI for basic functionality? KDE+mint.
    Frontend and business software is not the place to look for stable excellent optimal designs. Look at middleware or systems code.
    You're allowed to say whatever. But expand your horizons while thinking everyone is wrong. I prefer to assume everyone is wrong, look at things myself and from their perspective - and happen to either learn or teach interesting things.
    Also, everyone would love if you can contribute with something to improve this "situation". There are companies, where the produced software's footprint+correctness+speed are a huge factor, join them. Or contribute to some OSS. Or teach how to make "good software", but back-up your claims with data there.

    The SW world isn't really that grim, it has actually improved a lot in the last two decades, in my experience.

    ReplyDelete
  6. at the minimum console is great for basic tasks... git pull, node server.js, cat error.log | grep something, im not good at vim so i still rely on visual studio/notepad++/sublime/xcode


    i expect everything for free, and i expect it to work perfectly. i have a free ide from microsoft, free dedicated server hosting from online.net, free online repository from github + bitbucket, free operating system, free open source libraries for everything


    flat design is amazing and readable... look at mdn for example of good flat design. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce


    i don't get how anyone can shit talk modern javascript. My javascript looks amazing, runs fast, runs on every os/device. yeah javascript is fast. rendering the dom is slow. if you are going slow with javascript, youre probably allocating too much and getting owned by the gc....


    which invalidates another of your points cause i think we all know lots of allocations puts pressure on the gc. if you need the performance you can create a single typedarray and manage memory yourself in javascript and get native performance (or let asm.js do it for you). in node you have access to an even higher performance memory option with buffer.


    skype is terrible, dont use skype. the call quality has always been shit for no reason (why do you need to restart calls to fix this) and they route people's calls through your internet connection. i dont use python, but i do enjoy the convenience of python -m SimpleHTTPServer 1234, which brings us back to my first point

    ReplyDelete
  7. I agree almost completely with a lot of what you're saying and I'm sure there is a large body of developers that want to make good quality software and are similarly disillusioned with trends in the industry. The fact is some software out there, churned out by large companies used by millions, is just awful. But if you go down that road of asking questions about why things are this way, well you could end up getting very depressed about the state of the world in general. I think there's so much at play driving a focus away from 'craftsmanship' / 'mastery' of a trade in this world. Politics, economics and society in general, things that in any industry are difficult to get away from.

    The only thing I would say is we shouldn't forget how lucky we are to have skills that are in huge demand - even if we have to work on some crap we're not proud of from time to time. I think the important thing that could bring about a change for the better is if more engineers spoke up about this and demanded more / better on principle, rather than the usual stupid cliches and perks demanded from an employer. To do this we also need to get a lot better at putting forward convincing arguments. Unfortunately this can become a game of manipulating other people which is just sad and probably most engineers don't want to do (if they did they'd be managers instead).

    ReplyDelete
  8. "Am I simply getting old? Has the software industry left me behind?"

    Haha, I've had the same thought before. No, you're not getting old. Everyone else is. The natural curiosity and openness people have when they're younger is gone as they get sucked into all the structure and bureaucracy. What you're struggling to find is anyone who's kept their individuality intact, people who can make decisions/judgements based on their own internal criteria as opposed to what everyone else thinks.

    ReplyDelete
  9. From my experience, it's hard IRL to distinguish the political sociopaths from the logical hardliners that are actually just sticking to principles by using "that's probably", and not running others through a qualifier gamut in order to weasel out of a concrete answer. That sociopath group, or "mentality" is unfortunately the one to be most careful of.

    ReplyDelete
  10. I happen to like Python because it's the first computer language I really learned to use. I'm a casual programmer, and Python is basically perfect for my needs.

    However I'm not going to pretend that Python is perfect for the needs of anyone who isn't a casual programmer. All I've used it for is to make automated character generators for various RPG systems. Including Mongoose Traveler. My job involves about as little programming as is humanly possible in a modern job, which means "I fantasise about making small applications to improve my efficiency, then remember that HR doesn't want us touching the computer's programming because people got clever with them before I was hired and broke everything."

    So yeah. Also our computers all run windows 7, and we've only just upgraded from XP.

    ReplyDelete
  11. Easy, the answer is no, we still use shitty Microsoft products that the whole world uses because people are idiots who don't care about ethics. Simple minds fall for marketing and their "convenience" takes over their minds and makes them spend more money on the dumbest of things. Idiots spend that money and enthusiasts get fucked over because again, they spend that money, shitty software makes it out of Beta, almost unfinished and everyone is at the very least "satisfied", never happy. People say they're happy but I think that's an over-exaggeration of what those idiots *really* feel.

    How do I know? I'm one of these idiots, except I run Ubuntu and I just want my goddamned programs to work. I know nothing about programming and I don't care to, I just like better software and better software would require ethics, but it *needs* to get done, unfortunately it's either one or the other.

    Getting it done: It's out, but has questionable stuff going on with it.

    Ethical software, or rather, Free Software: Almost never gets done, people want it fast, there's no hype, nobody uses it,

    "Hey, we're making a Skype replacement but nobody knows about it, but it's still in alpha. Not enough man power, not many people want to contribute to bugfixing or bugfinding."

    "Nobody uses that yet though."

    "... Yeah, use Skype *for now* (forever)."

    I try to care about ethics and better software, but when I'm the only, *only* one out of 100 million people in the USA who gives a shit about ethics in software, what's the goddamned point? All I can do is bitch and throw fits about everything and ask people about what they'd rather do.

    "Hey, wanna help test out some really cool software?"

    "Nah, I'm good, I'm texting my friend on Facebook with my iPhone."

    "Did you know Facebook tracks you?"

    "Yeah, but I dn't caer, I can tak and txt to my frends on my rly cool i-pone"

    "Did you know Google shoves ads down your throat?"

    "im bying smething i fond on amzn lol"

    "Did you find a new iPhone?"

    "wahts an ipohne?"

    ReplyDelete