What Is Code? (2015)
bloomberg.com
bloomberg.com
It isn't surprising to me that the best software developers I have met have been those who either had no computer science degree or got it after having some degree or major interest in another field, typically a liberal arts or science field. Liberal arts are actually the study of systems in disguise because of the need to connect together various ideas, events, etc. that do not necessarily have clear delineations or relationships.
I'm not arguing against people from other fields bringing valuable insight; I'm disputing that CS doesn't also involve the study of complex heterogeneous systems or that it is about "coding".
Seems like you're describing a bootcamp or coding school instead.
Systems Analysis and Knowledge Engineering typically assume corporate/industrial philosophies and goals.
Broader human considerations - political, social, cultural - are very peripheral in CS. They get some token attention but they're always subservient to business values.
The idea that software is primarily about human relations of all kinds is novel and rather subversive.
Hard disagree. CS education doesn't have business at its core, but science. It's all about systems design, theory, formal verification, requirements gathering, math, logic, etc. It's neither about (primarily) business nor coding concerns. You probably don't need CS for those.
That's a narrower argument that the one I wanted to make, which was that CS is not programming; it's theory/research/practice more like the traditional sciences.
Whether it's a science or not is not as clear-cut as you claim [1]. There is argument about this, like about many things claiming to be "science". Here's a relevant quote from Wikipedia, attributed to Newell and Simon:
> "Computer science is an empirical discipline. We would have called it an experimental science, but like astronomy, economics, and geology, some of its unique forms of observation and experience do not fit a narrow stereotype of the experimental method. Nonetheless, they are experiments. Each new machine that is built is an experiment. Actually constructing the machine poses a question to nature; and we listen for the answer by observing the machine in operation and analyzing it by all analytical and measurement means available."
This does seem to leave out the more "mathy" part of CS, which isn't about building machines at all. For the record, I think CS is science.
It poses an interesting question which I think it doesn't really answer well: "What Is the Relationship Between Code and Data?"
I can easily understand what a "program" is. It is a set of instructions we give to the computer for it to do something we want it to do.
But what is "data"?
A set of instruction activators we give the computer
Oh and that easily understood set of instructions are also data
That is, data are programs, programs are data. Just need to establish the environment in which to execute/process them.
mp3 files are instructions to an audio producing "computer", mp4 to an audio/video "computer". Whether it's a software description of the machine or a hardware implementation. Zip files are data, but when run through a decompression program they determine what gets decompressed (the program determines how) making them instructions for the decompression computer. The text of a text file opened in an editor providing rendering instructions. TCP packets are data, but they influence the TCP state machine, which is an explicit rendering of the idea that the software (sometimes hardware in this case) is describing a computer and the data (packets) represent instructions that effect the state of that computer.
However, this interpretation is usually not explicit so the manner of these virtual machines is ad hoc and ill-specified (if at all).
It's a sequence of bits. You take reality (or whatever you want) and represent it as bits. That sequence of bits is called "data".
Data is the plural of datum. A datum is a piece of information. Of course not any piece information is automatically a datum, as that noun implies a certain structured nature or a normative perspective on that piece of information.
Certain information only became commonplace because it became a datum first. Before using family names as an identifier many people had no family names, they were identified by their first name and by the places they grew up in.
Code is data that can be executed, provided that there is a something that offers an interpretation of it. It think we must claim that this interpretation is meaningful to something.
Executability is a semantic in the context of interpretation, which ties it all back into what data is again. Something something Apply/Eval.
So more open ended terms.
Of course code can modify its own 'code". But that makes it much more difficult to reason about its behavior. It is good to have some "invariants". If we can assume that code does not change except when the human author changes it, then it becomes much easier to reason about the changes the program may cause to the data.
or the age old joke: "The good thing about (data) standards is there are so many of them!"
Code is interpreted by the computer, Data is interpreted by Code !!!
But when we say "code is interpreted by computer" we are really saying "Code is interpreted by Code" right? Meaning the interpreter or compiler.
So how come this snake doesn't eat its own tail?
The answer, the MAGIC of computers, is that at the lowest level somehow Hardware is able to interpret Code .
Compilation is "just" an intermediate step between code and using it in an interpreter. The interpreter can be pure hardware, mix of hardware and software, or you can do it on paper yourself (given time). These are implementation "details". Also, to me code is not a synomym with software, since I'm not referring to programmability, only to the transformation aspect. Programmability is an implementation detail. You may perform a transformation with hardware only, as mentioned above. The hardware itself could be described with code, e.g. in Verilog language. Manufacturing a silicon chip based on Verilog code is also an implementation detail.
In fact your CPU/PC is hardware and it is making transformation from input data to output data. In this case, besides the other input data, like keyboard input and files on disk, you may consider the binary code as part of the input data. This is where the confusion starts to happen. This is an implementation detail and should not be confused with the general notion of utility we want to have. Code is "only" the means to an end. We want to do stuff with the machine. We want to transform input data to output data, since that is essentially what we are after. For the goal of getting stuff done, data and code are separate things.
When saying "data is interpreted by code", it is partially correct. First of all data carries meaning, as in meaning for people (the data user). Data is encoded to some format (which is also data, but implementation data) and you could say that this encoding is "interpreted". However, the encoding is "just" an implementation detail which depends on the machine you are trying to use for the transformation. When the computer paints pixels on your monitor, it transfers data bits through display driver, through HDMI protocol (for example), to monitor itself. There are plenty of "interpreters" on that path. On the screen the pixels could represent the letter "A" and that could carry meaning for you (depending on the other stuff on the screen). This is why I stated that data is information about things. Encoded data is an implementation detail and varies between implementations, but the "true" data is essential and implementation independent. It carries meaning and utility value. Essential data is not interpreted by code. The user (a person) interpretes the essential data.
Code is data for the compiler. The compiler transforms source code (input data) to object code (output data). Code is data also for the interpreter. Algorithm contains all the essential information about the data transformations to be performed, and code in form of programming language text, is an implementation of that algorithm in the specific programming language. Algorithm is programming language independent. It's fair to say that by code I mean the algorithm. But also an algorithm must be presented in some form or another, so its code. :)
> This is real. A Scrum Master in ninja socks has come into your office and said, “We’ve got to budget for apps.” Should it all go pear-shaped, his career will be just fine.
It's funny how organizations manage not to fall apart with so many people with so different motivations. For example, an SWE can despair in 2022 because they work on Openstack bugfixing or on mainframe JCL2 batch jobs, but here this exec worries about his position being undermined by some software project.
not trying to take away from what appears to be a great read
https://github.com/BloombergMedia/whatiscode/blob/master/mod...
Suppose it could be a wow factor/adds to the interactive elements of the page.
Case in point: when this was first published, I was just starting out my career writing software, and knew very little about the industry I was entering. 7ish years later, I still think about it often.
Sound approaches to knowledge must operate in the opposite direction, drawing insights from observation of phenomena existing in the world.
Assuming that the world is as we deduce it to be, without then proceeding to check that the world behaves in accordance with our deduction, is a failure that delayed the advance of knowledge until the use of the scientific method became widespread.