9 ms·
Why Software Jewels Are Rare (1996) [pdf]
- linguae 6y agoOne of the things that I have noticed in my career is that the industry, in my opinion, does not seem to value craftsmanship in software outside of a few niches. After all, for most people, software is simply the means to an end, and this includes the software industry. Those who make software for a living have to deal with market pressures, deadlines, and other factors that sometimes conflict with meticulous design. "Move fast and break things," "perfect is the enemy of the good," and "worse is better" are the mantras of our industry, and that's because today's economic incentives favor functional, if imperfect, software over meticulously-designed software. I won't name examples since I don't want to start a flamewar, but there is plenty of software that is "good enough" but isn't designed very well, yet happens to be widely adopted. Likewise, the jewels of software don't seem to be well-adopted and seem to be restricted to research niches, with some exceptions. I lament this, and I wish I could work in a niche that favors software craftsmanship, but this is the world we live in. Perhaps the solution to making software jewels less rare is to make it easier for software engineers to make jewels by creating more sophisticated developer tools, so that way the quick-and-dirty approach just so happens to align with "the right thing."
- neolog 6y agoI don't have any Apple products but I think they have a reputation of valuing quality.
- linguae 6y agoI agree. The Mac ecosystem has long valued quality, especially when it comes to UI/UX. One of my favorite proprietary software companies is The Omni Group, which has made a lot of very well-done software tools for the Mac, such as OmniGraffle. The company's adherence to Apple's UI guidelines is strict, and its products are wonderful to use. Apple itself has also made excellent software (I'm a longtime macOS user), though I feel that its UI/UX perfectionism has slipped in recent years.
- vagrantJin 6y ago> Apple itself has also made excellent software (I'm a longtime macOS user), Then how would you know how good or bad Apples software UI/UX is if you have only one frame of reference? It's good or bad compared to what? I don't think you can easily make that claim.
- linguae 6y agoI’m not exclusively a Mac user. In the past 30 years I’ve also used MS-DOS, every version of Windows since 95 (except for Me and server-based versions like 2003 and 2008), various Linux desktops, Android, ChromeOS, and iOS. I’ve even played around with NeXTstep, Haiku, Pharo, and Plan 9. The classic Mac OS and pre-Big Sur macOS were the best environments I’ve used from a UI/UX perspective, with Windows 95/98/NT/2000 being worthy runners up.
- neolog 6y agoHow's Pharo in practice? It seems really cool in demos.
- vagrantJin 6y agoThis answer is how you should preface your argument. Gives people like me context. Saying Im long time mac user in a vacuum misleads small minds like mine
- mimixco 6y agoTheir UI quality is more mystique than reality. iTunes was a particular abomination among many. Not only did it have a terrible interface which conformed with nobody's standards and looked nothing like any other Mac app, it also had a propensity for eating your music, especially music which was yours and acquired outside the Apple store. Hardly a quality program. Apple apps are still famous for focusing more on keeping you in their walled garden than on making the best UI for the user.
- 908B64B197 6y ago> iTunes was a particular abomination among many It didn't have to be really good: It was better than any other digital music store out there!
- loup-vaillant 6y agoSoftware that does this: https://discussions.apple.com/thread/250315803 https://discussions.apple.com/thread/250315803 is likely worse than nothing at all.
- CharlesW 6y agoAssuming you mean Apple Music (iTunes was an okay MP3 player/ripper, but is dead), I consider it the exception that proves the rule. Enjoy the schadenfreude of this recent Apple Music for macOS review: https://www.youtube.com/watch?v=gE8ZikfrpFU https://www.youtube.com/watch?v=gE8ZikfrpFU
- deleted 6y ago[deleted]
- mimixco 6y agoNo, I meant iTunes. Their willingness to make that was a harbinger of Bad Things to Come, ala the review you linked. Apple had some good UI ideas in the past. For a fleeting moment, they were the best. But eons ago they sold out the user to sell him a lifestyle/subscription system built around keeping people from leaving. This vastly compromised their UI designs to the point of making them frustrating and sometimes futile.
- rektide 6y agoI'm not going to weigh in on Apple but raising one of the most monolithic, insular, biggest capitalization companies on the planet to talk about software craftsmanship feels so so so so far from the point, from the question of software craftsmanship in the world. Icd rather not start the discussion by looking at extremes.
- brutal_chaos_ 6y agoReputation, yes, however this is no longer reality IMHO. Think of all those posts about how the keyboard sucks on macbooks, think of the posts complaining about Apple's quality in general over the past couple years. It may be a somewhat recent change, but Apple does not produce good quality any more. Apple is useful, but a bit janky these days.
- blacktriangle 6y agoAgreed about their software quality, but their laptops are still the best. The keyboard was an very real issue for awhile, but now they seem sorted out and are one of the best keyboards out there. Not to mention I cannot find a non-Apple laptop with the quality of screen and especially touchpad. It's a shame too because I am trying to move further out of the Apple ecosystem, but I can not find an acceptable laptop.
- craftinator 6y ago> the industry, in my opinion, does not seem to value craftsmanship in software outside of a few niches That's because craftsmanship in software has massively diminishing returns outside of a few niches. Unless you're writing some VERY highly optimized kernel code, some physics logic that makes a simulator run correctly, etc... you're writing code that gets the job done until it's replaced. A login form on a website works, until the business requirements for it change. Is it worth going back and understanding all of the fine details to make sure your changes don't break anything, or should you just rewrite it from scratch in an afternoon? This is how I feel generally about craftsmanship. There are some places where it's warranted for long term stability and incremental improvement. But the power of software lies in it's mutability (else it's better and faster in pure hardware), so the vast majority of software will break due to changing requirements or dependencies, and will be cheaper and less buggy to just replace. There's no point in finely crafting these replacements because eventually they'll suffer the same fate.
- nyanpasu64 6y agoWriting easily understood and simple code, code easily maintained and extended by corporate employees, and fast code don't always line up. Assembler code for old 2D game consoles is unclear, partly because it's not structured programming, partly from rushing out the door and/or generational cruft, and partly from talking to awkward hardware interfaces, and partly from optimizing performance. I've seen C code with #ifdefs to pick different code on x86 and RISC CPUs, which might've made sense as an optimization with CPUs and compilers from 15 years ago. Duff's Device is faster on older processors, but sometimes slower on new processors and compilers. From what I've heard, microservices address organizational problems more than technical ones, and dependency injection may be more useful in large enterprise projects (not sure, in my minimal experience it creates complexity). I think that all of performance, clarity, elegance, and replacability (possibly linked to modularity) are values, and software craftsmanship can encompass one or more to varying degrees.
- loup-vaillant 6y ago> Writing easily understood and simple code, code easily maintained and extended by corporate employees, and fast code don't always line up. Am I misinterpreting your comment, or did you just list 3 distinct items? 1. easily understood and simple code 2. code easily maintained and extended by corporate employees 3. fast code. In my experience, points (1) and (2) are one and the same. No tension at all. Easily understood and simple code is easily maintained and extended, by anyone. When I write code, I never try to cater to some junior idiot. I write for myself, 6 months later. Yet people who see my code often compliment how easy to read, use, and extend it is. Junior and experts alike.
- mathgladiator 6y agoI'm in the process of crafting my jewels over the next few years, but I have the position of being almost retired. I'll be able to take my time and focus on crafting good software. The process is not going to be commercially viable for many years simply, and this is why crap persists because that crap does solve real problems today. You can check out the project: http://www.adama-lang.org/docs/why-the-origin-story http://www.adama-lang.org/docs/why-the-origin-story It's going to take a long time until I get to a 1.0 release.
- victorbojica 6y agoThat's a very interesting tool/language. I don't really understand how it works, but I kind o understand the idea behind it. I think. Will it be used to build online board games (like an engine) or to "generate" one? There's also another nice tool for simulating games. Not really in the scope if your project, but around the games topic. https://machinations.io/ https://machinations.io/
- mathgladiator 6y agoAt core, it's an infrastructure language such that it enables the people to come together without fuss. As a developer, I can code the back-end for a board game without thinking about the failure modes for disk/db/network and I code as if I'm a single process (you know, the way we coded as kids). The mental model mirrors if you gather all your friends to play a game with the same keyboard and mouse. As a service, it is a combination of EC2/Lambda for compute, Ably for notifications and connectivity, some DB for storage of state, and workflow for orchestration of people transactions. All within a single package. As a game designer, my hope is that I can make it easier enough that the rules backing a game can be built and then evaluated with simulation and artificial intelligence. I have rough prototypes of this, but I implemented the back-end of Battlestar Galactica and had a random bot just play it. That's a remarkable achievement in a way, and now the question is how to train a system to search for patterns in looking at what decisions are made with a JSON document as the state of the game.
- Kinrany 6y agoI love the idea! I've been wishing for multiplayer game development to be free of networking troubles for a long time. Commercial players are finally entering this space, with Roblox getting more attention and Unreal/Fortnite moving in this direction. Are you sure you need a new programming language? It seems like a DSL or a framework would do for the problems you're trying to solve, and you'd save time for yourself by not writing a standard library, and for your users by letting them use a language they know.
- deleted 6y ago[deleted]
- brutal_chaos_ 6y agoIMHO market pressures, focus on profit, lack of care for quality by the developers as well as management, and so forth are all why software is basically shit these days. > Perhaps the solution to making software jewels less rare is to make it easier for software engineers to make jewels by creating more sophisticated developer tools, so that way the quick-and-dirty approach just so happens to align with "the right thing." That would go a long, long way, but culturally we would need to embrace quality over profits and I don't see that happening any time soon. I do believe we will make some gains in the tooling due to open source/collaborative work a lot of us do for fun. Granted, without the cultural shift, it'll be a slow, gradual change.
- krychu 6y agoI’m not sure the same developers would produce much better software given more time and less pressures. It may very well end up more complex and over-generalized. I think jewels are more the outcome of passion and relentless iteration.
- jrochkind1 6y agoI have experience working in non-profit/academic open source software. It's not any better. And has the added challenge that since it doesn't need to make money, sometimes projects keep going when they aren't doing very much useful on the order of the resources put into continued development. "Sunk cost fallacy" can be enormous. Software is just hard. Another context than the software industry is the "enterprise", where software is being created to support some internal business process (in the broadest sense of 'business process'). That has it's own pressures. But that software too ends up looking much the same. The OP article really struck me, I have to think more about what to take from it, but I think there's a lot there. This article to some extent suggests a kind of "software pessimism" -- is all software just destined to be a garbage pile? (Although the authors say "we can and must do better", the text doesn't leave me confident in that). Software is just hard. It's also eating our world though. If it's all destined to be a garbage pile, we're in trouble -- forced to spend our lives fighting with buggy, hackable, inhuman software that acts like it wants to kill us. one way or another, we probably need a lot less software in order to make it better software. That seems pretty unrealsitic, I realize. I've thought before about, what would a "slow code" (like "slow food") movement look like?
- bckr 6y agoLet's make it a little easier by talking about a slow code project instead of a movement. I think that could look something like Jon Blow's development of the Jai programming language, which is in closed beta after being developed for several years already. He's emphasizing the joy of programming. He also has millions of dollars, thus, years to devote. We might exploit this example to say about a slow code movement "people in the slow code movement would recognize at the start of a slow code project that they will be working in relative secrecy for several years".
- cookiengineer 6y agoI personally think that the web development industry is the software industry's peak form of rushing things to market. So many frameworks, so many concepts repeating their form every 3-5 years...and only with pure luck you pick the one framework that will be there for the next 2 years to come. Nobody refactors. Everybody reinvents. Everybody abandons. It's an endless cycle of catching your own tail. If you read a software engineering book about patterns and architectures you'll quickly realize how many framworks reused a concept that is 30 years existing already, yet selling themselves as the hot new cool kid on the block. I don't understand why lately architecting software doesn't result in refactoring anymore. I think that only through refactoring you can really understand and learn from your own mistakes.
- mro_name 6y agoIntesting - that's my impression as an outsider (mobile, not web). > Everybody reinvents. Everybody abandons. There's that saying about haute couture - "out of fashion" is just highly avantgarde. That's why I build CGIs. They as up-to-date today as they were 15 years ago.
- pjmlp 6y agoPsst, serverless computing.
- erikerikson 6y agoThe original arrogance is believing that you know which problem is most valuable to solve. Yes, the constant cycle is annoying but framework producers are under the same incentives as those delivering applications. There's only so much runway and at the end of the day you need something useful if anyone will adopt in slightly more useful than switching cost if you want anyone to change to your framework from another. From each attempt we gain insight and perspective that we can use to feed in to a slightly better implementation on the next tool or implementation.
- rektide 6y ago"Why Software Engineers should become CEOs"[1] proposes that the engineers have a better sense of value, of what will work, &bthat they should be in charge more. Rarely are technics given first seat at companies. We talk about being product organizations or engineering organizations but I feel like in both cases there is still enormous political processes that most engineers face in their urge to do the right thing. And sussing out, helping the company internalize which bits are of lasting value, done well, &bought be enshrined &built upon, sharing & syndicating these notions out: it re-becomes political almost immediately. I had a rather long-winded reply to "software is a losers game" that surmized a lot of the challenges & environments of software development together[2]. I think it helps explain some of why the field so rarely, clearly excels. [1] https://www.tlt21.com/why-software-engineers-should-become-ceos/ https://www.tlt21.com/why-software-engineers-should-become-c... [2] https://news.ycombinator.com/item?id=26661164 https://news.ycombinator.com/item?id=26661164
- dnndev 6y agoAs a dev turned CEO, it’s complicated. Very few products / use cases need to be more than good enough out the gate. Most software good enough is exactly what is needed. It’s not a one size fits all. As CEO and CTO I need to decide what’s ok to be good enough and what isn’t.
- slt2021 6y agoeven communicating that to developers and making sure they internalize this requirement can be a big helper. what I think happens is that companies try to hire the best talent they can find for their money and tell fairy tales how they are modern and foward-looking company with the vision that is going to change the world - and of course devs will internalize that and will try to apply craftsmanship to their daily work, and then you will have problem of shipping on time and on budget. if managers told exactly and upfront that the products must be hacked together and asap and the quality is NOT the goal, that the goal is to ship shiny new thing quickly to impress VC suits in next N months, and get their funding check and continue this loop until the company finds its exit in form of IPO/acquisition/etc - everything would be honest, upfront, efficient, and conflict free.
- deleted 6y ago[deleted]
- Causality1 6y agoI'm sure most HN readers have a folder somewhere full of installers and executables for years-old software that remains unmatched by anything modern. I've never seen a CD ripper better than CDex, or a site archiver better than HTTRACK, or an Android file manager better than ES File Explorer Pro. It's interesting to note that the companies behind half of my favorite programs were bought out and began distributing malware before shutting down.
- renewiltord 6y agoInterestingly, as a predominantly Linux user, I have no such folder. Notably, while the utility software has consistently improved, the UX software has definitely had ups and downs. And I can't substitute my GUI shell that easily so I keep the default and suck it up.
- taeric 6y agoYou say that, and yet you probably do still use perl/shell/other obscure tool that is rather old. In particularly, at the foundation layer. BLAS and friends would be a good candidate for old software.
- renewiltord 6y agoRight, right, but it's fresh (compiles with today compiler, links to glibc etc.) not some archaeological artifact I'm boarding.
- taeric 6y agoFair... I am not sure that changes the idea, though. TeX, as an example, stands as a jewel. Even if it has things we could and probably do criticize today, it has proven ridiculous value.
- renewiltord 6y agoRight, right. Not arguing with article premise, just mentioning that a useful effect of useful open source software is that this stuff generally remains true. And I'm not a zealot or anything. I just like this aspect.
- JulianRaphael 6y agoI'd argue that this not only applies to software but to all of human creation. Very few creators are craftsmen and very few consumers value craftsmanship. Creating software jewels requires mastery of many skills, many of which are not purely technical but involve an understanding of human behaviour. These skills can only be acquired by studying a field with a certain kind of devotion that very few people have. Real craftsmanship happens when work becomes intuitive, which happens once the basic skills have been perfected and there is enough understanding of other areas that might seem tangential, but further enhance the craftsman's creativity on a level that can't be really learned from manuals or documentation. There are very few employers that allow you to work like that. Then you need people who are willing to pay for the product that the craftsman creates. Corporations generally don't value craftsmanship. Consumers are not willing to pay the price. In the past, you had royals and aristocrats who would pay for works of craftsmanship for prestige. Who are the modern patrons of craftsmanship? I would love to see some Silicon Valley billionaires fund software craftsmen, but very few of them put their money to work in such impactful ways.
- taeric 6y agoMy favorite factoid in support of this is the "craftsman home" which is mainly a marketing thing that stuck into being a descriptive thing, not so much that they were high in craftsmanship.
- AussieWog93 6y agoCorporations absolutely value craftmanship. Factory owners and research labs will pay a huge premium for well designed, reliable tools and skilled employees/contractors that repair and maintain them to a high standard. I do a lot of electronics repair work for my businesses, and I dropped $200+ on a Hakko soldering iron. I have not found the same willingness to pay for quality amongst consumers, though. Counter-intuitively, the sort of hyper-knowledgeable "pro" consumers I come across are typically less willing to open their wallets than people who know nothing.
- TedShiller 6y agoSQLite is one
- amelius 6y agoSoftware jewels are also fragile. Change 1 requirement, and the jewel may turn to dust.
- kleer001 6y agoI work in VFX and with the world premier bit of special effects software: Side FX's Houdini. Sure, it's a bit old and has a little bit of ui cruft (they have to get less technical users in). But overall it's a treat to work with. Such low level control over a scene and lots of easy customization. If anyone's interested : https://www.sidefx.com/ https://www.sidefx.com/ The industry standard Autodesk's Maya, on the other hand, is a bloated POS. I've quit two jobs that made me use it and have taken it off my resume. Thinking about using it for doing my job makes my hands curl in disgust and pain.
- kaba0 6y agoWhat’s your opinion on Blender?
- kleer001 6y agoHaven't used it in production. I've seen some good stuff come out of it and heard its many praises. It seems like its users and devs really care about making a good bit of vfx software. Unkindly, it looks like a kludged together unorganized open source monster with functionality smooshed every which way without consideration for how it actually gets used. Slightly better than Zbrush, which is a ui abomination. Overall I bet it's fine and dandy if you take the time to learn its eccentricities. I fear it's very low on discover-ability due to the lack of strongly opinionated and efficient visual metaphors. But I haven't taken the time to dive into it to make a full and comparative review. Nor would I. I'm old and don't have the time or ambition to do so. tl:dr Blender seems cluttered but ok. Use Houdini if you can, but Blender if you must. Death to Autodesk.
- blacktriangle 6y agoI think part of the problem is that in software we are not allowed to iterate like other crafts are. A carpenter may make a table every week. They only have to live with the choices made, like tool choice, wood, screws, etc, for a week and then can try something different. When we write software it lasts for years. It's not like anybody says a year in "oops Django was a bad choice, lets try this again in Node." We want to care about craft, but we work on the same application longer than it takes to build most buildings. We more than any other craft are saddled with choices made years ago that were made with way too much information.
- fsloth 6y agoDepends on the type of software. Lots of games have large application specific codebases that are written at least partly from scratch per title.
- ahaferburg 6y agoBut not by the same person.
- deleted 6y ago[deleted]