I think that would be an interesting breakdown to ...
# of-end-user-programming
s
I think that would be an interesting breakdown to see - if you had to pick a side, do you believe code is primarily art or primarily engineering/science…or is that something different from what you’re saying @Kartik Agaram?
k
Almost. What code "is" feels abstract. But what use cases are you designing for? That feels extremely concrete. And also obvious that it's a big fork in the road.
s
Ah yeah I guess maybe I mean more what are you doing when you’re programming, rather than the output itself
I’ve also heard it referred to as the formalist vs hermeneutic split
💡 1
k
It's possible the two camps even use different meta-language when thinking about the question. Perhaps the fact that I find "what you do when you're programming" tautological/unanswerable is enough of a sign of which camp I'm on 😄
Formalist vs hermeneutic, interesting, hadn't heard of that: https://saintgimp.org/2009/03/04/formalism-vs-hermeneutics
s
Ah yeah - that’s where I heard it first as well - in Object Thinking
k
After reading that blog post it feels orthogonal. You could make a game in a very legible way or in a very emergent way with procedural graphics. I work on a deployment engine at work that has some emergent attributes. The question here seems to be about how you judge software in progress when you're building it. I'm constantly focused on the function I want to deliver, and what little aesthetics I have stems directly from how parsimoniously I can deliver the full complexity of the function without compromise. On the other hand when I see people tuning the game play of a game they've built, that feels like an utterly alien mindset to me. I have no sense of 'up' there. I need to expand my horizons 😄
s
But totally agree about the different meta-language, because looking at your two options of scaling up manual activities vs world building, I don’t know if I look at those two as distinct activities. Even when I’m scaling up manual activities - I kind of approach it as world building
😄 1
k
This seems like a very important conversation I'm going to have to really think about. I hazily glimpse two camps, each can very easily forget the other exists.
s
Oh yeah, definitely - I think people tend to self organize into groups where their dominant approach is the common one for the team/language/community/etc because it can be very frustrating being in an opposing one
and then lose sight that there’s even another group 🙂
But if I remember right, that’s pretty close to what I interpreted Naur to be saying in Pluralism in Software Engineering
💡 1
d
I'm 100% Hermeneuticist. Didn't know that!
🤘 2
k
..people tend to self organize into groups where their dominant approach is the common one..
@Scott Werner I think this may be even worse (or more interesting). We have representatives from both camps in this group. And we have long periods where we have lots to talk about and lots in common. And yet it's seductively easy to forget about this particular axis even when it may be at the root of many disagreements. We use the same words with almost the same meanings, but not quite, in some important way. I'm reminded of the Rick&Morty episode with the memory-implanting aliens: https://rickandmorty.fandom.com/wiki/Alien_Parasites Perhaps both camps have an unfortunate tendency to focus on means rather than ends.
🤣 1
d
One of my longstanding core beliefs driving my own work is that programming is creating OR modelling reality. I don't care which, the latter including automation when the model replaces the reality.
👍🏻 1
So there's similarly no need to divide the domain into artie things and engineeringie things, they're both realities that can be programmed.
s
@Kartik Agaram that’s a good point - this group is an interesting example 🙂 I’ve noticed the difference more in an office setting. I used to run a team that grew to have a mix of people from both camps, and it seemed like each week I was playing mediator for some major disagreement
@Duncan Cragg I’m not sure I agree with that 🙂 At least in a work setting, I find it useful to at least know which approach someone is taking to be able to fully understand what they wrote
and in certain environments, I think it is similar to the introvert/extrovert divide - working in one style can be energy draining or energy giving depending on where you fall
s
The universe is a computer: true or false?
(And when you put that kettle on the stove, or a ball on a inclined plane, are you programming the universe?)
i
@shalabh true
I mean, “physical reality”. We’re models in a multi-agent environment, learning with each life. If you look at it from a CS standpoint, karmic model is a great learning system - help the computation, don’t disrupt other’s computation and perform your own computation and your model’s next iteration (life) will have a better starting position where it gets to learn something new. Otherwise, your next iteration will be one where you’ll have to focus on the area’s this one didn’t seem to work in properly and relearn it. The best models get elevated out of this physical reality (enlightement). That’s why detachment from worldly things is a popular religious notion - they distracts your model. The more you’re entangled with this reality the less you’re entangled with the “ether”. The less you’re entangled with this world and the, the larger your model’s weight/pull/influence in this reality is (the neumann-wigner interpreation of wave function collapse, but we’re all observers, just that some have more influence on the resulting collapse than others).
t
Is writing an art or a science? You can use it to express both. Like writing, programming is neither, it's a medium of expression; a means of encoding ideas. Writing is a good way to encode ideas so that they'll be reproduced faithfully in the mind of another person. Coding a good way to encode ideas so they'll be reproduced faithfully in a computer. And since it is so carefully designed for communicating processes, it's not bad for manifesting ideas about processes in human minds too. You can encode processes with artistic intent, or you can encode processes with practical intent. It's up to you. I would like it if coding were easy enough that more people found it a fluid means of expressing themselves artistically, but that same fluidity would benefit practical applications just as well. More code-for-art would be an indication that code is improving at being accessible.
k
I have no idea what y'all are talking about! It does seem possible to accidentally create when trying to automate: https://www.reddit.com/r/Python/comments/dg0etx/just_trying_to_create_a_orbit_system_in_python
❤️ 3
s
@tbabb I think there are a lot of parallels to writing, and use a lot of writing metaphors when discussing PR review with people, though I don’t think you can get away from artistic intent even if you encode it with practical intent. In the same way that you hear people discuss music created by AI as mechanical or chess AI moves as “computer moves”
k
@shalabh The first person to build a wall was programming the universe. No longer did they have to push back on every invader one by one, the wall could now repel many invaders while they slept. But I have no idea what we're talking about anymore, so not sure if this is helpful.
😂 2
👍 2
d
@Kartik Agaram most of our reality is actually "virtual", your walls, the houses, roads, etc, even the farmlands. Only forest is truly original reality. But "modelling"/creating these new realities took a lot more effort than in Minecraft! Computers/programming potentially allow us to turn thought into manifestation much more easily. But the "us" is currently just people like us here, not the general human population that could and should benefit from this magical power.
Computers don't care if you're creating an artwork, automating a business process or building virtual reality. So the programming language, etc, shouldn't care either.
I do believe that this can only be done in the Hermeneutic tradition - I think distributed multi-user (multi-normal-people) systems can't be formalised and work lock-step. Eventual consistency and a loss of central and absolute programmer control is the only approach that can scale. Thus declarative not imperative, distributed not centralised, emergent behaviour not scripted.
s
Hm, so I don’t know if I’m that extreme 🙂 I feel like either way can work perfectly fine. I know I can’t work in a formalist way, but have worked with people who approach programming problems that way and seen them be successful. Where it becomes hairy is when there are a mix of people on a team that need to work on the same code, and one side is seen as too rigid and the other as too sloppy.
s
I'm probably biased but the Hermeneutic tradition seems broader. It can encompass the whole system, the formal and fuzzy bits. When I say 'system' I mean not just the computer but the computer/human/physical interplay. We have agency and build stuff with tools, materials and complex machines called computers for goals that exist outside the machines. So the stuff we build doesn't have to be correct with respect to itself (~math proof) but really useful to us. If the 'types' correspond perfectly the reality being simulated, sure, the type checker gives us useful feedback. More often there is no perfect correspondence and problem is that the formalism cannot be tweaked to represent what we really need and cannot be selectively overridden. In extreme cases the formalism becomes the lens we look through to view reality - we have now lost our ability to even find the gaps between the formalisms and reality.
d
When working on Curv, I alternate between periods of language and API design, and periods of using the language to make art. My approach to language/API design is formalistic, even using abstract algebra and category theory to justify design decisions. The order and symmetry is needed to keep the complexity of learning and using the language in check. The raw material used as input to that formalistic process sometimes comes from Hermeneutics. For example, "Solve et Coagula" (a motto from Alchemy) is a design principle. Then when I use Curv to create art, I'm writing code with some artistic intent and looking for the emergent behaviour, so that's hermeneutic as well. As a user, I insist on dynamic typing, not static typing -- formalist me doesn't have a say in this. I can't be the only person who is in both camps.
❤️ 3