What is code?

One, there’s no magic, no matter how much it looks like there is. There’s just work to make things look like magic. And two, it’s crazy in there.

How do computer languages work? by Eric Raymond

and

What is Code? by Paul Ford in Bloomberg Businessweek (animated infographic and beautiful background, A+++)

every program ultimately has to execute as a stream of bytes that are instructions in your computer’s machine language, but human beings don’t deal with machine language very well; doing so has become a rare, black art even among hackers

assembly languages (low level) are thin wrappers around machine code

but nowadays almost all code is written in a high level language

the source code of a program (the human-created, editable version) has to go through a translation into machine code before the machine can actually run it

compiled languages: get translated to binary by a compiler; most software is delivered as finished compiled binaries made from code you don’t see (in runnable files of machine code) 

C and C++ is the most important of compiled languages (unix is written in C) — C is a language you use for building systems; it has the same role in computing that Latin did among Renaissance academics.

interpreted languages: depends on an interpreter program that reads and translates the source code on the fly (every time the code is executed, it has to be reinterpreted) and is slower than a compiled language (unix shells and lisp are probably the most important interpreted languages)

p-code or pseudocode languages: hybrid; like compiled languages in that the source code is translated to a compact binary form (but not machine code) which is what you actually execute; this code is called pseudocode and is simpler but more powerful than a real machine language; when the program is run, the p-code is interpreted (important p-code languages: python, perl, java)

cellular automata, conway’s game of life; the glider symbol

programming is fun, but the kind of fun that takes effort. effort takes motivation. you have to get a basic thrill from solving problems, sharpening your skills, and exercising your intelligence.

(but designers are problem solvers already! they enjoy that stuff!)

you need to have a faith in your own learning capacity

optimism!

NO PROBLEM SHOULD EVER HAVE TO BE SOLVED TWICE

- sharing culture among hackers

code is a representation of tiny switches being flipped

code is a means of harnessing the computer’s power

a programming language is really less like a language and more like a set of rules(?) — A language is software for making software. The standard library is a set of premade software that you can reuse and reapply.

"A programming language is a system for encoding, naming, and organizing algorithms for reuse and application. It’s an algorithm management system."

(algorithm: set of instructions for solving a problem)

"An algorithm can be translated into a function, and that function can be called (run) when software is executed. There are algorithms that relate to image processing and for storing data efficiently [...] Most algorithms come for free, already built into a programming language, or are available, organized into libraries, for download from the Internet in a moment."

how do transistors work at the electron level?

how does code control the light emitted by pixels on a screen?

coders "run the things that run the world"

Computing treats human language as an arbitrary set of symbols in sequences. It treats music, imagery, and film that way, too.

What is your computer doing right now? What are the steps and layers between what you’re doing and the Lilliputian mechanisms within? "Thinking this way will teach you two things about computers: One, there’s no magic, no matter how much it looks like there is. There’s just work to make things look like magic. And two, it’s crazy in there."

“Computer science is no more about computers than astronomy is about telescopes.” – Djikstra

Categorizing stuff to make it easier to keep track of: C to C++; object oriented programming; a way to name things and bits of code

Video (scroll down)