This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-11-02
Channels
- # announcements (3)
- # aws (8)
- # babashka (87)
- # babashka-sci-dev (3)
- # beginners (34)
- # calva (35)
- # clerk (2)
- # clj-commons (47)
- # cljdoc (10)
- # cljs-dev (21)
- # clojure (19)
- # clojure-android (1)
- # clojure-austin (2)
- # clojure-europe (30)
- # clojure-nl (1)
- # clojure-norway (67)
- # clojure-uk (9)
- # clojuredesign-podcast (7)
- # clojurescript (24)
- # code-reviews (20)
- # cursive (6)
- # datomic (12)
- # emacs (14)
- # events (1)
- # fulcro (7)
- # gratitude (1)
- # hoplon (8)
- # hyperfiddle (23)
- # juxt (22)
- # meander (11)
- # nyc (3)
- # overtone (2)
- # podcasts-discuss (1)
- # reagent (3)
- # releases (1)
- # sci (27)
- # shadow-cljs (73)
- # squint (4)
- # thejaloniki (3)
- # xtdb (7)
How do you keep the pure and side-effecting parts of your application away from each other but bring them together at the right time? How can "ad hoc" be confused with flexibility? What is the "band-aid test"? In our latest episode, we try and get a handle on bringing I/O resources together in an application. https://clojuredesign.club/episode/097-application-of-composition/ I’m especially curious to hear your thoughts on “ad hoc” vs “table of contents”, and, of course, the band-aid test!
I really liked the "ad hoc confused with flexibility" bit and the bandaid analogy. The latter is a really good metric for a lot of things in software, I think: large surface area is generally not going to do you any favours, whether it's points of coupling or API size (although I guess arguably a larger API introduces more points of coupling :thinking_face:) On the former, that's something that's been front of mind for me recently. I was reflecting on what makes DI frameworks in Java hard (in a cognitive overload, treasure hunt sort of way), and I sort of concluded that it's because of the lack of "index". When I talk about it, I've noted that (despite learning about the desire for high cohesion and low coupling in school, which made the two sound orthogonal) heavy use of DI frameworks can decouple things so far that you lose cohesion: you have no clue what connections exist or how the pieces fit unless you step through everything. Note here I'm talking specifically about the style of DI-all-the-things using @Inject on all the constructors and letting the framework autowire everything. This feels very much like the difficulty you guys mentioned with redelay. Different paradigms, exactly the same problem: you gain "flexibility" to just plug new code in and have it work, but at the cost of not really understanding where it plugs in or the role that piece plays in the broader picture. Was the flexibility worth the cognitive cost? More often than not, I think the answer is no. Am I getting old?
@U04RG9F8UJZ I think you've nailed the issue. You have to look all over the place to know where things are.
Of course, some of this can be addressed through documentation, but since documentation doesn't have to be correct for the code to work, I find that it doesn't age very well.