mirror of
https://github.com/osmarks/website
synced 2025-05-09 19:04:09 +00:00
copyedit
This commit is contained in:
parent
ae24fd8b80
commit
949efae88f
@ -18,7 +18,7 @@ I think it's more plausible that teaching focuses on this surface knowledge beca
|
||||
|
||||
So why is programming education particularly bad? Shouldn't *every* field be harmed by tacit knowledge transmission problems? My speculative answer is that they generally are, but it's much less noticeable and plausibly also a smaller problem. The heuristics used in programming are strange and unnatural - I'll describe a few of the important ones later - but the overarching theme is that programming is highly reductionist: you have to model a system very different to your own mind, and every abstraction breaks down in some corner case you will eventually have to know about. The human mind very much likes pretending that other systems are more or less identical to it - [animism](https://en.wikipedia.org/wiki/Animism) is no longer a particularly popular explicitly-held belief system, but it's still common to ascribe intention to machinery, "fate" and "karma", animals without very sophisticated cognition, and a wide range of other phenomena. Computers are not at all human, in that they do exactly what someone has set them up to do, which is often [not what they thought they were doing](https://gwern.net/unseeing), while many beginners expect them to "understand what they meant" and act accordingly. Every simple-looking capability is burdened with detail[^1]: the computer "knows what time it is" (thanks to some [nontrivial engineering](https://en.wikipedia.org/wiki/Network_Time_Protocol) with some possible failure points); the out-of-order CPU "runs just like an abstract in-order machine, but very fast" (until security researchers [find a difference](https://en.wikipedia.org/wiki/Meltdown_(security_vulnerability))); DNS "resolves domain names to IPs" (but is frequently intercepted by networks, and can also serve as a covert backchannel); video codecs "make videos smaller" (but are also [complex domain-specific programming languages](https://wrv.github.io/h26forge.pdf)); text rendering "is just copying bitmaps into the right places" ([unless you care about Unicode or antialiasing or kerning](https://faultlore.com/blah/text-hates-you/)).
|
||||
|
||||
The other fields which I think suffer most are maths and physics. Maths education mostly [fails to convey what mathematicians actually care about](/assets/misc/LockhartsLament.pdf) and, despite some attempts to vaguely gesture at it, does not teach "problem-solving" skills as much as sometimes set nontrivial multistep problems and see if some people manage to solve them. Years of physics instruction [fail to stop many students falling back to Aristotlean mechanics](https://www.researchgate.net/profile/Richard-Gunstone/publication/238983736_Student_understanding_in_mechanics_A_large_population_survey/links/02e7e52f8a2f984024000000/Student-understanding-in-mechanics-A-large-population-survey.pdf) on qualitative questions. This is apparently mostly ignored, perhaps because knowledge without deep understanding is sufficient for many uses and enough people generalize to the interesting parts to supply research, but programming makes the problems more obvious, since essentially any useful work will rapidly run into things like debugging.
|
||||
The other fields which I think suffer most are maths and physics. Maths education mostly [fails to convey what mathematicians actually care about](/assets/misc/LockhartsLament.pdf) and, despite some attempts to vaguely gesture at it, does not teach "problem-solving" skills as much as sometimes set nontrivial multistep problems and see if some people manage to solve them. Years of physics instruction [fail to stop many students falling back to Aristotelian mechanics](https://www.researchgate.net/profile/Richard-Gunstone/publication/238983736_Student_understanding_in_mechanics_A_large_population_survey/links/02e7e52f8a2f984024000000/Student-understanding-in-mechanics-A-large-population-survey.pdf) on qualitative questions. This is apparently mostly ignored, perhaps because knowledge without deep understanding is sufficient for many uses and enough people generalize to the interesting parts to supply research, but programming makes the problems more obvious, since essentially any useful work will rapidly run into things like debugging.
|
||||
|
||||
So what can be done? I don't know. Formal education is likely a lost cause: incentives aren't aligned enough that a better way to teach would be adopted any time soon, even if I had one, and enough has been invested in existing methods that any change would be extremely challenging. I do, at least, have a rough idea of what good programmers have which isn't being taught well, but I don't know how you *would* teach these things effectively:
|
||||
|
||||
|
@ -25,7 +25,7 @@ description: Fly an ominous flying square around above some ground! Includes spe
|
||||
<canvas id="thing" width=800 height=800></canvas>
|
||||
<div id="controls-container">
|
||||
<div id="controls">
|
||||
<label><select name="mechanics"><option>Relativistic</option><option>Newtonian</option><option>Aristotlean</option></select> Mechanics</label><br>
|
||||
<label><select name="mechanics"><option>Relativistic</option><option>Newtonian</option><option>Aristotelian</option></select> Mechanics</label><br>
|
||||
<label><select name="ground"><option>Noise</option><option>Time-Varying</option><option>Flat</option><option>Triangles</option><option>Catenary</option></select> Ground</label><br>
|
||||
<label><select name="controls"><option>Absolute Orientation</option><option>Relative Orientation</option></select> Controls</label><br>
|
||||
<label><select name="restitution"><option>1</option><option>< 1</option><option>> 1</option></select> e</label><br>
|
||||
@ -215,7 +215,7 @@ function loop(timestamp) {
|
||||
}
|
||||
var velocityChange = scalarMult(scale(force), 1/divisor)
|
||||
//console.log(gamma(vecLength(velocity)), velocity, velocityChange)
|
||||
if (settings.mechanics === "Aristotlean") {
|
||||
if (settings.mechanics === "Aristotelian") {
|
||||
velocity = scalarMult(velocityChange, 60)
|
||||
} else {
|
||||
velocity = vecAdd(velocity, velocityChange)
|
||||
|
@ -52,7 +52,13 @@
|
||||
"Money Stuff": "https://www.bloomberg.com/opinion/authors/ARbTQlRLRjE/matthew-s-levine.rss",
|
||||
"The Worlds of John Bierce": "https://johnbierce.com/blog/feed/",
|
||||
"Dominic Cummings": "https://dominiccummings.substack.com/feed",
|
||||
"citrons": "https://citrons.xyz/a/journal/rss.xml"
|
||||
"citrons": "https://citrons.xyz/a/journal/rss.xml",
|
||||
"Marginal Revolution": "https://feeds.feedblitz.com/marginalrevolution",
|
||||
"SemiAnalysis": "https://www.semianalysis.com/feed",
|
||||
"Mythic Beasts": "https://www.mythic-beasts.com/blog/feed/",
|
||||
"Tales from the Void": "https://randomsprint.substack.com/feed",
|
||||
"Max Barry": "https://maxbarry.com/index.rss",
|
||||
"Real World Tech": "https://www.realworldtech.com/feed/"
|
||||
},
|
||||
"dateFormat": "YYYY-MM-DD",
|
||||
"microblogSource": "https://b.osmarks.net/outbox",
|
||||
|
@ -597,5 +597,14 @@
|
||||
"accel": "A comparison of Tenstorrent's architecture to others and the reasons they have for it."
|
||||
},
|
||||
"excerpt": "Semi-custom silicon is a bigger problem than Nvidia."
|
||||
},
|
||||
"https://x.com/FelixCLC_/status/1913629661780750561": {
|
||||
title: "Discussion of why AI hardware as a field prefers low precision types came up (again) the other day.",
|
||||
author: "@FelixCLC_",
|
||||
date: "2025-04-19",
|
||||
referenceIn: {
|
||||
"accel": ""
|
||||
},
|
||||
excerpt: "The software brained answer is that for precision insensitive workloads, you effectively double your bandwidth from caches/device mem/host mem. But there's a lot more to it."
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ block content
|
||||
span.description!= experiment.description
|
||||
|
||||
p Get updates to the blog (not experiments) in your favourite RSS reader using the <a href="/rss.xml">RSS feed</a>.
|
||||
p View some of my projects at
|
||||
p= "View some of my projects at "
|
||||
a(href=`https://git.${domain}/`) my git hosting.
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user