Richard,

What I'm saying is that *individual functions*, as opposed to *a group of 
> functions and data structures* (model, view, update, msg, etc) is the 
> right unit of composition.


I struggle to understand to see where is a difference. Html.program 
constructor is record of functions as well. Sometimes it's just nicer to 
have arguments named. Also as docs and code clearly says it's just 
composing functions, nothing more. init with init, update with update... I 
think saying that pure function inside record is by any mean different than 
pure function living in module's namespace is really misleading. For 
instance this using elm-decode-pipeline 
<http://package.elm-lang.org/packages/NoRedInk/elm-decode-pipeline/3.0.0/Json-Decode-Pipeline#required>
 you're 
lifting (operation called pure in Json.Decode it's succeed) function 
(usually type constructor) to `Decoder` context. And it's fine because this 
is how functional programming work.

You have mention experience with teaching beginners on many occasions. 
That's fair point I don't have that much experience teaching beginners 
however I have quite a lot experience with folks doing side project in elm 
being scared of complex apps.
For instance our HR have contacted Tomas <https://twitter.com/tomaslatal> just 
few days ago. Since he knows me from elm community meetups he DM. We're 
both czech (and was speaking czech) so I have to translate it (adding 
original and translation:

czech:

> No na to zatím nemám :) jsem Funkcionalni lama :)

 
english:

>  I can't do this :) I'm not that skilled in functional programming


Than I spend 2 hours trying to convince him that there is nothing to be 
afraid of.

Just on this Tuesday he wrote me again without previous warning (this is 
before interview which he will have next week):

cze:

> Třeba se to vyřeší samo a nevezmete mě. Alespoň pak naboucham nějaké 
> zkušenosti do zásoby na příští kolo ;)


eng: 

>  Maybe it will resolve itself and will not hire me. At least I will have 
> time to gain more experience on next round.


*THIS IS COMPLETELY CRAZY!*

We've already lost one talented guy because he was afraid that he won't be 
able to do anything on such scale! From my experience it's easier to hire 
js developer and teach him elm than to hire folks from community because 
they are so afraid when we show them js implementation we're porting.

Yosuke,

So Marek's library is for organizing entire app, not about using external 
> library.


Maybe you've noticed that I haven't commented your example with 
reusability. That was on purpose because telling when and on what you 
should use it is completely different topic. For sure it can be used for 
integrating community components. It can be used anytime you're using 
Cmd.map Html.map and Sub.map. That's actually beauty of abstraction that it 
can be applied regardless of your domain. Same way s you can List.map view 
over List of data to turn them into view you can use this to map date 
picker's api to app and anything else. My intention is not telling anyone 
when and on what to use it. It's just super thin helper for doing (a, Cmd 
b) -> (c, Cmd e) with the use of functions.

What I think...

Richard
is building software for learning kids (which is actually ethically super 
important mission in my opinion) where initial idea, first prototype and 
final feature might looks really really different. I can imagine this might 
be a lot about exploration and validating and reevaluating ideas. I also 
think you did mention this in one of your talks but I can't remember which 
one it was. Logically there you see value of system that is easy to reshape 
and many language features helps you there. Honestly this is really 
building ball of mud but the point sometimes there is nothing wrong with 
that.. Mud can be reshaped in few minutes. The really crazy idea in your 
field would be to do DDD since that domain is so loosely specified.

Mark
on the other hand values design patterns and architectural thinking. He has 
experiences with identifying critical concerns up front by 
analyzing obviously pretty deterministic domain. In his view of 
development there're is really not time involved. His problem didn't change 
over night he is analyzing problem which is observably same each time you 
look at it. I also think he might be into DDD (Domain Driven Design). 
Personally I'm most of the time pretty skeptical about DDD and has many 
arguments with our CTO who is also fan of DDD.

Me
For me the important thing is separation of concerns. This is actually why 
we're reimplementing that app in first place. The biggest cost in our case 
is when any new feature breaks anything existing. By that cost I mean we 
will rather send for times that much on new feature rather then being able 
to break existing one. This is due to the fact we're working with data 
where slight bug in sorting in case of some weird state in analytics tool 
<https://knowledge.globalwebindex.net/hc/en-us/articles/115001735345-How-To-Chart-Builder>
 
can resolve with switched order in exported data which is then big issue 
for many other people like data scientists which are using that data for 
testing machine learning modeling and have unpredictable results (that 
actually happened in past). I would go even further and intentionally make 
it hard to reshape system any any way that might lead to some 
unexpected side-effects. Anyway I don't think this is real point. Real 
point is that there is value of separating concerns.

I don't know what's the point of Richards way of argumentation. I have a 
feeling that he is trying to convince me about something he's not able to 
explain.

Claim composing function is good, composing init/update/view is bad is odd 
because:

   - obviously using functions is good there's no even need to say that
   - init/update/view are functions too
   - right from beginning I made it 100x clear that this is tiny 
   abstraction you can use to simplify composition of update and init. That's 
   assuming you want to do it in first place.

I don't see any real value about continuing in this direction. Anyone is 
trying to convince me about something he can't even name. Also I want to 
point out that I've found usage of term agile quite to be quite odd 
<https://www.youtube.com/watch?v=a-BOSpxYJ9M>. I really don't see point in 
bringing that to this conversation.

With that I really apologize if this sounds mean in any way but I'm not 
willing to comment anything in this thread anymore. But head ups everyone. 
I hope we can still tolerate and respect each other and rather focus on 
what we can do for community beside flaming.


-- 
You received this message because you are subscribed to the Google Groups "Elm 
Discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to