I’ve become one of the fifteen students in this ye...
# thinking-together
s
I’ve become one of the fifteen students in this year’s Building Beauty and Beautiful Software Initiative — the postgraduate course on Christopher Alexander’s Nature of Order with an additional seminar for “computer people” to find out how to transfer his ideas into the software industry. It’s been a busy first three weeks and I’ve already learned a lot, which I hope to share eventually. I’m even more convinced now that Alexander has figured out a deep truth about designing and building beautiful things that absolutely needs to be adapted to the software world. I’d love to invite those here who are interested in Alexander’s work to connect so we can attempt to bridge the two communities — in which way exactly I’m still contemplating and open to suggestions. At least I wanted to start a thread here which could become anything from an AMA about the course to a beacon for those who’d be interested in activities that might happen around this topic spanning both communities (I could picture an online event bringing us all together). If you want to be part of that, leave a comment in the thread and feel free to suggest ideas or ask me anything…
🍰 1
❤️ 8
10
If you are looking for a little more background on what this is all about, I’ve collected a few good resources in this short Twitter thread: https://twitter.com/stefanlesser/status/1312739694950612993?s=21
t
I’d be interested in that @Stefan.
e
I'm interested @Stefan!
d
I'm interested too!
@Stefan do you know how many of the 15 students have background in architecture vs software?
s
Yes, there’s 5 with software background and 10 others, although that doesn’t necessarily say anything about the architecture students’ software proficiency. As far as I can tell we have the whole spectrum from struggling with Zoom to having some programming experience among the architecture students as well. However, there’s a variety of people among the professors, instructors, and faculty as well that are also part of that community, so I'm not just thinking about the students here.
d
Oh, I can't NOT be involved in this! I just hope it fits around or my with schedule! I just recorded a 3 hour ramble yesterday about the connections between living structure in the physical world, natural world (micro and macro), human world (e.g. businesses), and software; what that means and why it matters; how the failure to achieve it hurts society, the planet, and ends users; how it can be accomplished in software, and how doing so is central to the computer revolution that hasn't happened yet; etc. ... I'll need to trim it down or summarize it, but might not be able to do that during the work week.
(I'm technically still on leave from this community, but just happened to actually peek at the latest weekly email, and I saw this thread and just had to jump on, and this is a very specific opportunity I'm working to make a singular exception for ... Side note, making progress managing ADHD ... despite that one 3 hour recording 😅😬)
👍 1
h
it'd be amazing to even just get access to the course materials or notes -- if there's any way to provide the community a data exhaust that would be truly grand
i feel like a lot of us participate asynchronously so any way to learn that's friendly to that would be 👌
dont let me oblige you to take a bunch of notes for us though 🙂
y
@Stefan are you familiar with Sep Kamvar’s work? If you’re into Alexander, you might enjoy Sep’s Syntax and Sage (this short essay gives a flavor of it). He’s brought Alexander’s ideas to both software and to the design of his companies + learning communities (Celo, Wildflower, his research at MIT).
👍 2
❤️ 1
j
I’m interested 🙂
g
i’m interested!
d
Best (simple and meaningful) adaptation of Christopher Alexander to software I've come across yet! I'm now referring to that "production by the masses" page to sum up my FOC project
Anyone else doing anything similar to what any of these articles describe?
k
This sounds very tempting but days are still at 24 hours a piece... But I will watch this space for insights from thos who participate actively.
s
I just quickly wrote and published a draft inspired by a discussion in class yesterday. It's my own views and doesn't represent what we discussed. I thought I share it with you here as well. Sorry, it's rough and rushed, but I really wanted to get a first draft out quickly for comments and feedback — including yours. https://stefan-lesser.com/2020/10/27/how-to-adopt-christopher-alexanders-ideas-in-the-software-industry/
👍 3
j
Thank you for starting this thread Stefan! I only explicitly came across Alexander’s work relatively recently, through this community, but immediately resonated with much of the process he described of what it is to build something, and why we might do it. In my own work, I’ve naturally found myself drawn to an ‘unfolding’ approach, guided more by a sense of ‘wholeness’ than of any particular specifications. This has been in the context of working for a charitable community aiming to create ‘social spaces for social change’, with my role being to guide the creation of online spaces to complement physical spaces and activities. I’ve just now enjoyed watching the introductory video from the publicly available webinar (https://www.buildingbeauty.org/nature-of-order-lecture-series) and was happy to see how much of the conversation centred on the interaction of ‘wholeness’ in what we build and ‘wholeness’ in ourselves and our social relations, given that this seems to me the deepest meaning his theory has, which can then be applied to specific fields such as architecture or software. In my own work, trying to enable people to have as much agency in the creation of online spaces as they would with physical spaces, this led me on a long journey, culminating over the past couple of years in (rather accidentally) creating a programming language (https://maraca-lang.org/). Having now spent some time with this language, I would loosely describe it as a language for defining living/dynamic structure (the motivating example being a dynamic web page/app), in a way that feels at some level a little like sculpting clay, or other similar ‘unfolding’ acts of creation. Similar it seems to Alexander and architecture, I haven’t found it easy to align with the general world of IT/tech, meaning much of this has been rather solo work, and can be challenging to articulate, so I’m looking forward to discussing these themes with others 🙂
l
I'm a big fan of Alexander's work to the point of collecting at one point every image i could find of buildings he designed. He wrote a forward for Richard Gabriel's book Patterns of Software. People interested in this thread may want to check it out. https://www.amazon.com/Patterns-Software-Tales-Community/dp/0195121236
d
Your post remind me of one of my favorites quotes from `How buildings learn`:
What makes a building learn is physical involvement by the people inside.
d
@larry Here's his address to the software community, in which he declares that he's got something more to offer/ask than what he did in the forward to RPG's book:

https://youtu.be/98LdFA-_zfA

@Stefan 1. Your last paragraph really resonated with me as being what software really is / can be, as a medium. 2. Design Patterns in software are actually a horrific failure of an attempt to capture what Pattern Languages in architecture were fundamentally about. I'll explain: Design Patterns (if software was a building) are more like solving very particular (and invented) problems with the electrical wiring or plumbing, or building a wall with a limited supply of wood beams, etc. Nevermind why the building is being created in the first place (e.g. as a place to live, and therefore as a good place to live). Pattern Languages are about shaping (and solving problems for) the human space within it. For example, an entrance transition because "the experience you get leaving and entering your home influences the way you feel inside it". Nevermind how it's otherwise literally constructed.
I think Christopher Alexander's work is about about understanding a thing not in terms of the thing itself, but of the environment that it creates for those using or inhabiting it. A building (as a place) is not the building, it's the human space in between. A software application is not a framework of code or services, but the experience it creates for, say, booking a trip. Even words used to describe software take on new meaning if thought of this way: robust, elegant, connected, intelligent, clean, efficient, flexible, adaptable, innovative, disruptive, functional, dynamic, correct, agile, powerful, "best practices", etc.
1
❤️ 5
w
Some things are for looking at and some are for using.
l
@Dan Cook I always thought it was odd that design patterns caught on for software 'internals' but not for software user interfaces. One of Alexander's quotes - might be from "The Timeless Way of Building" - was something like "the character of a place is given to it by the things that happen there over and over again." It's something I've thought about a lot when working on interfaces.
g
@jon amazing to see the progress you’ve made on maraca’s documentation since you first shared it! great work!
d
@larry I'd say that software didn't even get the internals part right. If the human model is only reflected on the outside, then it's just an

"utterly insincere" façade

-- and not just in some idealistic sense: the software will behave in ways that are inconsistent with what it presents itself as, because it is NOT what it presents itself as. Try dragging or copy-pasting various things around in many document editors, and you'll see what I mean. Conversely, software that does match (or is shaped by) the human model, can be broken down into (and understood in terms of) the same pieces that the human model can be broken down into and understood in terms of. (Every function, variable, expression, etc. forms either a direct part of that model, or a basis upon which to construct it). Think about it: The behavior of software is what happens when you use it and the code that makes it do that! You see a similar contrast if you compare Bob Martin's "Screaming Architecture" to "Execution in the kingdom of nouns"
g
@Dan Cook i’m just getting a mobile game company when i google “screaming software”—do you happen to have a link or author name?
d
I edited my previous response to include it (among other things)
🙏 1
g
oh i do know that concept—thank you!
a
I'm certainly interested. I recently read his Notes on the Synthesis of Form, which certainly has some useful transferable concepts/mental models. I might write up some of my notes at some point...
d
Ryan Singer made a youtube video: "Christopher Alexander: A Primer"

https://www.youtube.com/watch?v=XLsTZXT0FlM

I've watched it twice so far, and the ideas are finally clicking. If anybody in this thread hasn't seen it yet, I recommend it.
Here are my initial thoughts on the relevance of Alexander's method to programming language design. More questions than answers. Every large software project can benefit from having a pattern language to direct and coordinate the development. "Large" means: multiple contributors, with the need for coordination between contributors, or, a single person project with enough code, written over a long enough period of time, that you can't keep all the details in your head. My Curv project has a pattern language, but much of it is implicit knowledge. It will be beneficial to make that knowledge explicit, to write it down. It will speed up development by making it easier for me to make design decisionsand engineer past roadblocks. And it will make it easier for other people to contribute to the project. Curv, as a programming language, has an ASCII text syntax. Part of the pattern language will deal with centres, activities and patterns relating to that syntax. What gives "life" to a language syntax? Curv is also a development environment. The project's pattern language will deal with the developer's experience of using Curv and its associated associated development environment to create, run and debug software. What are the related centres, activities and patterns? And there is a meta level. Curv is used for software development. Part of large scale software development is creating a pattern language for your project. How does Curv help developers create and use a pattern language? What are the patterns for that? In formal language theory, a language is a vocabulary and a set of grammar rules which recursively unfold to generate all the valid sentences or utterances in that language. We use these same ideas of generative grammar to design and think about programming languages. Alexander's method seems to be inspired by generative grammar, because he talks about recursively unfolding patterns to generate architecture. So what does this mean for the links between Alexander's method and programming languages? Can do you design a programming language's vocabulary and grammar rules so that they recursively unfold to generate living structure?
s
@Doug Moen Yes, you explain the connection between pattern language and generative grammar well. The other thing that Alexander adds is sequence. It is not just that there is a grammar that unfolds, it is also about what non-terminal unfolds when. If you arrange the unfolding steps in the right way, you only talk about as much detail as you need right at that step in the process, but not more. This is what we currently fail at in programming, because nothing ever works if you don’t implement it on the lowest level. And so we constantly get drawn into the lowest levels full of detail, even when we’re still trying to figure something out at the very top of the grammar talking about highly abstract concepts.
😍 1
Oh, that’s funny: just going through other unread threads here I found this one, and it seems to be a good example of what I was just trying to describe: https://futureofcoding.slack.com/archives/C5T9GPWFL/p1604697998353700
In the meantime I also wrote a quick draft with a higher-level collection of various ways on how to adopt Alexander’s ideas; what we just talked about above being just one of seven things I could think of (I’m sure there are more): https://stefan-lesser.com/2020/10/27/how-to-adopt-christopher-alexanders-ideas-in-the-software-industry/
e
@Dan Cook and others. I can highly recommend Object Thinking by David West. He takes a radical different (can’t call it new, being written in 2004 ;-) approach how to look at software development. Making it much more human centred than the title might suggest.
g
+1 to object thinking! i own/have read the book but also there are some talks by him on youtube... trying to find a specific one that made a big impact on me but i’m struggling (hope it wasn’t deleted)
❤️ 1
d
Haven't read Object Thinking. Based on reviews, it's all about the OOP and Smalltalk philosophy of programming. I would instead be interested in reading a hypothetical book called Value Thinking, about a non-formalist, human-centred approach to pure functional programming. The first 30 years of FP research resulted in some lovely, simple, dynamically typed FP languages that could be summarized in a few pages of text. Then Haskell happened, and now FP has morphed into this monstrously complex subject that is all about formalism, higher order type theory and category theory. One way of looking at my research is: FP for humans. My interest in Alexander comes from this perspective. So I'm looking to see if David West has ideas I can repurpose for this.
David West's web site looks like a good place to start: <http://davewest.us>. He is writing a book called "The Design of Living Systems" which sounds very Alexander-inspired (no summary is provided, just the title). The newer book "Design Thinking" also looks very Alexander inspired--table of contents mentions living systems, form, fit and unfolding. This book is also not available yet. However, there are online papers and videos, including "Conversations with Alexander". So I'm going to dive in now.
🙂 1
e
Nice to see your interested. Object Thinking is about us humans seeing and perceiving things as belonging to a certain class of things. These things having the expected/appropriate behaviour. It happens that Smalltalk accommodates for this behavioural approach by not being strictly typed and seeing everything as an object. As long as an object responds to a message send (and performs the requested behaviour), it is behavioural complete. Could you explain a bit more what you mean by Value Thinking?
d
@Erik Stel I am not a fan of object oriented programming and design. I've had several decades experience of OOP in an industrial programming setting, I see a lot of problems, and I'm looking for better methodologies. I like the philosophy behind modular programming (eg, as seen in SML). Your code is decomposed into modules, on the criterion of information hiding. A module encapsulates an important design decision, and hides the implementation of that decision behind an abstract interface. A module can contain a collection of functions, or it can encapsulate a single data type together with operations on that type, hiding the types representation. Or it can encapsulate 2 or more closely related data types, hiding their representations and exporting operations on those types. But, and this is important, there is no requirement that functions must be placed in the same module as the type of their first argument. That requirement would prevent you from modularizing your code effectively. Modules can be nested, and information hiding can occur at each level of nesting, if needed. At the top level, a package (the unit of software distribution across the internet) is also a module. The problem with class-based OOP is that the unit of modularity is the data type. This distorts the large scale structure of a system by inhibiting you from modularizing in the most effective way. Inheritance in class-based OOP languages is a bad idea, it's the enemy of modularity. A modular should have a simple abstract interface that it easy to understand and document, and this interface should hide implementation details. Consider the interface to a class that exports virtual functions, and expects subclasses to override those virtual functions. In practice, the only way to understand such an interface is by reading the superclass's source code. Which is the opposite of abstraction and hiding implementation details.
Another problem with OOP is that it is fundamentally based on shared mutable state. You system is composed of objects, each of which has an identity and mutable state, and you compute by sending messages to those objects, causing them to change their internal state. Shared mutable state is the source of massive complexity in software systems.
So I want a better programming methodology than OOP, one that has very good support for modularity, simple abstract interfaces, composable software components. The solutions I'm looking at are related to functional programming. Instead of mutable objects, you work with immutable values. Instead of "Object Oriented Design", I'm learning "Algebra Driven Design", where you consider a type (a set of immutable values), together with constructors for those values, and operations on those values, as an algebra. You work out the equational laws that relate these constructors and operations, and that gives you the abstract interface and the semantics of your algebra (which is a kind of module). My experience so far is that this design methodology can produce simple, elegant and powerful interfaces that have a quality of "life" that I would not be able to reproduce in any other way. I found the book "Algebra Driven Design" to be helpful in learning how this works.
d
Just came across this, thought I'd share: https://patterns.architexturez.net/doc/az-cf-172831