Ha, I just think it's hilarious that a talk with "escape from the ivory tower" in the title starts off with "welcome to the annual computer science distinguished lecture and dinner at Churchill College"
It gets worse! Before he even starts introducing Simon, there's a long segment about dinner arrangements, featuring all sorts of Oxbridge-isms. Great talk though.
I think we're very fortunate to have many simultaneously intelligent and charismatic people (like Simon Peyton-Jones!) in the Haskell and functional programming community. They help draw people in!
Thanks a lot. It is amazing how monad and type classes which are now cornerstones of the Haskell were "invented" in the process and were not part of initial design
Such an honor to be able to view a replay of this. I taught myself software engineering, so I feel like I get a piece of the great minds in tech (many still living). Major gratitude 🙏🏽💐🌹🌸🏵🌼💐
Thanks for posting! I enjoyed the history of FP and Haskell with Simon's great talk. The more I watch Simon's talks, the more I come to like learning Haskell.
Thoroughly enjoyed. This is an epic talk, one for the annals of computer science. It's like watching a very interesting documentary on a favorite subject told by one of the main action heroes.
It's one of the cleanest and easiest thing out of any languages. It's literary three words: print "hello world". So, if you're running it from shell, then and want to test it interactively, then: > ghci print "hello world" If you want to compile a file: # This writes 'main = print "hello world"' to a file. > echo 'main = print ""hello world" ' >> myFirstProgram.hs # This compiles the file > ghc myFirstProgram.hs # This runs the program > ./myFirstProgram hello world Writing IO in Haskell is very easy, way easier in fact than in most other languages if you don't bother understand abstractions about how it works (1). Easier because a) IO for concurrency and parallelism just works, while in other languages you'll quickly find yourself in trouble and having to transform most of your code b) there are abstractions that make it easier to reason about doing IO safely, like doing it in constant memory or making sure that all resources are released. (1): You don't, for example, go through Python internals to understand how it deals with the code you wrote. But in Haskell most things are actually implemented as abstractions and written in the language itself, rather than baked into some internals. You can actually not import `+` and `-` because even they are implemented in the language instead of being baked in. So you have that choice to go and read, and understand how anything is implemented, including how IO is done by checking the IO monad. Unlike looking at some compiler code where you would quickly be scared to do it, it will look not bulky or complex, but look elegant enough to be tempting to try and understand it. So people are tempted to learn everything and they get lost. It would be the same way if they were to try to understand how Python or C compiler works instead of just writing their apps using simple things they learned. Most languages don't give you the freedom to implement some abstraction that you want. You just write code using simple principles, and are fine for it sometimes getting a bit verbose. But in Haskell you have a choice to write very elegant code, so you can immediately get lost in abstractions and instead of writing useful code, get lost in trying to optimize everything and trying to implement a perfect abstraction for your code, whereas in other languages you would just bruteforce a verbose, potentially unsafe, solution, and go on living your life. This is the source for the myth that Haskell has a steep learning curve. It mostly (2) doesn't and it's pretty simple to write programs in it. But you can do the same thing in so many ways that if you want to learn how to do it in the best way, then you'll quickly find yourself learning infinitely many things, things that you would never learn because they are simply not possible in other languages. A simple list transformation can take you down a rabit hole if you want to "make it perfect" by putting length of the list as a type. But in other language you just wouldn't do it. You would just be fine with lists failing at runtime if somebody constructed a list with the wrong length. (2) One thing where it is indeed can be unavoidably difficult for beginners is if they come from objective or imperative programming and they got used to using mutation in their code by using `for` and `while` loops. It's still pretty easy to do the same thing in Haskell when using IO if you so desire, but it's rarely done in practice and thus you will not know how to do it in the beginning (and for right reasons) and you'll quickly have to adapt to use recursion. fold, and map, instead. This is one area where Haskell indeed forces you to learn how to do it its way from the very begging and you actually have to learn a couple of things before writing things you want. However, you have already written pure code before in the past in other languages, then it will look pretty familiar.
I saw similar experiments with Squeak and Pharo, which are smalltalk systems. Due to the usage of closures instead of "object patterns", the code is usually very compact. It is interesting how Smalltalk programmers are often against static typing. They demonstrate it by having stuff like a HTML and pdf browser built within. There is even an alternative (the Self language) that has no classes at all. Their idea is that types do not solve much. They are just a different abstraction. Haskell and Smalltalk do not conflict as much that people may think. It differs mainly in where you place your code and how you test/verify your code.
It is a shame that so few people attend the talk. Haskell and the talk is amazing by all means. I just finished my first Haskell program. It is kind of silly, but I enjoy it. By the first time, I try to recurve my main function. :) import System.IO import Data.List.Split main :: IO () main = do end
I remember him on a Haskell conference, ZuriHac 2019. I was really impressed for his energy when he gave presentation about type inference on Haskell. It is so nice to see him in this video. :)
I'm a Haskell beginner and the thing which bothers me the most is that there are two package managers and I haven't understood yet what the subtle differences are. Haskell should adopt one and drop the other. I hope the community merges and works together towards this.
Not knowing Haskell, I had got the impression that Monads were just the exposed tip of an iceberg of abstraction (ala Category Theory) implemented in the Haskell type system. Here, is comes across as 'just one simple trick" welded on to a pure but pragmatically developed core.
I'm really torn on functional programming. On one hand, it just makes sense to use and forces you to make principally designed software which leads to far less bugs, clearer software arch and thus faster software dev in general. On the other hand it's difficult for the day to day dev to pick this up and doesn't have as much support as say C# or java. This makes adoption for it difficult in a corporate env. What I think might help is trying to get functional languages more integrated into schooling. Introduce functional languages as the very first language to get their mind set into functional programming right away. Thus reducing the need to re-wire brains later on.
The teaching approaches presented at media.ccc.de/v/35c3-9800-how_to_teach_programming_to_your_loved_ones do introduce a functional language as the first one and seem quite promising.
If i were a freshman in CS and theyh tried to foist a functional langusge on me, I would refuse to learn it and hand in all my assignments in Python or Go or C or Pascal, even - anything but a functional language.
Good! Simon is a very nice person. You could leave the automatic subtitle translation enabled. This dissertation is from 2013? , please if you can add it in the information of the video. Regards!
He didn't answer why creating machines specifically for Functional Programming was a bad idea, which is something he said he would touch upon at some point. Anyone?
Because in a functional machine every variable has to be constantly passed over the stack. If you make a change to a variable, then there are two copies on the stack, the old value and the new value until the calling function overwrites the old value that's buried deeper on the stack and so on, until you are down on the lowest level. Now, if your called function throws an exception, then your stack is shot and you don't know which of the values on the stack (which you can't even retrieve easily because you don't know where they are) is valid. In other words, your global state is unrecoverable after every exception. This is not the case in machines that keep the state on the heap.
He said "Intel won". I assume a special FP microprocessor would have the need for its own instruction set and programming model. The cost per item of things like microprocessors goes down by a lot with the amount of items that are produced. So if there are only a few FP system users, the cost per machine becomes too high and it makes more sense to adapt to the mainstream architecture.
35:17 the choice of the word "action" re: monads is *_very_* unfortunate, very confusing: action is something that *is* being performed. if it's not _yet_ performed, it's an action *_description_* / definition / _"script"_ which only becomes an action *_when_* it is "run". that it is *not* yet performed, and *will* be, is the whole point to the monads; and the use of the word "action" prevents this understanding from occurring naturally to a yet uniformed listener.
“Action script, whatever that is.” That hurts. (For those who don’t know, Action Script is kinda like Java scripts long list staticly typed cousin, and was used in Adobe Flash.)
My sib just said "distinguished" five times with the word "watt" written in Comic Sans on a projector behind them ✨ Now that's well distinguished behaviour right there 😎
hahahaha I actually had to check wether I had inherited the x1.5 speed from some previous video, and actually changed it to x0.75 and then x1 just to be sure :P
Someone need to add English subtitles to this lecture. It seems to me the lecturer is eating half of the words, which is also called "talking very fast with a strong accent of some part of the world". We definitely need a monad here to let more audience benefit from it without much main
I guess I am a bit too late, but he later mentions it, as System F, which is polymorphic lambda calculus. According to my understanding this is exactly what flambda is.
Cool! The Haskell Journey! I'm on a bit different "Haskell Journey" it's called the #WeAreAllChrisHaskell Journey! Included in this Journey is the Chris Haskell Disease that seems to effect all of your electronics except only when your attempting to film Chris Haskell! (This disease has an FBI origin and seems to be Very Contagious!)
devops oracle micrsoft are scams as are cisco routers and software defined networkring fukery to destroy competition and overcmplicate so wall st bansters can push uter shit on everyone
Instead of acomodating the few dozen people "in the back", next time he should realize that there are 85k people watching online. Maybe accomodate for that.
Between the comic cans, the stammering tangents and random slideshow of his family I can safely say this is among the worst lectures I have ever labored though.
That small audience was given a real treat - I'm really glad this is online.
Ha, I just think it's hilarious that a talk with "escape from the ivory tower" in the title starts off with "welcome to the annual computer science distinguished lecture and dinner at Churchill College"
😂
Think I that's hilarious as well as being I the 69th like.
It occurred to me that the title might be deliberately chosen...fits well as a British humor
It gets worse! Before he even starts introducing Simon, there's a long segment about dinner arrangements, featuring all sorts of Oxbridge-isms. Great talk though.
how else are you gonna escape the ivory tower if you didn't set it up first?
This guy talks so fast and is one of the most enthusiastic people to give a talk on programming that I've ever seen
SPJ puts a smile on your face when he talks. You can feel his passion for programming theory. He's so energetic in his communication style.
Watching this on a Friday night. My descent into the nerd realm is now complete.
Literally doing the same right now. Almost midnight and here I am.
Separation of Church & state is one of the best jokes of this millenium. We're not so far in but still.
I think we're very fortunate to have many simultaneously intelligent and charismatic people (like Simon Peyton-Jones!) in the Haskell and functional programming community. They help draw people in!
I have no use to get into FP but I will just because Simon's enthusiasm is infectious. Downloading ghc as I type.
Thanks a lot. It is amazing how monad and type classes which are now cornerstones of the Haskell were "invented" in the process and were not part of initial design
Such an honor to be able to view a replay of this. I taught myself software engineering, so I feel like I get a piece of the great minds in tech (many still living). Major gratitude 🙏🏽💐🌹🌸🏵🌼💐
It is always a joy to watch SPJ talk! He is such a nice person and a gives such a great performance.
This gives me motivation and makes me happy. I need more of this.
Thanks for posting! I enjoyed the history of FP and Haskell with Simon's great talk. The more I watch Simon's talks, the more I come to like learning Haskell.
I love Simon, he's funny and knows his stuff. I am not into academic/theoretical side of CS but his talks are proper balance of applied and theory.
Absolutely amazing talk! Thanks so much for sharing!
Thoroughly enjoyed. This is an epic talk, one for the annals of computer science. It's like watching a very interesting documentary on a favorite subject told by one of the main action heroes.
I can't write a "hello world" in haskell and yet I watched all of it. That guy can talk.
Try:
hello = "Hello World"
hello
That code won't do anything. You want something like
main = putStrLn "Hello World!"
Don't forget the type signature:
main :: IO ()
main = putStrLn "Hello World!"
(you may omit it if you want, but it is considered bad practice)
IO is learned a lot later in Haskell than other languages
It's one of the cleanest and easiest thing out of any languages. It's literary three words: print "hello world". So, if you're running it from shell, then and want to test it interactively, then:
> ghci
print "hello world"
If you want to compile a file:
# This writes 'main = print "hello world"' to a file.
> echo 'main = print ""hello world" ' >> myFirstProgram.hs
# This compiles the file
> ghc myFirstProgram.hs
# This runs the program
> ./myFirstProgram
hello world
Writing IO in Haskell is very easy, way easier in fact than in most other languages if you don't bother understand abstractions about how it works (1). Easier because a) IO for concurrency and parallelism just works, while in other languages you'll quickly find yourself in trouble and having to transform most of your code b) there are abstractions that make it easier to reason about doing IO safely, like doing it in constant memory or making sure that all resources are released.
(1):
You don't, for example, go through Python internals to understand how it deals with the code you wrote. But in Haskell most things are actually implemented as abstractions and written in the language itself, rather than baked into some internals. You can actually not import `+` and `-` because even they are implemented in the language instead of being baked in.
So you have that choice to go and read, and understand how anything is implemented, including how IO is done by checking the IO monad. Unlike looking at some compiler code where you would quickly be scared to do it, it will look not bulky or complex, but look elegant enough to be tempting to try and understand it. So people are tempted to learn everything and they get lost. It would be the same way if they were to try to understand how Python or C compiler works instead of just writing their apps using simple things they learned.
Most languages don't give you the freedom to implement some abstraction that you want. You just write code using simple principles, and are fine for it sometimes getting a bit verbose. But in Haskell you have a choice to write very elegant code, so you can immediately get lost in abstractions and instead of writing useful code, get lost in trying to optimize everything and trying to implement a perfect abstraction for your code, whereas in other languages you would just bruteforce a verbose, potentially unsafe, solution, and go on living your life.
This is the source for the myth that Haskell has a steep learning curve. It mostly (2) doesn't and it's pretty simple to write programs in it. But you can do the same thing in so many ways that if you want to learn how to do it in the best way, then you'll quickly find yourself learning infinitely many things, things that you would never learn because they are simply not possible in other languages. A simple list transformation can take you down a rabit hole if you want to "make it perfect" by putting length of the list as a type. But in other language you just wouldn't do it. You would just be fine with lists failing at runtime if somebody constructed a list with the wrong length.
(2) One thing where it is indeed can be unavoidably difficult for beginners is if they come from objective or imperative programming and they got used to using mutation in their code by using `for` and `while` loops. It's still pretty easy to do the same thing in Haskell when using IO if you so desire, but it's rarely done in practice and thus you will not know how to do it in the beginning (and for right reasons) and you'll quickly have to adapt to use recursion. fold, and map, instead. This is one area where Haskell indeed forces you to learn how to do it its way from the very begging and you actually have to learn a couple of things before writing things you want. However, you have already written pure code before in the past in other languages, then it will look pretty familiar.
I saw similar experiments with Squeak and Pharo, which are smalltalk systems.
Due to the usage of closures instead of "object patterns", the code is usually very compact.
It is interesting how Smalltalk programmers are often against static typing.
They demonstrate it by having stuff like a HTML and pdf browser built within.
There is even an alternative (the Self language) that has no classes at all.
Their idea is that types do not solve much. They are just a different abstraction.
Haskell and Smalltalk do not conflict as much that people may think.
It differs mainly in where you place your code and how you test/verify your code.
SPJ gives wonderful presentations. He's the only man so cool that he can use Comic Sans in slides.
Exactly
@@tgifllc brother
It is a shame that so few people attend the talk. Haskell and the talk is amazing by all means.
I just finished my first Haskell program. It is kind of silly, but I enjoy it.
By the first time, I try to recurve my main function. :)
import System.IO
import Data.List.Split
main :: IO ()
main = do
end
What do you mean? Forty six thousand people stopped in to listen to this talk.
Wonderful presentation. Was so enjoyable to learn about Haskell.
Honestly i thought this was going to be a talk that i'd skip in 5 minutes but I fell into the rabbit hole. It's quite entertaining.
best haskell talk i've seen. 100x better than anything else.
SJP is the best thing that happened to computer science. Absolute joy to see him speak.
I remember him on a Haskell conference, ZuriHac 2019. I was really impressed for his energy when he gave presentation about type inference on Haskell. It is so nice to see him in this video. :)
This was great to watch. Really enjoyed it.
I'm a Haskell beginner and the thing which bothers me the most is that there are two package managers and I haven't understood yet what the subtle differences are. Haskell should adopt one and drop the other. I hope the community merges and works together towards this.
SPJ's talks are really really great!!
Of course this is master's brilliant performance! Applause!!!
"ActionScript what ever that is"
Fascinating talk. Haskell is really interesting. Next time I have a usecase, I would like to give Haskell a go.
He always delivers, what a great talk! Does anyone have a link to the slides?
So cool that this was uploaded
Not knowing Haskell, I had got the impression that Monads were just the exposed tip of an iceberg of abstraction (ala Category Theory) implemented in the Haskell type system. Here, is comes across as 'just one simple trick" welded on to a pure but pragmatically developed core.
Any suggestion where to start a postdoc position researching Haskell extensions?
I'm really torn on functional programming.
On one hand, it just makes sense to use and forces you to make principally designed software which leads to far less bugs, clearer software arch and thus faster software dev in general.
On the other hand it's difficult for the day to day dev to pick this up and doesn't have as much support as say C# or java. This makes adoption for it difficult in a corporate env.
What I think might help is trying to get functional languages more integrated into schooling. Introduce functional languages as the very first language to get their mind set into functional programming right away. Thus reducing the need to re-wire brains later on.
The teaching approaches presented at media.ccc.de/v/35c3-9800-how_to_teach_programming_to_your_loved_ones do introduce a functional language as the first one and seem quite promising.
I've just started checking out FP and I was really thinking, I would have got this really easily when I was a teenager and now I am like wtf
If i were a freshman in CS and theyh tried to foist a functional langusge on me, I would refuse to learn it and hand in all my assignments in Python or Go or C or Pascal, even - anything but a functional language.
Good! Simon is a very nice person.
You could leave the automatic subtitle translation enabled. This dissertation is from 2013? , please if you can add it in the information of the video.
Regards!
Loved this talk❤️! Thank you Simon ❤️❤️
Loved this talk.
Hey! Would you mind if I add chinese caption to this video and repost it on a video website in China?
This guy is a proper legend.
This got me flirtin' with Haskell, Scheme, Lisp, and functional programming all over again.
Got my GHC compiler brew-installed: 1.2 GB, phew!
Haskell is the ultimate language, in my opinion.
Matlab is the language of gods.
Weird question, but does anyone know what shoes he's wearing?
He didn't answer why creating machines specifically for Functional Programming was a bad idea, which is something he said he would touch upon at some point. Anyone?
Because in a functional machine every variable has to be constantly passed over the stack. If you make a change to a variable, then there are two copies on the stack, the old value and the new value until the calling function overwrites the old value that's buried deeper on the stack and so on, until you are down on the lowest level. Now, if your called function throws an exception, then your stack is shot and you don't know which of the values on the stack (which you can't even retrieve easily because you don't know where they are) is valid. In other words, your global state is unrecoverable after every exception. This is not the case in machines that keep the state on the heap.
He said "Intel won". I assume a special FP microprocessor would have the need for its own instruction set and programming model. The cost per item of things like microprocessors goes down by a lot with the amount of items that are produced. So if there are only a few FP system users, the cost per machine becomes too high and it makes more sense to adapt to the mainstream architecture.
Man, if that talk doesn't make you want to study theoretical computer science... :D
35:17 the choice of the word "action" re: monads is *_very_* unfortunate, very confusing: action is something that *is* being performed. if it's not _yet_ performed, it's an action *_description_* / definition / _"script"_ which only becomes an action *_when_* it is "run". that it is *not* yet performed, and *will* be, is the whole point to the monads; and the use of the word "action" prevents this understanding from occurring naturally to a yet uniformed listener.
14:37 Java was released in 1995 and developed in 1991, so I'd say most of the audience were in fact born by then...
Great talk! I've seen it several times over the years. Hopefully he will add something new next time :)
Not on this UA-cam record though. )
What a great fucking talk my Friends. Simon Peyton-Jones is incredible.
got lost at "system f".. but really a nice talk to watch!
“Action script, whatever that is.” That hurts. (For those who don’t know, Action Script is kinda like Java scripts long list staticly typed cousin, and was used in Adobe Flash.)
19 Imperative Programmers disliked this video. A curse on their mutable ways, may a thousand side effects assail them.
I just demonstrated what a side effect is by clicking on the dislike button. :-)
I love how underdressed he is in combination with the intentionally crappy powerpoint. What a troll :D
Nice, I was hoping somebody asked him about Rust
His remark about linear types at about 1:02:50 is relevant to that.
Could you please add automatic subtitles?
begin in 2:43
Ca. 24:00 ... a compiler bug that deletes the source code (only on Windows) == hilarious!
My sib just said "distinguished" five times with the word "watt" written in Comic Sans on a projector behind them ✨ Now that's well distinguished behaviour right there 😎
Love this guy
Respect for using Comic Sans ❤❤
The same slide has been used many times...
this guy is a master of both haskell and talking really fast
Fixing a Symbolics machine is on my TODO
Great, just great
"I don't like programming languages, I just like Coq"
it is never spj ???
threshold of immortality... very true lol
fix error in ghci doesn't work
dawei liu import Data.Function first
import Control.Monad.Fix
fix error
(observe fireworks!)
13:13 is so funny lmao
I hope Haskell the cat is still alive and well...
"...just ahead of ActionScript. Whatever that is?" Ha ha..
His mode of speech is a little like Michael Palin, I find it absolutely delightful.
watching at 0.75 speed :)
hahahaha I actually had to check wether I had inherited the x1.5 speed from some previous video, and actually changed it to x0.75 and then x1 just to be sure :P
Someone need to add English subtitles to this lecture. It seems to me the lecturer is eating half of the words, which is also called "talking very fast with a strong accent of some part of the world". We definitely need a monad here to let more audience benefit from it without much main
Watched this at 1.25x being a non-native, on the contrary - he has a pretty clean pronunciation
@@user-tk2jy8xr8b hahaha. Good for you if you can follow at x1.25. Me, I will even miss his gestures at that rate 😁.
Came in as common rabble, left feeling distinguished
What does he mean by F lambda at 42m ua-cam.com/video/re96UgMk6GQ/v-deo.htmlm
I guess I am a bit too late, but he later mentions it, as System F, which is polymorphic lambda calculus. According to my understanding this is exactly what flambda is.
oh god comic sans
9:08 says it all
Cool! The Haskell Journey! I'm on a bit different "Haskell Journey" it's called the #WeAreAllChrisHaskell Journey! Included in this Journey is the Chris Haskell Disease that seems to effect all of your electronics except only when your attempting to film Chris Haskell! (This disease has an FBI origin and seems to be Very Contagious!)
“Alumni will exercise they right to dine the hall” 🙄
31:32, *WI(T)H.
I kind of wish programmers still looked like "working group 2.8"
White and mostly male? Majority still look like that.
No wonder the audience sits in the back lazily :)
Sponsored by Microsoft
STOP HOOGLE plaese
What’s wrong with Hoogle?
devops oracle micrsoft are scams as are cisco routers and software defined networkring fukery to destroy competition and overcmplicate so wall st bansters can push uter shit on everyone
ELM-lang puts Haskell to shame.
I don't care about fewer bugs, etc. There is no way in hell I am ever going to code in a functional language.
Instead of acomodating the few dozen people "in the back", next time he should realize that there are 85k people watching online. Maybe accomodate for that.
Between the comic cans, the stammering tangents and random slideshow of his family I can safely say this is among the worst lectures I have ever labored though.