9 ms·
What Is Software Anyways? Where Does It Exist?
- proc0 2y agoThis question has been of interest to me for a long time. I think it's fine to call it an Abstract Artifact but I think that's too ambiguous, and also we already have a term in computer science that describes what software really is: the runtime. Software is identical to its runtime execution... in other words it's information processing itself. We can have an SSD with Windows on it, and we could refer to that as software colloquially, but it cannot be properly checked until you run it inside of existing software like a BIOS. So until you execute and run it it's really just information on a storage medium.
- MrMcCall 2y agoI consider them to be tools run upon/within other tool(s), their entire purpose being to manifest some kinds of data flow that produce a cascade of changes within a specific context. All the contexts are nested aggregates: software resides within the OS (itself having/providing many contexts), which is within the hardware's complex set of contexts, which is within the network of networks. So, I would say there's nothing really abstract about software systems, except for, perhaps, when we are conceptualizing them, but even then we are imagining something very real that does something very concrete to some real things. One could also look at the software itself, while latent, as potential dataflow; and then, when it runs in its appropriate context, it is an active agent of change, that may or may not be actually accomplishing its goals, depending on its and its contexts' circumstances at the time. There are many reasons developing software is the among the most difficult tasks in the history of human tool engineering. The evidence for that is that there is no industry that I know of in 2024 that is not wholly dependent upon software.
- Dylan16807 2y agoBasically nothing here is specific to software. You can talk about a piece of writing exactly the same way. Even the part about patching; lots of books have revisions. I don't really see the point of focusing on software in particular before answering the general question. It's not being used to bring any special insight, and to my eye it's a false narrowing that makes it harder to answer. > What this means of course is that programs are eternal unchanging things. We don't create programs as much as discover them. This is a hell of a claim to pull out of nowhere. I disagree that sentence 1 implies sentence 2. And calling it a "fact" in the next sentence is bold!
- namaria 2y agoI feel like this is a rehash of the very old conversation "what is math? is it invented or discovered". Note to the author: repeating trivial questions isn't the same as asking deeper questions.
- Koshkin 2y agoIn physics research, things are discovered. In engineering, things are (mostly) invented. Mathematics can be thought of as a combination of those. There are “physical” parts (think of facts of Euclidean geometry) and “engineering” parts (e.g. proofs).
- Dylan16807 2y agoI think that's a legitimate question with math, but not for highly creative/subjective works. And software overwhelmingly goes in the latter category.
- guappa 2y agoUh? Math is highly creative. Probably not school algebra, but what mathematicians do.
- Terr_ 2y agoPerhaps a softer but less-brittle version of this might be: 1. It is possible to define "programs" as an immutable abstraction, much like how "123+456" exists even if I decide not to do the calculation. In this view, we don't mutate our programs so much as we pick a different one to execute instead. 2. We create formal programs in code in response to discovering informal "programs" implemented in people.
- Dylan16807 2y agoNumber 1 is just a library of babel argument. Every sentence that could ever exist can be enumerated in a giant list. That doesn't mean that creation ceases to exist and everything is actually discovery. Number 2 seems overly dismissive of the work of crafting the informal version.
- colordrops 2y agoThis is a much deeper question that just software, but any thing given a label and treated singularly.
- becquerel 2y ago> Irmak believes we should start with our everyday notions. When we talk about software, these are the kinds of things we generally believe about it. The way we talk about software, we being the everyday folk, should inform our theory as to what kind of thing software is While this view is often intuitively persuasive and reasonable, I think we should be careful with it. While you could argue that social constructs are by definition constructed by the beliefs of everyday folk, sometimes our everyday beliefs really do turn out to be fundamentally incoherent. In other words I believe that ontological error theories can be correct and/or persuasive. In any case, people interested in this might enjoy reading the SEP page on computer science, which includes a section on the software/hardware distinction and the ontology of software more generally: https://plato.stanford.edu/entries/computer-science/ https://plato.stanford.edu/entries/computer-science/
- skissane 2y agoI think this is just a special case of the “problem of universals” which mediaeval philosophers endlessly debated, and which goes back to Plato and Aristotle in ancient Greece. However you choose to answer that more fundamental question is largely going to dictate how you answer this one.
- galaxyLogic 2y agoI think the answer is simple: Software is instructions we give to the computer.
- Koshkin 2y agoDijkstra would disagree.
- dartos 2y agoAre books simply ink on paper? Are stories just ordered words?
- pegasus 2y agoInstructions are intentional, ink isn't.
- dartos 2y ago“Instructions” as in directions for accomplishing a task and “instructions” as the binary signals we send to a CPU to process are not the same. CPU instructions may very well not be intentional. Do you know every instruction that your compiler spits out? My point is that calling software just “instructions” is overly reductive. They very fact that CPU instructions can have semantic meaning shows that.
- galaxyLogic 2y agoOf course, instructions always have semantic meaning, whether we give them to the computer or to the humans. The compiler/interpreter/AI translates the instructions I give in a high-level language or now even in natural language to the computer. So in this sense any intentional speech is "software" too.
- elliotec 2y agoWhat about the product of the instructions? Or as another commenter said, the runtime execution? Which of those is more “software” than the other and what does it make the other? Seems reasonable to believe the thing happening due to the instructions is on another level of “abstract artifact” corroborating the point despite semantic nuances.
- atomicnature 2y agoSoftware was telling computers what to do, to get those things done that we wanted done. This still remains software. With AI, the new evolution in software is to skip the "telling what to do" part and directly specifying the goal - "telling what to get done" and let the system figure it out.
- shiroiushi 2y ago>With AI, the new evolution in software is to skip the "telling what to do" part and directly specifying the goal - "telling what to get done" and let the system figure it out. Not exactly. Writing software has always been "telling computers what to do". Using AI to do this doesn't change much. In the very early days (after CPUs were invented), you told the computer what you wanted to do with CPU instructions directly, so you had to figure out how to manage memory and all other tedious things needed to get your program to work. Later, higher-level languages were developed to abstract the complexity of the hardware away, so you could tell the computer what you wanted in higher-level terms without so many low-level details. An AI tool just takes this to another level.
- atomicnature 2y agoOK - how many practical declarative goal-based languages have been successful in the past 50 years? Only option I can think of till now is SQL. Maybe there were some Operational Research optimization stuff as well. All of these were quite limited in terms of the kinds of goals we could specify, and the range of impacts they could have on the world. The possibility of pure goal-oriented systems are at an inception now. So it's a totally different game, different mechanisms, and so on.
- MrMcCall 2y ago"Short cuts make long delays." --somewhere in LOTR Thinking the user of AI can just spec a goal and then the AI automagically produces perfect results is just the pipe dream of the lazy who won't ever have a clue about how to verify the resulting system, much less the system that produced it. Good luck with that! Software is about 100% correctness, which is damn-near impossible. And when it fails, it will fail at the worst time and in the worst way possible. It's just a matter of when, not if. We can't even remotely do that (for nontrivial systems), but we're gonna make a machine that can do it?! Shhheeeeeiiiitttttt.
- utopicwork 2y ago1. Instructions for the computer to execute 2. Wherever you put it
- anthk 2y agoLots of software doesn't run on a computer.
- tmtvl 2y agoDo you mean written down code? I think that deciding whether that's software is debatable. Other than that I can't think of anything that doesn't run on a computer that can be called software. Unless you want to be pedantic and say 'this program doesn't run on a computer, it gets compiled down into machine code. The machine code runs on a computer.'
- utopicwork 2y ago[dead]
- CRConrad 2y agoSo what? * Bad instructions that the computer can't execute are still instructions for the computer to execute, they're just bad ones. * And if they're only printed in a textbook and never actually entered into a code editor, they exist only on the printed page. So what you said doesn't invalidate the GP in the slightest.
- keiferski 2y agoAlso relevant and interesting reading is SEP’s article on the philosophy of computer science, specifically the program section: https://plato.stanford.edu/entries/computer-science/#Prog https://plato.stanford.edu/entries/computer-science/#Prog
- patmcc 2y agoI had a prof who would say "there's no such thing as software; it's all just hardware in different states" and I think about that a lot.
- aaron695 2y ago[dead]
- gloosx 2y agoBut doesn't software exist in time and space too? I won't agree software has no physical-world representation, as it takes charges on my SSD, and if I did not copy it even once, then destroying that SSD or messing up the charges on that SSD will destroy my software. So software is essentially a piece of information in the first place, an ordered chaos of 1s and 0s which makes sense to the RISC assembly. If I do copy it, then my SSD will contain the Original information and it will be it's Source, all the rest would only be forks and copies and versions of that Original information. I wouldn't agree as well that software is an Abstract Artifact, I'm always envisioning it as a big Abstract Factory, with conveyor belts hauling, machines processing and trains moving and unloading at the speed of light the Information, or by it's other name Data, our abstract butter and our abstract bread. So my answer to the original question – software is a very specific kind Information. Information for another Information to synthesise... Information. Software is an Informational Artifact. Software is an Artifact as much as common pressed plastic chair is an Artifact. There are millions of copies of that chair, and there are millions of copies of that software. If you can point to every copy of the chair, then why can't you point to every SSD/HDD/RAM containing a copy of software? This doesn't make sense to me. Abstract Artifact is too broad of a category to define software, as software's primary function — executing tasks or facilitating processes — extends beyond mere physical existence.
- amelius 2y agoQuestion. What do you say to a manager who thinks that since software is non physical, it's easy to make changes to it?
- teddyh 2y agoThey’re right. It is easy to change. That’s why it’s called “Software”.
- amelius 2y agoI guess that name was invented by exactly the manager types I was referring to.
- CRConrad 2y agoI'm guessing it wasn't.
- kortilla 2y agoIt’s easy to change, but not correctly. It’s not called software because it’s easy btw, it’s because it can be changed at all. The comparison is physical circuits (hardware).
- Terr_ 2y agoProbably a more-diplomatic version of: "Our corporate charter isn't physical either, you can change that in a couple days too, right?" Depending on their background and the kind of company, other things could be substituted, like "the long-term contracts with our suppliers", or "our rules for billing and customer retention" or "do a complete re-org of who-reports-to-who." Basically, find something which that manager would never consider trivial to change because it requires running around somehow changing the expectations, opinions, and habits of lots of people, as well as getting all those intangible soft-things into a new harmony.
- anta40 2y agoVery easy. Find a bug in your software? Just push a fix. Problem solved. Found a bug in your hardware? OK this is trickier...
- khana 2y ago[dead]
- MrMcCall 2y ago[The article is concerned with a kind of philosophy of software existence. As a pragmatist (programmer), I'm more interested in addressing the first question concretely, as it pertains to what HackerNews is mostly focused on.] After decades of loving the craft of crafting ever larger software systems, I've settled down to this description of what we devs actually produce: Our fundamental spacial unit is "Information Representation". Yeah, that means data with its explicit semantics supplied by a type system. Whether amorphous (Python) or mostly concrete (C/C++) or whatever else, those are the bricks we use to construct our systems, because that is what our microprocessors are actually manipulating, by hook or crook. What our software does temporally is to "Integrate" that data. Sometimes, it's character values coming in as input, with command-line functionality as output -- e.g. OS command-line commands. Sometimes, it's web-service requests coming in, and db accesses going out, with a lot of semi-permanent state being held in session data somewhere and a mostly-permanent database data somewhere. Regardless, the {input, state, output} is the spacial dimension being integrated in our logic. And note that "in and out" are the same as "call and response" in this description; the real idea is "How does the data flow, and what is the source, and where are the destinations?" Of course, there are different temporal dimensions to our dev work: design-time, test-time, build-time, deploy-time, run-time. Each project has its own needs, so, just like advanced maths, we combine our integrations hierarchically to build up the entire system. The coup de grace is the overarching notion, the "Engine". Before real-world engines are used, they are designed, tested/verified, and planned for being assembled in production. Once constructed, engines are prepared, tested, delivered, started, run while being manipulated/tweaked, and then they finish either by choice for maintenance or because their task is finished or because they failed. That's the cycle of use. It doesn't look like our industry is very mature in how it approaches software systems as engines, especially with respect to maintenance. It would help if we understood that the fundamental unit of time is change, which is all that ever matters in the entire universe, but most especially in our software systems.
- alex-moon 2y agoThe idea of software being eternal is rubbish, not least because software isn't its code but its "identity" which comes down entirely to the actual use of language (including all the branding and marketing, all the live demos and discussions over drinks after conferences). The words "Napoleon Bonaparte" have a referent in the real world, just not in the present - does Napoleon Bonaparte exist? Usually we instead say he "existed". Incidentally, this is why I agree with the author that criteria 1 and 4 aren't actually necessary for non-existence of a piece of software. Even if lots of people, authors or otherwise, remember a piece of software, the software is gone once it can no longer be said to be used anywhere. In that case we would say that the software "existed".
- danbruc 2y agoComputers are - ignoring emulation and things like that - physical machines that interact with the environment by reading inputs and writing outputs - reading whether the space bar is pressed and making a pixel on the screen light up red. While their function is fixed at the lowest level - how they process individual instructions due to their physical circuits - they are highly configurable machines, they have billions of capacitors or magnetic domains that you can charge and discharge or align one way or another in order to control what exactly the machine does, how it translates inputs to outputs. Software - in the broadest sense - then is a description of how to configure a computer to achieve a certain input output behavior. It exists as a continuum of abstractness, from the idea in ones head, over the specification in a Word document, to the source code on GitHub, and the compilation result for a specific architecture on a flash drive. It is substrate independent, you can have the source code in your mind, store it on disk, or you can print it out. It is quite malleable, you can change it quite a bit without substantially altering it, at least at the more abstract end of the spectrum. Where you draw the boundary between Windows 7 and not Windows 7 seems pretty arbitrary, that is just a label. Is the concept in your head already Windows 7? Maybe. How many changes are you willing to do before you decide to call it Windows 8? Arbitrary decision. Does an added comment in the source make a new revision? If you want to. There will always be some tension between the abstract description of what Windows 7 is supposed to do and the concrete implementation of that ideas - including details like the formatting of the source code - and I do not see that we have to gain much be trying to precisely define where the borders are. That seems like trying to nail down where blue turns into green.
- Koshkin 2y ago> Computers… Software - in the broadest sense… Speaking of the broadest sense. An obligatory quote from Dijkstra: “Computer science is no more about computers than astronomy is about telescopes.”
- lincpa 2y ago[dead]
- svilen_dobrev 2y agoPhilip Armour has written on the topic in Five-orders-of-ignorance ~2000 [0], included in Laws of Software Process book [1]: -- Software is 5th form of ~life-invented knowledge-storing/representing-medium - the previous ones being DNA, brain, hardware, books. Which IMO, is exactly what it is. Whether its gigabytes of code or algorithm/structure written on napkin.. all the same. [0] https://cacm.acm.org/opinion/the-five-orders-of-ignorance/ https://cacm.acm.org/opinion/the-five-orders-of-ignorance/ [1] http://www.amazon.com/Laws-Software-Process-Production-Management/dp/0849314895/ http://www.amazon.com/Laws-Software-Process-Production-Manag...
- achillesheels 2y agoThose “bytes” are necessarily reliant on magnetic dipole moments in physical space, and when operated upon instantaneously to convert into electricity to sustain a self-certain predestined architecture of electrical instructions sequenced through super-sophisticated wires etched. The completion of the circuit is what software code executes in a logically cohesive patterning of the voltage operations of the embedded transistors at nanscopic levels of switches of 0s,1s, and -1s in relation to human measurements of electric charge loads, capable of being transmitted through physical space to coordinate the next electrical movement in said wires. It’s taken me a lot of years to get that figured out. Heh.