@@bob1shh Well, if you examine ancient Chinese texts, Kung Fu stands for "功夫". Kung means pure and Fu stands reaction or function. In other words, your movement is just a pure reaction to what your opponent is doing. So, one could say that martial artists like Jackie Chan and Bruce Lee were recognizing the value of purity and functional thinking way before it even reached the mainstream consciousness in computer science. Ancient Chinese texts say that the highest mastery in Kung Fu can only be achieved after you spent many years meditating on the thought of being a pure function. And if this sounds like bullshit it's because it is. I just made this all up.
@@bernardlowe5433 but it's fantastically good bullshit, though! Thanks for writing all this up) I'm glad you're not offended since I felt a bit weird about writing that comment. You're cool! ahah
Amen. 'Haskell Programming from First Principles' is the complete opposite and really slow and dry. Doesn't really teach you how to make anything it just gives you heaps of theory-based esoteric exercises, loved Get Programming with Haskell
@@joshuarowe8410 that is funny, when I was in college I went ahead my class mates and learned C (plain C, not C++) by implementing esoteric number theory algorithms.
I relate a lot to the points about small experiments with interesting technologies in production. That's one of the best things about working at a small company. Corporate programming is strict... strictly awful :) Would love to have found your company 5 years ago when I was getting interested in FP, totally relate to writing FP coffeescript lol, although not with coffeescript just with JS.
@@thomaskember4628 I'm a little late, but for me a monad is like an interface for computations, or anything that can contain a value. You can put a value in a monad with the unit function and you can "and then" the computation with bind. A great example for me is the Async type in FSharp - it represents an asyncriounos computation. You have a function from Async to T like unit and you have a way to run one after the other like with bind
Really nice talk. I have a question on his comments about other programming languages resulting in random "crashes" - like what are these crashes really? Are these full application crashes? Or are these exceptions that get raised when an operation encounters an error (like talking to a database) and these result in crashing the whole application. How can someone get to a state where you get an NPE in production and you have no idea where it came from? I am most likely misunderstanding the problem but isn't defensive programming a thing? Like I would heavily sanitize my input at the boundaries of my service and check for nulls/invalid requests and process the request only when it is valid. Else it is a 400 to the client. Similarly if I am talking to a database, I will have lots of error handling; for instance if an insert operation fails may be the RDS instance I was talking to has now failed over to a new instance such that the old one is now a reader and we have a new writer. In such cases I will absolutely handle that exception and recycle my connection to connect to the new writer and try to give a successful response to the caller. May be that request will take a little longer but it is better than returning an internal failure. As much as possible, we do not bubble up internal errors to customers/callers and try to maintain high availability. All of these means expecting the worst and writing code to handle those gracefully. Of course not all such cases can be handled. But none of this is limited by the choice of programming language but by the coding principles or lack of it. Also tests, both unit tests and integrations tests should try to test not just happy cases but exceptional ones. May be Elm/Haskell just allows writing those error handling code easier? Is that built into the PostgreSQL library that he showed for instance? Would be nice to see an actual example of what kind of NPEs just went away after moving to Elm. Not sarcastic, genuinely want to know so I can also adopt some modern skills. Otherwise interesting talk and glad to see hiring has not been a challenge.
The best kind of defensive programming is that where your safety guarantees are enforced by the compiler. This is a similar philosophy to Rust’s approach to memory management by using the borrow checker. On the contrary, most of the defensive programming tactics that you mention are things that you can leave out and your program will still compile.
@@nickr753 Interesting. I am mostly familiar with Java, so the things that I can think of that a compiler would enforce are Checked exceptions. For instance, if I am writing a Database driver, and if I want to enforce clients deal with the known failure modes, most likely I would use checked exceptions. Of course, this does not prevent the user from handling it via a try-and-wrap-with-a-runtime-exception to prevent the checked exception from bubbling up but your point about "most of the defensive programming tactics that you mention are things that you can leave out and your program will still compile" is not universally true. How does a safer language like Elm/Haskell/Rust(?) enable this in say, the database example? Some practical examples would be real nice as I am trying to broaden my understanding.
Around 28:00, the presenter briefly mentions other technologies his company experimented with: Terraform, GraphQL, and Elixir. Around 43:19, he mentions other technologies: nix, kubernetes, and PostGraphile.
I don't agree with the term "pure functional language" I think it conveys the wrong idea, because it isn't really "pure", pure would mean there are no side effects and there is only functions returning values, however there are side effects, they are just organized and defined with clear referential transparent & composable semantics and code is typed so you identify what code is participating of a some side effect sequence, side effects are contained. All of this with the aim to help us reason about our code with just reading it. From Conal Elliot talks I think of it as decoupling platform implementation logic and details from business core logic, so we can express our business logic just in terms of data dependency and not database, web, disk, network dependencies, all of this mechanisms are composed through typed algorithms which is what I call monadic code that is used to contain side effects. So what name would be better? I don't know, maybe we need an acronym like SOLID to describe this type of composable, denotative, side effect isolating, value semantics, applicative programming.
Great talk. One part kind of set me back. Hiring the creator of Elm to work for you isn't a strong indicator that Elm is a good solution over what you were using. Maybe you would have been just as happy if you could have snagged the creator of Rails or React to work for you. When i got to that part of the video i was like "if Elms so great and so easy to learn, why not just sponsor the creator instead of having him work for you? Is the direction of Elm primarily driven by your company? What happens to Elm if your interest change? Do i need to try and steal the guy who created Elm from you so my company can have a good experience with Elm?"
Evan didn't work for Prezi neither NoRedInk products, both companies hired them to work on Elm exclusively, supporting open source. Now he uses Elm Foundation funds and still works fulltime on Elm.
I would call that a very enthusiastic functional programming presentation! Made me want to work at noredink! I am based in Argentina. Here's my linkedin : www.linkedin.com/in/doradodiego/ And here's my web: diegodorado.com/en/work Hope you see this!
I like the healthy NoRendInk developer team gender split in the picture at 3:34. Other companies just ignore about half of their potential team members.
If you search really good, practice first course for haskell, its may halp you: ua-cam.com/play/PLgkiApDiZ0KHacTxxunGYTLC_qG2fR-4S.html . But its on russian, but subtitles may help you.
@@vertie2090 it isn't reallly, I'm just bitching because they added it to my university course as a mandatory subject and I am having a hard time getting used to working with it.
I saw the title and was like, "Wow, Richard Feynman was into functional programming?". But then I read it again.
Lol same here....
Wow, jackie chan is into functional programming? ;-)
@@bob1shh Well, if you examine ancient Chinese texts, Kung Fu stands for "功夫". Kung means pure and Fu stands reaction or function. In other words, your movement is just a pure reaction to what your opponent is doing. So, one could say that martial artists like Jackie Chan and Bruce Lee were recognizing the value of purity and functional thinking way before it even reached the mainstream consciousness in computer science. Ancient Chinese texts say that the highest mastery in Kung Fu can only be achieved after you spent many years meditating on the thought of being a pure function. And if this sounds like bullshit it's because it is. I just made this all up.
@@bernardlowe5433 but it's fantastically good bullshit, though! Thanks for writing all this up) I'm glad you're not offended since I felt a bit weird about writing that comment. You're cool! ahah
Feldman, Shmeldman!
Awesome and honest talk. Made me again excited to have a look on elm.
Haskell is still on my list - even when it is just for personal study.
Thanks!
I enjoy a Richard Feldman talk 😌
I'd like to work with Haskell and Elm
@BringerOfTheTruth what company?
How's it going?
The Louis CK of programming. His tone and inflection is spot on.
I will watch any presentation by Richard Feldman lol. What a fantastic speaker!
He's a good public speaker
Awesome talk! I feel one step closer to Elm and Haskell!
One of the very few talks where you dont have to speed up the tempo
Very true! I found this comment and I was like, wtf, I managed to finish this without speeding up the video?
"Get programming with Haskell" by Will Kurt great book for beginners.
Amen. 'Haskell Programming from First Principles' is the complete opposite and really slow and dry. Doesn't really teach you how to make anything it just gives you heaps of theory-based esoteric exercises, loved Get Programming with Haskell
@@joshuarowe8410 that is funny, when I was in college I went ahead my class mates and learned C (plain C, not C++) by implementing esoteric number theory algorithms.
I relate a lot to the points about small experiments with interesting technologies in production. That's one of the best things about working at a small company. Corporate programming is strict... strictly awful :) Would love to have found your company 5 years ago when I was getting interested in FP, totally relate to writing FP coffeescript lol, although not with coffeescript just with JS.
React is like that giant contraption made of 1000 tubes on breaking bad that shat out one cup of coffee.
That was "the best coffee" though
good talk, i learned alot and i am glad that there is lots of use of pure functional in business logic and modern apps :)
if it walks like haskell, and it talks like haskell, and it's in production, it's elm
Thanks!
needs more cat pics
I'm curious why you changed your mind about Terraform.
Fantastic talk.
I would love to work with a company that has the same philosophy!
As a computer science PhD student I found Haskell very easy to learn
Haskell was the first language I ever learned and I prefer writing in it more than I do any other language.
Can you explain what a monad is? This question is to me the problem with Haskell.
@@thomaskember4628 I'm a little late, but for me a monad is like an interface for computations, or anything that can contain a value. You can put a value in a monad with the unit function and you can "and then" the computation with bind.
A great example for me is the Async type in FSharp - it represents an asyncriounos computation.
You have a function from Async to T like unit and you have a way to run one after the other like with bind
Really nice talk. I have a question on his comments about other programming languages resulting in random "crashes" - like what are these crashes really? Are these full application crashes? Or are these exceptions that get raised when an operation encounters an error (like talking to a database) and these result in crashing the whole application. How can someone get to a state where you get an NPE in production and you have no idea where it came from?
I am most likely misunderstanding the problem but isn't defensive programming a thing? Like I would heavily sanitize my input at the boundaries of my service and check for nulls/invalid requests and process the request only when it is valid. Else it is a 400 to the client.
Similarly if I am talking to a database, I will have lots of error handling; for instance if an insert operation fails may be the RDS instance I was talking to has now failed over to a new instance such that the old one is now a reader and we have a new writer. In such cases I will absolutely handle that exception and recycle my connection to connect to the new writer and try to give a successful response to the caller. May be that request will take a little longer but it is better than returning an internal failure. As much as possible, we do not bubble up internal errors to customers/callers and try to maintain high availability. All of these means expecting the worst and writing code to handle those gracefully. Of course not all such cases can be handled. But none of this is limited by the choice of programming language but by the coding principles or lack of it. Also tests, both unit tests and integrations tests should try to test not just happy cases but exceptional ones. May be Elm/Haskell just allows writing those error handling code easier? Is that built into the PostgreSQL library that he showed for instance? Would be nice to see an actual example of what kind of NPEs just went away after moving to Elm. Not sarcastic, genuinely want to know so I can also adopt some modern skills.
Otherwise interesting talk and glad to see hiring has not been a challenge.
The best kind of defensive programming is that where your safety guarantees are enforced by the compiler. This is a similar philosophy to Rust’s approach to memory management by using the borrow checker. On the contrary, most of the defensive programming tactics that you mention are things that you can leave out and your program will still compile.
@@nickr753 Interesting. I am mostly familiar with Java, so the things that I can think of that a compiler would enforce are Checked exceptions. For instance, if I am writing a Database driver, and if I want to enforce clients deal with the known failure modes, most likely I would use checked exceptions. Of course, this does not prevent the user from handling it via a try-and-wrap-with-a-runtime-exception to prevent the checked exception from bubbling up but your point about "most of the defensive programming tactics that you mention are things that you can leave out and your program will still compile" is not universally true.
How does a safer language like Elm/Haskell/Rust(?) enable this in say, the database example? Some practical examples would be real nice as I am trying to broaden my understanding.
Does anybody know which Haskell framework they use at NoRedInk?
I don't know but the servant is very popular and powerful.
At this time, you might also want to check IHP github.com/digitallyinduced/ihp
@@ZnMgkbvprb delving into IHP was actually a jaw-dropping experience for me.. I highly recommend it!
"you may not recognize all these logos"
shit, I do
Pretty lucky company.
42:29 I yelled HOBBIT! XD
Around 28:00, the presenter briefly mentions other technologies his company experimented with: Terraform, GraphQL, and Elixir.
Around 43:19, he mentions other technologies: nix, kubernetes, and PostGraphile.
so what standard library replacement is good for starting to use haskell for webdev ?
...
45:30 The question we're all thinking of today. Spoiler alert: the answer is not clear.
What is the language of the logo in red on the right to ocaml?
Idris
www.idris-lang.org/
I don't agree with the term "pure functional language" I think it conveys the wrong idea, because it isn't really "pure", pure would mean there are no side effects and there is only functions returning values, however there are side effects, they are just organized and defined with clear referential transparent & composable semantics and code is typed so you identify what code is participating of a some side effect sequence, side effects are contained. All of this with the aim to help us reason about our code with just reading it.
From Conal Elliot talks I think of it as decoupling platform implementation logic and details from business core logic, so we can express our business logic just in terms of data dependency and not database, web, disk, network dependencies, all of this mechanisms are composed through typed algorithms which is what I call monadic code that is used to contain side effects.
So what name would be better? I don't know, maybe we need an acronym like SOLID to describe this type of composable, denotative, side effect isolating, value semantics, applicative programming.
Great talk. One part kind of set me back. Hiring the creator of Elm to work for you isn't a strong indicator that Elm is a good solution over what you were using. Maybe you would have been just as happy if you could have snagged the creator of Rails or React to work for you. When i got to that part of the video i was like "if Elms so great and so easy to learn, why not just sponsor the creator instead of having him work for you? Is the direction of Elm primarily driven by your company? What happens to Elm if your interest change? Do i need to try and steal the guy who created Elm from you so my company can have a good experience with Elm?"
Evan didn't work for Prezi neither NoRedInk products, both companies hired them to work on Elm exclusively, supporting open source. Now he uses Elm Foundation funds and still works fulltime on Elm.
Is it a job requirement to be a ginger to be hired in No Red Ink?
Can ELM retarget to LLVM?
Only if javascript can...
Elm is made strictly to run on web browsers. It does not even have a way to printf or get user input from a console
I would call that a very enthusiastic functional programming presentation!
Made me want to work at noredink! I am based in Argentina.
Here's my linkedin : www.linkedin.com/in/doradodiego/
And here's my web: diegodorado.com/en/work
Hope you see this!
When the crowd heard "Pure functional" + React, they LAUGHED SO HARD... Har Har Har.
I like the healthy NoRendInk developer team gender split in the picture at 3:34. Other companies just ignore about half of their potential team members.
Yeah, companies just don't want to hire women, no matter what value they would bring to the business. In intersectional conspiracy land, that is.
Or they just hire the best match?
If you search really good, practice first course for haskell, its may halp you: ua-cam.com/play/PLgkiApDiZ0KHacTxxunGYTLC_qG2fR-4S.html . But its on russian, but subtitles may help you.
If Louis CK were a programmer, he’d be this guy…
haskell is hell
why?
@@vertie2090 it isn't reallly, I'm just bitching because they added it to my university course as a mandatory subject and I am having a hard time getting used to working with it.
@@vertie2090 I guess he meant, it's "hell" when you remove the "ask" from its name.
@@Jake_2903 yeah it was mandatory in mine too, that's where I picked it up. Now I'm building web services with it.
Awesome talk! I feel one step closer to Elm and Haskell!