clojure-europe

For people in Europe... or elsewhere... UGT https://indieweb.org/Universal_Greeting_Time
borkdude 2020-12-20T09:40:45.031900Z

Moaning

synthomat 2020-12-20T11:06:54.032100Z

Morning!

javahippie 2020-12-20T11:11:06.032300Z

Morgen!

2020-12-20T11:24:46.032500Z

Morning

jasonbell 2020-12-20T12:22:10.032800Z

Morning

thomas 2020-12-20T13:14:50.033Z

mogge

orestis 2020-12-20T14:58:22.033300Z

Morning

orestis 2020-12-20T15:02:10.035200Z

I was thinking these days about the gulf that separates beginner programmers, usually being focused to “making things happen” and to, well, more experienced ones that, well, don’t.

val_waeselynck 2020-12-20T15:03:58.037800Z

"Can I do this?" "Can I do this elegantly?" "Can I do this efficiently?" "Can I not do this?"

😂 2
orestis 2020-12-20T15:06:05.038900Z

I still remember the rush of excitement that Django provided: you could do “full stack” in one go (for me that was a first), and it seems every tech iteration provides the same rush to newcomers.

orestis 2020-12-20T15:07:17.040700Z

The code base I’m migrating from seems to have caught the Node and Websockets fever and you can almost feel the excitement of the first devs that managed to go full circle...

orestis 2020-12-20T15:11:49.041800Z

The same people also rode out that high and then got another high trying to rewrite to go, Postgres and gRPC.

orestis 2020-12-20T15:13:02.042500Z

(Thanks for coming to my rant)

orestis 2020-12-20T15:13:51.043800Z

They had a great allergy on actually writing “business specific” code. So naturally they tried to write machinery instead, and then failed...

val_waeselynck 2020-12-20T15:16:29.044300Z

"Don't mistake motion for progress"

val_waeselynck 2020-12-20T15:16:42.045Z

(yes, I'm decided to comment only by quotes)

orestis 2020-12-20T15:17:22.046100Z

So I’m writing all that stuff because I was trying to figure out if I can phrase my “instincts” in a way that makes sense for others. I think Zach Tellman has something about this in his book.

orestis 2020-12-20T15:29:13.048400Z

So these days I’m usually thinking about “the domain” and trying to write code that resembles it. This could be tiny named functions that return snippets of SQL/mongo queries or our graphql API that is domain oriented (vs database oriented)

orestis 2020-12-20T15:29:48.049100Z

(Waiting for another quote @val_waeselynck !)

val_waeselynck 2020-12-20T15:39:45.052300Z

"To solve a problem, you have to let it dissolve into a rising tide of general theory"

val_waeselynck 2020-12-20T15:39:58.052800Z

OK, that one didn't work out that well

😄 2
orestis 2020-12-20T15:40:21.053200Z

I blame the various tutorials that always aim at showing how the tech is put together, naturally using the simplest of domains, which gives people false confidence, because they leave thinking that making the machine dance is the job. Whereas it’s only the most basic requirement...

val_waeselynck 2020-12-20T15:43:34.054800Z

Yeah we do have a problem that having a good grasp of each mechanical part does not mean we have a good grasp of how they should come together into a sensible whole

val_waeselynck 2020-12-20T15:44:11.055500Z

And that's a misconception that typically plagues the discussions of "which technology is easiest"

val_waeselynck 2020-12-20T15:44:46.056200Z

Like, assembly language is quite easy, in the sense that it's very easy to picture what each individual instruction does

val_waeselynck 2020-12-20T15:45:24.056700Z

Much more so than the building blocks of Clojure programs for example

val_waeselynck 2020-12-20T15:45:56.057200Z

This does not change the fact that it's easier to program advanced logic in Clojure

val_waeselynck 2020-12-20T15:47:27.058100Z

Well I guess that's already addressed in Greenspun's 10th rule, should have quoted that maybe

val_waeselynck 2020-12-20T15:48:20.059100Z

Unfortunately, I think you can only cure that addiction of instant gratification through self-inflicted spaghetti code

val_waeselynck 2020-12-20T15:52:27.061Z

Well, actually @orestis, maybe there's another way: actually achieving the right abstraction, where all the mechanical aspects become invisible, can provide another intense form of gratification, an "epiphany". Maybe that's something to encourage, a desirable reward to promote so that people strive for "pure-domain" code.

orestis 2020-12-20T16:17:42.062500Z

Yeah I was thinking about the ways to learn this: there’s the luck of landing in a team that got this right (to some extent), or the struggle of having to clean up the mess :)

orestis 2020-12-20T16:19:47.063500Z

Domain- driven design does try to go into this a bit but I remember a lot of noise about OO...

val_waeselynck 2020-12-20T16:43:32.064200Z

Yes, unfortunately most of what I've seen of DDD at conferences was working around the limitations of class-based languages

val_waeselynck 2020-12-20T16:45:40.064600Z

There does seem to be some Clojure-specific content though, e.g: https://www.infoq.com/presentations/DDD-Clojure/

val_waeselynck 2020-12-20T16:46:05.065Z

(haven't seen it, don't know if it's good)

val_waeselynck 2020-12-20T16:47:04.065600Z

Anyway, you might not need to go all the way to DDD to teach that lesson - even SICP makes this sort of point

orestis 2020-12-20T17:07:11.066Z

Still haven’t read SICP :(

2020-12-20T18:04:13.066100Z

I agree, DDD is deeply rooted in OO language for its tactical aspect not for the strategic ones (Ubiquituous Language, Bounded Context, Context map, etc.) where the real innovation and value was, and that part is language agnostic. For instance the Value Object building blocks has a lot of “functional” characteristics (immutability, etc.) and is simply a…Value. The Entity/Aggregate ones deals with lifecycle that is not tied to the language but more with identity, persistence, etc.

👍 1