"But It Doesn't Mean Anything" – A demonstration of the value of computer code
ex-parrot.com
ex-parrot.com
Computers are clearly important, and Paxman would not deny it, but that doesn't make school IT classes any less pointless. They are terrible because they teach what buttons to click to make Microsoft Word 97 display text in bold, rather than the ability to think about problems; arguably they teach against thinking about problems (like "how do I make text bold?"), in favour of rote learning and hand-holding. Likewise, teaching kids which punctuation marks to press in Notepad to make a HTML element turn green is also a terrible idea, because it's focusing on the code. This is also the most common complaint I've heard about undergraduate computer science courses (teaching one particular language's syntax rather than how to solve problems).
I saw this summed up best on /. http://developers.slashdot.org/comments.pl?sid=4771525&cid=4...
"The problem here is that "code" is being used as a synonym for "computer magic"."
This captures the essence of this interview exactly. Paxman made a provocative remark, and did Dexter argue against it? No, she agreed with him and said some nonsense about code being for computers:
"It doesn't mean anything to you, or to me yet, but it's the set of instructions that you type into a computer to get an output."
In other words "computer magic". What Dexter doesn't realise, probably because she's not spent a significant amount of time programming, is that code is for people to understand and only incidentally for machines to execute. If programming was only about satisfying the computer, our keyboards would only have two big buttons: 0 and 1.
Now, this was essentially true in the early days of computing (punching cards) but we've progressed beyond this. The reason we use code is to allow people to discover, understand and build on ideas.
The "learn to code" hysteria is just the authorities trying to sweep over their incompetence in compulsory schooling by seemingly appearing to be in the times.
I can only expect progra-sorry, coding, will be awfully taught.
The problem I see is that we treat computer science as something you eventually get round to learning once you've already taken some preliminary steps with coding, and even then it's something to be looked at late into high school or at university. Code is the awesome tool that motivates learning, but I wonder if the process is taught the wrong way round. Could it be done a little compsci first, then code?
I started a series of blog posts trying to introduce the non-technical reader to the fundamentals of computer science in plain english: http://lifebeyondfife.com/tag/compsci-in-plain-english/. Still a work in progress, I'm trying to keep it interesting and explain why computer science is important at the same time.
Problem solving transfers across disciplines and is a useful lifeskill.
It could be combined with how to assess the quality of information or how to find decent sources of information.
There are plenty of people who just throw their hands up in the air and give up if you ask them something they don't know.
The reason we use WORDS is to do the same thing...
But somehow nobody will ever insist that:
"Likewise, teaching kids which letters to press in Notepad to make a sentence is also a terrible idea, because it's focusing on the characters."
or that teaching spelling, punctuation and grammar are "meaningless".
Punch You! Hey Sean
and granma
ain't meaningless but take a backseat to phonetics and typography, and contemporary pedagogical practice in language arts emphasizes the act of writing rather than compliance with standards from the Victorian age.
The obsession over standardized spelling in particular is an accident of the English language. There aren't spelling bees in German or French because phonetics is the important point of reference in ordinary human language.
The standards of English language are useful but for matters of taste and social differentiation not communication, e.g. the tenses of "read" which is about as important as a word can get in the context of written communication.
There are people living in the same country as me, speaking the same language, less than 200 miles away, whom I struggle to understand in conversation. We spell and write the same way, so we can communicate through the written word. If we relied on phonetics to be able to communicate, we wouldn't be able to. Having standards means we can communicate; I suppose what I'm saying is that I just plain think the statement above is wrong, based on my own personal experience.
I can, however, easily find links for "Year of Reading", "Year of Writing" and "Year of Literature".
Lottie Dexter doesn't know how to code. She said it in the interview.
"It doesn't mean anything to you, or to me yet, but it's the set of instructions that you type into a computer to get an output."
She said:
"It doesn't mean anything to you, or to me yet, ^^^because I do not know how to code.^^^ But it's the set of instructions that you type into a computer to get an output."
Is exparrot.com affiliated with paxson or this initiative?
A computer is basically a universal machine. It can do anything.
To use it, you need to specify your need with no ambiguity whatsoever. Code is just that: a non-ambiguous, Turing complete formal specification. C, Haskell, boxes you drag and drop, it doesn't matter. If you don't learn to construct and manipulate such code, you will never realize your computer's full potential, and will be at the mercy of those who do.
I'm not against division of labour, but this is different. Computers are the first machines that can have all our mental powers. The only reason they don't is because we don't know how most of our powers work. The day we do, however… http://intelligenceexplosion.com/
"Computer magic" you say? That's more true than you think: programming its awfully close to hermetic magic as found in fantasy settings: scribbling bizarre abstract signs on a surface does wonders beyond the understanding of most mortals, learning to make such scribblings often takes years of dedicated practice, and a single mistake in those scribblings, however small, can result in catastrophes, up to and including fatalities.
Coding is an Arcane Power from the Ancients. We should treat it with the same respect. Heck, everyone wants to be a Wizard. Why don't everyone want to know some actual magic?
Not because the basic mechanics have changed, but because our software ecosystem is vastly complex. The days of having a relatively simple and grokkable system are long over. Our computers are powered by extremely complicated, intricate and numerous interacting subsystems, where learning everything is akin to being a polymath, and people naturally need to specialize.
With this in mind, not all code is created equal. You're still under far more mercy with a visual programming language than a textual one.
Yes, programming is essential to realizing the full potential of your computer. Yet there is still so much more. The code is the main arbiter, but there is still a lot beneath, dealing with computation, discrete mathematics, information theory and so forth.
You're still at mercy when you can just blindly type instructions guided by your interpreter and it spits back programs with horrible performance, because you have no idea how data structures work, can't optimize for shit and don't really know what your interpreter does behind the scenes anyway.
I appreciate the nice fantasy gobbledygook about ancient arts and black magic, but I think you're getting full of yourself here.
Ultimately, in order to strive with complexity, first one must learn to operate a higher level above coding itself (system administration).
This is one of the aspects where the "learn to code" movement is shortsighted. When you operate on very high level abstractions, you get false ideas. Of course, abstractions aren't bad and ultimately every new language we use strives to wrap more away and give us a simpler interface. Yet being ignorant of the low-level details is still a curse, a disability, if you will.
That and IMO, it's just fucking stupid to have kids who can write console apps in C#, but can't use the shell to debug an OS issue. What use is programming when you don't even know your environment?
That very much depends on how leaky the abstractions are.
The things you consider "low-level" are themselves quite high level and abstract. A "register" and a "cpu instruction" are abstractions too. Yet you can take them for granted without worrying about the microcode inside the CPU, or the clock propagation, or quantum leakage in the logic gates. Etc.
We need good abstractions, and when they're actually good we shouldn't worry ourselves about what's going on inside the box, unless for the pure fun of hacking.
In practical terms, I agree with you that most people who are trying to write software today would benefit from knowing more of the layers below them. But this is only necessary because of the shortcomings of our abstractions.
If we achieve a glorious future where all people can wield the full power of general purpose computers, it won't be because everybody learned all the arcane layers. It will be because we put together really powerful abstractions.
Which is one of the big mistakes of the last decades. I understand market forces and Worse is Better, but the result is still way worse than what we could have gotten if we lived in Ponyland.
Complexity is overrated. Current home desktop systems (OS + browser + office suite + mail + drawing app) are over 200 millions lines of code. Now guess how much it really takes to build an equivalent.
About 20,000 lines, including the self-implementing compiler collection.
This was a clever quote that has been taken way too far and simply isn't true. Even Hal Abelson backed off of that quote in SICP when pressed about it: http://www.gigamonkeys.com/code-reading/. Code just is not primarily for people to read – it is primarily to make computers do things. Just think for a second about what you're saying:
> The reason we use code is to allow people to discover, understand and build on ideas.
Really? The reason most people write code is to express an idea with that code? I don't think so. People code to make computers do things. The things the computers do may facilitate communicating ideas (e.g. wikipedia), but the code itself is not primarily about ideas. Honestly, the only exception I can think of is when I'm writing example code to convey ideas about programming.
It's part of an interviewers job to ask the questions that the random person on the street would like answered. Sometimes an aggressive style is the best way to force the interviewee to get to the heart of the matter and make their best arguments (which is part of why lots of Colberts interviews are actually very good).
Perhaps it's cultural. I've noticed before that when Stephen Sackur interviews people from some cultures (including the USA) on HardTalk, and he asks them a difficult question, or confronts them with the opinions of their critics, they assume that he is personally attacking them. Interviewers are there to get the interviewees to talk and answer the questions that the viewers will have. It doesn't matter what their personal opinions are, and you shouldn't expect to be able to infer them based on the questions they ask.
I'm comfortable with this, and it doesn't feel like a threat.
The basic idea is that he comes up with some trading strategy, and writes the code that computes the profit/loss associated with that strategy if it was executed at market fixing prices (typically the market open or close each day).
The bank sells a total return swap on this strategy, which means that in return for a fee from the client, they pay the client the stream of profits (or losses) each month that would have resulted from trading this strategy. Behind the scenes, the bank trades the strategy (or something like it) in order to hedge the risk associated with the swap, so that they can earn the fee approximately risk free.
There's an obvious problem with this, which is that the client basically has to take the bank's word for what the profit/loss of the strategy is. To counter that, the guy who came up with the strategy now has to write a 100+ page document in legalese, which outlines exactly how the profit/loss on the strategy is calculated. This has to be sufficiently detailed that someone couple re-implement the code themselves to check it. The guy I spoke to said that this documentation takes up >50% of his time.
I'm sure everyone here will appreciate how incredible it is that a bank will pay someone six figures every year to spend more than half their time writing documentation that literally does nothing more than reproduce a piece of code, except about 50 times more verbosely.
Different symbols, but it doesn't mean anything.
At Key Stage 1 (ages 5 to 7) children are taught about algorithms, that they are a way of breaking tasks into a sequence of steps that can be reused to solve problems.
They will also be taught about the pervasiveness of software - about the different kinds of devices and appliances that rely on software.
Finally, they will be taught about privacy. I'm not sure of the content but I assume it'll be about managing information about themselves.
I know that sounds mean, but look at http://www.statisticbrain.com/iq-estimates-by-intended-colle... and notice how students going into education strongly tend to have lower IQs than most college majors. Smarter than the average adult, sure. But well below most people who get to college.
Given that fact, I am not optimistic about what you hope.
I don't think kids benefit much at all by being taught web stuff. HTML is just a lot of boilerplate, and there are better languages than javascript that reduce the code to things happening on screen barrier.
If trigonometry is being taught alongside making an asteroids game, I think that could enlighten kids on what it can be important for. It's not just filling in values on a triangle, it's direction, it's how things move, it's integral to physics, and it's important.
Particularly the teaching of jQuery to people who are just starting out. And the multiple assertions that one can "pick it up in a day", whether it be programming or teaching skills.
Seems to be about throwing together a web page in a day rather than learning to code.
And it seems the usefulness of computer programs doesn't extend beyond ecards, web sites, and "apps".
I prefer "source documents", or, if pressed, "Formal descriptions of the program".
Using the word "code" implies that the document is "encoded" somehow, which is plainly undesirable and wrong.
With some notable (1) exceptions, the primary consumer of a "source document" is a human being, not a machine.
The machine's purpose is to ensure the formal validity and correctness of the document - but the majority of the informational content of the document (variable names, structure, comments) is exclusively directed to human developers.
We will never program in a "wild" natural language, but many programming languages (2) make a deliberate effort to support expressions which simulate or approximate natural language usage, albeit restricted to a particular idiomatic form.
There will always be a tension between keeping a formal language simple enough to reason about and permitting free, naturalistic expression - but this is the same tension that makes poetry and haiku so appealing as an art form.
So many source documents appear to be "in code", not because this is a necessary part of programming, but because it is very very difficult to write things which combine sufficient simplicity for easy understanding, and the correct representation of a difficult and complex problem. In most of these cases, clear understanding is baffled not by the programming language, but by the complexity of the real world.
The rigidly deterministic nature of the computer forces the programmer to deal with a myriad of inconsistencies and complications that the non-programmer is able to elide or gloss over with linguistic and social gymnastics. The computer forces us to confront these complications, and to account for them.
In the same way that Mathematics isn't really about numbers, but about the skill and craftsmanship of disciplined thought, programming isn't really about computers, but about what happens when you can no longer ignore the details within which the devil resides.
(1) Assembler & anything involving regular expressions. (2) Python
It's important to be aggressively ignorant when interviewing people who are making a case for something. It's a hand-waving and "common sense" repellant.
You can't just say that everyone should learn to code because coding is important and everyone needs to know how to do it.
Other than the central argument, though, I actually love this post:) Paxman shouldn't mind being made a strawman for a pretty exploration like this. More, please.
I understand the point the author is trying to make, and the interviewer in the video has not grasped the above. To answer his concern, ask him what meaning does the letter 'd' have? Next to none, but in composition it can provide quite a lot of meaning. (This is an argument from Hofstadter.)
[1]: I had a study/source for this, but I can't find it.
1. So is it all just 1s and 0s?
2. So do you know how to hack?
Sometimes I cynically answer the first question with "Yes, 1s and 0s all day. Sometimes I don't even use 0s, just 1s" which I'm pretty sure I stole from a Dilbert comic, but its funny seeing the expressions I get.
Did I say that out loud?
I, on the other, will sit on the side of the liberal arts and say that any and all learning is worthwhile.