Future of Coding • Episode 66
Bonnie Nardi • A Small Matter of Programming
This community is a big tent. We welcome folks from all backgrounds, and all levels of experience with computers. Heck, on our last episode, we celebrated an article written by someone who is, rounding down, a lawyer! A constant question I ponder is: what's the best way to introduce someone to the world of FoC? If someone is a workaday programmer, or a non-programmer, what can we share with them to help them understand our area of interest?
A personal favourite is the New Media Reader, but it's long and dense. An obvious crowd-pleaser is
Inventing on Principle▾
Bonnie Nardi's A Small Matter of Programming deserves a place on the list, especially if the reader is already an avid programmer who doesn't yet understand the point of end-user programming. They might ask, "Why should typical computer users bother learning to program?" Well, that's the wrong question! Instead, we should start broader. Why do we use computers? What do we use them to do? What happens when they don't do what we want? Who controls what they do? Will this ever change? What change do we want? Nardi challenges us to explore these questions, and gives the reader a gentle but definitive push in a positive direction.
Also of note — we've launched a Patreon! If you enjoy the show, please consider supporting it with a small (or not-so-small) monthly contribution. You'll get bonus episodes and a warm feeling in your heart (disclaimer: warm feeling is a metaphor; if you actually feel an increase of body heat please do not discontinue support but do talk to a doctor)
In the game of FoC Patreon Tiers, Visual Programming is in the lead. Type System purists, where you at!?
Personal Dynamic Media
08/24/2023, 5:10 PM
Thanks for another fun episode! Here are my notes.
Alan Kay's vision is focused on communicating by giving other people an executable simulation of your idea, not just figuring things out for yourself. His work on "active essays" is all about embedding simulations within a document for the purpose of improving communication.
With respect to programs that write programs, Andrew Hume supposedly said "Programs that write programs are the happiest programs in the world."
Regarding "The computer is the fake bit and the program is the real part," though I cannot find a primary source, Dijkstra is sometimes quoted as saying "Computer Science is no more about computers than astronomy is about telescopes."
Also, from SICP (https://mitp-content-server.mit.edu/books/content/sectbyfn/books_pres_0/6515/sicp.zip/full-text/book/book-Z-H-7.html), "First, we want to establish the idea that a computer language is not just a way of getting a computer to perform operations but rather that it is a novel formal medium for expressing ideas about methodology. Thus, programs must be written for people to read, and only incidentally for machines to execute."
If Dijkstra the Formal AND the freewheeling MIT crowd BOTH agree with you, Jimmy, then you might be onto something.
On the subject of modifying existing programs, one outstanding success story is Emacs. Emacs is really easy to customize in little and big ways because it was designed to be customized, with extensive support for custom key mapping, configuration, and the ability to install hooks before and after almost every important action. The result Is that it takes very little code to insert a little tweak in behavior wherever you want to. This wasn't an inevitable consequence of the language or the development environment, although they were a tremendous help. It came from a steadfast commitment to customizability at every stage of the design and implementation.
It also offers a gentle on-ramp to programming because the user can start with small customizations and gradually ramp up to more intricate ones. There is no point in the journey where you need to stop playing and go learn how to program all at once.
I especially love section "8.3 Blue Sky" in the original Emacs paper.
I think Peter Naur's paper Diminishing Returns of User Programming (1978) is relevant to this whole conversation. As languages become higher and higher level, they tend to either become specialized and limited, or to have an explosion in vocabulary. Some people think that domain-specific languages are a way to escape this trap, but somehow this dichotomy must be addressed if we want to create a form of programming that is easy, high level, and general purpose.
08/29/2023, 9:57 PM
You guys are in my head. First driver and now this.
I don't think common sense is necessarily captured in most LLM models, but I would suggest that there are other ways to bootstrap symbolic AI that by doing knowledge representation of common sense. You could also do knowledge representation of uncommon sense expressed in text, the advantage being that unlike common sense, uncommon sense is usually explicitly stated in the text, making it easier to find. What would make that easier is examples of knowledge extracted from text, started in a formal language. Which would require people with uncommon knowledge to be able to encode that knowledge formally. Which would require tools better than the ones we have now for letting humans use formal language. Or end-user programming.
For me, generative AI has only this year gotten good enough to be able to translate facts from natural to formal language usefully. But that means a symbolic encoding by a human can now be used by AI in a natural language conversation. And even without the natural language part, the software developers who want to interact with my reasoner through code want features for conversation. "Why doesn't it know what question to ask, the order in which to ask them, and how they should be phrased?" So that one question at a time web interviews can be created without the software developers needing to know so damned much about the problem.
Facts, but not yet logical implications. But the latter limitation might be a matter of prompt engineering, fine tuning, or context size.
I'm currently reading kowalski's book on computational thinking again. His paper on resolution of clausal form logic that led to the creation of Prolog might be fun. Or if you want to stick with the in Jason's head theme, "British nationality act as a logic program", which is like the birthplace of statutory legal knowledge representation in symbolic AI.
08/29/2023, 10:41 PM
@Ivan Reese if it’s handy, please post a link to the pinhole camera Blender demo you talked about.
Blockly is another example of people very concerned about lowering the threshold to accessibility, with (originally) a specific aim on pedagogy in the sense of young person education. So much so, in fact, that they have justified certain design decisions by saying "it isn't supposed to be used for 'real' work." Then they switched away from a focus on children, moving toward education more broadly. But in the last year or two they have had a visible change of heart about whether it is for education, and have moved to the position that it is also for domain specific language interfaces. Which undoes the only justification they had for not including more complicated syntactical elements, which they have started adding. Basic elements, first, and still very much focussed on imperative code, but they can see from how their software is being used what it is for. And they were wrong. It's not for kids, and it's not for education. It's just a better way to program for human beings (one of many). They built a tool for helping programmers build tools for end user programming by accident, but they are starting to understand that, and I'm curious to see where it goes from here.
I'm in the second bucket but I don't know why these are the two buckets!!!
But seriously though, I have to be very strict with myself to stay in the first bucket as much as possible, and it always works well when I manage this! For example, my mastodon-to-X cross-poster is still working today, whereas many others broke with each API change. I used the same technology to my make my patreon-to-substack cross-poster.
But seriously though, I'm often frustrated at how wide the gap is between each bucket in tools. I'm happy to take "the long way" with animating an image on screen, until I'm not. I can't take my existing work over to the automation bucket. I have to start from scratch! So... I often have to guess which bucket to use ahead-of-time for a given task. Sometimes I get it right and sometimes I get it wrong, and it's really frustrating when the latter happens! Cmon Adobe just let me fiddle with these nobs in either app!
Also love the Coldplay cover.
I wish that we taught kids more coding and computing in general (here in the UK at least). I found it very frustrating to teach certain pointless things - products of the latest political football headline - instead of real life skills. Like it or not, the whole world revolves around computers. So teaching coding can be a way of showing young kids that they can be an active participant in that world, not just a passenger. That's the point of learning to code at that age.
And minification is evil!