22

I think they represent data because I feel it is a mechanical machine which is fully configured and the holes decide only that the thread related to each hole must be moved or not. Thus the holes represent whether the mechanical energy should be transferred to that thread or not. In digital circuits program code decides the arrangement of the transistors thus configuring the circuit. Whereas the input data just turns ON or OFF transistors making the electrical power available to the output. Hence I think the holes (decide whether to transfer mechanical energy to output) and input data (decides whether to transfer electrical energy to output) are analogous.

But some sources say that the holes represents program.

So what is the best view here?

21
  • 2
    > Thus the holes represents whether the mechanical energy should be transferred to that thread or not. So, it's horizontal microcode? But seriously, in computers there's a long way between code and data in the card reader, and what the transistors are doing.
    – dave
    Commented Nov 28, 2019 at 14:28
  • 19
    When I write a program, I think I am writing code. But to the IDE or text editor that I am using, my input is just data that it translates into ASCII and stores in a file. And as far as the compiler is concerned that file of ASCII values is more data that it translates into machine code ... Code and data are the same thing seen from different points of view.
    – gandalf61
    Commented Nov 28, 2019 at 14:54
  • 1
    I was woefully unclear. What I think I meant was that there are many levels of interest between code/data and transistors -- the architectural level (what the programmer sees), the logical level implementing that architecture in terms of functional units, the implementation of functional units in terms of gates, etc., and the realization of gates in terms of electronic components (the transistors). So, conceptual layering, not physical pathway.
    – dave
    Commented Nov 28, 2019 at 14:59
  • 2
    @gandalf61, if you think in terms of a Harvard architecture (which most modern desktop and server CPUs are at heart, with separate instruction and data caches), then you might identify the point at which your compiler's output data becomes processor code. That said, I agree that the distinction is close to arbitrary. Commented Nov 28, 2019 at 17:13
  • 5
    In my opinion, any code/data distinction lies only in the eye of the beholder. x86 machine instructions are not program code, they are data - they are data to the program running on the microcode execution engine.
    – dave
    Commented Nov 29, 2019 at 13:17

8 Answers 8

45

Do the holes in Jacquard loom punched cards represent input data or program code?

yes.

Let me tell you a story. Somebody I used to work with many years ago was flying into the USA (or it might have been Britain from the USA) with some half inch tapes containing the source code for a Cobol program. Because he was carrying the tapes separately to his luggage, he was stopped by customs and asked what they were for.

"Is it code or data?" said the customs official.

"Why does it matter?" said my friend.

"Because, if it's code, we have to charge import duty [or whatever tax it was]"

"Ah, well, it's data... for a compiler".

The distinction between code and data is blurry at best. The punched cards for a Jacquard loom can be considered as both code and data depending on your point of view. It's code that tells the loom how to move its mechanical linkages to produce a pattern and it's also data that represents a pattern.

My personal preference is to view the punched cards as data. The holes have an exact one to one correspondence with features of the pattern in the cloth, much like the bytes of a bitmap image.

That doesn't mean that Raffzahn's answer is wrong, although I think his reasoning is incorrect. Just because something can be viewed as a sequence of actions doesn't mean it isn't data. Also, the "sequence of actions" thing just refers to a particular kind of program called an imperative program. There are other kinds of programming that aren't sequences of actions.

fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

The above is a Haskell program that calculates the Fibonacci numbers. It's three equations. There's no sequence implied, (although it will get translated into a sequence of instructions a computer can understand).

Programs are data.

16
  • 9
    Spot on! My first reaction when reading the question was also simply "Yes!" Commented Nov 29, 2019 at 9:36
  • 3
    No doubt, I can agree with most said - except the part about non sequential code. For one, just because it's written in a seemingly non sequential manner, doesn't mean it isn't inherent sequential, even if not stated explicit. The shown example not only may be translated into sequential instructions, but it needs to be done so to make it work, as the statements are not independent from each other. So it's merely a notation, not really instructions. More important: An example of non sequential notation doesn't invalidate the definition used - especially not with hindsight of the topic:)
    – Raffzahn
    Commented Nov 29, 2019 at 11:29
  • 3
    Life pro-tip: don't lie to customs. Even if you're technically correct. Not quite as bad as lying to immigration though. Unless you're a running an importing business, in which case being banned from importing stuff might be just as bad as being banned from entering the country at all. Commented Nov 29, 2019 at 11:59
  • 3
    @user253751 I think everybody involved was quite happy with the situation. This happened in the early 1980's before computers were ubiquitous. The customs officials had no real idea what the distinction really was and, if my friend had said it was code, it would have been impossible to put a value on it. It was part of a much larger contract that involved hardware and software - bespoke and off the shelf.
    – JeremyP
    Commented Nov 29, 2019 at 13:39
  • 2
    What about FPGAs and DSP chips, where the code is basically just a list of connections between components? I've tried to address this in my answer.
    – Artelius
    Commented Dec 1, 2019 at 0:17
17

Program code for modern CPUs, in practice, consists of opcodes which tell the CPU what operation to perform, and operands which provide data to operate on. In RISC CPUs these are necessarily both encoded into the same instruction word, while in CISC CPUs the two usually live in separate bytes, with the operands following each opcode.

However there are oddities known as One Instruction Computers which have no opcodes, only operands. One such machine can only execute a "decrement and conditional branch" instruction, but allows the programmer to choose which memory locations are the input and output of the decrement operation, and the branch targets for both the zero and non-zero results of the decrement. Such a machine is Turing-complete and can be used for general computation, albeit inefficiently.

The Jacquard loom is in principle such a one-instruction machine, though it is not a computer but merely an automatic labour-saving device. The cards encode operands, which are best described as data, consisting of what amount to pixels in the weaving pattern.

3
  • And where would you put a VLIW? Here each bit encodes a seperate 'lever' to be pulled. So that must be pure Data?
    – Raffzahn
    Commented Nov 28, 2019 at 22:13
  • @Raffzahn There is no such thing as 'pure data'. A VLIW is a bit of an odd situation, but one that's closer to opcodes than purely operands.
    – Mast
    Commented Nov 29, 2019 at 11:31
  • Correct, a VLIW machine includes several opcodes and operands in each instruction word, but is otherwise similar to a RISC machine in this context.
    – Chromatix
    Commented Nov 29, 2019 at 13:13
15

All code is data. But not all data is code.

For example, you can take a digital photo and the numbers represent light intensity across a 2D rectangle. Nobody would dispute that this is data but not code.

Code is a special kind of data which controls behaviour.

... but it's not that simple. Arguably the digital photo controls the behaviour of whatever compression/decompression software processes it, and of the motion of the printer parts if you print it out.

So, wait, isn't controlling a printer exactly the same as controlling a loom? Ha! Got you there!

What is meant by "code" is context-dependent. It seems to have different meanings for different objects (a computer, a loom, a synthesiser, a 3D printer). So here is my attempted definition.

Code:

  • is data that expresses a series of steps* in a certain well-defined language
  • controls the behaviour of a (real or abstract) machine
  • has the capacity to dictate a wide variety of behaviours, relative to the capabilities of the machine.

So I would say yes, a punched card contains code for a Jacquard loom. A digital image is only data for a computer. For an old-fashioned dumb printer, a digital image might be called code, but for modern printers which have advanced configuration and job handling protocols and font loading and typesetting... an actual image to print would probably be considered "trivial" and thus data.

*Code does not actually need to be sequential, but it has to express some kind of process. cf. dataflow architectures, lambda calculus

Edit: How about instructions like "forward, left, right" for the simulated robots that are often used to introduce kids to programming? I would say that for the "abstract machine" that is a robot, they are code, but for the computer, or even the app itself, they are data.

Edit: What about code for DSP chips and FPGAs? It's as far removed from a sequence of steps as you can get—and yet it controls the behaviour of a machine, and is capable of expressing even more behaviours than code for a CPU. It's code.

On the other hand, what about a wiring diagram for a motherboard? I wouldn't call it code... but why?

After some thinking, I realised that there is only one "sensible" way to connect the components together. Reconfiguring it doesn't change the behaviour, it just breaks it. E.g. if you switched the address bus and the data bus, the system just wouldn't work.

1
  • 2
    What we usually think of as "code" also has flow-of-control. Imagine a Jacquard loom that had the equivalent of "if" -- say, branching chains of cards, and the ability to test conditions. The response process is itself specified by the code, not the machine. Player pianos, looms, gcode, etc. do sequencing, but not choice in this sense. Modern looms could implement that (and probably have) -- but Jacquard's didn't.
    – TextGeek
    Commented Sep 20, 2022 at 16:29
11

For most parts it's code. Well, code is a quite sloppy term, it covers a huge list of uses, from card scratching to encryption. So more correctly, it's a program (*1), as it defines a sequence of action to be taken by the machine - interpreted when the loom runs the cards.

If at all, then thread is data. It is input from spools, processed by the loom according to the program and output as cloth.

The holes represent whether the mechanical energy should be transferred to that thread or not.

Exactly the same way an instruction describes what buffers are to be opened or latches to be enabled when executed.

For example a TAX instruction of a 6502 defines that the AC/SB signal is to be pulled during PHI1, as well as the SB/X signal, thus transferring the content of Accumulator output buffer onto the SB-bus to be latched by the X (register).

The fact, that it's 'punched' as an encoded 8 bit value, instead of separate 'holes' for each latch/buffer doesn't change the workings. Making it explicit for each circuit would turn the 6502 into a VLIW processor - many 'holes', nonetheless a CPU. Isn't it?

Also, how energy is transferred doesn't matter. Direct or indirect, level or type can be of any and does only make a statement about the construction, not the process. A CPU can as well be build using high voltage FET operating at 200V DC. Heck, tube computers did exactly that :))

In digital circuits program code decides the arrangement of the transistors thus configuring the circuit.

Not. Code doesn't configure any transistor or circuit. The circuit is static, and a program commands, when sequenced, its actions.

And that's the core point here: programming is sequencing of actions (*2). And that's exactly what loom cards do - they define a sequence of actions to be performed to generate a certain cloth.


Further Considerations:

This question seams to stir a lot of emotions and many logical shortcuts are taken, so let's look at the details (and some claims made in comments)

What is a Program

Wikipedia (*3): "A [computer] program is a collection of instructions that performs a specific task when executed [by a computer.]". It doesn't require anything special from a program beside instructions (being executed) performing a task. Instructions, when turned into explicite form are usually called code.

What are Instructions

Interestingly Wiki points here again to 'Computer Program'. It seams to be one of the words that are so obvious that there is no need to add an entry. Still, I think it's agreeable to say that an instruction is a data element, that instructs a machine, when read, to show a certain behaviour - aka executing it.

It needs to have Conditionals

Or as Chris puts it: 'That lack of any provision for flow control or conditionals makes the continuous loop of cards clearly just data, not a "program" in the computing sense of the word'

Not sure what a "computing sense" is and why it needs to be introduced. But even in computing conditionals are optional. They are only a requirement if the goal is to create an universal computer. Just because it's the standard we use, doesn't make it the only way.

But let's take a look at this by a very simple example. Assume we have a trafic light, controlled by an 8080 CPU, executing on a fixed (ROM based) program. It runs steady, monotone and forever thru the light cycle. Such a program could look this

OUT YELLOW
OUT WAIT_1
OUT RED
OUT WAIT_15
OUT RED_YELLOW
OUT WAIT_1
OUT GREEN
OUT WAIT_15
JMP START

Each accessing either port switches on the marked configuration (may vary per country) or halts the execution for a given time.

I think we all can agree this is a program, don't we? Sure, it doesn't use conditionals, and doesn't need to, but it's a programmed sequence doing the job. And it's not a fixed function machine, but executing a stored program, which can be exchanged - like with a version for a light scheme used in the US.

Now let's play evil scientist, pull out the 8080, take our handy laser tool and burn all conditional opcodes (and there's 24 of them) from the 8080s instruction decoder. Geniuses as we are, we do not damage any other part. Putting it back, it will run the lights as before. No chance visible.

But there are no longer any provisions for conditions. Does it mean that the unchanged code now is no longer code? No. It still is. All this proves is, that code does not need an universal computer to run. It still is (the very same) code.

What we have changed is the processor executing the instructions - exchanging a __universal_ for a non-universal one. And that's exactly what a Jacquard loom is. A non-universal processor running code.

But the punch cards got a separate hole for each lever to be pulled

True. But also, isn't that the way instructions on a VLIW processor are? Having separate bits for each function available?

Let's take above 8080 and turn it into a VLIW machine with bits for each and every sup function. While it would be somewhat uneconomical (*4), engineers would like it for the simplicity to build it. It would work great, wouldn't it?

Now we can go ahead and remove every function except for the 5 functions needed for the 6 output functions plus the jump - on a loom we can even save that by just splicing the ends to form a card loop. It would still work, despite having separate 'holes' for each function to be executed. In fact, we can even save on one, as we now can encode RED-YELLOW as a combination of the two holes for RED and YELLOW. The benefits of VLIW :)

Like before it wouldn't change neither meaning nor operation.

But again, what's on the cards is data describing the pattern

Maybe on an abstract level. With enough abstraction even humans may count as rational. A real answer needs a closer look, which in this case reveal the holes as instructions to the processor in the of the form

Shed group 1/4/5; Use shuttle B; (Pick; Batten)

This is not a description for a pattern, but an instruction for the machine to operate. The pattern is what results from processing these instructions by the means of sheding, picking and batting. With different instructions a different pattern will emerge

But I Mean ....

Hmm, meaning is maybe another good angle to look at it - not the personal opinion, but meaning vs. purpose. The Purpose of the holes of punch cards in a loom are to create a pattern - much like the purpose of a game is to entertain you (*5). But the Meaning of the holes is to instruct the movement of machine parts - exactly like the instructions in said video game code is to make 'move' parts of your computer.

The separation between goal to be reached and action to be taken is, as usual a quite a significant one.


Bottom line: A Jacquard loom is a processor running a stored programm from a loop of punched cards - thus what's on the cards is code.


*1 - To distinguish between data and code is rather artificial when it comes to stored program computers, or how would you characterise a program consisting only of instructions using implied or immediate data? Code? Data? CoTa? DaDe? The line isn't just blurry, but effectively nonexistent.

"Data as explicit item" comes only into play when external to the program - and even then one could argue, that the program is a virtual machine, and the data read is the code it runs.

*2 - Which is why we talk about TV, Radio or Theater programs.

*3 - No, I'm not implying in any way, that Wiki got any more authority here than other sources. None the less, it seams like a reliable definition others can agree.

*4 - And that's by the way the whole reason for having compact opcodes instead of VLIW.

*5 - Not entirely shure about that, With some tripple-A titles it seamed more as if they were made on purpose to make me angry at having spend all that money.

1
  • Comments are not for extended discussion; this conversation has been moved to chat.
    – Chenmunka
    Commented Dec 4, 2019 at 15:49
8

I think the other answers cover the topic pretty well, but allow me to ask a related question as food for thought: is the music roll of a player piano code or data? On the one hand, the piano just sits there and does nothing without the roll, suggesting that it's "code". On the other, the roll is morally equivalent to sheet music that a human musician might read to execute the same notes on a piano.

Do you think of sheet music as code or data? If sheet music is "code", does that mean the musician is the "processor"? Are the notes instructions for the "musician-CPU"? Or are they data points for a "music-program" in the musician's brain to consume? As others have noted, the line is blurry, and perhaps not as meaningful as we would like.

2
  • I do think of those as code, so I guess the definition I tried to come up with in my answer works...
    – Artelius
    Commented Nov 29, 2019 at 23:12
  • 1
    I was going to use the same analogy. Any data that is input to a machine that processes it in some way can be regarded as a program for a special-purpose computer. The real distinction, I suspect, is whether the special-purpose computer is Turing-complete. Commented Nov 30, 2019 at 11:09
6

The Jacquard loom predates the computer by a long time. As such, the distinction is a bit like asking whether or not a horse runs on diesel or petrol; whatever distinction you're trying to make by applying terminology from a different technology isn't likely to be useful or meaningful. The distinction between code and data is mostly a relic of Von Neumann architecture's separation between instruction and data memories, which doesn't even apply to the majority of computers, let alone anything which is not a computer.

If you choose define code as data which contains instructions for a computer, well it's no more code than a recipe is, as there is no computer; if you define code as data which has instructions for a machine of any type, then it is is code, and so are lots of things. Only thing which has changed is where you draw the line between computers and automatic machinery, which has nothing to do with data in the punched cards themselves.

It's not a distinction that any of the inventors of the Jacquard loom would have any use for; but if you find it a useful analogy then call it code, if you don't, then don't.

4
  • 1
    Interestingly, while it may have started as a relic of von Neumann architectures, I'd argue it has indeed become its own thing with the development of the execute bit on memory. For security purposes, the distinction between code and data proved to be worth codifying into the hardware.
    – Cort Ammon
    Commented Dec 1, 2019 at 20:32
  • I don't draw the line. I think of Jacquard as the first computers, because they executed a program. I guess if I take this to it's logical conclusion, so is a music-box. But is that much different to echo "Hello World"?
    – Kingsley
    Commented Dec 1, 2019 at 21:57
  • 2
    @Kingsley there is no computation in a music box or a loom - there is no transformation of input data to output data, only a direct transfer from a stored form to another form, either stored in the case of the loom or transient in the case of the music box. Without computation, I don't think there is a computer. Commented Dec 1, 2019 at 23:42
  • @PeteKirkham - That's a good point, but I consider the machinations of the loom to be a form of computation.
    – Kingsley
    Commented Dec 2, 2019 at 1:05
3

Program code is a specific type of data. So the question is really: What is it that distinguishes code data from other forms of data?.

  • Non-code data is a representation of state.
  • Code data is a representation of a process for manipulating data.

Data states remain stable until they are acted upon over time according to the instructions in the code data.


Consider a simple spread-sheet:

  • Most cells contain data (usually numbers).
  • Some cells contain "=Formula".

The formulas are code that tells the spread-sheet software how to manipulate the data.


Consider a web page:

  • The HTML is data.
  • The JavaScript is code that can manipulate that data.

Consider a bash interpreter:

  • The command lines are data as far as the interpreter is concerned.
  • The interpreter is code that manipulates the data.
  • And the the command lines are also code, as they are instructions for manipulating other data.

With a loom:

  • The positions of the various parts (shuttles, lifters, bobbins, etc.) are the data.
  • The cards are the code.

The cards contain instructions for how the parts should be manipulated (how to change the state of the data).

2
  • 1
    This seems to be confusing the machine with the output. Data is information. A laser printer isn't data. A piece of paper isn't data. The electronic information and later dots on the page are the data. Same with the loom - a pattern on cards is directly mapped to a pattern in cloth, data in, data out. And the only part of the process actually determined by the holes in the cards is the action of the hooks to form the pattern in the weave - the already quite complex mechanics of weaving cloth itself happen without their influence, only without them it is cloth containing no data. Commented Dec 3, 2019 at 1:31
  • 1
    I disagree with this view of the loom. IMHO, the loom is a physical processor with its code is built into it as firmware (ie. the loom is mechanically designed to run 1 and only 1 program and that program can do only 1 thing, render a woven pattern based on input data). The cards are input data to that single program.
    – Geo...
    Commented Dec 7, 2019 at 16:13
2
+50

Intro

I already added an answer, but this time I want to expand on the idea more forcefully. First, let me say that I think this question perhaps better belongs on CS. It's more about philosophy and theory than it is about the Jaquard Loom, per se. Even so, let's run with it and see how far we get.

New Claim

We all agree that a given bit string might be viewed as code or data or both, depending on the context. However, I am going to disagree with @Artelius, who claimed that: "All code is data. But not all data is code." Hopefully, everyone else also agrees that "all code is data." What I would like to introduce is the notion that "all data is code...with respect to some computational model."

Weak Version

Now, there is a trivial sense and a more subtle sense in which the claim above can be understood. The trivial sense is that for any bit string, we can define an infinite number of instruction sets for which that bit string is a well-formed sequence of one or more instructions (or, if you prefer, it is a complete well-formed "program"). This sense is weak, because it basically says: "Well, I see you have a random string of bits. That's a beautiful program for CPU X, but you've never heard of CPU X before, and it has a rather ridiculous instruction set that nobody would actually care to implement. By the way, there are an infinite number of unique designs for CPU X. Enjoy." Hopefully we agree that the trivial sense is manifestly true, but also not terribly interesting, so let us not consider it further.

Strong Version

The strong version of the claim is that for every bit string, there exists a "computational model" which interprets the bit string as a well-formed program which is "useful and relevant." Obviously, "useful" and "relevant" are hopelessly imprecise terms, so I cannot provide a rigorous proof of this claim. Instead, I will work through a few examples and let readers decide if the claim is reasonable.

Generally, when we talk about "code", we either mean "machine code" that can be directly executed by some logic unit (a microprocessor, usually), or "source code" that conforms to some programming language. And naturally, a compiler thinks of both "source code" and "machine code" to just be data, and compilation as an algorithm or information process that turns one string of data into another. Whereas, an interpreter will generally treat source code in an analogous way to a CPU executing machine code, but using an abstract machine model implied by the interpreter itself.

So just looking at "things which touch code", we already have trouble deciding whether a bit string is "code" or "data". A compiler with a REPL will look at a bit of source code, and when you ask: "Is it code or data?" it must answer: "yes", with each aspect depending on whether you ask it to compile or evaluate.

Not Code?

But what about things which seem so obviously not code? Like, a JPEG? Well, bit strings conforming to the JPEG specification are not intended to be consumed as bit strings, in general. Clearly, humans create and direct machines to create JPEGs so that they can be rendered as visible images (or processed as images to extract information from them). To that extent, we can view a JPEG as "program input" to a JPEG viewer in a similar way that PCL is "program input" to a printer. This speaks to the view noted by @Michael Kay in a comment. However, unlike Michael, I am not the least bit concerned about whether the resulting language is Turing-complete. After all, a Jaquard controller appears to me manifestly not Turing-complete, but I think many of us are happy to accept the "command" cards as "code", with the controller as the "processor".

If we accept this notion, then we have covered all structured data which is rendered or processed by some program, whether hardware or software. So what about data that isn't consumed by a program? Is there such data? Let's consider the output of a program written by a CS student. In the general case, this will not be designed to be consumed by another program, as it will often just be some lines of text producing the result of a basic calculation. One may even struggle to label such data as "structured", depending on the tidiness of the student in question.

In this scenario, we struggle to identify the "program", let alone microprocessor which would interpret the data as code! In such a case, I claim that the program is in your head! Just as high-level source code often cannot be executed directly by physical hardware, but can be executed just fine by brains, most data floating around human spaces is not necessarily designed for machine consumption, but rather for wetware consumption. If we accept human minds as a kind of sloppy "program" or "microprocessor" (actually pretty large compared to most CPUs made after the 80's), then all human-readable data now falls under the "structured data" umbrella.

Non-Human Data

So what about data which doesn't originate near humans? What about the pattern of X-ray pulses emitted by the accretion disk surrounding a black hole? Surely that is data? But how is it code? Here is where we take a very philosophical turn. By some accounts, every physical process is an information process, and the the universe itself is a kind of "computer". This is stronger than the "weak interpretation" we noted above, as we are limited to physically realized CPUs. But it's still a kind of catch-all that reduces computation to something that perhaps seems less interesting because of its scope.

I would argue that what is unsatisfying in this formulation is that it makes computation utterly impersonal. If minds have nothing to do with computation, then how is computation distinguishable from mere physics? Have we reduced all of computer science to a small subset of the physical sciences? I feel that doesn't capture the essence of what we mean by "computation".

What is Computation?

Peter Denning tackles this question in a lecture he gave about a decade ago. I think this covers a lot of good ground, and I encourage readers to give it a look. But I would like to go further than Denning, and give computation a kind of "anthropic definition", because as far as we know, humans are the only creatures who actually care about what "computation" means in the first place. Even if the principles of computation transcend humanity and apply to processes occurring all over the universe, the notion of computation still comes back to things humans care about. Since we invented the word, we get to decide what it means.

I would like to propose that a "computation" is an informational mapping, extended in time, which has manifest relevance to conscious experience. I assume that we can agree on the first two qualifications, and that we need only debate the last. For clarity, the first part means that we have a "start state" and a desired "end state", and the second that a process requires non-zero time to evolve between the states. So, a lookup table is not, per se, a computation. Using the lookup table to map one bit string to another is a computation, and requires non-zero time. Since all more complicated computations can be reduced to computing the corresponding lookup table (or mapping between the domain and codomain), we have essentially covered the first two features.

When I say that a computation has "manifest relevance to conscious experience", I mean this: somewhere in intergalactic space, there's a random cloud of hydrogen atoms lazily vibrating by themselves and basically minding their own business. By pure luck, the exact pattern of atoms corresponds to a great many things, such as the positions of stars in some galaxy, the location of cities on a map, the firing neurons in some brain at some point in time. The evolution of that cloud might then justifiably be described as a kind of computation which corresponds to the evolution of one of the given mappings. But I argue that the cloud of hydrogen atoms is not computing anything. Because it's just a cloud of gas, out there in intergalactic space. We can't interact with it, we can't change it, we can't even see it. It's minding its own business, which includes not computing.

Even though a computation running on a human-made computer could almost exactly describe the time evolution of that hydrogen gas cloud, my argument is that the real cloud is itself not a computation. Because in my mind, in order to have a computation, something needs to care about the result. Obviously, if someone took the time to create a hydrogen gas cloud simulation, they care very much about the result.

Now, I originally said: "manifest relevance to the human experience". But I had to go back and change it, because that would mean that aliens living near another star could not do something we recognize as "computation", and that seems patently absurd to me. I think the minimum requirement for computation is that some conscious being cares about the start and end states. And this brings us back to the black hole. As long as nobody cares about the pulsar and nobody is looking at us, the pulsar is being, but it isn't computing. As soon as someone points an X-ray detector at it, and starts counting/timing the pulses, and using them to infer principles of stellar mechanics, the black hole system becomes a computation, of the physical model the astronomer is attempting to infer.

So then my thesis hinges on one question: are the X-ray pulses data if nobody is observing them? The "all data is code" claim can only be true if we answer in the negative. That is, if a tree falls in the forest, and nobody records the event or otherwise takes note of it, then I claim it is not data. And if it is noted by a conscious being, then it is data, and code, even if the code is merely reduces to: "demonstrate the sounds and images of a tree falling in the forest".

1
  • I encountered a more spectacular version of you "Strong version"; for every sufficiently long string of bits there exists an architecture for which it is virulent.
    – Joshua
    Commented Sep 28, 2023 at 19:13

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .