I think the FoC includes not only how we code, but...
# devlog-together
j
I think the FoC includes not only how we code, but how we think and talk about code. In that vein, I’ve been looking at influences from philosophy and art history to see what we can learn from them.
👍 3
The first interesting connection I’ve been thinking about for a while is from Michael Baxandall’s patterns of intention. In the book he is looking at how we describe works of our, historically and critically. He begins with a non-art artifact, the Forth Bridge. His descriptions and explanations mesh very well with software. Unlike literature, art is non-linear. Where we start with our explanation is a choice in itself. We also face this problem of translation. One way to full describe an image is to list all its pixels. But this is hardly what we mean by description. There is a ton more in this book, really well written and interesting. It leads me to ask the question, what would code criticism look like? There are traditions that take up that name. There is some interesting work there, but they are in the vein of critical studies rather than art/literary criticism. My very basic start of this project was to think about the elements of describing code style. We have them very clearly in art, but to my knowledge, not shared vocabulary for describing code. My elements are very basic. But I think recognizable and hopefully useful. https://jimmyhmiller.github.io/aesthetic-elements
❤️ 1
The second influence I’ve been considering is the philosophical literature on Conceptual Engineering. The idea is that concepts in our language are not static, but rather change over time. There are questions about how exactly these change, how much is in our control etc. But what is really interesting, is all of the philosophical literature points to us, software engineers, as the quintessential example conceptual engineering. Yet we never talk about that concept. I think consciously thinking about our work as conceptual engineering might actually shed some light on it. https://jimmyhmiller.github.io/conceptual-engineering
❤️ 2
l
Interesting that the conceptual engineering people reference us! And makes sense. I sometimes feel exhausted by the sheer volume of concepts we have to invent/learn about. There are a thousand different ways to solve a problem, but you have to actually pick one to get it working. And once you do, you lock in this arbitrariness in the code that makes it boring to think and talk about, because 90% of the details of how it works don’t generalize to solving similar problems, just the way that that solution happens to work. There have been times a non-technical person asks me how something works and, while I normally enjoy explaining something, I avoid giving an answer because I know the details are so arbitrary that I would feel like I’m wasting their time and attention.
k
I very much agree about the importance of aesthetics, and I often regret that programming languages are often very opinionated about them, though typically without being explicit about it. As for conceptual engineering, that's a term I have seen here for the first time, but it looks very close to what I have been thinking about over the last months: the formalization of scientific models. I guess this counts as a special case of conceptual engineering. I'll have to read the book you cite! Here are my thoughts on formalization, finished just yesterday: https://science-in-the-digital-era.khinsen.net/#Formalization. And here, quite related, my thoughts on static type systems (which are about capturing concepts as well): https://science-in-the-digital-era.khinsen.net/#Static%20type%20systems
j
@Luke Persola Yeah, I definitely can relate. One of the things thinking about the explicitly has helped me to is to decide if I really want to introduce those concepts. Honestly, that’s one of things I really like about Clojure. I can get away with not introducing concepts. Rust on the other hand (another favorite language of mine) requires some level of concept introduction in every code base.
@Konrad Hinsen Definitely agree formalization is a subset of Conceptual Engineering. Also really like your thoughts on domain specific type systems and gradually layering on types. I’ve done a few very basic proofs in idris using the type system. But the proof I actually understood the most was when I used idris without all the fancy types to walk through Godel’s incompleteness theorems. My code will type check and not be a correct proof, but I understood it so much more. And I had a much better time writing it. I often find when I am reading analytic philosophy I wish I had a nice programming tool for exploring the various formal arguments I encounter. https://github.com/jimmyhmiller/PlayGround/blob/master/idrisTests/src/Godel.idr
👍 1