You are viewing archived messages.
Go here to search the history.

Kartik Agaram 2025-01-27 02:01:55

Umpteenth take on "Programming As Theory Building"

One thing I haven't thought to mention until now, in all the conversations about this paper. Between 2019 and 2021 I had perhaps the influential experience of my dayjob career. I got reorged to take over a legacy codebase, and after some initial struggles became expert with it to the extent it felt like my baby, something I'd written myself. And it wasn't just me; I gradually became the tech lead for the team, helped others understand it, and for a while[1] the team was able to own it and make improvements to it.

Factors that made this possible:

  • The codebase was relatively recent, just like in OP.
  • The codebase was well-designed, just like in OP.
  • One of the original authors was still in the company, and welcoming to questions. This one is not like OP. And it was crucial.

[1] What happened after? The company decided it was old, banned changes to it, chased a new shiny thing and let it decay. Companies find many, many ways to fail.

Scott 2025-01-27 14:18:01

You know...I've had similar experiences in the past as well, and I think what drew me to Programming as Theory Building was less the argument that it was impossible to gain a theory of the program without it being passed person to person from the original authors and more just a description of the idea of 'becoming an expert with it to the extent that it feels like your baby'.

More that it puts words and an explanation to that concept where you gain an intuition for how the machine will work with different inputs, if there's a bug, having an intuition for where it likely is, and how to make changes to it quickly and safely...

Jasmine Otto 2025-01-27 20:22:36

There's probably a through-line here about how software engineers are primarily communicators. Even when we do not identify as designers, our actual tasks are to identify needs, get buy-in, and cultivate trust.

Jasmine Otto 2025-01-27 20:25:05

Perspective-taking works for artifacts and not just audiences.

Scott 2025-01-27 20:26:17

Huh, interesting...that second sentence wasn't where I thought you were going with that thought...I immediately went to thinking about how you may write code in a particular way in a particular place to communicate something specific about it to future readers...and I don't think I've seen much about that concept

Jasmine Otto 2025-01-27 20:26:52

There should be more rhetoric of code for sure, for sure.

Scott 2025-01-27 20:30:41

I had an experience in the past where one of my teammates was working on a PR for another team's library and recognized an opportunity for a really clean refactor...but since the other team didn't know us really well, we decided to pare the change way back and just hint at the refactor in the PR by subtly making our code also work really easy with that potential refactored interface...giving them the chance to recognize it and decide whether to go in that direction or not...

Scott 2025-01-27 20:31:33

wow I'm not familiar with rhetoric of code

Scott 2025-01-27 20:31:40

this looks like exactly what I've been looking for haha

Paul Tarvydas 2025-01-28 03:07:52

I see 2 distinct tasks here: (1) control a machine, (2) communicate to other human programmers what was intended. This sounds like 2 languages, one for each task. And, a tool to tie the two together. Programming languages attempt to do a union of both tasks which just makes the problem harder.

Scott 2025-01-29 14:30:13

Hm I'm not sure if you can actually split them out...or at least (1) contains a lot of (2) whether you intend it to or not.

Paul Tarvydas 2025-01-29 16:22:42

I agree, but, I think that this is a problem. Conflating 2 concepts generally makes the solution 10x harder. We must use assembler to program CPUs, but, we don't actually need to be using sequential coding languages for anything higher level than that.

Bill Mill 2025-01-28 13:27:31

this is a small neat thing: perthirtysix.com/communal-plot-daily-poll

📝 The Communal Plot | A Daily Visualization We All Build Together

Interactively respond to a daily poll and see how your responses compare to others in real-time!

Mariano Guerra 2025-01-31 15:43:42

Sound As Pure Form - a Forth-like language for audio synthesis using lazy lists and APL-like auto-mapping.

From the creator of SuperCollider

Other languages that inspired this one: APL, Joy, Haskell, Piccola, Nyquist, SuperCollider.

Bill Mill 2025-01-31 16:20:10

I enjoyed the manifesto-README

Bill Mill 2025-01-31 16:20:40

APL and FORTH (from which Joy derives) are both widely derided for being write-only languages. Nevertheless, there has yet to be a language of such concise expressive power as APL or its descendants. APL is powerful not because of its bizarre symbols or syntax, but due to the way it automatically maps operations over arrays and allows iterations at depth within arrays. This means one almost never needs to write a loop or think about operations one-at-a-time. Instead one can think about operations on whole structures.

Konrad Hinsen 2025-02-01 19:15:36

While I agree personally with this perspective, teaching NumPy (whose core is APL in Python syntax) for many years lead me to the conclusion that for many people, loops seem more natural. Maybe due to prior exposure to more mainstream languages, I can't say. All my exercises started with "remember: no loops!", and yet, most solutions implemented by the students had at least one explicit loop.

Paul Tarvydas 2025-02-01 21:35:54

FWIW: I endeared myself to my summer employer by taking a few minutes to rewrite Fortran-oriented-APL into APL-oriented-APL. What took 1 weekend to run on an S/370, took mere minutes.

2025-02-01 21:40:58

This looks really cool, and if you want a more generalized language that is both stack and array based there's UIUA uiua.org Enjoy!

Aside: discovering APL when trying to write a program to implement the Space Groups in architectural computation is what led me down the array programming and then Future of Coding (and then esolangs) wormhole.

(The program is out as a C# based plugin for the visual programming language Grasshopper but hasn't been implemented in APL yet.)

📝 Uiua

A stack-based array programming language

Konrad Hinsen 2025-02-02 08:10:24

BTW, anyone looking at APL for mind expansion should also have a look at implementation techniques. There are many open source implementations of APL-like languages to look at. Much of that code looks almost alien.

Kartik Agaram 2025-01-31 16:37:57
Lu Wilson 2025-01-31 16:39:19

i didn't write this

Kartik Agaram 2025-01-31 16:39:50

Ah. Will edit. The article doesn't state an author, and the website feel collective.

Lu Wilson 2025-01-31 16:40:22

it's by pastagang

Kartik Agaram 2025-01-31 16:41:01

Oh, like the collective cyborg hive organism? Very cool.

Lu Wilson 2025-01-31 16:42:15

yeah and to be clear i personally didnt write any of those words in that post

Lu Wilson 2025-01-31 16:43:02

every pull request is merged to the pastagang blog/website/etc you are welcome to commit anything, i can even give you admin access

Kartik Agaram 2025-01-31 16:43:40

Yes please. I would like to join your cyborg collective.

Lu Wilson 2025-01-31 16:44:31

i added u. add/edit/delete anything

Tom Larkworthy 2025-01-31 17:26:09

my magician transhumanist non-transgender friend Scott Jeffrey always put transgender as as apex transhumanism, good too see that validated by another human independently. I shall send him this immediately! (I also agree the phones make everyone cyborgs)

link.springer.com/book/10.1057/978-1-137-54950-1

Xavier Lambein 2025-02-02 10:11:10

Expanding on @Jon Secchis's video from last week, here's a 50-page memo on the design of Unix, written by Ritchie: tuhs.org/Archive/Distributions/Research/McIlroy_v0/UnixEditionZero-OCR.pdf