[HN Gopher] Malleable Systems: Software must be as easy to chang... ___________________________________________________________________ Malleable Systems: Software must be as easy to change as it is to use it Author : pcr910303 Score : 197 points Date : 2020-04-13 16:58 UTC (6 hours ago) (HTM) web link (malleable.systems) (TXT) w3m dump (malleable.systems) | mntmoss wrote: | The question to reconcile in my mind: Malleable systems with | reproducable builds. | | It's very easy to get your hands dirty with the bytes and add | various assumptions and dependencies. Most "hack solutions" go in | that direction. But reproducing the modification in some larger | context changes the assumption: What if the dependency isn't | there? | | What tends to make the system stable over the long term is the | thematic assumptions: Certain broad goals that never shift, even | as the specification does. I think that's the factor missing from | having malleability itself as a goal. You already have it, that's | software. | renewiltord wrote: | Web user agents do this the best. You can run code in the | console, delete elements, make that persist with an extension. | And there you see the best outcomes and the dangers ("This is a | browser feature intended for developers. If someone told you to | copy and paste something here to enable a Facebook feature or | "hack" someone's account, it is a scam and will give them access | to your Facebook account."). | saagarjha wrote: | I don't think this is a very popular opinion, but for those | shipping software, consider having at least one programmatic way | to "monkey patch" it. These are things like a plugin API, | dynamically linking it, or using a language with an exposed | runtime-things that allow programmatic injection of code, so that | users who _really_ care about tweaking the tool can do so. It | doesn 't even take much effort, either: my text editor has no | plugin interface, but one of the reasons I stick with it is | because I can hook its calls to libc to customize some of the | things I don't like. My preferred mail client happens to lack a | certain entitlement that most people don't even know about and | that enables an entire cottage industry of software for it. | Browsers let you specify some JavaScript to run on each page and | suddenly the balance of power on the web tilts significantly | towards the user. Even (or especially) if your tool is open | source, consider supporting such an interface: it's much nicer to | add on to piece of software than fork it. | bcrosby95 wrote: | The problem is support. Even if you put big caution tape around | it, if you break it or change it in a way that isn't backwards | compatible users will complain loudly about it. And if you have | users paying lots of $$$ relying on it, it might force your | hand. | | Building a plug-able system in a way that doesn't blow up in | your face can be hard. Firefox got a lot of bad press for | redesigning their plugin system. | enos_feedler wrote: | This is a great point and something to consider when | designing runtime programmable tools. It should mean moving | slow, cautious with minimal surface area and opinions about | the future is probably a way to go. Having strong isolation | is probably good too. This is something that made me uneasy | about highly programmable/hackable platforms. I like when the | core maintainers understand _how_ a system wants to be | extended and shaped and provides precise hooks for doing so. | funkymike wrote: | It seems to me the key then would be to have that | programmable interface be used to actually implement the | features shipped as part of the project. It will be a lot | easier to get the API right if the developers are using it | themselves, plus that adds a lot more incentive to maintain | backwards compatibility as well. | jmercouris wrote: | I agree :-) | | The user _should_ have the power. Also the interface should be | as powerful as possible. One such browser that embraces this | philosophy is Next https://github.com/atlas-engineer/next. | Source: biased author | denster wrote: | Very cool! I'll show this to our team [1]; we have a few | keyboard ninjas & I think they'll absolutely love it. | | -- | | [1] team of https://mintdata.com, where we've been known to | appreciate a fine keyboard shortcut or 12. | | [2] partly an inside joke to our team who reads HN, since we | recently shipped keyboard shortcuts for our top menu (Google | Sheets, we borrowed what we could to ease the pain :D ) | denster wrote: | -\\_(tsu)_/- | | Card carrying member of the disagree-club here (malleable | clan), but I think it's a tall order to ask users to write | procedural code. | | Tools that are: | | (1) declarative by nature (HTML, DSLs) | | (2) based on direct manipulation (PSA: we're lucky to have Bret | Viktor on this planet) | | is what will win out in my opinion. | | Or will we be writing procedural code 30, 50 years out? :) | | -- | | [1] YMMV, founder of https://mintdata.com here, where we | recently opened public access & are seeing the above come true. | slifin wrote: | Mintdata looks cool, what does the imperative layer that | drives the declarative layer look like? It'd be nice if this | was a platform where engineers could sell the imperative | layers | denster wrote: | Thank you! Genuinely warms my heart to hear it :) | | We've been using our own "Visual SDK" to build large parts | of MintData for the past few years. | | It's 100% written in TypeScript/React, using decorators | (cough: annotations!) and allows us to: | | 1) add new spreadsheet functions in TypeScript | | 2) wrap any React component | | 3) we get the auto-magic property panel UI "for free" & it | instantly talks to/from the spreadsheet | | For our cloud/backend imperative layer: | | 4) we use our own real-time stream processor (think: Apache | Storm but minus the Clojure stacktraces) | | 5) the SDK lets us quickly write flow blocks in Java using | annotations & connect to all sorts of enterprise-y systems | (SQL/NoSQL stores, Queues, File Systems, etc) | | @slifin -- in terms of engineers writing & selling those | layers, we're open to it -- ping me if you have ideas & we | can give you access to the docs & SDK. | | -- | | [1] I'd put a link here, but the flamethrowers have come | out on this thread :) | chrisweekly wrote: | Looks pretty cool; IMHO it's a good idea. (I once | participated as a consultant / dev on a project to | convert a Byzantine set of Excel spreadsheets into a | deployable application built on web technologies, and | this might have been a saner approach.) | bem94 wrote: | I agree that people would and do find such interfaces very | useful in many of their programs and tools. | | Those with nefarious purposes find them extremely useful too. | It's a lot of work to secure those interfaces against abuse. | conradev wrote: | https://xkcd.com/2044/ | saagarjha wrote: | This is why I believe it to be an "unpopular opinion" these | days as most computing platforms move towards being more | locked down and less extensible; for security or complexity | reasons these kinds of things seem to get little love or are | even axed completely. Usually, the hard part is not security | per se, but identifying user intent. You want to come up with | a process that ensures that the user who enables potentially | dangerous interfaces knows what they are doing. Preventing | the user from doing this entirely is an easy but fairly | disappointing "solution" to this problem. | bem94 wrote: | > Preventing the user from doing this entirely is an easy | but fairly disappointing "solution" to this problem. | | For sure. And if individuals are happy with trading some | security for some functionality/flexibility in their | software, I'll support their right to make that choice. | | It gets more complex when the people affected by that | choice aren't the people making the choice. Which is more | likely in the case of network programs. | | > Usually, the hard part is not security per se, but | identifying user intent. You want to come up with a process | that ensures that the user who enables potentially | dangerous interfaces knows what they are doing. | | Indeed. I'd add identifying developer intent to that as | well. What functionality am I trying to enable v.s. what | else am I actually enabling? Coming up with that process is | the herculean task there. | CapriciousCptl wrote: | I see this and then I think of all the success of strongly | opinionated things like Rails. Having one way to do things forces | you to focus on what's most important, make choices and get | things done. It keeps you away from premature optimization and | analysis paralysis. Yes, you could split things into 100 | different pure pluggable microservices but should that really be | where you put your resources at the beginning? To me, engineering | and for that matter everything you do isn't any doing things the | perfect way-- it's about doing them the best way you can and | moving on to the next problem. | | Some things work well together in a functional pipeline-- Linux | commands that do one thing for instance. EMRs are famously | malleable too, for better or worse. | | But could you imagine being IT managing 1000 PCs all with | slightly different versions of word processors or something like | that? | denster wrote: | Here's a counter argument: | | In college (17 years ago) a professor once told me that | databases largely outlive the apps that use them. | | Imagine a world [1] where IT manages data centrally, but users | are free to interact with it how they best see fit? | | Would this kind of a world be better? | | (provided of course you have the right permission model & audit | trail for modification) | | -- | | [1] Founder of https://mintdata.com, so I'm biased -- malleable | systems are near and dear to our heart | | [2] Professor Franklin at UC Berkeley, if you're reading this, | I am very sorry for not being the most attentive student :) | acomjean wrote: | That's kind of how we design my web applications. | | We store all the data in the database and the applications | query the data/ process and return. We actually have multiple | applications in various languages accessing the data (php, | java, perl...). | | Its genetic data so a lot of tables are shared across our | applications. Gene symbol lookup for example). | | When I started in this field I worked with Lotus Notes. Its | actually a shared nosql database which users can create | applications that query it as they see fit. I was clunky, but | it could be effective in making custom team tools. | philote wrote: | In this sort of world, how do you prevent users from making | bad queries and hogging all the database resources or even | crashing the database? How do you prevent users from wiping | out data? (I get that you could back it up and restore it, | but depending on the company, this could cause serious | downtime and loss of revenue). | denster wrote: | I think of this in two parts: | | 1) Computing is cheap, human time is not. | | 2) Competition in established industries is fierce | (finance, real estate, education, construction, etc) | | -- To the extent possible, I'd: | | a) time out bad queries | | b) add more hardware where feasible | | -- For the "wiping out data" part, I think: | | 1) Mark things as "removed", delete when {GDPR,CCPA,etc} | requires it | | 2) The UIs designed can/should have human processes in mind | -- that is, things like multiple people involved (async) on | what to do with a piece of data (flag it, mark it removed, | send it for approval, etc) -- what a lot of companies are | calling "workflows" and "workflow management platforms" | these days. | | 3) Backup/restore should be used only as a last resort (DR | and the like) | | 4) Versioning like Google Sheets of the UI is _paramount_ | and integration with CI /CD systems is crucial to having | the cake (allowing people to create the tools they want) | while also eating it too (making sure IT doesn't drive the | above-mentioned dune buggy off a cliff in protest) | mtraven wrote: | Should include some mention of Richard Gabriel's "Habitability | and Piecemeal Growth", a really good essay on this topic from | almost 30 years ago... | https://www.dreamsongs.com/Files/PatternsOfSoftware.pdf | 0xDEEPFAC wrote: | In my experience, this line of thinking tends to lead to | inefficient and hard-to-manage large projects based on languages | which are convenient on a small scale. | | _Cough_ Electron _Cough_ https://medium.com/commitlog/electron- | is-cancer-b066108e6c32 | | I mean, what percentage of users are adept enough to change a | program they use and then what percentage of them would even | _want_ to go through the trouble of doing it. Moreover, why | should we go through all the hoops needed to encourage novice | /non-programmers to modify things they don't _really_ understand | anyway. | | This seems like a solution/problem in search of a problem. | saagarjha wrote: | Nobody said you need to bundle a Chromium engine to make a | program extensible. | danShumway wrote: | If you want to talk about text editors in that post, Emacs is | wildly, almost obscenely configurable (I'm currently using | Emacs as my Linux WM[0]). Vim has its own scripting language | that you can use to write custom bindings and configs, and they | can get similarly complicated. Sublime has a pretty good Python | API. Even Nano can have its syntax highlighting extended. | | The extensibility of those systems are why they've stuck | around. The composability of Vim's keybindings are why people | keep reimplementing Vim modes in different pieces of software. | | If you don't like Electron, fine, but what does that have to do | with building malleable systems? Can you name me any popular | native text editor that's used for serious work and that | doesn't support plugins? | | > Moreover, why should we go through all the hoops needed to | encourage novice/non-programmers to modify things they don't | really understand anyway[?] | | This is like asking why a programming language should have | power-user features in it. I mean, by that logic why would | anyone add pointers to a language like C? Pointers are hard, | and most programmers aren't very good with them. Why go through | the hoops needed to encourage programmers to use a memory model | that most novices don't understand very well? | | If you design a system or program only for beginners and no one | else, then only beginners will use it. Once they've matured, | they'll leave so that they can find something else that meets | their evolving needs. Good software design considers the entire | life-cycle of how a user will interact with a program as they | develop and learn new features. | | Many users will never get to the point where they'll want to | program extensions themselves, but even they will often benefit | from having extensions written for them by the surrounding | community. | | [0]: https://github.com/ch11ng/exwm | twelvechairs wrote: | I have thought about this for a long time. For me the meaningful | change means it needs to work at the OS/GUI level. | | What people miss in this thread is there 2 kinds of complexity we | deal with - one that is fundamentally understanding the field and | a second that is understanding the complex tooling required to do | things. The latter has been getting much more complex lately | (frequently multiple programming languages and multiple software | packages) and a good set of fundamental tools that can operate in | a loose environment is absolutely a big thing to aspire to | mrfusion wrote: | I always liked the extension system in browsers. | PaulDavisThe1st wrote: | We had a moderately long thread on the question of scripting | versus "change the code" over on the ardour.org forums, starting | with a post from me ... | | https://discourse.ardour.org/t/is-open-source-a-diversion-fr... | | TLDR: i still don't know if most of our users would prefer a more | scriptable application even if it was closed source. | oliverx0 wrote: | This is the vision that Seliom, the startup I am working on, has. | We are still too early and don't have documentation to share, but | the idea is to give business owners the power to easily change | digitized processes in minutes. | bri3d wrote: | Wasn't this the idea of the 4GL and 5GL craze in the 1980s and | 1990s? | awinter-py wrote: | > software must be as easy to modify as it is to use | | interesting metric, reallllllly bad target | austincheney wrote: | Does this article literally mean _easy_ as in hire somebody else | to do it for you or does it mean _simple_ as a one step change? | By no means is that clear from reading the post. | | This subject of easy versus simple is frustrating, angrily so. | | I frequently see people asking for things to make various | software tasks more easy. When I see anybody ask for easier the | only appropriate question is: _How easy does it need to be?_. The | question isn 't rhetorical, because I doubt (from experience with | this issue) that the person asking for easy has any idea about | what the end state of what that easy should comprise. | | Here is a real life example: | | At work there is a software component that has jQuery 1.x | embedded and this failed an internal security audit. To solve for | the audit failure version 1 of jQuery must be removed from this | application. My first thought is to simply remove jQuery all | together. You don't need it, but jQuery is easy. I was denied | from removing jQuery, so I have to upgrade it. | | I upgraded jQuery and it breaks the application. I tried 3 | different versions of jQuery Migrate and multiple versions of | jQuery 2 and 3 and no luck. The application is broken. | | This quest for easy is wasting an absurd about amount of time, so | far a week, and its still ongoing. Knowing this is absurd I took | the initiative to simply remove jQuery. I removed the jQuery | library (about 12000 lines of code uncompressed and about another | 100 lines for AJAX prep in our application). I then added about | 20 lines of code for standard XMLHttpRquest handling. The | application works perfectly, but fails a code review. We must use | jQuery. | | I tried to explain this to nondevelopers and couldn't do it in a | way that empathizes with the need for easy, because at face value | it seems irrationally absurd. No matter how I tried it always | sounded stupid. So, instead I have learned to explain like | driving a car. | | Imagine you are a professional driver. You have been driving | professionally for 10 years and have quite the validated resume. | You have experience driving sedans, limousines, trucks, and so | forth. You can drive safe and fast. You come to the current | client highly recommended. A transport service dropped off an | extremely expensive super sports car at an import broker and you | are required to drive it to the client. | | You hop into that driver's seat and are shocked to discover there | is this weird stick thing in the middle console between the seats | and 3 foot pedals. Remaining confident you put the keys into the | ignition but the car doesn't start. You sit there for 10 minutes | completely lost. You have never seen a car with 3 pedals or a | weird stick between the driver and passenger seats. Clearly, the | car must be broken. Never mind that somebody just pulled the car | up to you and never mind that its a standard transmission, which | is the default in most super sports cars. | | Obviously the car is broken. The best recommendation is to | investigate the car for mechanical defects, swap out the manual | transmission with an automatic and after $18000 and 3 weeks it | will be ready to go. Easy, now any qualified driver can drive the | car. | | Simple, conversely, is just putting your foot on the clutch while | engaging the ignition. The car starts without delay and allows | for greater speed and precision at no extra effort. | | As a web developer most of the software I encounter is easy and | extremely fragile, but its certainly not simple. This is | especially true when you out grow your giant framework. | thesuperbigfrog wrote: | The Malleable software principles seem to be more of a "No Code" | / "Low Code" wish list with some similarities to the Four | Freedoms of the Free Software Foundation. | | >> "Software must be as easy to change as it is to use it" | | Easy is relative. I find command-line interfaces remarkably clear | and easy to work with, but others might not agree with my | opinions or preferences. How easy is "easy"? How do you know if | software is easy enough? How can we fundamentally simplify the | essential complexities of software development so that it is | approachable by "the man or woman on the street"? What incentives | do we have to do so? | | >> "All layers, from the user interface through functionality to | the data within, must support arbitrary recombination and reuse | in new environments" | | >> "If I want to grab a UI control from one application, some | processing logic from another, and run it all against a data | source from somewhere else again, it should be possible to do | so." source: https://malleable.systems/mission/#2-arbitrary- | recombination... | | If you have the software source code then this might be | technically possible, but licensing restrictions may come into | play. Short of the source code, the "no code" / "low code" | software development pipe dream needs to become a reality and | then become standardized to allow for component interoperability. | It might be possible, but the question of incentives comes up | again. If I were a company selling a production-quality "no code" | / "low code" system, why would I make it interoperable unless I | was trying to undercut a competitor? | | Compare to the FSF Freedom 1: "The freedom to study how the | program works, and change it so it does your computing as you | wish (freedom 1). Access to the source code is a precondition for | this." | | >> "Tools should strive to be easy to begin working with but | still have lots of open-ended potential" | | How do you define or measure "open-ended potential" from the user | standpoint? | | >> "People of all experience levels must be able to retain | ownership and control" | | Does this imply some kind of built-in DRM or is it merely | copyright and licensing? How would ownership and control be | enforced? | | >> "Recombined workflows and experiences must be freely sharable | with others" | | This nests pretty closely with the FSF Freedoms 2 and 3: | | "The freedom to redistribute copies so you can help others | (freedom 2)." | | "The freedom to distribute copies of your modified versions to | others (freedom 3). By doing this you can give the whole | community a chance to benefit from your changes. Access to the | source code is a precondition for this." | | How does this principle combine with the previous principle about | retaining ownership and control? How is it different from | copyright and licensing that is currently used? | | >> "Modifying a system should happen in the context of use, | rather than through some separate development toolchain and skill | set" | | Using software and building software are different activities | that REQUIRE different knowledge and skill sets. This is roughly | the equivalent of wanting to modify your car without | understanding how the drive train or transmission work. If you do | not understand the underlying natural laws that govern how | something works then how can you expect to make changes that do | what you want? Lack of understanding leads to cargo cult | reasoning and magical thinking. | | >> "Computing should be a thoughtfully crafted, fun, and | empowering experience" | | It depends on the person, but actually learning how computers | work and how to program computers can be a fun and empowering | experience. | badsectoracula wrote: | > Does this imply some kind of built-in DRM or is it merely | copyright and licensing? How would ownership and control be | enforced? | | I think this refers to the _user_ being in control (as opposed | to the developer) and having ownership of their computing | environment. | thesuperbigfrog wrote: | But in a Malleable System, the user becomes a developer or | something closer to a developer. | | The links in the principles give more details: | https://malleable.systems/mission/#4-retain-ownership-and- | co... | | For this principle, it says: | | >> "A fundamental problem of today's software ecosystem is | that we do not own or control the software that runs on our | devices. In addition, much of the actual processing logic has | been passed off to remote systems in the cloud, so only the | inputs and outputs are observable." | | >> "We must ensure that malleable software approaches allow | the customisations and personal workflows you create to be | owned and used as you see fit. If an approach relies on some | amount of remote functionality (perhaps to assist with | pulling apart an application or service), we must ensure | there's a clear path for anyone interested to keep those | dependencies alive so that their workflows are not disturbed | if the remote service were to shut down." | | >> "This has many parallels with the ongoing movement towards | data ownership, which is gaining popular awareness. Although | the data ownership movement typically focuses on identity and | social data, the programs and customisations that authors | create are personal creative expressions. Authors must retain | ownership of their data, programs, and customisations just as | anyone would expect to have control over a book they wrote or | art they created." | | The first paragraph definitely matches up with your point | that the user should be in control of their computing | environment. However the third paragraph certainly seems like | copyright and licensing are implied. | chrischen wrote: | Functional programming to the rescue! | pjc50 wrote: | Interesting to put this on the front page next to the "immutable | infrastructure for mutable systems" one. | | The thing is, these drives pull in opposite directions. If it's | easy to change it's easy to break, and changes drive entropically | downwards as it's always easiest to make the quick and dirty | change. | | Malleable systems are great for expert users, but can easily be | turned into a ball of mud by a non-expert. Hence the popularity | of Chromebooks. | | Security also enters into consideration. Anything that can be | programmed can be attacked. Any program that reads external data | is an attack surface. | | Look at the history of e.g. web browser extensions, and how they | have become more and more locked down to prevent abuse by bad | actors. | teodorlu wrote: | And in the intersection of mutability and immutability you have | fantastic experiences like live editing and time travel. | /Where/ the interface for mutability is located is essential. | rektide wrote: | I agree there's a tension. | | There are strong engineering impetuses for control, for | provability, for ahead-of-time decisions, for immutability. | Engineers get woken up when things go wrong, they get blamed | when things go wrong, & they want, they have to deal with other | engineers code doing bad things with their code, & the software | world has a wide variety of strategies, tools, & outlooks that | all try to build safety, certainty, that restrict & constrain | systems, to keep anything unexpected from happening. | | I feel, though, that characterizing malleable systems as being | for expert users alone is a great injury. At present this may | match expectations, but I don't think it's fair to make an | assessment of how or what computer-users want when, at the | moment, they don't really have the options. There are too few | malleable systems out there to judge. What general malleable | systems we do have require advanced expertise to use- | AppleScript, DCOP (Desktop COmmunication Protocol), DBus, | WebExtensions all require at least some programming style | skills to use. But I think this expertise is owing to a broad | lack of investment in building malleable software. Most | software strives to give the user a specified & specific | experience, not be a malleable system folks can get the | experience they want out of. I don't think we know how much | latent pull users have, how strong the tension is to be | released from engineer's certainty, because I don't think there | are even many testbeds, much less a broader societal view of | systems flexibility, systems adaptability, of softer software. | | To me, I just think it's clear that, whatever valid concerns we | do have, whatever justification we have for building endless | arrays of rigid systems, it seems like it's not worth it | anymore. We keep making more and more software, the profusion | of software applications is a torrent of similar-but-different | applications, focusing on shuffling this or that kind of data | specifically, yet the generality, the inter-connectedness of | the pieces seems so weak, and it seems like we've shut users | out from having any creative capabilities & control of their | own. | | I think WebExtensions are a very interesting case. The killer | aspect, to me, is that the extensions work invisibly. We can't | rely on everyone becoming an expert extension operator, but I | do think that some reporting mechanisms on what extensions do | would radically reshape how the community review's & socialized | the extensions they use. In many ways, it's that the extensions | are a means of exercising the malleability of hypertext, but | they themselves are rigid & unmalleable & opaque. A part of | being malleable- a precondition- is making yourself visible, | providing viewability into what is happening, such that folks | can reshape & redefine & redirect those actions that you the | software are enacting. So the circle needs to grow more, is | what it seems to me- rather than lock down extensions, rather | than rely on authoritarian centralized powers to moderate | extensions, my plea would be to make extensions malleable too, | to make their working visible too, and to try to let | consciousness & human adaptability start to take hold in this | realm. | | You're absolutely correct that there are good reasons why | software is so rigid & inflexible & opaque. Security has been | nightmarishly cumbersome to the whole industry for the last | decade. And I think malleability does indeed open up a lot more | surfaces, endlessly opens surfaces. But at some point, we have | to develop systems that have a co-relation with their | operators, that respect the operators, that let them see what | is happening & let them work their own systems. Continuing to | try to push computers forwards entirely on the assumption that | the user is worthless, does not know anything, and can not | understand what is happening has cornered us, has cut off the | chance to try & explore other options. | AnIdiotOnTheNet wrote: | On the other hand, malleable systems are responsible for | enormous increases in the productivity of computer users. We | may all hate kludgy excel spreadhseets with a nightmare of | tangled hacky VBA code, but you see that sort of thing in a lot | of businesses' critical workflow because that kinda of | malleability by "untrained" users was invaluable in the earlier | life of the business. | Jtsummers wrote: | It's still invaluable in highly locked-down office | environments. It lets users automate things that they | wouldn't be allowed to automate otherwise (needing a full | development environment or the ability to run arbitrary | executables or access to Powershell). | ereyes01 wrote: | I can see immutable infrastructure and this concept working in | a copy-on-write model. For instance, if a service is up and | running, a modification can consist of duplicating the | infrastructure so you have your own copy and then making the | modifications. It localizes the change, and in theory keeps the | original unmutated. | | I have no idea how this would work in practice. This manifesto | seems to go against the grain in other ways, as I'm not sure | how it can coexist the economic model of SaaS that has emerged. | Also, as others have said, the security and UX implications are | big concerns that threaten the feasibility of this idea. | rwmj wrote: | This is describing Smalltalk and Lisp Machines? | jshap70 wrote: | title makes it justifiable for systems to both be hard to modify | and difficult to use | dustingetz wrote: | "Mission... reset the balance of power" | | Does any of the real economic activity want to reduce its power | and influence? that's the opposite of a startup | rektide wrote: | My guess is there's a lot of companies that would do very very | well, if we opened up software & made it flexible. | | The entire era we live in/just left, the PC era, happened | because of Adversarial Interoperability. Massive economic | activity was created because "real economic activity" had | "reduce[d] its power and influence", as PC-compatible systems | emerged & created a robust, fast growing, competitive market | place. | | Did IBM want to? No. But enough legal space was still there to | allow companies to create. While IBM could patent inventions, | they could not own the idea of an addition ops code to add two | numbers. | | I'd content that the lack of Adversarial Interoperability, this | low standard we've sunk to in software world, is holding back | vast seas of economic activity. We cannot effectively build new | better more interesting, systems, when each piece of software | is a closed, inflexible box. We've got to open up to | possibility again, just as PC-Compatible opened the doors of | possibility that brought Very Large Scale Integrated circuits & | systems to us all. | | Support Adversarial Interoparability. Support Malleable | Systems. Support an open future where people can have | meaningful interactions with machines & build meaningfully | better ones. https://www.eff.org/deeplinks/2019/10/adversarial- | interopera... | oblib wrote: | Ok... I am a self taught "app maker". Not CS grad. Not a | "software engineer". | | I use tools that other's here create to make apps. What they do | is way over my pay grade but I can use well written and | documented APIs, especially when some example code is supplied. | | I think I'm closer to the target this applies to. Compared to the | folks who create something like jQuery or PouchDB.js, I'm a | laborer working in the fields with the tools (APIs) they create | and provide. | | What I do is more akin to a craftsmen than a "software engineer". | I'm sure some of what I've made is pretty crappy from an | engineering viewpoint. I struggle sometimes to get stuff to work. | But I also make software that some people love using. | | It's a pretty low bar to learn how to use HTML, CSS, and even | tools like jQuery, Bootstrap, and PouchDB.js. What you can make | with them can be very useful, and very specific. And it can be | fast and easy to make too. | | I guess what I'm trying to say is the bar is now low enough that | we can start teaching others how to make apps as a trade skill. | joe_the_user wrote: | Well, I think this is one of the "gatchas" in an idea like | this. The malleable system you're talking about is only "a bit | malleable", you can take it's elements and add a bit more. This | is something like a "producer-consumer" model. To build a small | or a medium-sized system from such standard elements is now | reasonably simple - the original component set seems malleable. | But once you've built your medium-sized system, changing it | actually becomes hard, the resulting product is no longer | malleable. | denster wrote: | (!) This! | | First, big props for shipping stuff that people use. | | Second, I've [1] often compared 90% of what we do in software | development to being highly trained baristas. Granted, this | buys me little love from engineers & even less from Starbucks. | | To the point -- I think it's time we rise up & start to use | more powerful tooling. | | Tooling that: | | 1) Lowers the barrier for who can author software (really, web- | based interfaces that help us get stuff done, the way _we_ want | to accomplish a task) | | 2) Doesn't introduce more chaos (disparate data spread across | 10 SaaS products, death by 1,000 spreadsheets by email or in | Google drive, no centralized/secure/managed storage, etc) | | 3) Emphasizes that a superb user experience is table stakes for | such tooling. | | Thoughts? | | -- | | [1] founder of https://mintdata.com here, so just a tad biased, | take the above with a few pounds/kilograms of salt. | | [2] oblib -- DM me, we're happy to give you free access if | you'd like -- the above wording just warms our collective | hearts. | taurath wrote: | > highly trained baristas | | And its sort of an insult to training, since there is very | little actual formal training. Over 95% of the processes I | use in developing software and systems are ones I've learned | on the job, not learned while learning to be on the job. | | An apprentice system would work extremely well with software | development. | denster wrote: | 200% agreed. | | I learned to develop software [1] before the interwebs, | where we would just kind-of hack things together in C/Unix. | Manuals were our only (& best!) friend. | | I then went to uni for a CS degree, and they had a very | "holy grail" attitude about the whole affair. | | I agree that: | | 1) an apprentice system would work better 2) we have _got_ | to get more powerful tooling out there, into people 's | hands | | -- | | [1] founder of https://mintdata.com here, which makes me | biased on the above | | [2] I'm still reminded of a world where the bridge between | creating & using software was much smaller (not to mention, | user interfaces were much snappier!) Here's a virtual toast | to hoping we can one day come back to that reality. | throwaway_pdp09 wrote: | I'm going to disagree here, though sort of understand what | you and the original poster are saying. | | In short I've seen the mess that 'unsilled' people make using | complex tools. Tools such as databases (my area) are | presented as being easy to use by microsoft, who make a lot | of effort to make it easy to use. Too easy. Not because I | want to keep people out, far from it, but because if they | don't know what they are doing they get only so far, then | things go bad and they've no idea why. Drag/drop, point/click | only goes so far. | | I guess no complex tool can be (or should be?) used with | concomitant levels of training. It's not an argument for code | gurus to make themselves a comfortable walled garden to | preside over and keep others out, it's an argument that tools | should come with training, always. | | The problem these days is the hirers just want everything | (blah blah full stack blah) and don't understand the cost of | getting it wrong because it works - up to a point. MSSQL, | Spark, Kafka, down to failure to understand how CPUs work. | They all get treated as black boxes, and that's fine up to a | point. Then things break or don't scale. Out of my sphere I | see so many websites that have no basic understanding of | usability, or standards, or accessibility, security and by | web devs that barely understand HTTP. | | If it's plain line of business, unimaginative gruntwork that | keeps a business alive with spreadsheets etc, then that's | what's needed and basic understanding is sufficient. I've | done plenty of jobs like that, they keep the economy going, | but if you want heftier dev work, I don't think that will | suffice. | | I guess that makes me sound a snob. Not intended that way, | just saying complex tools may not be usable to their full | capacity without understanding them. I may be wrong too. | gatvol wrote: | The two aims of the argument are often at odds in my experience. | You can generally have one or the other, seldom if ever both | tmikaeld wrote: | Eric Elliot would probably jump on this, considering his books | and series https://medium.com/javascript-scene/composable- | datatypes-wit... | lerpapoo wrote: | open ended thinking on a framework level is basically R&D, many | companies don't have money for R&D, they just need something to | sell and get paid so you can get your next paycheck, but u can | try and find a sugar daddy or live off of foodstamps for a few | years and really put some thought into it lol. | AriaMinaei wrote: | Alan Kay: It was kind of like what we have today, but better. It | was a completely integrated system that was not made up of | applications, but "objects'' that you could mix and match | anywhere. You've got a work area and you can bring every object | in the system and you just start: You've got every tool, you've | got every object, and you can make new objects. It was | programmable by end user, and it had the famous GUI. | | Larry Tesler: It was the first one that was graphically based- | overlapped windows, a mouse, stuff like that. | | Adele Goldberg: It was very much a GUI demo. | | Dan Ingalls: I was scrolling up some text and Steve said, "I | really like this display." | | Alan Kay: At that time, when text scrolled, it did so discreetly: | So jump, jump, jump-like that. | | Dan Ingalls: And Jobs said, "Would it be possible to scroll that | up smoothly?" | | Alan Kay: "Can you do it continuously?" Steve liked to pull | people's chains. | | Dan Ingalls: Because it did look a little bit jerky, you know? | | Alan Kay: So Dan or maybe Larry just opened up a Smalltalk window | and- Bruce Horn: -changed a few lines of code in Smalltalk, and | in the blink of an eye it could do a smooth scroll. | | Alan Kay: And so it was like, "Bingo!" And so Steve was impressed | but he didn't know enough to be _really_ impressed. The other | Apple people just shit in their pants when they saw this. It was | just the best, best thing I've seen. | | Dan Ingalls: I think that sort of blew Steve's mind. Certainly, | just about anybody who worked on development systems responded | really well to that particular demonstration. It really showed | how the Smalltalk system could be changed on the fly and be | extremely malleable in terms of stuff you could try out in the | user interface. | | Alan Kay: On Smalltalk you could change any part of the system in | a quarter of a second. These days it's called live coding, but | most of the stuff today-and virtually everything back then-used | compiled code, so your programming and editing and stuff like | that was a completely separate thing. You had to stop the system | and rebuild. | | Dan Ingalls: So you had a regular sort of programming environment | sitting there in front of you with windows and menus and the | ability to look at code and stuff. But the neat thing about it | was that if you edited the code, it would actually change the | code that you were running at that very moment. The object- | oriented architecture made it really, really quick to make | changes. | | Bruce Horn: Even today if you wanted to change something at the | level of the operating system in MacOS or Windows, it's simply | impossible unless they have decided to give you that option to | smooth-scroll or not. It's simply impossible to get to the source | code to do that unless you're an employee-and even then it would | probably take six months to get that feature in. Whereas within | Smalltalk, you pop up the menus, accept the change, and it's | working right now. You can't even do that today. | | (from Valley of Genius: The Uncensored History of Silicon Valley) | goatlover wrote: | It's interesting how the ideas of the Smalltalk and Lisp | systems of the 70s and 80s get reintroduced over time, but | they're never fully embraced, even though some of their | features make it into the mainstream. Emacs would be an | exception. Makes you wonder where Smalltalk-inspired systems | would be today if they had the kind of support popular | languages have received. Imagine Smalltalk receiving the kind | of attention Java, Python or Javascript have the past 20 years. | ddevault wrote: | This is something I like about Plan 9 (and I like basically | everything about Plan 9). The entire OS's source code (the | kernel, userspace, everything) is available at /usr/src and can | be compiled and installed with these commands: | cd / . /sys/lib/rootstub cd /sys/src mk | install | | It takes about 5 minutes. Want to cross-compile for another | architecture? cd / . /sys/lib/rootstub | cd /sys/src objtype=arm64 mk install | | If you haven't tried Plan 9, you really ought to spend your next | spare weekend messing around with 9front. | | http://9front.org/ | | No other technology you could spend your weekend with will have a | larger impact on your way of thinking about computers than Plan 9 | might. | PaulDavisThe1st wrote: | Plan 9 is lucky - by design it is self-contained and has no | dependencies. | | One of the hardest parts about building many complex open | source projects (particularly on Windows and macOS) is getting | their dependency stacks in order. | ddevault wrote: | All projects would be well served by carefully keeping their | dependency graph small and conservative. | qqii wrote: | Unfortunately I think plan9 only remains this way by keeping | the people who use it small, being elitist and somewhat | unwelcoming[0]. That's not to say I wouldn't also recommend | spending a weekend messing around. | | I was recently having a conversation about the unix philosophy | on reddit[1]. As _nix and software built for_ nix became more | and more mainstream it becomes harder and harder to keep with | the unix philosophy and the philosophy of this post. | | [0]: http://fqa.9front.org/ [1]: https://youtu.be/XvDZLjaCJuw | ddevault wrote: | The reading material is "unwelcoming" to discourage coming | into it with any preconceptions. If you go into it trying to | make it do $x, you'll have a bad time and send lots of | annoying emails to the maintainers. If you come into it | wanting to learn about it and derive an $x from your | experience, you'll have a better time. | gm wrote: | I think it's a pipe dream. Non-experts making changes to a system | an expert wrote will yield either: 1) very few little changes, | such as changing the color of an item, etc. Or 2) disasters where | it's better to throw away the changes and start over doing it | "the right way". | | Just look at automobiles: They are malleable indeed. We've all | probably seen pics of modifications of all types, from the | hillbilly type VM bug/truck combination to the amazing Cobra | replica that few can tell from the real thing. In all cases, the | craftsmanship level (and budget) of the person doing the | modification directly affects the quality of the result. And how | many cars are there whose modifications simply failed and the car | never hit the road again? | | The same in software. Give Annie in accounting the ability to | modify the inventory system and you will have a disaster in your | hands, especially if she does not know much about the | architecture of the system and/or she's not a matter expert on | inventory methods and procedures. In that case I'd much rather | trust my company to a hard-to-change system than one where | everyone can mess with and break it beyond repair. | | I think the false premise here is that non-experts can build on | the work done by experts. And I'm talking about both experts in | programming who built the system in the first place (ie, add | shitty architecture on top of good architecture), and experts in | the domain the system is solving. If you get a smart your | developer who is a solid coder to make changes to the | aforemetioned inventory system, he will probably break the system | (at least in the edge cases), albeit with beautiful, readable | code. | | I just don't see how it's possible unless the ability to expand | the system is severely limited (ie, not a "malleable system"). | denster wrote: | Whoa! What do you have against hillbillies? :) | | Jokes aside, imagine if Annie in accounting has the ability to | define her own malleable tools, on top of a solid/robust system | for centrally managing data? (version, backup, secure via IAM, | etc) | | Or will we really be stuck writing procedural code for the next | 20, 30, 50 years? | | -- | | [1] Caveat: chief hillbilly of https://mintdata.com here, where | we think you really can have your cake (create expressive | tools) and eat it too (centrally control, manage, and version | your data) . | chrisco255 wrote: | Hillbillies are some of the best mechanics. | ghayes wrote: | You've linked to your site on at least 4 comments in this | thread, which is really taking away from the comment | experience. I am glad you're enthusiastic, but make sure the | disclaimers don't take away from your (otherwise great!) | comments. | denster wrote: | Point taken :) | | Is it ok to shill Roosevelt? | | [1] https://youtu.be/Mm4epcGApnY?t=14 | derefr wrote: | Sure, but that's not "modifying the original system" any | more. That's taking the original system (original | abstraction) as a fixed/static foundation, and then | expressing things in terms of it. | | Which, I mean, if the tooling you've made is Turing-complete | (Excel, Unix) then you can certainly say that the person | working on top of your system is "programming"; but they're | not programming _your system_. They 're not writing plugins | that interface with it on the same terms that its components | interface with one-another (as you would be if you e.g. wrote | your own POSIX shell utilities in C); they're trapped "above" | that abstraction, in a sandbox, one from which they can only | access the narrow subset of the API surface that you | explicitly chose to expose to them. | | Let me put it this way: you can get pretty far using e.g. | Postgres as a custom data platform, by defining custom | functions and types. But at some point, you'll need to write | a Postgres extension. There's a big difference between a | system that makes it easy for someone who's not a | professional programmer to work on top of it (PG | functions/types) and a system that makes it easy for someone | who's not a professional programmer to _extend_ it (PG | extensions.) I 've not yet seen a constructive proof that the | latter is even possible. | denster wrote: | I'll give you an example that mid-way [1] disproves the | above. | | Think of a typical "product tour" in a SaaS product. We're | building the MintData product tour, in MintData itself. We | then "publish" this "product tour application", and include | it with the original blank design that a user gets when | they first enter MintData. | | So, in a way, our MintData onboarding is built in/on | MintData itself, a bit like how you can have a | bootstrapping compiler (one that compiles itself). | | So, is the above us "modifying the original system"? | | I think to some extent yes, although we have special | spreadsheet functions that help jump the gap between | Onboarding Application and Blank User Design (akin to the | Postgres extensions [2] above). | | So I think it _is_ possible to build a system that allows | you to then customize the system 's own behavior (earlier | versions of MintData could not build the onboarding | experience, similarly to how the first compiler has to be | built in a lower level language). | | Genuinely curious -- derefr, do you agree or disagree with | the above? | | -- | | [1] Chief abstraction wrangler at https://mintdata.com, so | YMMV on the above. | | [2] As a person who was held at Grade-point and forced to | write PostgreSQL C code to "modify the original [Postgres] | system", I can only say it's an acquired taste :) Even Prof | Franklin at UC Berkeley I think would back me up on this :D | :D | GuiA wrote: | Seeing your product shilled so blatantly repeatedly as | one goes down the comments in this thread is pretty off | putting. | denster wrote: | Ouch! That hurts! | | My only response is this: | https://youtu.be/Mm4epcGApnY?t=14 | derefr wrote: | I think I get what you're talking about. Some systems are | designed in such a way where the "platform" is formed in | two layers: a low level, which exposes a set of | primitives; and then a set of _abstracting core | libraries_ , implemented in terms of those primitives. | Users are expected, idiomatically, to create business | logic by making calls into the core libraries; but | they're also free to call on the low-level primitives | directly. In such a system, the "userland" sits directly | on the primitives, with the core libraries as a sibling. | | This is the pattern adopted by some, but not all, | "runtimes." For example, Erlang has the low-level BEAM | VM, and then has the Erlang "kernel" implemented as BEAM | bytecode, rather than as native emulator support code. | For another example, MOOs (object-oriented MUDs, e.g. | LambdaMOO) only had the barest object-graph | infrastructure specified in native code; everything else | about the foundations of a MOO was defined in terms of | objects and classes held in the MOO's state database. | | In such systems, you have a sort of "intermediate" level | of access to the native API surface, greater than the | kind you have from the userland of a traditional VM or OS | kernel. | | Still, this "intermediate" level of access still doesn't | allow you to break through the abstraction layer that the | low-level primitives are founded upon. If there are any | "complex" primitives implemented entirely natively (e.g. | Erlang's `term_to_binary` function), then you can't | "break into" that primitive to extend it unless the | native runtime has been extended with an explicit | "upcall" hook back into the VM userland. | taurath wrote: | > I think the false premise here is that non-experts can build | on the work done by experts. | | I'll take a different side to that argument - it is dependent | on the expert to establish the bounds and rules of change to a | system. How a system naturally grows from people with less | context is one of the architectural traits of the system that | can be traded on. | | I have often seen systems which can ONLY be worked on by the | so-called "expert" who wrote it. Even when you hire a new | "expert" level person to work on it, it takes forever and | success is not gauranteed. | | On the other end - a system that actively works against doing | things the wrong way. It has an established core idea with | clear boundaries between the roles of interlocking parts. For | the intended usecase of the system, it is as extensible as it | needs to be, while still remaining within the bounds of the | intended usecase. It does now allow a vacuum cleaner to become | a microwave oven, but it does let you add custom attachments, | modify and swap out drive systems, adjust suction power, and | change body style and hoses for the vacuum. Those can | absolutely be done by non-experts, and the system is still very | malleable. | | Think of all the code on github for libraries people use every | day that is added by non-experts, or hobbyists, or people who | are new. | saagarjha wrote: | I strongly disagree, and I think your example actually supports | this position. Most people don't modify their cars at all, but | for the people that do find great pleasure in it. We see this | with software, too. I think that opposing people who would like | to mess with the things they use is limiting and fundamentally | somewhat disappointing. It's essentially impossible to make | software that caters to everyone's needs, but I think the best | you can do is make something that works for most people out-of- | the-box and let the few people who want to tweak things to | their liking themselves. (To extend your analogy, I don't know | the first thing about cars but I have very few complaints with | mine. If I didn't like something about it, locking me out from | changing it prevents me from taking it to my car-enthusiast | friend.) | megous wrote: | And yet there are tens of thousands of userscripts, even | without any "malleability" intended by website authors, just | because platform allows some introspection and extension: | | https://userscripts-mirror.org/scripts.html | codr7 wrote: | Emacs makes a pretty good example from my perspective, but if | you haven't used it I suppose it makes little sense. Perhaps | AutoCAD from what I understand, but I don't have enough | experience with extending it to say for sure. | | It's not that you have to extend it yourself, the point is to | make it possible. | | Annie in accounting (can't believe you got away clean with that | one :) might ask someone else in the company to help her add a | shortcut or whatever, or the company might hire an outside | consultant. | | There's an entire gradient from non-technical to expert that's | effectively shut out from modifying most software. | | Now I'm as guilty as anyone, getting a client to pay for an | advantage they can't imagine the consequences of isn't | happening much. But I can certainly see the value. | oblib wrote: | >> from the hillbilly type VM bug/truck combination to the | amazing Cobra replica that few can tell from the real thing. | | lol! I'm a hillbilly living in the Ozarks who used to make | custom cars for movie stars in Hollywood and race cars for guys | like Larry Fullerton and Tony Nancy. | | Thanks for the laugh! | throw1234651234 wrote: | Our software always starts out as super-clean, easy to change, | human-readable, etc. | | Then requirements change 100s of times, on a deadline, and that | it's no longer a pinnacle of those qualities. | mikejulietbravo wrote: | This would make a lot of sense for designing things around Web | 2.0 - it's as easy to create content as to consume it. | | For software in general? This is insane. The key reason? Domain | knowledge. | aey wrote: | The unfortunate outcome is more yaml and less lisp or small talk | :( | hugozap wrote: | Complexity has to go somewhere. Because systems are just piles of | abstractions and conventions "easy to change" is very relative. A | compromise will always be required. A simplification here means | pushing complexity somewhere else. | | What I think is a practical way to see it is to have a good match | between your audience mental models and the system conventions. | kccqzy wrote: | > A simplification here means pushing complexity somewhere | else. | | And it is a good idea to concentrate complexity on a few small | pieces of software that only experts are contributing to. Think | your typical web applications and databases: your app doesn't | need to think about how data is laid out on disk and how on- | disk indices are implemented; all of those complexities are | pushed into the database. It's a good compromise. | searchableguy wrote: | I don't agree with it. | | A good deal of complex software is abstracting away on existing | complex systems that you run on. without understanding the | underlying system, you can make guesses about what something is | doing but that wouldn't be ideal always. | | For example, package management. Your package manager might | verify the files, check for existing configuration, setup | permissions, directories, do dependency resolution, and lot more. | | In practice, it is just package manager install something. | | How will you modify the package manager without understanding | what exactly is it abstracting away from you? | souprock wrote: | I do this. Just yesterday, I changed a large piece of software. | | I didn't have any source code for it. I think it may have been | written in C++, but that didn't matter. I had the *.exe file, | which was all I needed. | | I used IDA Pro to study the software. You could use Ghidra, | Binary Ninja, or Hopper Disassembler. They are pretty similar. I | used xxd and joe to modify the software. You could use dd and | echo, or a proper hex editor. | | I found the function that was annoying me, practically causing | the software to be malware. I inserted the bytes 33 DB (a XOR | opcode) near the end of a function, then removed the bytes CC CC | (alignment padding) from right after the function. | | I seem to have hit most of the points in that article. The big | miss was the unreasonable dream of "all experience levels". That | just won't ever be reality. Mastery of a disassembler is not a | beginner skill. | MaxBarraclough wrote: | This is just silly. No, a C++ compiler cannot be as easy to | change as it is to use. Come on now. | wtetzner wrote: | For compilers that are written in C++, changing the compiler | _is_ using it. ;) | amicin wrote: | Solution: make the C++ compiler harder to use! | saagarjha wrote: | I wouldn't go as far as to say it's (or should be) "as easy to | change", but making compilers that allow for modification is | not novel or unusual: Clang lets you load optimizer plugins | written in C++, for example; Rust lets you write macros in Rust | itself that give you access to the token stream, and Lisps, of | course, are homoiconic. | rubiquity wrote: | I leave this for you without comment: | http://nibblestew.blogspot.com/2020/04/your-statement-is-100... | saagarjha wrote: | FWIW, I consider posting a link that has a title matching the | point you're trying to make, without further clarification or | constructive feedback, fairly lazy. | rubiquity wrote: | My effort matches that of the person I was replying to. But | yeah overall a bit out of character for me. Extremely | polarizing examples to deter something could be progress is | a pet peeve. | saagarjha wrote: | When possible, I think it's nice to aim for something | better than that. While brusque, I don't think I the | comment was in bad faith, so I think it deserved better. | xkapastel wrote: | Of course it can. You can do pretty much anything you like with | software as long as you have the vision. A plugin/extension | architecture can certainly make modifying a compiler easy. What | makes you think it can't? | MaxBarraclough wrote: | Except it doesn't work like that. Sensible architecture | doesn't make compiler engineering trivial. | | Compiler engineering is a highly technical area of software | engineering. Think an average C++ programmer could take an | old C++ compiler like OpenWatcom and make the necessary | improvements to make it comply with the latest C++ language | standard? Not a chance, that would be the work of a lifetime. | They might have a shot at making small contributions to a | compiler, but they'd have to set their sights quite low. | | Another example might be operating systems. The abstractions | offered by modern operating systems are terribly easy to use, | but there's a high skills barrier to doing meaningful work on | the kernel. Similarly, the average web developer stands | little chance of making a contribution to V8 or WebKit. | | This strikes me as analogous to discussing whether it should | be harder to design and build a car, than to drive one. I | don't like to be uncharitable but I stand by my earlier | choice of words: this is silliness. Difficult engineering | fields cannot be made easy. | | I see that another commenter, 'gm', has done a good job | expressing similar points. | m0zg wrote: | Been in the industry for 20+ years and never once have I seen | anything remotely resembling what this manifesto describes. I've | seen several attempts to go in this approximate direction, | though, each ending in a disaster because what's described there | calls for a drastic, "be all end all" over-design that either | doesn't do anything useful at all (example: "zero code"), or is | so complicated that nobody can figure out how to use it (example: | one of the distributed systems frameworks I worked on at Google - | very general, reusable and modular, but you'd need a PhD to even | understand it conceptually). | | This seems to be written by someone who doesn't really know what | they're talking about, but would like to "help" by "writing". | Reminds me of this scene from "The Fifth Element": | https://www.youtube.com/watch?v=CYHO7FRsQAA | | It's akin to looking down into a shaft of a coal mine and | suggesting that miners should breathe fresh air and stay above | ground, because what they currently do is not good for their | health. | goatlover wrote: | Smalltalk, Lisp, Cedar, Emacs, Hypercard and Lotus Notes come | to mind. | cosmotic wrote: | I'm sorry, how is emacs easy to use (as per manifesto)? | goatlover wrote: | There is a bit of a learning curve. I guess Hypercard and | Lotus Notes would have be the easiest to learn. Maybe throw | Excel in also since it can be used (or abused) for a lot of | things. | shalabhc wrote: | This isn't about building software similar to what we currently | have and just making it more end user configurable. This is about | rethinking software so that end user malleability makes sense. | | What does such software even look like? We want some kind of end | user modifiable artifacts, still contained within some | constrained substrate. Think Minecraft or Excel - I can give you | a spreadsheet to calculate some taxes, but you can then dig in, | change the formulae, remix with other sheets, and so on. Most | software is not like this - typically you get some pre canned | views and switches, not a canvas of composition. | jcelerier wrote: | plenty of people use software such as Max/MSP, PureData to do | exactly that | denster wrote: | This is exactly what we built at MintData. [1] | | A new way to construct software by using a spreadsheet to | define application logic, instead of today's spreadsheets which | breed chaos. | | "A canvas of composition" - I really like that phrase to | describe this approach of re-mixable software creation and | usage. | | --- | | [1] I'd add a link here, but I think folks below might be | sharpening their pitchforks by now :D | duxup wrote: | I feel like I could spend infinite amounts of time coding and | recoding to make things easy to change ... and not get anywhere / | add a lot of unneeded abstraction. | | I've certainly run into plenty of hard coded narrow code that is | brutal to change, but the changes I make are were probabbly not | obvious to the guy who wrote the code in the first place. | GuiA wrote: | A worthy mission, but if the best examples of it are emacs, | HyperCard, and a bunch of academic papers no one wants to read (I | say this as a former HCI academic :), the road ahead is long and | arduous indeed. | | It'd be nice to see the authors of this manifesto make a small | program (image editor, chat client, etc) that embodies the values | they have in mind. | mwcampbell wrote: | Sometimes malleability can backfire. By coincidence, just | yesterday a friend of mine sent me this Joel on Software classic: | | https://www.joelonsoftware.com/2000/04/12/choices/ | | Particularly relevant here is the part about the user who made | their taskbar take up half the screen, making their computer | unusable. | vsareto wrote: | Hah, you can still do that on Win10. | | I wonder why they even bother letting it go to half-screen? | mellow2020 wrote: | Why not? Maybe I have a lot of monitors and want to dedicate | a small one to a taskbar where I see the full pathname of | each editor that has a file open. | | People who just randomly click things without even realizing | they're clicking may just as well delete random files or | worse, the taskbar taking up half the screen is about the | most harmless consequence I can think of. If it's really such | a worry, add a dialog that asks the user "are you sure you | want this?" for anything "weird", with a checkbox to "never | ask again". If people "accidentally" click _that_ , too, that | is really their problem. | marcosdumay wrote: | You know, there are plenty of drawbacks on the act of offering | options to the user, but the article touches on none of them. | | It has really the wrong focus. It talks about pop-ups and | distracting messages; it talks about surprising interfaces; it | talks about actions that are hard to undo. But it doesn't talk | about any problem that options cause by themselves. | cptnapalm wrote: | Knew a girl who complained that her computer was too slow. As | it turns out, she had added every add-on toolbar to Internet | Explorer she ever came across. Her usable window was about two | inches tall. Yet, it was the speed she complained about, not | the utterly unusable web browser window. | fjallstrom wrote: | 20 year old article? still fantastic content. wow. | mellow2020 wrote: | > It's true that the first time they realized you could | completely remap the keyboard in Word, they changed everything | around to be more to their liking, but as soon as they upgraded | to Windows 95 those settings got lost, and they weren't the | same at work, and eventually they just stopped reconfiguring | things. | | Who is "we"? That didn't describe me in 2000 and describes me | even less today. | | Being able to moving the taskbar is bad because his friend shot | herself in the foot this one time, but "we all love Winamp | skins" -- because the person whose winamp turned unusable | because they double clicked the wrong file just didn't happen | to be friends with Joel. Sure, don't make software for me, but | don't try to rationalize it with such gymnastics. | saagarjha wrote: | I disagree with the point made in that article: | | > Every time you provide an option, you're asking the user to | make a decision. | | The best-of-both-worlds is when you give users an option, and | then you pick a sensible default for it. Some of the best | options are the ones that 90% of people don't even know about, | but the 10% that do can find when they need it. I can't tell | you how many hidden "defaults" commands I have run that are not | even exposed to the UI but make my life much, much nicer. | ChrisMarshallNY wrote: | I tend to design software in what I call a "layer cake" fashion. | | Lots of layers, with clearly defined domains, strict APIs, and | each with its own project lifecycle. | | I also tend to "design with SDKs." I treat each module asn an | SDK, which means that I pretend I don't know exactly how it will | be used, and I use my "S.Q.U.I.D." methodology on it. | | https://littlegreenviper.com/miscellany/bluetooth/itcb-04/#s... | hypfer wrote: | "a community space for those interested in redefining our | relationship with software by dismantling the boundaries of | contemporary applications." | | "the collective's mission to get an idea of the revolution we're | working towards" | | It's an art project, isn't it? This needs to stop. | fakedrake wrote: | I miss vimperator :( | save_ferris wrote: | I agree with this in theory, but doesn't this go against YAGNI, | agile, etc.? | | In most commercial applications I've worked on, supporting every | type of interop or integration would never fly from an iterative | development perspective. Or perhaps I'm misunderstanding the | thesis here. | iopeak wrote: | When I read the concerns addressed here I cannot help but think | of the end user (not a developer per say). There is an entire | category of EUSE products that try to accommodate these concerns, | however fall quite short. We need to rethink the entire paradigm | of development, define sectors that need specialized product | concerns (embedded vs games vs cloud) and build holistic | ecosystems around them. There are startups doing this, yet how to | categorize these types of tools is still not established; | therefore hard to point at. ___________________________________________________________________ (page generated 2020-04-13 23:00 UTC)