Fork me on GitHub
#clojuredesign-podcast
<
2023-10-03
>
Michael Nardell01:10:05

Count me as another person very interested in your podcast, and very glad that you are producing new content. How to think about FP and Clojure at the “mesoscale” (and above) is something I would benefit from.

neumann20:10:20

@U01F80UADJQ Thanks! We're glad to be back! I can't recall hearing "mesoscale" applied to computing before. How would you define it?

Michael Nardell21:10:39

Bit of a poetic turn of phrase, I suppose. Term borrowed from meteorology , meaning phenomena of intermediate scale. I guess I like connotations of a complex system that weather provides

neumann21:10:15

Ah yes, OK. Thanks for clarifying. I'd love to talk more about system effects of using Clojure. I added it to my topic ideas. I do believe using Clojure (and pure FP in general) encourages systems to become more centered around data, and if so, it has beneficial knock-on effects for the whole system. Of course nothing stops you from creating a boatload of microservices in Clojure that act like glorified RPC endpoints in a network-level call-graph that makes chaos models look ordered, but hopefully the abandonment of OO leads to abandoning OO principles on the system level too. (I know we don't always get to control the surrounding systems.) Malcom Sparks, CTO of Juxt, has a good exploration of taking data-centric and functional thinking and applying it to the system level. https://www.juxt.pro/blog/atomic-architecture/

👍 1
JR14:10:36

I'd also like to hear more about medium-sized design, and up. I have opinions from back when I wrote C, but I can see that Clojure's features would make this different. Back then I did something where we started with top-down, and filled in the details via bottom-up. I'd also be curious what else you have to say about data-oriented programming. Maybe I should re-listen to episode 42. ♻️

👍 1
JR14:10:40

I suppose some things imply a structure - ring has handlers, for instance. My experience though, learned the hard way, was not to rely on libraries or frameworks for structure. They change, become unsupported, etc... Coding a C UI app in X11, and then again with Xt, and then with Motif, etc.. gets old. And now with JQuery, Angular, Vue, React it's just as bad in Javascript. Like C (and to some extent Java), Clojure doesn't mutate as often as the libraries. It would be interesting to hear your experiences with what you've done.

neumann20:10:50

@john.t.richardson.dev It's good to hear from you again! Yeah, we haven't talked a lot about system-level design. We've focused primarily on topics within applications and services as opposed to between them. It would be fun to explore that. It sounds like your general process matches mine: determine the major information/computation needs of the system, rough out the relationships between them, and then figure out the particulars of each of those specific parts. As for data-oriented programming, https://clojuredesign.club/episode/042-what-does-it-mean-to-be-data-oriented/ is a good one. We're also going to address in an upcoming episode. Stay tuned!

neumann20:10:09

@john.t.richardson.dev What you say about not relying on frameworks for structure is so true! I too have have learned to avoid layering my application on top of frameworks. Instead, I use frameworks and libraries for very specific problem domains. As you mention, React is a framework, but I think its lasting power is due to staying in it's lane: rendering markup from data. Frameworks that try to orchestrate your UI components and data flow and server communication (I'm looking at you, Angular), feel super risky to me. The alternative to using frameworks for structure is to push them to the edges. I think of them as "integrations" with their purpose. Eg. React is an "integration" with browser markup. Ring is an "integration" with HTTP. The core of your application should be centered around clear, pure, information domain models, and those drive the code at the edges. Just writing this has brought up a lot of thoughts. We'll have to do some episodes on this topic.

yes 2
neumann20:10:50

@john.t.richardson.dev It's good to hear from you again! Yeah, we haven't talked a lot about system-level design. We've focused primarily on topics within applications and services as opposed to between them. It would be fun to explore that. It sounds like your general process matches mine: determine the major information/computation needs of the system, rough out the relationships between them, and then figure out the particulars of each of those specific parts. As for data-oriented programming, https://clojuredesign.club/episode/042-what-does-it-mean-to-be-data-oriented/ is a good one. We're also going to address in an upcoming episode. Stay tuned!

neumann20:10:09

@john.t.richardson.dev What you say about not relying on frameworks for structure is so true! I too have have learned to avoid layering my application on top of frameworks. Instead, I use frameworks and libraries for very specific problem domains. As you mention, React is a framework, but I think its lasting power is due to staying in it's lane: rendering markup from data. Frameworks that try to orchestrate your UI components and data flow and server communication (I'm looking at you, Angular), feel super risky to me. The alternative to using frameworks for structure is to push them to the edges. I think of them as "integrations" with their purpose. Eg. React is an "integration" with browser markup. Ring is an "integration" with HTTP. The core of your application should be centered around clear, pure, information domain models, and those drive the code at the edges. Just writing this has brought up a lot of thoughts. We'll have to do some episodes on this topic.

yes 2
Michael Nardell21:10:39

Bit of a poetic turn of phrase, I suppose. Term borrowed from meteorology , meaning phenomena of intermediate scale. I guess I like connotations of a complex system that weather provides

neumann21:10:15

Ah yes, OK. Thanks for clarifying. I'd love to talk more about system effects of using Clojure. I added it to my topic ideas. I do believe using Clojure (and pure FP in general) encourages systems to become more centered around data, and if so, it has beneficial knock-on effects for the whole system. Of course nothing stops you from creating a boatload of microservices in Clojure that act like glorified RPC endpoints in a network-level call-graph that makes chaos models look ordered, but hopefully the abandonment of OO leads to abandoning OO principles on the system level too. (I know we don't always get to control the surrounding systems.) Malcom Sparks, CTO of Juxt, has a good exploration of taking data-centric and functional thinking and applying it to the system level. https://www.juxt.pro/blog/atomic-architecture/

👍 1