17 ms·
The State of the Art is Terrible
- hackermom 15y ago"Most computers today, for all of their potential speed, are largely a mistake, based on the provenly unscalable Von Neumann architecture, controlled with one of the most shortsighted languages of all time, x86 assembly. They are almost unfathomably inefficient." Well put, Sir.
- swah 15y agoOTOH there are compilers (SBCL) which take that beautiful thing Zach probably likes (Lisp) and run efficiently on the stupid thing he seems to hate (Von Neumann machines)...
- yourapostasy 15y agoSounds like he is bemoaning the technical debt problem, writ large. While you can't resolve this from the gate level on up overnight, you can create your own "technical oases" that are largely free(er) of technical debt than the crud they float upon.
- michaelochurch 15y agoNo offense intended, but you seem naive. I really disagree with a lot of his solutions, and I think his argument is muddled and unclear, and I hate the idea of moving toward languages like PHP that cover for programming errors (that often mask logical errors you want the compiler to check) but I see where he's coming from. My complaint is that a lot of the measures he proposes (self-modifying code? seriously?) are going to make the problem a lot worse. Across the industry as a whole, 80 to 90 percent of software engineer time is spent cleaning up crap (sometimes one's own, but this is at least educational) that wasn't done right in the first place and, yeah, it's frustrating. You need to have an unusual degree of autonomy (effectively your own boss or at least CTO) to be able to create such "oases".
- zackmorris 15y agoYa I'm beginning to feel out of the loop compared to my peers. But I've been down so deep in some things that I'm profoundly aware of how flawed they are. I need smarter tools and was looking to things like self modifying code as a way to help programmers explore problem spaces and then maybe we could freeze the solutions when they perform properly. I definitely agree that maintaining code is fully 90% of this job.
- michaelochurch 15y agoYou obviously know a lot about computing, certainly more than I do on the whole, but I'd recommend leveling up on PL design. Self-modifying assembly code, in the bad old days, was not uncommon (as a performance optimization). It is, however, utterly unmaintainable. I would recommend the book Types and Programming Languages. Also, you should spend a year in a strongly and statically typed language. Start with Ocaml or Haskell because they are "purer", then move to Scala if you want. This will give you some ideas on what infrastructural choices make feasible the development of software that isn't complete garbage.
- zackmorris 15y agoGood advice. Regardless of language, I tend to write a lot of code in a functional manner, which throws off my business partner because he writes macro-style code (where the code is ever-evolving and is practically a media file). So he's about 10 times as prolific and I have a hard time demonstrating why my approach might be better until years down the road. On that note I bought O'Reilly's "Erlang Programming" by Cesarini & Thompson, but haven't read much yet. I'm hoping to find a purer language that can give me some leverage to do what I want with concurrency in the near future. Thanks for the advice on which order to go with.
- nickknw 15y ago> macro-style code (where the code is ever-evolving and is practically a media file) I'm afraid I don't follow; what do you mean by this bit here?
- zackmorris 15y agoYa that is a good way to sum it up, thanks for the brevity. I'm finding that even my thinking has been clouded with complexity, which leads to my large rambling posts. I'm trying to imagine a world where everything is more elegant from the ground up, which is perhaps possible now that we have hindsight, and then apply that to my own work.
- ff0066mote 15y agoI think the second part needed to be long to make your point clear. I think it worked. Since we aren't machines, sometimes we express ourselves in long rambling thoughts. That's okay and, when it's not we have Editors.
- sounds 15y agoI get really excited with the concept that our minds shape themselves around the tools we have available. I was going to start this reply with: where is there a forum/IRC/blog to work on this? And then I realized those might not be the right tools at all to try to clean up technical debts.
- wccrawford 15y agoPeople are going to look back at this as the 'golden age' of the web. Yes, things are a little screwy all over the place, but you can do ANYTHING you want now. NONE of the perfect software has been written. It's all waiting for improvement. You can do anything you want and profit from it. And people just complain that life isn't easy enough. Psh.
- tgrass 15y agoMy take-away was not about the lack of ease, but the lack of elegance. That we have foregone Truth for the fast buck.
- Kafka 15y agoThat was what I thought he was aiming for to but then he, out of nowhere, suddenly praised PHP. I'm 99% sure that I don't have to check out PHP again to see if it's really something about it that I've missed.
- tgrass 15y agoHa, good point. I love PHP, but I'm in programming like a shade-tree mechanic: I just want a large enough hammer to make something work, I don't care how pretty the end result is.
- nerd_in_rage 15y agoYes, the PHP "language" sucks. But that isn't what matters: From a practical standpoint, it's good for getting things done. The reason? Almost zero deployment complexity. You can take Joe Web Designer off the street, give him SFTP (or, more likely, FTP) credentials, and have him modifying your site in minutes. Modify a file, click refresh.
- Zimahl 15y agoThis rant is just the technological way of saying 'damn kids, get off my lawn!'.
- asolove 15y agoIt's always good to go back to the start and remember how much worse things have gotten since any arbitrary time in the past. Before complaining about this rant, go out and explore some of our history: [1] Sketchpad (http://www.youtube.com/watch?v=USyoT_Ha_bA http://www.youtube.com/watch?v=USyoT_Ha_bA) [2] The Mother of All Demos (http://www.youtube.com/watch?v=JfIgzSoTMOs http://www.youtube.com/watch?v=JfIgzSoTMOs) [3] Hypercard (http://www.youtube.com/watch?v=g-qth3mrbwc http://www.youtube.com/watch?v=g-qth3mrbwc) [4] Ward's Wiki (http://c2.com/cgi/wiki http://c2.com/cgi/wiki) Then ask: what are we doing that should get added to this list?
- Kafka 15y agoI wish there was a video of "The Mother of All Demos" where you could actually read the text.
- gpuk 15y agohttp://sloan.stanford.edu/MouseSite/1968Demo.html#complete http://sloan.stanford.edu/MouseSite/1968Demo.html#complete
- msutherl 15y agoYes. I was just talking to my prof./boss today who worked at Stanford, PARC and later Interval about moving some things to Dropbox, arguing that it's a better long-term solution since it's just <i>the file-system</i> and the system doesn't rely on any specific representation (such as a database) or syncing mechanism (can be swapped for rsync, git, AeroFS, etc.). Hearing this, he launched into a rant about distributed file-systems (like AFS) and how hierarchical file-systems are themselves a specific and ultimately transient technology. Working with him and another fellow who was hacking UNIX in the early 80's, you get a sense of a sort of terminal frustration from having witnessed the golden years of research in computers first-hand and the subsequent failure of most of those ideas to manifest. Today's computing is built mostly on tools that were originally cheap hacks intended to be replaced. If you have not watched the videos above, for the sake of our future, please do.
- deleted 15y ago
- deweller 15y agoWouldn't any accomplished professional look at their own industry and feel this way? I can't imagine any medical doctor who would look at state of the art in health care and say, "Our industry is perfect!" I think sometimes as developers, we need to cut ourselves a little slack. Sure we need to continue to move the state of the art forward. But sometimes we do get stuff done even in spite of our industry's imperfections. And some people find software pretty useful even with two different versions of PNG image loading code.
- michaelochurch 15y agoIt's important to step back and take a broad-based perspective. Are you complaining about something that saps you 5% (which can be annoying) or 90%? People complain about both, and it's not easy to tell which is the case just from the volume of complaint. Across the software industry, we lose an incredible amount of time to the maintenance of bad code. The average professional programmer writes about 250 lines of new code per month. Most large software companies have zombie legacy systems that have ceased to grow but have one or more full-time developers only on maintenance. So, yes, there is a problem. The way we are doing things, as an industry, is terrible. On the upside, this means that there's a lot of profit potential in improving engineering practices.
- pavel_lishin 15y agoThis plagues other industries as well. Instead of, say, adding a new feature to a large project, let's lay a new subway line in New York. Better make sure that it works with the current signaling system, and can accomodate every train that's on the lines now. Oh, and before you start digging, you better check that you're not cutting across existing power, water, steam and gas lines. Not to mention other tunnels, building foundations, mole people colonies, etc.
- randomdata 15y agoLast year I purchased a new tractor for my farm to replace an aging machine. I ended up with one from the same company, only thirteen years newer. The new tractor is definitely much more comfortable to operate and has a nicer appearance to onlookers, but when you start to look at the details, the thing is not all that much different than the one it replaced. For example, the old tractor had a couple of problems that would crop up when it was cold. Nothing serious, but definitely annoying. The new tractor exhibits the exact same problems in an identical fashion. Thirteen solid years of engineering and the only thing that really changed was some improvements to the user experience. And that sounds a lot like the software industry – a new interface on top of the same old technology. With that, I imagine you are right that virtually all industries have the same problem.
- singular 15y agoThough I speak from a probably utterly uninformed + unqualified standpoint, this raises a few points for me:- 1. If x86 hardware is so terrible (and I have heard that the architecture really is bad many times), how come we don't have competing chips out there which are many, many times more efficient? I know ARM outperforms on the low-power front, but not in terms of perf to my knowledge. Do such chips exist? And if not, why not if this is true? Even with x86 backwards compatibility concerns, you could bring out a theoretical amazingly powerful chip and just port compilers to it to leverage it and gain some (possibly niche) market hold that way. 2. I think he is underestimating the vast complexity of computing, and deeply underplaying the techniques which have evolved to get us where we are. Yes, I have again heard that the Von Neumann architecture has shortcomings, but look at what computing has enabled us to do - it has changed the world + enabled amazing things which are evolving at breakneck speed. Again - if there really is an ideal alternative approach, why isn't it being pursued? I don't buy the conspiracy theory crap about vested interests holding it back. Again, you could do well in a niche if the alternatives really are that much better. 3. I think it is likely that as things evolve previous ideas/approaches will be overturned and old approaches thrown away, like any pursuit. As @deweller says, this is true of any field. Ask any professional and they will tell you how their industry is fucked in 100 different ways. It is frustrating to hear software engineers talk about how terrible immature + hackerish + crap it all is while assuming that things have some sort of crystalline beauty in other industries. I did Civil Engineering at (a good) university, and it turns out that most consultancies use linear models to model everything, then apply an arbitrary safety factor, resulting in hopelessly inefficient over-engineered structures all over the place + turning the job into something of an uncreative administrative role in some respects (with no disrespect intended for all the civil engineers out there). 4. It is my theory that any attempt to interface with the real world and actually do useful real things results in an enormous amount of uncertainty and chaos in which you still have to make decisions however imperfect and however negatively others will judge it going forward. I think that's true because the world is chaotic and complicated and imperfect, and to influence it means to be touched by that too. That doesn't excuse poor engineering or not caring or stupid decisions, etc. but it is a factor everywhere I think. 5. So change it :-) there are efforts afoot everywhere to struggle to improve things, and from the sounds of it the guy has perhaps not tried enough things. I feel go is a great step in the right direction for a systems language which removes a lot of the crap you don't want to think about, as does C# (though it does potentially tie you to ms crap). 6. Programming is difficult, solving real problems is difficult, abstractions are nice but leak, and sometimes it's quite painful to have to put up with all the crap other people hacked together to make things work. But the value is in the end product - I don't care that my beautiful macbook air runs on a faulted architecture and some perhaps imperfect software, the beautiful ease of use is what matters to me. We mustn't lose sight of these things, though again this is not an excuse for crap code. There is definitely a balance to be struck. 7. Zack Morris is clearly a highly accomplished + competent hacker given what he's done and the obvious passion he writes with (to care enough to be disappointed + upset by these things is indicative), which I think has a bearing - the deeper your knowledge, the better your skill, the more faults you notice by dint of your intelligence + competence. There is a definite curse at play here. Anyway, just my 2p :)
- Benjo 15y agoSoftware is just massively complex. Some day, someone will come along with the resources to redo large parts of the technology stack "correctly." If they do it right, it may even be an improvement. But make no mistake, the investment required will be massive. So until we hit a major technical wall, why bother? Why optimize prematurely until we're bumping up against atoms?
- rbranson 15y agoIndeed. Worse is better[1]. [1] http://dreamsongs.com/WorseIsBetter.html http://dreamsongs.com/WorseIsBetter.html
- ejames 15y agoAn excerpt from an article[1] I ran across a few weeks ago seems appropriate: "The printer was the first drum printer that I had ever seen. It would print 1500 lines per minute alphanumeric, and 1800 lines per minute when only numeric values were being printed. It cost $243,450. Its reliability was somewhat suspect. I walked through the room that it was kept in every day for a year, and the only time that I ever saw it working was at a trade show in Los Angeles. The main reason that I went to the show was that I heard that the printer was there and working. I suspect that the printer was a strong contributor to the demise of Toni Schumans' career with Burroughs. Doug Bolitho was giving a plant tour to a group of potential customers one day and he somehow had the printer printing something. Toni walked into the room and loudly exclaimed "My God it's working". She left Burroughs shortly after the incident." It's an excerpt from an autobiography. The article as a whole originally came up because the author worked for a summer with Donald Knuth - as in, Donald Knuth of the Art of Computer Programming, the quintessential tome of accurate, elegant, academic, truth-on-a-whiteboard computer science. Presumably Knuth sometimes walked by the non-operative printer some days in the morning too. His job at the company was to write a compiler, and reportedly it was a very good one. Success and failure in the state-of-the-art have always coexisted. I sit here - as an iPhone programmer, who has recently had to deal with annoying provisioning issues, LLVM and GCC compilation problems, and advertising networks - and I can look through the window of my office to see our printer, which is located behind the water cooler, available over a wireless network, and can accurately print a requested piece of paper the first time I send a print command from my laptop. I think it cost $200 from the office store - in 2011 dollars, before accounting for inflation. [1] http://ed-thelen.org/comp-hist/B5000-AlgolRWaychoff.html#7 http://ed-thelen.org/comp-hist/B5000-AlgolRWaychoff.html#7
- pawosty 15y agoI completely agree with this sentiment. Look where automobiles were 100 years ago - nothing like the vehicles we use today; vehicles that are designed to squeeze every last MPG out of a gallon of gas, or can keep us from dying in a major car accident. Computing will improve. Computing will always improve. I think rants like this are helpful to point out where we definitely can improve, today, to bring on the future - such as making the iPhone dev and release process easier ;-)
- zyb09 15y agoPainting everything a little bit dark, aren't we? Look here's a story: We just had our national holiday in Germany and therefore a long weekend. So I decided to code an update for an iPhone app I have. The app lets the user create funny pictures, so I thought it would be cool to have an online gallery with user-created pictures, where people could vote on the best ones and have a weekly top list. Now this is far from trivial though, suddenly I need online storage, a database for users and votes, and a webservice to handle all of that. So I looked around, found Node.js, MongoDB, Heroku and S3, signed up, started reading, learning and coding. 2 Days later and the first version is done and working. How much did I know about this before and how much does this stack cost me? Almost nothing. So where's my point with this? First, this kind of story would be impossible just a few years ago. When you realize, how it's now possible for a small developer to reach potentially tens of thousands of users, without the need of a big budget or being in control of delivery channels. When you realize, how much powerful resources are now right at the fingertips of the average developer, how you just need to sit down, read and learn, and you are able to implement even the wildest ideas - then I can't help but think these times are great! Coding is still hard and despite advancement in technology, it may not have gotten much easier. But many things that used to be straight out impossible, can now, with the right commitment, be archived from the comfort of your own four walls.
- buff-a 15y agoThat you claim that this is far from trivial would seem to support his argument.
- absconditus 15y agoHow would what you did be impossible a few years ago? The specific services and products that you listed might not have been available, but they are hardly required for something so simple. Any competent Perl developer could have done the same thing in a couple days a decade ago.
- zyb09 15y agoOf course a competent Perl developer could have, after all that is his domain, but he'd still needs to come up with scalable hosting somewhere and why exactly would he want to do that in the first place?. As someone who's primary field isn't web development its amazing what one can put together in a weekend these days - if I had, say, a J2ME app a decade ago and wanted to do the same thing, I don't think I'd even try.
- icebraining 15y agoComputer science has utterly failed to tackle the real world problems, things like automating jobs so people don’t have to work, or working hand in hand with humans to explore solutions we have trouble seeing ourselves. I disagree. Automation is happening every day. Your error is assuming that will lead to "people not having to work." It won't, and the reason for that is social and political, and has nothing to do with CS.
- DanielBMarkham 15y ago...Sure, your computer can perform 10 billion floating point operations per second. But most of the time it’s not doing anything at all. Just like you... This is a great rant. Nice emotional content, lots of technical details, the author qualifies his credentials, etc. Easily one of the better articles I've read in the past few weeks. One of the things he mentions is the pain of setup -- something I've painfully watched develop over the years. Used to be you could go from a dead stop to programming something useful in about 10 seconds. Now, as he points out, it's not unusual to spend weeks digging around through vendor requirements, obscure dialects, rumor and configuration nightmares simply trying to get started. It's crazy. We've complicated the plumbing to the point nobody knows how to work the damn shower any more.
- vosper 15y agoGreat analogy - every time I go to a hotel I have to figure out the damn shower; I'd never realised there were so many different concepts and designs just around shower controls.
- mhewett 15y agoAh, you youngsters. Trust me, it is FAR easier now to get started than any time in computing history. Before GitHub, you installed SVN or CVS on your own. Before that you accidentally overwrote your software once a month. Before Cloudant you installed MySQL on your own. Before that you wrote your own storage system. Before Amazon you bought a server and installed Linux on it. Before that you wrote customer databases using an Apple II with 48KB of memory and floppy drives with 120KB of space. Before even my time, programmers used the spin rate of storage drums to calculate where to place blocks of data so they could be read as fast as possible (hint: sequential block placement was not optimal). No whining - you've got it good. Go do great things.
- grepper34 15y agoTotally agree, I still remember the pain I had almost a decade ago install something as simple as a Borland C++ IDE. What a nightmare that was for a newb like me, zero resources online to dig through. Today, you want setup and IDE or get iPad development going? There are TON's of resources with thousands of examples. Hitting an error when setting it up? Copy, paste that error into Google. 9.9 times out of 10 you get someone who hit that error before and has already solved it. I'm just not buying into this "oh, life is so hard to set stuff up nowadays" routine...
- DrHankPym 15y ago> In any given 12 hour day of programming, I’d say less than a single hour goes to writing new code now. For the longest time I've felt guilty of this, until I started seeing my coworkers committing code that I would later have to correct. Our company is such a mess right now.
- acqq 15y agoI suggest anybody interested to read: No Silver Bullet: Essence and Accidents of Software Engineering http://news.ycombinator.com/item?id=3068513 http://news.ycombinator.com/item?id=3068513 for a better idea why the state of art is actually much less terrible than it appears to idealists. "I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation. We still make syntax errors, to be sure; but they are fuzz compared with the conceptual errors in most systems. If this is true, building software will always be hard. There is inherently no silver bullet."
- Miky 15y agoI'm a bit unconvinced, since specification, design, and testing could be fundamentally different and vastly improved from the way they are now, not just the area of syntax errors.
- acqq 15y agoWhenever you manage to make a specification "simpler" when there are in fact a lot of implementation details you're giving away the chance to modify the behavior of the stuff that is implied. E.g. think why Google just doesn't buy Oracle servers instead of developing all their software infrastructure -- they wouldn't be able to provide the service they do and they wouldn't earn anything. Whenever you decide that you "don't care" you didn't really remove complexity, you just decided to accept the way the system behaves by default with all the limitations that come from that. Idealists think that a lot of the details can be "abstracted away" just because they'd rather not think about them, but they are still there and they make the difference.
- groby_b 15y agoSo, complicated things are complicated? This sounds vaguely like one of the many "We must have a Do-What-I-Mean language" posts I've been reading since at least the 80's. Yes, many things in the "state of the art" could certainly be better. But the belief that that is only so because the powers that be want to make money is rather misguided. Building better tools and developing better techniques is hard work. (I'm not even going to comment on the fact that the author in the same article demands a more formal basis of our craft and at the same time thinks PHP is the best language ever. I was slightly amused)
- pnathan 15y agoYes, the state of the art is atrocious. It's hack piled upon hack piled upon hack. Mind you, things weren't massively better in the 50s, 60s, or (maybe?) the 70s. I'd like to believe that a deep rethinking of computer systems in languages that aren't C-based and incorporate the academic OS research done in the last 30 years would produce some fantastic innovation. But that requires something like a Bell Labs willing to allow years of hacking for potentially 0 return. http://news.ycombinator.com/item?id=2975209 http://news.ycombinator.com/item?id=2975209
- deleted 15y ago[deleted]
- nerd_in_rage 15y agoGood article. The app store stuff is spot on (coming from someone who's either directly or indirectly worked on over a dozen iOS apps.) I tried talking a client through deploying his stuff to the app store. It took about a half hour to figure out what weird setting (overridden by his target settings) that he had different. Does stuff really need to be this difficult? it's almost absurd.
- Terry_B 15y agoYep and all of this because mostly business drives technology not ideological programmers. And on the rare occasion the ideological programmers are in charge, you can't get them to agree. Frustrating but that's the way the world works and I'm not sure where complaining gets you.
- loup-vaillant 15y agoAnyone who liked this article may like to know that Alan Kay and his team at the Viewpoint Research Institute are currently making a silver bullet. A real one. Of the kind that really really hurts the Complexity Werewolf. They may not kill it, but the scars are already visible. Take a look at their work, most notably the last STEPS progress report. They can use 50 times less code than well written, useful C code (like TCP). Compare with redundant, useless, badly written C++. The secret is quite simple: you can write your own programming languages, and good code looks like a formal spec (to the point of being one, ideally). If you can't write good code, then write the language that will let you. How ? Start here : http://www.tinlizzie.org/ometa/ http://www.tinlizzie.org/ometa/
- gfodor 15y agoOther efforts similar in spirit but dramatically different in execution are Intentional Software and Jetbrains MPS. I really need to find a weekend to try to parse through VRI's work. Has anyone tried to make a digestable survey of the work they have done? I've glanced through their documentation but it seems quite sparse and their stuff is a moving target.
- gruseom 15y agoI don't think they are similar in spirit. These other projects are missing the radical vision that is by far the most important and guiding thing behind Kay's group: to recreate all of personal computing in 20,000 lines of code. Operating system and applications. That is so profound that, if they succeed (a big if) it can't help but change the world. Simonyi and the Jetbrains people aren't in the same galaxy. (I agree with you about it being kind of hard to follow what they're doing, though.)
- gfodor 15y agoI think you're missing the bigger picture here. It's not about a specific application, it's about the notion that the way we write software is fundamentally broken. All of these projects agree that each problem domain can potentially see orders of magnitude reduction in both LOC and bugs if custom languages are designed that fit the domain more appropriately than a one-size-fits-all approach that's been the status quo.
- gfodor 15y agoA good, if not great, rant. I think the one point I'd like to make is I think the iPad represents the first opportunity in a long time to really fundamentally re-think computing. Yes, it comes with a lot of legacy garbage, and it's shackled by Apple itself, but it's different enough that it might just be the thing we need to have some fresh thinking. The tragedy will be if we are so blinded by the past that we do nothing more than project the status quo onto it. If we can get back to our roots and remember what computing is fundamentally about, extending the capability of humanity, I think we can expect to see some amazing things over the next decade.
- redler 15y agoProgramming, at least the fundamentals, should be taught in elementary school just like any other language, but the teachers don't yet have the required familiarity, so we should start with them. There's much to enjoy, agree with, and debate in this essay. But this is the most important line.
- AppSec 15y agoThis isn't meant to be sarcastic or condescending, but isn't programming at it's fundamentals math and logic? Those are taught early on. I mean, I worked with Logo in 6th grade. So I'm really not sure what else you would teach that is different.
- outworlder 15y agoThat is the best "rant" that I've seen in years and practically sums it up. It is exactly the reason why I say that Computer Science is still in the Stone Age.
- jtchang 15y agoThe part about pushing out a iPhone app is soul crushing. But the same can be said about web applications. Back then a bit of HTML, CSS, and some forms processing and you were in business. Now you need to know about server side vs client side processing, AJAX, blocking, HTML5, CSS3, and all the quirks about the browsers. Then after you actually get some version of a static page up you are busy debugging your SQL models and why your many to many joins are taking forever. Throw in the myriad of libraries you have for both front end and back end code and you are in for a nightmare.
- thaumaturgy 15y agoI'd like to buy Zack a drink, because all of this is obvious to those poor shmucks among us that handle the support end of things (also known as the "shit end"). I've been saying a lot of the same things for years. I'm tired of it now; I'm starting to give up, because it's obvious there isn't a programmer out there that gives a damn. You can try telling them that there's something wrong with software -- something fundamental, something in the process itself that has become horribly broken -- but they'd rather tell you why you're wrong rather than really listen to why you're frustrated. Then if, as a user (or programmer) you complain about something, they say, "So build your own version." What, we're supposed to re-build the world? OK, fine. So you start building your own version of something. Then the response is, "Why are you reinventing the wheel? That's already been done." But, what the fuck do I know? I spent a couple of hours in a meeting today with a client explaining why upgrading -- er, pardon, "migrating" -- from Joomla 1.5 to 1.7 wasn't going to happen without a lot of money involved. Then I went to another client and we fixed a broken Windows network stack and a handful of other stuff. Then I came home and unboxed the new laptop that I just bought because my old one could no longer run Firefox anymore -- even though it ran it just damn well fine enough a few years ago. Other than the new laptop, this is pretty much my day -- all day, every day. Well, me and the other guy in my shop. And nobody else seems to think there's anything strange about this stuff. So Samba's documentation is a mess and Samba 4 never got around to implementing allowed_users, which is absolutely necessary in a Windows AD environment? Pfaah, big deal, so what? So Western Digital's backup software interferes with Outlook in funny ways? Psh. Who cares, who's that going to affect? So everybody's decided to abandon sane software versioning altogether and make the support end of things even more nuts? Hah! Get with the program you support idiots, you're supposed to want to spend all day upgrading software and dealing with the inevitable fallout. Besides, users that don't like upgrades are just morons, they just don't know what they like. As soon as they get used to the new version, they'll like it better, you'll see. All of this is stuff I've personally heard, or seen in places like HN ... and not just a few times here and there. Software used to be fun. I remember when it was, when it seemed like most things just worked, even though they didn't look pretty. I remember when it seemed like I could just open something up and start hacking on it without having to hold tens of thousands of lines of code in my head, spread over dozens of files. I remember when looking at someone else's code could actually teach me something, instead of making me want to cry. I really don't like this industry much anymore. I guess that makes me a bad hacker or something.
- astrofinch 15y agoIt's true, system administration is a bitch.
- zobzu 15y agoAs much as I dislike the whole intro "ive seen it all" listing a do of common stuff, its difficult not to agree on the whole. The state of software is sad. I liked that one "Heck, my Mac Plus in 1987 with HyperCard was more approachable than anything today." which is very true, too.
- commieneko 15y agoI was doing some consulting work at a public library in 1987, and they had several public access Macs. I set up Hypercard on them and started showing people, staff, patrons, kids, winos, how to use it. In 1987 _lots_ of people had never sat down before a computer in their lives. I could spend an hour with someone and have them doing useful things with Hypercard. It was extremely approachable. And I don't just mean doing word processing or drawing pictures, though they were doing that too. They were creating software that solved real problems from their real life. I started out by giving out floppy disks for them to save their "stacks", for them from out of my own pocket. We finally had to start selling them at the circulation desk. The biggest conceptual problems, then as now, were in teaching people how to deal with files in a file system, on multiple volumes/disks, and in making people think in terms of versions of documents (actually applications in this case) and in backing them up. Data loss from exposing the disks to magnetic fields was also a major problem, at least we seem to have conquered that problem...
- dpe82 15y agoSometimes it's easy to forget that software development is a fundamentally human endeavor and will reflect all that is right and wrong with the humans involved.
- tensor 15y agoThe thing that the author of this rant and every other rant like it don't understand is that computer science is hard. While tools like functional programming may indeed deliver on the promise of a 60% code reduction, they have a correspondingly higher barrier to learning. Evolving algorithms? Automatic programming? These problems become theoretically intractable so quickly it's not even funny (I currently do research on a very related problem). He wants compilers to just insert the semicolon for him? I'm glad mechanical engineers of the world don't have the same attitude about nails and screws! Most of his complaints in truth have nothing to do with computer science at all. They have everything to do with sloppy engineering. There are all sorts of obvious reasons why computer engineering is sloppy. A few examples: 1) Developers for open source project usually are not paid. It's not surprising that documentation is weak. 2) Reliability and turn-key operation are expensive to develop and nobody wants to pay. I'm sure the author of the article doesn't either. 3) Bugs have lower impact. Screw up a building foundation and you might end up in jail. A clunky install process? Probably all that will happen is a scolding and a new issue in the tracker. 4) Things change so fast that standards can't keep up. The same goes for most other engineering frameworks that would solve many of the problems Morris complains about. We've made and continue to make huge progress in the field of computer science. Computers have and continue to replace people in jobs all over the world. Morris should be happy they haven't replaced his job yet. Not working may sound nice, but having an income is also nice. That has nothing to do with computers. Computers have made our lives easier. If I went back 10 years and told my younger self what I can do today with just my mobile phone, I doubt my younger self would even believe me. The problem is not that progress is bad. It's that progress is moving too fast for engineering to keep up with. The state of the art is constantly changing.
- loup-vaillant 15y ago> While tools like functional programming may indeed deliver on the promise of a 60% code reduction,[…] Most code is badly written C++ that could have been written in, say, Ocaml, Haskell, or Lisp. This is easily a 10 fold reduction. And the guys at http://vpri.org/ http://vpri.org/ are doing at least five times better than that (50 fold reduction compared to well written C). On your point 3, Bugs have lower accountability. Meaning, lower impact for those who commit them. If they have lower impact as well, that's because they forced us to distrust software.
- zackmorris 15y agoHey everyone thanks for your comments, I have learned a lot today. For all I complain about the state of technology, it's remarkable that I am using it to communicate with some of the most amazing people in the world. You just can't make this stuff up. I think that maybe it's time to stop taking the pain and do something about it. The only part I've never been able to figure out is how to earn enough income and maintain the independence required to work on the really big problems. Heck, maybe that IS the problem. This morning I was going to get up and fix another computer to sell on eBay because I am living month to month since quitting my job in November to make the leap into living the dream. I've called in almost every favor and in all honesty am within a few weeks of applying for jobs. Maybe I should have blogged about the process earlier! I feel like if I can't hack it, then there must be others out there just like me. I just didn't expect this post to resonate quite like it did. I wonder how many of us feel like that friend we all know whose band hasn't quite made it yet so they couch surf. The waste of talent is staggering, and all around us. If you are interested in this issue, I set up a google doc here: https://docs.google.com/document/d/1Oe0X0ML0LuS6rPNLLH9s_wCqYfc4iDl6lk_inHOi0Ss/edit?hl=en_US https://docs.google.com/document/d/1Oe0X0ML0LuS6rPNLLH9s_wCq... I'm totally open to any suggestions and you can also contact me on twitter at @zackarymorris or any of the sites in my profile.
- jberryman 15y ago> I think that maybe it's time to stop taking the pain and do something about it. There you go. I'm sure you'll find you're not alone. Best of luck and stay positive :)
- wladimir 15y agoWell you poked a stick in the hornet's nest for sure. Now we're all watching you :) I'll give you my current high-level pet peeve for free: While programming, it is so incredibly easy to miss something, to not be entirely thorough. I think a lot of problems originate from the fact that, even for an experienced programmer, it is hard to get a feel for what a function actually does, including all the corner cases. Especially if someone else wrote it, or you wrote it a long time ago. Yes, you can read the program text, and encounter a lot of logical expressions, evaluations, etc. Fitting it all into your head can be difficult and takes quite some time. Code as text format is quite limited and slow to parse deeply in your brain. I'm sure that is possible for a tool (some kind of uber-IDE) to help with this, for the compiler to 'explore' what happens inside the function (as that's what a compiler does). But what it can't do is show it to you in a useful way. Some vague ideas around this: - test cases: a lot of work in writing test cases is simply mechanical. You want to evaluate all the code paths, verify assertions and function input/output. There are initiatives like (Microsoft) Pex that attempt this. If you have auto-generated unit test-cases that explore the corner cases you get more feel for what a program does and what might still be wrong. - code verification: computers are incredibly fast, and can understand the code that we type instantly. With post/preconditions and assertions, it could be possible to find bugs and overseen cases while we type in the background by random/structured "brute force" fuzzing (let the monkey loose) or modeling analytically. Imagine the hours of debugging saved. - graphical languages: pictures sometimes say more than words. Would also remove the "mental overhead" of worrying about specific superficial program syntax. Alternative representations of source code. Some kind of (intuitive) graphical visualization of software would be very useful. Both for building programs and looking at programs from a new perspective. This could also include intermediates between fully graphical and fully text, or simply looking at the program in another syntax. - literate programming: why did this never go anywhere in the mainstream? the perspective/train of thought of the developer would be another input to the person maintaining the code. Code comments are part of the solution, but they're completely separate from the program. To be more useful the there needs to be a deeper way to associate/interleave the train of thought and even discussions between developers with the code. Anyway, there's probably lots of issues with these ideas, but I do feel that better tools of the trade could help. Things don't have to be completely automated, but the computer could certainly help more in filling in the blanks. It seems that with all the jobs 'we' automate, there is little focus in automating part of the job of a software developer (on the other hand, the state of the art does advance, high-level languages like Python and PHP already helped a lot in making us more productive, oh man imagine that we had to write everything in C...)
- munin 15y agothis article seems like a more educated and experienced manner of asking "mr. babbage, if you put the wrong numbers in, will the right answers come out" ...
- commieneko 15y agoI gave up in the late '80s. I still use computers, heck, the whole developed world uses computers now. But that's despite the way software/hardware have developed; a side effect of Moore Law making things faster and cheaper. Unix is the big thing in 2011? Really? Nooo.... well shit! Funny that the OP mentions Hypercard. When it came out a number of very smart people said, "Hey, that's kind of neat!" And it was. It was little better than a toy at first, but I saw street people sit down with it and _an hour latter_ they were using it to solve problems, and were delighted. And let me tell you, in 1987 part of that hour was used to explain how to us a mouse, drag selections, double click, etc.
- georgieporgie 15y agoExcellent rant. In my opinion, the industry as a whole has gotten obsessed with new hotness over properly finishing what was started. I don't know whether that's always been true.
- giardini 15y agoAnd the code I wrote for IBM mainframes using CICS and VSAM _still_ _runs_ today, as does the code for Unisys mainframes written in TIP, COBOL and DMS. Maybe I'll go back to using that. Hell, it runs more reliably than anything that tried to replace it!8-)) But I really miss toggling instructions and data directly into memory on the PDP-11's control panel. Yeah, the state of the art is terrible indeed.
- dools 15y agoI think the source of your frustration here is idealism. You're assuming, first of all, that things should be "better" and second of all that things could be better. Software and technology in general is like a gigantic thriving petri dish. The natural world is terribly inefficient, too (I need how many sperm to germinate one lousy egg?!) The simple fact is that I'm able to read your rant, think about it and reply whilst sitting in a cafe on a mobile phone. That is awesome progress. The problems we deal with as engineers are the reason we get paid to do it. Compare this to the practice of music: the art is in the beauty of the song. The engineering is in getting 5 stoners on stage simultaneously and managing to get paid by the ephemeral promoter at the end of it. I'd rather wrangle with a broken FreeBSD port dependency in the comfort of my office listening to music of my choosing (streamed over the internet, and made by people using computers) than starve because of crop failure. In every life we have some trouble, but when you worry you make it double.
- dupe123 15y agoI don't really get the point of this article. Felt like he was just saying that everyone today is a moron. I find this attitude annoying. Get off your high horse. Yeah, there's bad programmers and some people are oblivious. In any profession, there are people that are going to suck at it. There's also people that are simply brilliant and are amazing programmers. Then to act like the entire software stack is broken is silly to me. Sure there's inefficiencies. In any large complicated system, you can expect there to be room for improvement. And anytime you introduce layers of abstraction, inefficiency is bound to happen. But guess what? Not everybody has time to write code in assembly. The fact of the matter is, the software ecosystem has become so complex that people are forced to specialize in more and more specific subsets of it. And all this jazz about "Oh boo hoo.. software hasn't solved world hunger and doesn't wipe my ass for me when I use the bathroom". Geez man. Calm down. These problems your talking about like figuring out AI are incredibly hard. Its going to take a long, long time for them to be tackled fully. Software and computers have only been around for the blink of an eye in human existence.
- bobsh 15y agoOberon - The Overlooked Jewel: http://www.ics.uci.edu/~franz/Site/pubs-pdf/BC03.pdf http://www.ics.uci.edu/~franz/Site/pubs-pdf/BC03.pdf
- groovy2shoes 15y agoUnfortunately, the history of computing is littered with overlooked jewels. Oberon is only one example.
- smashing 15y agoOK, this is going to be unpopular, but here it goes. Life isn't supposed to be beautiful or elegant or simple or perfect. If an entrepreneur can make money while improving the parts of life (no matter how small) that others benefit from, what can possibly be the issue?
- FlowerPower 15y agoHe has a problem with proprietary software. All of the problems are due to proprietary softawre and his examlpes with Apple produced closed software is just the tip.
- danmaz74 15y agoThere are some true things in this rant, but I'm pretty sure about one thing: "provably correct algorithms" are never going to deliver us a computer to which "you should literally be able to tell it what you want it to do and it would do its darnedest to do a good job for you." Natural Intelligence is the product of billion years of crappy evolution, and thinking that the application of some clear, clean mathematical concepts will be able to recreate it is very naive.
- perfunctory 15y agoIn light of all these recent rants it would probably be interesting to track what Alan Kay and his team are doing at www.vpri.org. I am looking forward to see what they'll come up with.
- joshu 15y agoWhere there's muck, there's brass.
- lobster_johnson 15y agoComputing is in a bad shape partly because of momentum, and the momentum exists because of the nature of capitalism. The momentum means we can never stop to make sure the software is as carefully written at it needs to be, and we can never stop to think of the big picture (all the other software we need to operate with). And because of capitalism's inherent competitive nature, there is no concerted movement towards a unified goal in computing; competition leads to fragmentation, not unification. So we have a profileration of operating systems, redundant software reinventing wheels etc. Open source is interesting in that regard. It's sort of the solution to a lot of the mess -- in theory, by making the source public, nobody should ever need to solve a problem more than once, and a specific piece of problem-solving code should evolve over time into the perfect solution -- but it's screwed by the competitive nature of people. (People don't just compete among themselves with their egos. They also compete against the status quo; what I like to call the "not invented by me" syndrome which drives people to create new stuff even though what they really ought to have done is to improve the old stuff, thus expanding the pile of legacy software even further.) Why do we have both Python and Ruby? They are incredibly similar to each other. They are so similar it's silly. Sure, one's got whitespace-sensitive syntax, the other has runtime-extensible OO. But those are superficial differences, and nobody can objectively say that Python is better than Ruby, or vice versa. Do we really need both? And yet Matz and Guido are never going to join forces to work together on a common goal to create a single, superior technology. Open source ought to work less like capitalism. People need to work together into creating the best, safest, most robust software imaginable.
- guard-of-terra 15y agoIf there would be ruby but no python, or python but no ruby - the remaining one would be worse and less mature than it is now. Having competition made them both stronger, no doubt.
- lobster_johnson 15y agoMaybe, but it's a shame you need two competing, but very similar projects, to accomplish this. If people had been competing about contributing the best code to the same project, we could have reduced the duplication.
- iochannel 15y agothis is great news. b/c it means there's still (after how many yrs?) huge opportunity. think different. code something simple (=terse) that follows common sense and just works and it's an island of consistent speed and reliability in a sea of crap and bloatware. we need more djb-like coders, who do not mimick 1000's of other coding monkeys. mcillroy said the hero is he who writes negative code. he's right. the world needs less not more code. if you can't handle that, then you're just contributing to keeping the "state of the art" terrible. but then people just keep paying for this crap so that's why it won't disappear. the idiots are rewarded for their "productivity" in producing saleable crapware. carry on.
- deleted 15y ago[deleted]
- iochannel 15y agothis is great news. b/c it means there's still (after how many yrs?) huge opportunity. think different. code something simple (=terse) that follows common sense and just works and it's an island of consistent speed and reliability in a sea of crap and bloatware. we need more djb-like coders, who do not mimick 1000's of other coding monkeys. mcillroy said the hero is he who writes negative code. he's right. the world needs less not more code. if you can't handle that, then you're just contributing to keeping the "state of the art" terrible. but then people just keep paying for this crap so that's why it won't disappear. the idiots are rewarded for their "productivity" in producing saleable crapware. carry on.
- brain5ide 15y agoKudos for a beautiful rant, I really liked it an resonated. But after it and all of the comments in here I remembered Jobs' saying: "Computers are bicycles for mind". Which means you need to pedal it to get somewhere. As much as programmers would like automation and being lazy, It's still about pedaling.
- rbreve 15y agoGreat article, I have exactly the same feelings towards CSS and HTML. I mean why is it so damm difficult to layout a simple page.
- zwieback 15y agoWhiner. Everything in life is like that.
- euroclydon 15y agoI used to work on Clinical Trials management software. We had an IVR product written in PHP and PGSQL. Project designers would build a project workflow with a half-baked web "flow chart" and custom PGSQL function that called existing PGSQL functions. I have a nacent dream of a language that could elegantly replace the workflow definitions with pure code that looked like Lisp or Json. I'd like to work on a program like that.
- Peaker 15y ago"Because they know what you are just starting to grasp. That it shouldn’t be like this. That computers have vastly underserved their users. Conceptually, mobile and casual interaction is the future of computing. But it has no formal basis." "The good tools like functional programming and provably correct algorithms are either too esoteric or too expensive for the mainstream" I was really with him there. Then when he said: "That’s a reason why one of my favorite languages is php. It just works. Screw up your variable typing? Who cares. Forget a symbol somewhere? Heck you still get some output and can see your error." Is the contradiction there not obvious?
- becomevocal 15y agoAwesome. Now lets take that frustration and build out a solution. We're the ones that will change this all for the better.
- balloot 15y agoThis guy just sounds like you run-of-the-mill crappy programmer. "I can't get things to work! It's the fault of The World - it couldn't possibly be me! I've had a game in the App Store!" As a rule, the worse the programmer, the more convoluted his solutions to problems. Maybe instead of writing huge rants on his blog, he should re-evaluate the way he does things so the world doesn't seem so horrible. Or get a new job.
- nick_urban 15y agoAre computers inefficient and software complex and unwieldly? Sure, but I suspect the sense of fatigue and disappointment is due mostly to the cause he mentions last: the irrelevance (or even hostility) of most computer applications to a life well lived. "if your grandparents can’t use it out of the box to do something real... then it fails" The problem is not the difficulty of software, or its aesthetic decline. The problem is that the most important things for human happiness -- such as autonomy, integrity, feeling of connection to a world larger than us and love for other human beings -- are mostly ignored or eroded by technology rather than improved by it. This is not something new to computer technology, but it does seem to be focused and hastened by it. When you're a kid, it's easy to be enthralled by the wonder of the machine. I certainly was. As an adult, you don't have that anymore. You need to feel like you're working for something worthwhile. All of that complexity would be worth managing if we understood it as part of a struggle for something of magnitude. The feeling that it's all crap comes, as much as anything, from this lack of ends.
- algoshift 15y agoSimilar professional experience: I go back to having built rudimentary microprocessors with diode arrays and gates; Creating my own microcode and ALU; Wire-wrapping my own computers using 8080, 6502 and other early processors; Punching in my own mini-os using a hex keypad; Rolling my own Forth-based OS, editor and applications; working with PALs and later on multi-million-gate FPGAs. I find myself agreeing with the author on many points. The evolutionary progress in computing seems to have stalled a long time ago. The fact that we are still hand-coding loops and such things means that it is hard to move up into a higher level of consciousness, if you will. The paradigm shift we need is one where the programmer is able to think and work in problem space rather than being pushed down into verifying loop counts and semicolons every five minutes. Back in college I experienced a mind-opening moment when a physics professor insisted that I enroll in a class he was teaching. The class was for a language called APL. I won't go into details here. Look it up if interested. That class and that language changed my view of computing and how computing could work forever. I was taking FORTRAN and C classes at the same time. The contrast between the languages was almost beyond description. While we were mired in do loops and other language-mechanics in FORTRAN and C we were actually solving real problems with APL in very short order...even writing a game or two, database applications and doing some scientific computing. Programmer productivity and the ability to express and solve a problem simply could not be compared. APL felt like it was a century ahead of anything else. APL lets you focus on the problem space. In a certain way it is like playing the piano, you don't think about frequencies and durations, you think about expression of ideas. As people focused in languages like C++ (which were easier to grasp and use with equipment available in those days) APL never became mainstream and, to some degree, did not evolve into what it could have become. Ironically, the machines we all have on our desks today provide an incredible environment for a language like APL in terms of available resources and speed. I am not saying that APL is the end-all. What I am saying is that my path through this craft was altered in a non-trivial manner by being exposed to a very different set of ideas. I find myself longing for feeling that way about the tools I have to use today, particularly when hitting the pavement with languages such as Objective-C and VHDL, which, despite their many supporters are far, very, very far, from providing the kind of evolution and progress we so desperately need in computer science.