Fork me on GitHub
#clojure-uk
<
2019-08-23
>
guy06:08:25

Morning!

guy06:08:31

Did anyone else just get the slack update?

yogidevbear06:08:58

Is it a good thing or a bad thing?

guy06:08:30

Its just visual, but yeah looks nice

yogidevbear07:08:28

Nice, looks very similar/same as the Arch Linux client

practicalli-john09:08:20

I had a slack update a few weeks ago I think. I use the Slack Snap on Ubuntu. Looks the same (except it shows my long list of Slack communities)

❤️ 1
thomas07:08:50

mogge 😼

dharrigan08:08:30

Morning! Last day in Sunny Cornwall

☀️ 3
Ben Hammond08:08:30

are you nomadding?

Ben Hammond08:08:53

or are you expecting the apocalypse?

💥 1
dharrigan08:08:58

Anything is possible in cornwall

dharrigan08:08:32

but for the moment, I'm in a b&b at Carbis Bay

Ben Hammond08:08:50

holiday or work?

dharrigan08:08:09

holiday 🙂 Enjoying it atm with wife and kid

dharrigan08:08:35

Weather has been great and beaches supurb!

dharrigan08:08:08

not looking forward to the drive back to Laaaaaawndaawn tomorrow however

yogidevbear08:08:32

Pics of Carbis Bay look lush

Ben Hammond08:08:55

I don't much regret leaving London

dharrigan08:08:02

It is a very nice place indeed

Ben Hammond08:08:05

except for the work opportunities

Ben Hammond08:08:06

how is the Tate in St Ives?

Ben Hammond08:08:20

I''ve not been down that way since it opened

dharrigan08:08:00

haven't been to the tate, probably not this time

dharrigan08:08:17

we are heading off shortly to Lappa Valley railway amusement park

dharrigan08:08:25

choo choo!

🚂 2
dharrigan08:08:39

Interesting article from Uncle Bob

dharrigan08:08:55

tldr; He likes Clojure

yogidevbear08:08:23

I saw him post about his like of Clojure on Twitter. Very interesting watching the replies. Always a mixed bag when opinions come into play

yogidevbear08:08:16

>Over the last 5 decades, I’ve used a LOT of different languages. ☝️ That's quite a statement

dharrigan08:08:30

right, time for choo choo!

dominicm08:08:38

Why should someone use Clojure anyway?

dominicm08:08:52

Java is faster, and I already know it and I'm pretty productive.

Ben Hammond08:08:39

and is easier to maintain once in production

mccraigmccraig08:08:51

clojure requires less typing and my fingers get tired easily these days, so it's a no brainier

dominicm08:08:16

Yeah but ctrl-c and ctrl-v is so quick anyway

Ben Hammond08:08:48

yeah IDEs have templates to spew out vast quantites of boiller plate

Ben Hammond08:08:01

happy days if you charge by lines of code

😂 2
dominicm08:08:12

So java isn't even much typing.

dominicm09:08:00

I was having this discussion with someone, and it was very hard for me to articulate the benefits of clojure. "Immutability" isn't really an upside, it's an implementation

dominicm09:08:16

(Hence my attempt at getting an articulation)

maleghast09:08:34

Clojure == Fun Java == Not Fun

maleghast09:08:42

Also... REPL!

jasonbell09:08:01

Java is fun, you’re just not used to it! 🙂

maleghast09:08:02

I'm not stating facts, I am offering @dominicm more arguments for__ clojure

maleghast09:08:51

@jasonbell - OK... Java == fun Clojure == 🎆 FUN 🎆

❤️ 3
dominicm09:08:10

Java 9 has JShell though! (I'm repeating the counter arguments I got)

dominicm09:08:43

I addressed that with a "but it's not really the same", but I didn't feel very convincing

dominicm09:08:09

I also think clojure has a fun argument on there, but I'm not sure how to prove it in speech

thomas09:08:25

I suspect the argument should be that with Clojure you tend to write less code... and that results in fewer defects. which can only be good thing.

thomas09:08:05

(and also note that Clojure is not just a write-only language, you can read it as well, otherwise we would be all doing APL)

thomas09:08:17

and there are good reasons we aren't IMHO

rickmoynihan09:08:25

The big difference is JShell is bolt on not built in. Clojure’s REPL has exactly the same semantics as the core language, because it is the core language. Consequently clojure starts from a point of building programs as a dialog with the computer. Still I agree with your point that there’s no real objective difference. I mean programming on punch cards still has a feedback loop right? And it is a little unsatisfying to concede that it’s really the same — just errr better. Hence I think arguments for clojure don’t really come from any one killer feature, they come from the unique combination of properties it has; all of which support each other.

dominicm09:08:52

> Hence I think arguments for clojure don’t really come from any one killer feature, they come from the unique combination of properties it has; all of which support each other. That's a pretty good way to characterize my sensation of "flapping".

dominicm09:08:02

I feel like I'm listing 20 things and they don't really have any weight.

rickmoynihan09:08:06

yeah — unfortunately the key benefits are really things you have to experience for yourself. You can’t just say my language has that already… e.g. javascript has the immutable.js library of datastructures; but that’s not the default. Having it as a default makes a massive difference.

dominicm10:08:59

I was also told that doing java "properly" it's really easy to protect your mutable state. That one was a little easier to rationalize in my mind. There's so much undoing of Java you have to do around the incidental complexity that it kills your ability to provide business value.

Conor10:08:05

I tend to judge languages on their community also, many are completely insufferable but Clojure people tend to be quite nice

dominicm10:08:05

Same thing for OO hierarchies 🙂

Conor10:08:10

So, well done all

🙏 1
dominicm10:08:36

The clojure community is literally the nicest group ever. Sometimes I worry that I'm not doing a good enough job of being part of it - a good feeling to have, we have such high standards.

rickmoynihan10:08:44

I think the main selling point is: If you want a dynamic lisp like language, where functional programming is idiomatic, with the state of the art immutable datastructures built in, and you want access to the jvm/js ecosystems it’s pretty much the only serious game in town.

rickmoynihan10:08:32

if you don’t know why you want those things, fair enough… either find out or move on 🙂

dominicm10:08:36

The difficulty for me was selling this person on the "brainfuck-like" lisp, who needs functional programming I got "protected", etc. So the leading premises there were hard to explain!

dominicm10:08:07

I saw a comment to that effect on reddit, sometimes you're just not in the right place in your career to be hating OO yet. You haven't felt the burn.

rickmoynihan10:08:28

Sure, some people aren’t ready for it.

mario-star 2
rickmoynihan10:08:09

And that’s fine. I don’t need to convince people of the benefits. I’m very happy with it. Is it perfect, no. Are there other options sure. Are there any that have the same combination of benefits? No. Are there any languages I think are as good that I have 11 years experience doing? No. 🙂

maleghast10:08:16

@rickmoynihan - You're not wrong there... I know a couple of dyed in the sackcloth java developers who are aware that I am not the only person in the World with a paying Clojure job and that Clojure at 10+ years in and adoption by massive organisations as well as small and medium-sized ones as well. Despite that, they regularly tell me that Clojure is unsuitable for "the Enterprise", that Clojure is not stable enough, that Clojure is a fad that will pass, and a load of other tosh...

rickmoynihan10:08:46

not stable enough?? Really?? le sigh.

thomas10:08:56

indeed... one of the most stable things I have come across.

practicalli-john11:08:56

12 years in as of this summer 🙂

👌 1
dominicm10:08:04

Yeah, I got linked the Vertx/Nodejs customer list and told "but look! people build big things with java!". Not sure I wanna take a bet on this Clojure thing? Who even uses it? Oh, walmart? yeah but only for a team of 8...

Ben Hammond10:08:05

repl driven development is the big win for me

Ben Hammond10:08:21

it just keeps me more engagaed

Ben Hammond10:08:27

and therefore productive

maleghast10:08:36

@ben.hammond - for me too, even though I am not a full-on power user of the paradigm

dominicm10:08:41

more time for clojurians slack? 😄

jasonbell10:08:44

@maleghast I was in the middle of untangling a huge git merge conflict, squidmungus it was and all I saw was, “Java = no fun”, so apologies 🙂

maleghast10:08:11

Not at all, no apologies necessary - it was an inflammatory comment 😉

maleghast10:08:16

(mine I mean)

guy10:08:35

My only anecdotal experience to add is, Clojure is very fun to write, you write less code repl driven development is very fresh. I still find Clojure stack traces and now spec errors to be pretty 😵 however.

Ben Hammond10:08:34

it is harder to refactor and maintain once in production

Ben Hammond10:08:57

you have to get super disciplined with your generative testing

dominicm10:08:14

Rich does make the opposite assertion in one of his talks, that simplicity will keep you more agile, and you'll run circles around others.

guy10:08:05

I mean Simplicity might

Ben Hammond10:08:10

the-old-is_it_an-underscore-orAHYphen-ttypo?

guy10:08:12

but just writing Clojure wont

guy10:08:20

If you get my meaning

Ben Hammond10:08:37

that typed programming will insulate you ffrom

Ben Hammond10:08:50

but untyped will not

guy10:08:00

I have the same opinion of Ben in this regard. >harder to refactor and maintain once in production >you have to get super disciplined with your generative testing

Ben Hammond10:08:05

its the most degenerate form of mistyping error

Ben Hammond10:08:15

that causes the largest amount of problems

guy10:08:33

But again, this is just my experience rather than Clojure projects as a whole

Ben Hammond10:08:50

the difficult stuff genuinely is made easier

rickmoynihan10:08:59

I don’t entirely buy into the simplicity/agility argument.

Ben Hammond10:08:11

if you reduce the quantity of devs required there are big time savings to be found 'The Mythical Man-Month' turned back-to-front

👍 2
Ben Hammond10:08:06

but I'm not sure how well that scales

Ben Hammond10:08:34

er, I mean not sure how many devs are passionate about > Simplicity

rickmoynihan10:08:07

Don’t get me wrong. Simplicity is something absolutely worth having, and it is the only answer to the complexity crisis. I mean there really is no other game in town! However building simple things is really, really, hard and expensive… and it front loads that cost. Whilst bodging things together the easy way can be quicker. I’d absolutely rather take the time and aspire for the simple way; but in the real world you need to make trade offs.

Ben Hammond10:08:52

and customers are often not interested in paying for you to > go back and redo it simpler

rickmoynihan10:08:01

I don’t think clojure necessarily always makes me quicker at knocking out features. It does however somewhat force you into pursuing the simple path which leads you to much better solutions, and higher quality overall.

Ben Hammond10:08:09

but it takes a bit of time to explore the problem space

Ben Hammond10:08:21

and find out which is the simplest way

Ben Hammond10:08:03

and even then, you are trying to predict how the customer will want to change the software in the future

Ben Hammond10:08:20

and you don't always guess correctly

Ben Hammond10:08:07

so there is a continual process of refactoring to make simpler

Ben Hammond10:08:21

which of course is true for all software development

Ben Hammond10:08:32

(hmm, think I've lost my point)

dominicm10:08:16

do you think that Clojure leads you to a simpler model for knocking out features?

dominicm10:08:26

as opposed to other languages which let you knock out features (e.g. js)

Ben Hammond10:08:54

I'd be doing that in Java too

Ben Hammond10:08:18

more of a mindset than a specific language

Ben Hammond10:08:58

Clojure does feel like it flows more smoothly though

dominicm10:08:07

Doing what?

Ben Hammond10:08:33

working towards a simpler model for knocking out features

dominicm10:08:55

Sure, but does Clojure make that easier.

rickmoynihan11:08:29

Yes I think Clojure absolutely helps in finding simpler solutions. At least if we take Hickey’s definition of simple, it’s almost (though not necessarily strictly) tautologically true that you can’t build simple things on comple(x|cted) things. For example if you have a language based on mutability, you will naturally tend towards a complected solution, because you have complex (easy) foundations. The properties of a language very much effect the shape of the solution. So really clojure’s big selling point is having simple foundations, which is a pre-requisite for simple solutions.

rickmoynihan11:08:14

Obviously this argument isn’t true under a rigorous reduction. Nobody wants to program in the lambda calculus. It’s too primitive. But clojure is really just a lot of well thought out conveniences ontop of that.

benedek11:08:54

in other news a very worthwhile friday or weekend watch here https://www.youtube.com/watch?v=Kp50G2j9h48

benedek11:08:15

original series bit old but still awesome

otfrom12:08:03

I love OO. It is how I design my services. I'm all about the message passing. 🙂

rickmoynihan14:08:13

I know Alan Kay tries to claim OO is just misunderstood, and he should’ve called it message passing; but I think he’s really just whitewashing history when he says that. Messages as a primitive are asynchronous not synchronous. Erlang has this view of the world, but smalltalk really doesn’t.

otfrom14:08:45

I agree, but as a description of how I like to build components/services it still works

rickmoynihan14:08:12

Actually you reminded me of this debate from a few years back (unrelated) but still interesting if you missed it: https://news.ycombinator.com/item?id=11945722

maleghast12:08:13

Erk? Who are you and how did you get hold of @otfrom’s Slack account?

otfrom14:08:46

I like things functional on the inside and side effecting on the outside and like to make my state by reducing over a seq of events or messages

👌 2
mccraigmccraig14:08:44

you'll love these composable m-thingies, which are all about exactly that

mccraigmccraig14:08:39

well, some of them are anyway

thomas14:08:07

...did I hear the M word somewhere? :thinking_face:

mccraigmccraig14:08:12

are you part of m-club @U052852ES? if you aren't i'll have to give you an incomprehensible explanation

thomas14:08:06

I am 'fraid I have never really understood M's, but also never made an effort to understand them either.

mccraigmccraig14:08:54

in which case, i have a long list of most excellent tutorials for you to read, guaranteed to work :rolling_on_the_floor_laughing:

otfrom14:08:06

the reducing bit or keeping the side effects at the edges?

otfrom14:08:27

wrt side effects, I know I'm managing them manually like some c programmer with memory, but that is working for me atm

mccraigmccraig14:08:21

i was thinking of keeping the side-effects at the edges...

mccraigmccraig14:08:34

we've got roughly two ways of managing side-effects atm... one is in-memory reduce-based, the other is transactional kafka-streams apps event-topic=>effects-topic

thomas15:08:56

maybe you should publish your list somewhere @U0524B4UW

Ben Hammond16:08:57

I cant help feeling that there should be a good technical lego metaphor for the M work

Ben Hammond16:08:39

block that can be plugged together, but that contain moving parts that will engage each otther

Ben Hammond16:08:15

but I'm a bit hazy on the exact nomad defn so I'm not sure

Ben Hammond16:08:24

moand damno mad?no!

Ben Hammond16:08:34

meh must be home time

Ben Hammond16:08:48

have good long weekends folks

mccraigmccraig17:08:11

@ben.hammond lego blocks each containing a burrito

alexlynham13:08:39

damn craig got there before I could say burrito

alexlynham13:08:48

functional core, imperative shell tho innit

dominicm14:08:01

@otfrom I had an idea about doing automatic grouping of events in a sequence in order to form transactions. Ever tried something like that?

otfrom14:08:19

@dominicm what do you mean by "automatic grouping"?

dominicm14:08:58

@otfrom Finding a things that will write to a database, and putting them all together in a sql transaction

otfrom14:08:29

I like to persist the events/messages as is. With a lot of the stuff the state can be held in memory and the events aren't that big

rickmoynihan15:08:19

@dominicm That’s quite a common pattern isn’t it? I mean databases and file systems and operating systems do this stuff all the time… Also one of our services has a write scheduler that rebatches events into larger/smaller transactions before committing them.

dominicm15:08:36

I've never actually seen it 😁 never really needed it, never thought of doing it to exploit a simpler programming model.

rickmoynihan15:08:34

We had to do it to retain responsiveness and throughput… some operations are tied directly to user interactions (and need quick feedback) others are much bigger and would end up blocking the user interactions; but because of our data model these ones don’t need to be transactional. So we throw them internally onto a priority queue with a comparator that sorts them to optimise the writes into the priority we want - and we split the larger operations up into smaller chunks that ensure we can always serve the ones that need fast response times… We could also batch the smaller ones together if they queued up… that would be trivial to do, though I can’t recall if we do that yet.

3Jane17:08:45

slightly late into the discussion, but THIS

3Jane17:08:31

I remember an old heuristic of "never write a function longer than a single screen" because that's as much as you can reasonably hold in your awareness without really straining

rickmoynihan17:08:35

When I was a student I had a summer job doing IT support for a software house who ran systems for detecting bank/credit fraud. One day I walked into the corridor to find one of the developers trying to debug a procedure. He’d printed it out on what was probably 100 ft of fanfold dot matrix printer paper. The procedure started at one end of the corridor and ended at the other, and he and a few other developers were running back and forth with a marker pen trying to debug it. Good job it wasn’t an important system for just about every UK financial institution. :rolling_on_the_floor_laughing:

3Jane17:08:06

that must have been fascinating ... "oh no, we need to GOTO line at the other end!"

seancorfield17:08:03

When I worked in IT for an insurance company, we debugged stuff by printing out the core dumps -- usually a 6-9" stack of laser-printed green/white striped paper -- and decoding the assembler and data in our heads as we flipped back and forth through the pages.

seancorfield17:08:45

One guy on the team had an almost "idiot savant" ability to drill down to your bug based on a core dump in just a few minutes -- an incredible skill.

seancorfield17:08:26

Glad those days are behind us tho' (we were a COBOL shop so we'd translate from hex to assembler and then "decompile" back to COBOL in our heads 🤯 )

3Jane17:08:42

with Clojure you will pack a lot more onto that screen

3Jane17:08:05

but it takes a bit of practice to be fluent in Clojure enough to actually be able to parse that screen mentally.