[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:03.03,0:00:06.83,Default,,0000,0000,0000,,{\i1}34C3 preroll music{\i0} Dialogue: 0,0:00:14.96,0:00:23.48,Default,,0000,0000,0000,,Angel: Our next speaker is Mike Sperber.\NHe's CEO, CTO at active group, co- Dialogue: 0,0:00:23.48,0:00:27.90,Default,,0000,0000,0000,,organizer of the annual BOB conference,\Ndeveloper conference, and expert in Dialogue: 0,0:00:27.90,0:00:32.73,Default,,0000,0000,0000,,functional programming. He has about 20\Nyears of experience in teaching Dialogue: 0,0:00:32.73,0:00:38.50,Default,,0000,0000,0000,,programming in high schools, universities\Nand other contexts. In his talk Mike will Dialogue: 0,0:00:38.50,0:00:44.39,Default,,0000,0000,0000,,share his experiences and gives us an idea\Non how changes and culture methods and Dialogue: 0,0:00:44.39,0:00:51.08,Default,,0000,0000,0000,,tools in programming might contribute to\Nthe future of software and software of the Dialogue: 0,0:00:51.08,0:00:56.16,Default,,0000,0000,0000,,future. Please enjoy the talk by Mike. The\Nstage is yours. Dialogue: 0,0:00:56.16,0:01:01.59,Default,,0000,0000,0000,,Speaker: Thank you very much.\N{\i1}Applause{\i0} Dialogue: 0,0:01:01.59,0:01:04.81,Default,,0000,0000,0000,,And did she say 20 years?\NI'm older than that. Dialogue: 0,0:01:04.81,0:01:10.30,Default,,0000,0000,0000,,So I appreciate you staying up this late.\NAh, so I'm all grown up now, so talking Dialogue: 0,0:01:10.30,0:01:14.52,Default,,0000,0000,0000,,about growing up: so I graduated at some\Npoint and got a degree in computer Dialogue: 0,0:01:14.52,0:01:19.02,Default,,0000,0000,0000,,science, I got a PhD many years ago and \Nnow I'm CEO of a software company that Dialogue: 0,0:01:19.02,0:01:23.61,Default,,0000,0000,0000,,carries some actual responsibility.\NBut as I was preparing this talk Dialogue: 0,0:01:23.61,0:01:24.91,Default,,0000,0000,0000,,I thought back to the Dialogue: 0,0:01:24.91,0:01:30.16,Default,,0000,0000,0000,,past and it happened to be the year in\N1983 when I started hacking and, ah, well Dialogue: 0,0:01:30.16,0:01:36.31,Default,,0000,0000,0000,,I wasn't there. But it must have been the\Nyear of 1C3 right? Ah, and so if you read Dialogue: 0,0:01:36.31,0:01:40.12,Default,,0000,0000,0000,,what was written about the computing\Nrevolution that was to come in the early Dialogue: 0,0:01:40.12,0:01:45.01,Default,,0000,0000,0000,,1980s. A lot of what we're having\Narguments about today was already there. Dialogue: 0,0:01:45.01,0:01:49.41,Default,,0000,0000,0000,,Computer security, data governance,\Nsurveillance. All these things were Dialogue: 0,0:01:49.41,0:01:53.64,Default,,0000,0000,0000,,already on the radar of the media back\Nthen. But a couple of things were Dialogue: 0,0:01:53.64,0:01:58.31,Default,,0000,0000,0000,,different, also. So here's a major German\Nnews magazine that had an article on Dialogue: 0,0:01:58.31,0:02:03.16,Default,,0000,0000,0000,,computers in children's rooms. And not\Neverybody had a computer back then. So if Dialogue: 0,0:02:03.16,0:02:06.93,Default,,0000,0000,0000,,you were a kid like me who was interested\Nin learning about computers and didn't Dialogue: 0,0:02:06.93,0:02:10.33,Default,,0000,0000,0000,,have one at home. There was a place you\Ncould go to, which was the local Dialogue: 0,0:02:10.33,0:02:14.37,Default,,0000,0000,0000,,department store. And, well, the picture\Nisn't very clear, but that's actually a Dialogue: 0,0:02:14.37,0:02:18.81,Default,,0000,0000,0000,,local department store that had rows and\Nrows of home computers set up. And Dialogue: 0,0:02:18.81,0:02:25.14,Default,,0000,0000,0000,,plugged in and ready to go for children to\Nto play with. And so back then, there Dialogue: 0,0:02:25.14,0:02:28.91,Default,,0000,0000,0000,,were, you don't remember this, but there\Nwere many different kinds of home Dialogue: 0,0:02:28.91,0:02:33.32,Default,,0000,0000,0000,,computers there was no internet. There was\Nvery little in the way of readily Dialogue: 0,0:02:33.32,0:02:37.15,Default,,0000,0000,0000,,available literature on how to program\Ncomputers. So we all had to figure it out Dialogue: 0,0:02:37.15,0:02:41.74,Default,,0000,0000,0000,,by try, by trial and error. And we didn't\Nreally have a good methodology of how to Dialogue: 0,0:02:41.74,0:02:46.88,Default,,0000,0000,0000,,program computers. Now, fast forward, a\Ncouple of years: I looked unbelievably Dialogue: 0,0:02:46.88,0:02:50.88,Default,,0000,0000,0000,,geeky in 1986. By then I had my own\Ncomputer and that must have been even the Dialogue: 0,0:02:50.88,0:02:57.69,Default,,0000,0000,0000,,second or third one that I had. And you\Nknow by the time I was an exchange student Dialogue: 0,0:02:57.69,0:03:01.73,Default,,0000,0000,0000,,in the United States. They made me\Npresident of the computer club. You can Dialogue: 0,0:03:01.73,0:03:06.00,Default,,0000,0000,0000,,see another picture of me right there. And\Nthat was my first experience of teaching a Dialogue: 0,0:03:06.00,0:03:10.85,Default,,0000,0000,0000,,formal course. So that was in 1988 and\Nthat was the end of that year. So that Dialogue: 0,0:03:10.85,0:03:15.76,Default,,0000,0000,0000,,means I taught my first computer science\Ncourse thirty years ago. Dialogue: 0,0:03:15.76,0:03:17.92,Default,,0000,0000,0000,,And I then ended Dialogue: 0,0:03:17.92,0:03:22.36,Default,,0000,0000,0000,,up designing the intro programming course\Nat the University of Tübingen and taught Dialogue: 0,0:03:22.36,0:03:27.76,Default,,0000,0000,0000,,that over more than 10 years. I taught\Nprogramming to humanities majors. I've Dialogue: 0,0:03:27.76,0:03:32.40,Default,,0000,0000,0000,,done a lot of professional training by now\Nand, well, if you're sort of a compulsive Dialogue: 0,0:03:32.40,0:03:37.03,Default,,0000,0000,0000,,educator like I am, everybody around you\Nsuffers, right? Your co-workers, your Dialogue: 0,0:03:37.03,0:03:41.61,Default,,0000,0000,0000,,friends, my children certainly, my\Nrelatives. A lot of them have had to Dialogue: 0,0:03:41.61,0:03:47.15,Default,,0000,0000,0000,,endure, you know, one or other kinds of\Nprogramming course from me. So back then, Dialogue: 0,0:03:47.15,0:03:52.08,Default,,0000,0000,0000,,as we were trying to figure out how to\Nhack computers, you know as there was very Dialogue: 0,0:03:52.08,0:03:56.16,Default,,0000,0000,0000,,little available literature, we also\Nlooked for role models and here's an early Dialogue: 0,0:03:56.16,0:04:00.17,Default,,0000,0000,0000,,role models from the 80s, a man named John\NDraper, better known as Captain Crunch Dialogue: 0,0:04:00.17,0:04:04.27,Default,,0000,0000,0000,,because he used the whistle that he found\Nin a cereal box to manipulate the US phone Dialogue: 0,0:04:04.27,0:04:09.40,Default,,0000,0000,0000,,system and then actually went to prison\Nfor it. So but John Draper also is not as Dialogue: 0,0:04:09.40,0:04:13.25,Default,,0000,0000,0000,,well known for actually writing software\Nand he produced one of the early word Dialogue: 0,0:04:13.25,0:04:17.53,Default,,0000,0000,0000,,processors that was available on personal\Ncomputers called Easy Rider, that I Dialogue: 0,0:04:17.53,0:04:23.35,Default,,0000,0000,0000,,actually used, and there were reports on\Non the prolific programming style that Dialogue: 0,0:04:23.35,0:04:27.44,Default,,0000,0000,0000,,Draper practiced, so I don't know if you\Ncan read this, the joke is if Draper were Dialogue: 0,0:04:27.44,0:04:31.40,Default,,0000,0000,0000,,writing math routines for addition he came\Nup with the answer two plus two equals Dialogue: 0,0:04:31.40,0:04:35.46,Default,,0000,0000,0000,,five, he would put a clause in the\Nprogram, if two plus three equals five Dialogue: 0,0:04:35.46,0:04:39.89,Default,,0000,0000,0000,,then that answer is four and that's\Ngenerally the way he writes programs. Dialogue: 0,0:04:39.89,0:04:45.23,Default,,0000,0000,0000,,Who's seen programs like this, where yeah,\Na lot of you right, where somebody adds Dialogue: 0,0:04:45.23,0:04:50.82,Default,,0000,0000,0000,,clause after clause of special cases until\Nyou know, so the special cases encountered Dialogue: 0,0:04:50.82,0:04:57.52,Default,,0000,0000,0000,,in the wild are all covered. So, of\Ncourse, you know it in 1983 we all figured Dialogue: 0,0:04:57.52,0:05:03.90,Default,,0000,0000,0000,,out ourselves but people by 1985 the\NHacker Bible came out and already worried Dialogue: 0,0:05:03.90,0:05:08.34,Default,,0000,0000,0000,,about how we would educate children about\Ncomputers in the future and so there was Dialogue: 0,0:05:08.34,0:05:14.08,Default,,0000,0000,0000,,an article about computers in school and\NI'm gonna zoom in a little bit and as I'm Dialogue: 0,0:05:14.08,0:05:18.71,Default,,0000,0000,0000,,sure I'm sure you've been involved in many\Ndiscussions on how to teach programming to Dialogue: 0,0:05:18.71,0:05:23.16,Default,,0000,0000,0000,,beginners and as always that discussion\Nfocuses on the programming language that's Dialogue: 0,0:05:23.16,0:05:26.88,Default,,0000,0000,0000,,being used. Back then, you know the\Npopular languages were somewhat different Dialogue: 0,0:05:26.88,0:05:32.50,Default,,0000,0000,0000,,from today. There was BASIC, Pascal. BASIC\Nhad that reputation of producing spaghetti Dialogue: 0,0:05:32.50,0:05:38.00,Default,,0000,0000,0000,,code, Forth is mentioned, LOGO is\Nmentioned and C is mentioned there. And a Dialogue: 0,0:05:38.00,0:05:41.62,Default,,0000,0000,0000,,prominent, back then a prominent,\Nprofessor of computer science in Germany Dialogue: 0,0:05:41.62,0:05:46.51,Default,,0000,0000,0000,,said well as long as you don't program in\NBASIC you'll be fine. Right, the pure fact Dialogue: 0,0:05:46.51,0:05:51.66,Default,,0000,0000,0000,,of not programming BASIC is gonna keep you\Nfrom writing spaghetti code. And as we now Dialogue: 0,0:05:51.66,0:05:55.58,Default,,0000,0000,0000,,know that isn't really true and I'm sure\Nmost of you have seen really crappy and Dialogue: 0,0:05:55.58,0:06:00.23,Default,,0000,0000,0000,,spaghetti code in production but the\Nbullets kind of keep hitting closer, Dialogue: 0,0:06:00.23,0:06:04.68,Default,,0000,0000,0000,,right? I think this must have been two\Nyears ago when a vulnerability in popular Dialogue: 0,0:06:04.68,0:06:08.79,Default,,0000,0000,0000,,IoT devices essentially brought down the\Ninternet because they were all assembled Dialogue: 0,0:06:08.79,0:06:13.64,Default,,0000,0000,0000,,into a botnet that brought down a popular\NDNS provider and github went down, I think Dialogue: 0,0:06:13.64,0:06:17.79,Default,,0000,0000,0000,,that's what most of you probably remember.\NThere was HeartBleed that I'm sure a lot Dialogue: 0,0:06:17.79,0:06:21.74,Default,,0000,0000,0000,,of you remember, due to a vulnerability\Na buffer overflow because in Dialogue: 0,0:06:21.74,0:06:26.94,Default,,0000,0000,0000,,OpenSSL, which was written in C, there was\NEquifax which divulged a lot of social Dialogue: 0,0:06:26.94,0:06:30.77,Default,,0000,0000,0000,,security numbers because of a bug in\NStruts, in the web framework that they Dialogue: 0,0:06:30.77,0:06:35.86,Default,,0000,0000,0000,,used and more interestingly, I think for,\Nfor students of the past there was the Dialogue: 0,0:06:35.86,0:06:40.20,Default,,0000,0000,0000,,CloudBleed vulnerability which would\Ndivulge secret passwords and account Dialogue: 0,0:06:40.20,0:06:44.54,Default,,0000,0000,0000,,information on webpages just as part of\Nthe web cache. You wouldn't even have to Dialogue: 0,0:06:44.54,0:06:49.65,Default,,0000,0000,0000,,ask it, you know, secret questions as you\Nwould have to ask CloudBleed and that was Dialogue: 0,0:06:49.65,0:06:53.55,Default,,0000,0000,0000,,oddly reminiscent of something well none\Nof you remembers unless you're as old as I Dialogue: 0,0:06:53.55,0:06:57.99,Default,,0000,0000,0000,,am which was the BTX hack which was\None of the founding stones I think of the Dialogue: 0,0:06:57.99,0:07:03.83,Default,,0000,0000,0000,,Chaos Computer Club, where people were\Nable to make the computer of a bank, that Dialogue: 0,0:07:03.83,0:07:08.91,Default,,0000,0000,0000,,was attached to BTX, divulge passwords.\NEssentially a memory dump that will Dialogue: 0,0:07:08.91,0:07:13.85,Default,,0000,0000,0000,,contain passwords and then transfer a lot\Nof money from that bank to them and so Dialogue: 0,0:07:13.85,0:07:21.15,Default,,0000,0000,0000,,that felt a lot. So the present in many\Nways it feels a lot like the past did and Dialogue: 0,0:07:21.15,0:07:25.16,Default,,0000,0000,0000,,you would think there would be some kind\Nof progress and I think I was as guilty of Dialogue: 0,0:07:25.16,0:07:30.65,Default,,0000,0000,0000,,that as anybody so in 1986 I wrote my\Nfirst book and as many books now and Dialogue: 0,0:07:30.65,0:07:34.43,Default,,0000,0000,0000,,then it focused on a specific programming\Nlanguage, of course I picked like the Dialogue: 0,0:07:34.43,0:07:38.47,Default,,0000,0000,0000,,worst programming language in hindsight,\Nthat I ever could have picked on that it's Dialogue: 0,0:07:38.47,0:07:43.22,Default,,0000,0000,0000,,responsible for a lot of the\Nvulnerabilities that we see today. So, but Dialogue: 0,0:07:43.22,0:07:48.89,Default,,0000,0000,0000,,again, you know it was at least, I can say\Nit was in 1986, so it was a long time ago. Dialogue: 0,0:07:48.89,0:07:54.04,Default,,0000,0000,0000,,A long time ago. So you would think things\Nhave changed. So some of you may have been Dialogue: 0,0:07:54.04,0:07:59.74,Default,,0000,0000,0000,,at a talk earlier today about the Bob\Nsystem for teaching for teaching young Dialogue: 0,0:07:59.74,0:08:05.45,Default,,0000,0000,0000,,kids on how to program and Bob prides\Nitself on teaching programming in exactly Dialogue: 0,0:08:05.45,0:08:10.16,Default,,0000,0000,0000,,the same way as computer experts would\Nprogram, but it would use an approach used Dialogue: 0,0:08:10.16,0:08:15.99,Default,,0000,0000,0000,,based on gamification to teach students,\Nright? And so you know in 1986 we were Dialogue: 0,0:08:15.99,0:08:20.74,Default,,0000,0000,0000,,programming in C, so Bob now is programmed\Nin C++, so something has happened since Dialogue: 0,0:08:20.74,0:08:29.04,Default,,0000,0000,0000,,then. And you can look at a lot of pages,\Nweb pages and systems for teaching Dialogue: 0,0:08:29.04,0:08:33.46,Default,,0000,0000,0000,,beginners on how to program. Here's a\Nprominent page supported by a lot of major Dialogue: 0,0:08:33.46,0:08:38.94,Default,,0000,0000,0000,,organizations called start coding de from\Nthis year and you can see again that a lot Dialogue: 0,0:08:38.94,0:08:42.77,Default,,0000,0000,0000,,of the stuff that it teaches where first\Nof all is focused on particular Dialogue: 0,0:08:42.77,0:08:47.17,Default,,0000,0000,0000,,programming languages, on Scratch and\NPython and Processing. So there's right, Dialogue: 0,0:08:47.17,0:08:51.19,Default,,0000,0000,0000,,there's three programming languages\Nmentioned there and if you can read the Dialogue: 0,0:08:51.19,0:08:55.11,Default,,0000,0000,0000,,fine print and if you can read German it\Nsays "spielerische Herangehensweise", Dialogue: 0,0:08:55.11,0:09:00.24,Default,,0000,0000,0000,,which means that there is a that there's a\Nfun based, a playful approach to teaching Dialogue: 0,0:09:00.24,0:09:04.81,Default,,0000,0000,0000,,how to program and that's common to a lot\Nof things. So if you go to a kids space Dialogue: 0,0:09:04.81,0:09:09.81,Default,,0000,0000,0000,,you will find a section there called\N"Jugend hackt" and you can see that it Dialogue: 0,0:09:09.81,0:09:13.77,Default,,0000,0000,0000,,also takes a very playful approach to\Nteaching and if you look at its material a Dialogue: 0,0:09:13.77,0:09:19.43,Default,,0000,0000,0000,,lot of it also features particular\Nprogramming languages. And there's, if you Dialogue: 0,0:09:19.43,0:09:24.66,Default,,0000,0000,0000,,look you, will find that there's a curious\Nabsence of methodology on these, on all of Dialogue: 0,0:09:24.66,0:09:32.57,Default,,0000,0000,0000,,these pages, and I think part of the\Nreason is that, I think, if you teach Dialogue: 0,0:09:32.57,0:09:37.43,Default,,0000,0000,0000,,programming, you can easily get the\Nfeeling that it's very easy, right? I mean Dialogue: 0,0:09:37.43,0:09:41.38,Default,,0000,0000,0000,,you can teach people to write very trivial\Nprograms that will blink an LED or do Dialogue: 0,0:09:41.38,0:09:45.72,Default,,0000,0000,0000,,something like that and you know light,\Nthe lights, the eyes of your students they Dialogue: 0,0:09:45.72,0:09:50.18,Default,,0000,0000,0000,,will just light up and they will just love\Nwhat you teach them, if it's trivial. If Dialogue: 0,0:09:50.18,0:09:53.96,Default,,0000,0000,0000,,it's not so trivial, so I like functional\Nprogramming, which is sometimes not so Dialogue: 0,0:09:53.96,0:09:58.47,Default,,0000,0000,0000,,easy, but in any given group that's large\Nenough you will find a few Sheldons that Dialogue: 0,0:09:58.47,0:10:02.41,Default,,0000,0000,0000,,will just eat up everything that you teach\Nthem and they will come to you. And they Dialogue: 0,0:10:02.41,0:10:06.12,Default,,0000,0000,0000,,will say "oh I just love", whatever it is,\Nthe lambda calculus, functional Dialogue: 0,0:10:06.12,0:10:09.77,Default,,0000,0000,0000,,programming, whatever and you know, if\Nyou've been at it for thirty years you Dialogue: 0,0:10:09.77,0:10:13.49,Default,,0000,0000,0000,,notice that it doesn't really matter what\Nyou teach you will always find a few Dialogue: 0,0:10:13.49,0:10:21.92,Default,,0000,0000,0000,,Sheldons that will tell you that they\Nlove what you teach them. And so after a Dialogue: 0,0:10:21.92,0:10:26.34,Default,,0000,0000,0000,,while you though, you realize that, well\Nthere's a few Sheldons but then there's Dialogue: 0,0:10:26.34,0:10:32.18,Default,,0000,0000,0000,,also a lot of students in your class who\Nare not Sheldons. And as you're chugging Dialogue: 0,0:10:32.18,0:10:36.45,Default,,0000,0000,0000,,along on your teaching train and you look\Nout the back you suddenly realize that Dialogue: 0,0:10:36.45,0:10:40.55,Default,,0000,0000,0000,,you've left a lot of students behind. They\Nmight still like what you're doing but you Dialogue: 0,0:10:40.55,0:10:46.01,Default,,0000,0000,0000,,really haven't taught them any, you know,\Nsignificant abilities and so over the Dialogue: 0,0:10:46.01,0:10:49.100,Default,,0000,0000,0000,,years I've had a lot of opportunity to\Nthink why that is. Why is teaching so hard Dialogue: 0,0:10:49.100,0:10:54.87,Default,,0000,0000,0000,,and why is it often unsuccessful? And one\Nof the reasons is, that I think if you Dialogue: 0,0:10:54.87,0:10:59.62,Default,,0000,0000,0000,,pick up any almost any book on programming\Nor open any webpage that tries to teach Dialogue: 0,0:10:59.62,0:11:05.98,Default,,0000,0000,0000,,your programming, it uses an approach that\NI call teaching by example. So here's a Dialogue: 0,0:11:05.98,0:11:11.02,Default,,0000,0000,0000,,book by a computer science professor, came\Nout this year, and you know "Learn Java Dialogue: 0,0:11:11.02,0:11:14.59,Default,,0000,0000,0000,,the easy way" and the easy way is in the\Nsecond chapter right after the Dialogue: 0,0:11:14.59,0:11:20.07,Default,,0000,0000,0000,,introduction, we do an example, right? And\Nthere's a concrete listing of a concrete Dialogue: 0,0:11:20.07,0:11:25.78,Default,,0000,0000,0000,,program and the text essentially is just a\Ncommentary for that program and then the Dialogue: 0,0:11:25.78,0:11:31.48,Default,,0000,0000,0000,,expectation is, that from the example that\Nyou've seen, that exposes various elements Dialogue: 0,0:11:31.48,0:11:35.82,Default,,0000,0000,0000,,of the programming language, like while\Nloops and System.out.println and whatever, Dialogue: 0,0:11:35.82,0:11:40.30,Default,,0000,0000,0000,,you will, I think by osmosis, or some\Nother magical mechanism absorb the ability Dialogue: 0,0:11:40.30,0:11:45.50,Default,,0000,0000,0000,,to apply the techniques to new problems\Nand my experience has been that that often Dialogue: 0,0:11:45.50,0:11:51.00,Default,,0000,0000,0000,,does not work for the great mass of\Nstudents were not Sheldons. Dialogue: 0,0:11:51.00,0:11:56.37,Default,,0000,0000,0000,,I thought back to the great teachers that\NI've had, maybe not in computer science Dialogue: 0,0:11:56.37,0:12:00.12,Default,,0000,0000,0000,,but you know what methods were they using\Nand then when I thought about it, I Dialogue: 0,0:12:00.12,0:12:04.78,Default,,0000,0000,0000,,realized that they were using methods that\Nwere completely different. So here's a Dialogue: 0,0:12:04.78,0:12:10.88,Default,,0000,0000,0000,,picture of my eleventh grade English\Nteacher, Anne Carvalho, in 1987. That was, Dialogue: 0,0:12:10.88,0:12:15.20,Default,,0000,0000,0000,,as I was an exchange student in the US and\Nat the beginning of the class she handed Dialogue: 0,0:12:15.20,0:12:19.15,Default,,0000,0000,0000,,out a piece of paper, well you can't\Nreally see it, so I'm gonna zoom in, that Dialogue: 0,0:12:19.15,0:12:24.09,Default,,0000,0000,0000,,said you know, how to write a composition\Nin this class, right? And so composition Dialogue: 0,0:12:24.09,0:12:29.12,Default,,0000,0000,0000,,of this class, well here's the second\Nsection, is the body, right. The body is Dialogue: 0,0:12:29.12,0:12:33.05,Default,,0000,0000,0000,,three paragraphs with each paragraph\Ndeveloping one of the areas of the thesis, Dialogue: 0,0:12:33.05,0:12:37.26,Default,,0000,0000,0000,,first area scope, usually one paragraph,\Ntransition topic sentence. If you look at Dialogue: 0,0:12:37.26,0:12:42.54,Default,,0000,0000,0000,,this, this is a very precise outline that\Nexplains the function of just about every Dialogue: 0,0:12:42.54,0:12:47.04,Default,,0000,0000,0000,,single sentence in your composition. So\Nit's a very rigid harness, if you will, Dialogue: 0,0:12:47.04,0:12:51.61,Default,,0000,0000,0000,,for a composition and you know, coming\Nfrom Germany, Germans are generally very, Dialogue: 0,0:12:51.61,0:12:55.68,Default,,0000,0000,0000,,they don't accept a lot of power distance\Nand they don't they authority that much, Dialogue: 0,0:12:55.68,0:13:01.89,Default,,0000,0000,0000,,you know, I was an instant rebel to this\Nconcept and it took me most of the year to Dialogue: 0,0:13:01.89,0:13:06.43,Default,,0000,0000,0000,,really accept that it was a great way to\Nlearn how to, to learn one good and Dialogue: 0,0:13:06.43,0:13:10.98,Default,,0000,0000,0000,,working way of writing a composition and\Nthen I could branch out from there and Dialogue: 0,0:13:10.98,0:13:16.17,Default,,0000,0000,0000,,develop other working ways of composition\Nso this is a methodology for doing Dialogue: 0,0:13:16.17,0:13:20.26,Default,,0000,0000,0000,,something that is extremely useful and\Npowerful when you teach. Dialogue: 0,0:13:20.26,0:13:23.42,Default,,0000,0000,0000,,And you might say, well we have\Nmethodologies like that in computer Dialogue: 0,0:13:23.42,0:13:27.06,Default,,0000,0000,0000,,science and in programming as well, you\Nknow we've been doing object-oriented Dialogue: 0,0:13:27.06,0:13:32.51,Default,,0000,0000,0000,,programming which is supposed to be very\Nprincipled. I've seen a lot of crappy Dialogue: 0,0:13:32.51,0:13:38.20,Default,,0000,0000,0000,,object-oriented code as well. I don't know\Nabout you. So you know, an object oriented Dialogue: 0,0:13:38.20,0:13:43.18,Default,,0000,0000,0000,,programming well it has encapsulated\Nstate, it has polymorphism and it has Dialogue: 0,0:13:43.18,0:13:47.58,Default,,0000,0000,0000,,inheritance. Inheritance is particularly\Nbad because there's so many different uses Dialogue: 0,0:13:47.58,0:13:52.23,Default,,0000,0000,0000,,of inheritance and typically your\Nprogramming language will only have one Dialogue: 0,0:13:52.23,0:13:56.78,Default,,0000,0000,0000,,mechanism and so people often get it wrong\Nand they do inheritance the wrong way Dialogue: 0,0:13:56.78,0:14:00.84,Default,,0000,0000,0000,,around and there's empirical studies but\Nthere's many other ways in which object- Dialogue: 0,0:14:00.84,0:14:05.71,Default,,0000,0000,0000,,oriented software is sort of ends up\Nlooking like this. So I don't, yeah Dialogue: 0,0:14:05.71,0:14:09.69,Default,,0000,0000,0000,,anyway, so you know, this is not, this is\Nnot supposed to be an indictment of the Dialogue: 0,0:14:09.69,0:14:13.64,Default,,0000,0000,0000,,hacker culture that we see a lot of things\Nthat you know around the corner, you know Dialogue: 0,0:14:13.64,0:14:17.16,Default,,0000,0000,0000,,around here that look like this and\Nthey're wonderful but they're no Dialogue: 0,0:14:17.16,0:14:21.38,Default,,0000,0000,0000,,substitute for, you know, they are no\Nsubstitute for a method, for Dialogue: 0,0:14:21.38,0:14:27.96,Default,,0000,0000,0000,,methodologically sound development of\Nsoftware. So yeah, well many yars ago I Dialogue: 0,0:14:27.96,0:14:32.52,Default,,0000,0000,0000,,thought there has to be a different way\Nand I got together with a man called Dialogue: 0,0:14:32.52,0:14:36.77,Default,,0000,0000,0000,,Matthias Felleisen who happens to be a\Nfellow German bureaucrat, like just like Dialogue: 0,0:14:36.77,0:14:40.98,Default,,0000,0000,0000,,me, but who lives in the US and who wrote\Na book called "How to design programs" Dialogue: 0,0:14:40.98,0:14:44.83,Default,,0000,0000,0000,,which you can find online, if you're\Ninterested. You don't even have to buy the Dialogue: 0,0:14:44.83,0:14:49.80,Default,,0000,0000,0000,,paper and we kind of did sort of a German\Nversion of that working with Matthias Dialogue: 0,0:14:49.80,0:14:55.60,Default,,0000,0000,0000,,called "Dein Programm" which also has a\Nfree book on it. And the overarching Dialogue: 0,0:14:55.60,0:15:01.44,Default,,0000,0000,0000,,principle of that approach is that we try\Nto be systematic about everything, so that Dialogue: 0,0:15:01.44,0:15:07.74,Default,,0000,0000,0000,,we try to attach systematic fixed plans or\Nsystem to every step of program Dialogue: 0,0:15:07.74,0:15:13.44,Default,,0000,0000,0000,,development and these things are called\Ndesign recipes. Just it was a name Dialogue: 0,0:15:13.44,0:15:18.03,Default,,0000,0000,0000,,invented for this. So I'm gonna, well I\Nguess I'm going to torture you with one Dialogue: 0,0:15:18.03,0:15:24.83,Default,,0000,0000,0000,,concrete example, a classic example. So\NMatthias was in Texas at the time, so the Dialogue: 0,0:15:24.83,0:15:28.100,Default,,0000,0000,0000,,classic example is animals on the Texas\NHighway. And we're gonna concern ourselves Dialogue: 0,0:15:28.100,0:15:32.84,Default,,0000,0000,0000,,with two kinds of animals, so there's an\Narmadillo on the left and there's a Dialogue: 0,0:15:32.84,0:15:37.71,Default,,0000,0000,0000,,rattlesnake on the right and there's of\Ncourse the highway in the middle, okay? So Dialogue: 0,0:15:37.71,0:15:41.70,Default,,0000,0000,0000,,we'll start out with armadillos and for\Nthe purpose of this application you might Dialogue: 0,0:15:41.70,0:15:45.56,Default,,0000,0000,0000,,just describe armadillos. So what's\Nimportant about armadillos here you'll see Dialogue: 0,0:15:45.56,0:15:50.60,Default,,0000,0000,0000,,why, is an armadillo has the following\Nproperties: it's alive or dead and it has Dialogue: 0,0:15:50.60,0:15:55.58,Default,,0000,0000,0000,,a certain weight. And so I'm going to\Ngreatly shorten this process of systematic Dialogue: 0,0:15:55.58,0:16:00.59,Default,,0000,0000,0000,,development here, but what we say is, well\Nif you find yourself describing your data, Dialogue: 0,0:16:00.59,0:16:04.38,Default,,0000,0000,0000,,this is a data centered approach, if you\Nfind yourself describing your data with Dialogue: 0,0:16:04.38,0:16:08.16,Default,,0000,0000,0000,,words like "it has the following\Nproperties" or "it consists of the Dialogue: 0,0:16:08.16,0:16:12.89,Default,,0000,0000,0000,,following parts" then you're dealing with\Nsomething called compound data, so this is Dialogue: 0,0:16:12.89,0:16:16.63,Default,,0000,0000,0000,,a fixed part of the plan and it has a\Nname. That's very important to give names Dialogue: 0,0:16:16.63,0:16:20.81,Default,,0000,0000,0000,,to things, so you can talk about them. And\Nso once you've identified that you're Dialogue: 0,0:16:20.81,0:16:24.88,Default,,0000,0000,0000,,dealing with compound data, you can model\Nthat data and you can translate that model Dialogue: 0,0:16:24.88,0:16:29.12,Default,,0000,0000,0000,,into code and here you see a screenshot of\Na system called DrRacket which is a Dialogue: 0,0:16:29.12,0:16:33.14,Default,,0000,0000,0000,,programming environment, that was\Ndeveloped for beginners, and you can see a Dialogue: 0,0:16:33.14,0:16:37.02,Default,,0000,0000,0000,,little program fragment in a programming\Nlanguage also developed for beginners, in Dialogue: 0,0:16:37.02,0:16:41.15,Default,,0000,0000,0000,,fact that fragment was developed for\Nbeginners, that says, well, in the Dialogue: 0,0:16:41.15,0:16:46.79,Default,,0000,0000,0000,,interest of brevity, we're abbreviating\Narmadillo to "dillo", so it says, we're Dialogue: 0,0:16:46.79,0:16:50.76,Default,,0000,0000,0000,,dealing with dillos, so we're calling the\Ndatatype, if you will, we're calling that Dialogue: 0,0:16:50.76,0:16:54.47,Default,,0000,0000,0000,,dillo. If we're dealing with compound\Ndata, we need one way to construct it, Dialogue: 0,0:16:54.47,0:16:56.43,Default,,0000,0000,0000,,so we need a constructor Dialogue: 0,0:16:56.43,0:16:59.86,Default,,0000,0000,0000,,and so we're gonna call\Nthe constructor make-dillo, we'll see Dialogue: 0,0:16:59.86,0:17:03.96,Default,,0000,0000,0000,,later that we'll need one way of\Ndistinguishing dillos from other things, Dialogue: 0,0:17:03.96,0:17:08.94,Default,,0000,0000,0000,,so we'll need what's called a predicate,\Nignore that for now, and on the previous Dialogue: 0,0:17:08.94,0:17:14.40,Default,,0000,0000,0000,,slide or here in the data definition the\Ncomment that is in yellow, you saw that an Dialogue: 0,0:17:14.40,0:17:18.63,Default,,0000,0000,0000,,armadillo has two components, it has two\Nparts and therefore there need to be two, Dialogue: 0,0:17:18.63,0:17:24.17,Default,,0000,0000,0000,,if you will, getter functions and those\Nare called dillo-alive P and dillo-wait. Dialogue: 0,0:17:24.17,0:17:28.99,Default,,0000,0000,0000,,Never mind all those parenthesis, at least\Nnot for the purposes of this presentation, Dialogue: 0,0:17:28.99,0:17:33.59,Default,,0000,0000,0000,,oh and one one more detail maybe is, that\Nif you look here, it says language. Dialogue: 0,0:17:33.59,0:17:37.62,Default,,0000,0000,0000,,DrRacket is a programming environment that\Nhas many different programming languages Dialogue: 0,0:17:37.62,0:17:41.65,Default,,0000,0000,0000,,and this particular one, as I mentioned is\Ncalled "die Macht der Abstraktion" which Dialogue: 0,0:17:41.65,0:17:46.29,Default,,0000,0000,0000,,identifies one particular set of\Nprogramming language levels for beginners. Dialogue: 0,0:17:46.29,0:17:52.80,Default,,0000,0000,0000,,Now, you know, once you have that record\Ndefinition you can immediately call the Dialogue: 0,0:17:52.80,0:17:58.62,Default,,0000,0000,0000,,constructor to go to, to make examples. So\Nhere's two example armadillos, so you see Dialogue: 0,0:17:58.62,0:18:03.84,Default,,0000,0000,0000,,these two expressions make-dillo and this\Nhash mark T means true, so make-dillo true Dialogue: 0,0:18:03.84,0:18:08.93,Default,,0000,0000,0000,,and ten means, well, we have an armadillo\Nwe're alive is true and the weight is ten Dialogue: 0,0:18:08.93,0:18:13.81,Default,,0000,0000,0000,,so that might mean an armadillo that's\Nalive and weighs ten kilos. And then Dialogue: 0,0:18:13.81,0:18:17.93,Default,,0000,0000,0000,,there's another armadillo that well alive\Nunfortunately is false, so it's probably Dialogue: 0,0:18:17.93,0:18:23.32,Default,,0000,0000,0000,,dead and it weighs 12 kilos and the\Ndefines there just say, well we're Dialogue: 0,0:18:23.32,0:18:29.36,Default,,0000,0000,0000,,gonna call the first one d1 and we're\Ngonna call the first one d2 - okay? And so Dialogue: 0,0:18:29.36,0:18:33.81,Default,,0000,0000,0000,,one way to talk about these functions that\Nwe've created is by writing down what we Dialogue: 0,0:18:33.81,0:18:38.74,Default,,0000,0000,0000,,call signatures, they're almost type\Nsignatures, not quite, let's say what Dialogue: 0,0:18:38.74,0:18:42.68,Default,,0000,0000,0000,,these functions behave like. So the\Nconstructor function that you just saw Dialogue: 0,0:18:42.68,0:18:47.48,Default,,0000,0000,0000,,applied is called make-dillo and you know\Nin these funny programming languages most Dialogue: 0,0:18:47.48,0:18:51.83,Default,,0000,0000,0000,,things are written in prefix notation, so\Nmake-dillo accepts a boolean and a number, Dialogue: 0,0:18:51.83,0:18:55.81,Default,,0000,0000,0000,,remember that was that a live thing, is\Nit's still alive and the number that says Dialogue: 0,0:18:55.81,0:19:00.51,Default,,0000,0000,0000,,how heavy it is and it produces a dillo\Nobject. And the dillo-alive and dillo- Dialogue: 0,0:19:00.51,0:19:05.70,Default,,0000,0000,0000,,weight getter functions both accept a\Ndillo object and the first of them says Dialogue: 0,0:19:05.70,0:19:09.59,Default,,0000,0000,0000,,whether the dillos are live or not, so it\Nproduces a boolean and the second one Dialogue: 0,0:19:09.59,0:19:16.32,Default,,0000,0000,0000,,produces a number that is the weight of\Nthe dillo, okay. And so why is this all Dialogue: 0,0:19:16.32,0:19:20.55,Default,,0000,0000,0000,,relevant? Life on the Texas Highway is\Nanimals get run over by cars, right? Dialogue: 0,0:19:20.55,0:19:26.04,Default,,0000,0000,0000,,So we're gonna write a function that\Nsimulates that process. So that thing in Dialogue: 0,0:19:26.04,0:19:31.71,Default,,0000,0000,0000,,green is what we call a problem, as a\Nshort statement on, a short comment on Dialogue: 0,0:19:31.71,0:19:35.37,Default,,0000,0000,0000,,what the function does that we're about to\Nwrite, so we're gonna run over an Dialogue: 0,0:19:35.37,0:19:39.25,Default,,0000,0000,0000,,armadillo and then it says we're gonna\Nwrite a function called run-over-armadillo Dialogue: 0,0:19:39.25,0:19:43.23,Default,,0000,0000,0000,,and it goes from dillo to dillo, which\Nmeans, well, the dillo was not really a Dialogue: 0,0:19:43.23,0:19:47.61,Default,,0000,0000,0000,,dillo, it represents the state of the\Ndillo before it gets run over and then one Dialogue: 0,0:19:47.61,0:19:51.66,Default,,0000,0000,0000,,comes out of the right side, on the right\Nhand side that says what the state is Dialogue: 0,0:19:51.66,0:19:57.05,Default,,0000,0000,0000,,after I've gone run over by a car, ok? And\Nthen you can write. So you can see all Dialogue: 0,0:19:57.05,0:20:00.98,Default,,0000,0000,0000,,these things are sort of required elements\Nof the curriculum, I'm going over them Dialogue: 0,0:20:00.98,0:20:05.64,Default,,0000,0000,0000,,very quickly. The two next things are\Nexample and test cases at the same time. Dialogue: 0,0:20:05.64,0:20:09.96,Default,,0000,0000,0000,,So check-expect says, well, if we run over\Nthat first armadillo it was still alive, Dialogue: 0,0:20:09.96,0:20:15.47,Default,,0000,0000,0000,,it weighed 10 kilos. After we've run it\Nover it's dead and it still weighs 10 Dialogue: 0,0:20:15.47,0:20:19.75,Default,,0000,0000,0000,,kilos, okay? And the second test case\Nsays, well, if we run over d2, it is Dialogue: 0,0:20:19.75,0:20:25.56,Default,,0000,0000,0000,,already dead, so after that it's still\Ngoing to be dead and it will weigh 12 Dialogue: 0,0:20:25.56,0:20:30.39,Default,,0000,0000,0000,,kilos. Now, from the signature above, you\Nknow we already know what the function is Dialogue: 0,0:20:30.39,0:20:34.70,Default,,0000,0000,0000,,called and how many arguments it has, it\Nhas one argument, so we can write Dialogue: 0,0:20:34.70,0:20:38.70,Default,,0000,0000,0000,,something down mechanically that is what\Nwe call a skeleton, which is that thing in Dialogue: 0,0:20:38.70,0:20:42.49,Default,,0000,0000,0000,,the beginning, the thing at the bottom. So\Nwe're writing a function or something Dialogue: 0,0:20:42.49,0:20:47.44,Default,,0000,0000,0000,,called run-over-dillo, lambda says that\Nit's a function and d says well that dillo Dialogue: 0,0:20:47.44,0:20:54.70,Default,,0000,0000,0000,,up there it's going to be called d here.\NThis is a mechanical process and so we see Dialogue: 0,0:20:54.70,0:21:00.16,Default,,0000,0000,0000,,here how that is elaborated. We can do\Nmore things mechanically from this because Dialogue: 0,0:21:00.16,0:21:05.63,Default,,0000,0000,0000,,dillo is compound data and whenever we\Naccept compound data as input we probably Dialogue: 0,0:21:05.63,0:21:09.60,Default,,0000,0000,0000,,need to look at the parts to do anything\Nthat's meaningful. So we might as well Dialogue: 0,0:21:09.60,0:21:14.42,Default,,0000,0000,0000,,call the two getter functions. So there's\Ndillo-alive of d and dillo-weight of d and Dialogue: 0,0:21:14.42,0:21:19.65,Default,,0000,0000,0000,,also compound data comes out as output and\Nso, we probably need to call the Dialogue: 0,0:21:19.65,0:21:23.52,Default,,0000,0000,0000,,constructor. In our constructor dillo then\Nis supposed to come out the right hand Dialogue: 0,0:21:23.52,0:21:28.19,Default,,0000,0000,0000,,sid. So all of these things can be written\Ndown and we ask our students to write all Dialogue: 0,0:21:28.19,0:21:33.24,Default,,0000,0000,0000,,this stuff down and also actually write\Ndown those ellipses marks, the three dots Dialogue: 0,0:21:33.24,0:21:37.21,Default,,0000,0000,0000,,and these are building blocks and they are\Ncompletely mechanical, they have nothing Dialogue: 0,0:21:37.21,0:21:41.62,Default,,0000,0000,0000,,to do with the actual purpose of what\Nwe're doing and then usually it's pretty Dialogue: 0,0:21:41.62,0:21:45.74,Default,,0000,0000,0000,,easy to then fill in the missing steps and\Nsay well we are not really interested in Dialogue: 0,0:21:45.74,0:21:50.66,Default,,0000,0000,0000,,whether the dillo was alive or not before.\NWe're probably, but we are interested in Dialogue: 0,0:21:50.66,0:21:54.22,Default,,0000,0000,0000,,the weight in constructing that new\Narmadillo and does it still run over a Dialogue: 0,0:21:54.22,0:22:00.25,Default,,0000,0000,0000,,function that does that. So a large, so\Nyou can see that there's a lot of steps, Dialogue: 0,0:22:00.25,0:22:04.21,Default,,0000,0000,0000,,it's an extremely bureaucratic process\Nproducing that program. And some of those Dialogue: 0,0:22:04.21,0:22:08.16,Default,,0000,0000,0000,,steps are completely mechanical, they\Nmight be boring but they enable everybody Dialogue: 0,0:22:08.16,0:22:14.21,Default,,0000,0000,0000,,to make progress. And so you might imagine\NI said rattlesnakes and rattlesnakes are Dialogue: 0,0:22:14.21,0:22:18.56,Default,,0000,0000,0000,,very similar to dillos, I'm gonna run over\Nthose very quickly. So rattlesnake has the Dialogue: 0,0:22:18.56,0:22:22.34,Default,,0000,0000,0000,,following properties: thickness and\Nlength. And you can see there's a record Dialogue: 0,0:22:22.34,0:22:26.41,Default,,0000,0000,0000,,definition, there's a bunch of signatures\Nthat come out of that. We can do a purpose Dialogue: 0,0:22:26.41,0:22:30.30,Default,,0000,0000,0000,,statement, says all we're going to run\Nover a rattlessnake now, not we can't just Dialogue: 0,0:22:30.30,0:22:34.78,Default,,0000,0000,0000,,do armadillos. There's a couple of test\Ncases and rattlesnakes can run over, you Dialogue: 0,0:22:34.78,0:22:38.54,Default,,0000,0000,0000,,know, they get flattened out. So their\Nthickness goes down to zero when they get Dialogue: 0,0:22:38.54,0:22:43.93,Default,,0000,0000,0000,,run over. But the important thing is now,\Nwe might think about, well, we're just Dialogue: 0,0:22:43.93,0:22:48.29,Default,,0000,0000,0000,,going to run over whatever animal comes\Nunder our wheels next, so we were Dialogue: 0,0:22:48.29,0:22:52.04,Default,,0000,0000,0000,,interested in an animal on the Texas\NHighway and an animal is one of the Dialogue: 0,0:22:52.04,0:22:56.00,Default,,0000,0000,0000,,following: it's either an armadillo or a\Nrattlesnake. And whenever you see that Dialogue: 0,0:22:56.00,0:23:00.47,Default,,0000,0000,0000,,wording, it's one of the following: it\Nthis or that or that or that. You're Dialogue: 0,0:23:00.47,0:23:05.53,Default,,0000,0000,0000,,dealing with something that we call mixed\Ndata and so, again, this thing has a name. Dialogue: 0,0:23:05.53,0:23:09.57,Default,,0000,0000,0000,,And with mixed data, again, there's a\Nfixed set of steps that you go when you Dialogue: 0,0:23:09.57,0:23:14.69,Default,,0000,0000,0000,,program to them. So you define a signature\Nthat says, well, animal is a signature Dialogue: 0,0:23:14.69,0:23:20.36,Default,,0000,0000,0000,,that's mixed from dillo and rattlesnake\Nand we're then going to write a function Dialogue: 0,0:23:20.36,0:23:24.22,Default,,0000,0000,0000,,that runs over an animal and so it doesn't\Nhave dillo to dillo or it doesn't have Dialogue: 0,0:23:24.22,0:23:28.40,Default,,0000,0000,0000,,rattlesnake to rattlesnake, it has animal\Nto animal. It has test cases like as Dialogue: 0,0:23:28.40,0:23:35.26,Default,,0000,0000,0000,,before and, well, remember that there were\Ntwo different kinds of animals on the Dialogue: 0,0:23:35.26,0:23:40.29,Default,,0000,0000,0000,,Texas Highway and in, so we and we need to\Nfeed them differently, right? It's a Dialogue: 0,0:23:40.29,0:23:43.85,Default,,0000,0000,0000,,different thing of running over an\Narmadillo and running over a rattlesnake Dialogue: 0,0:23:43.85,0:23:47.76,Default,,0000,0000,0000,,so for that, we need a conditional and we\Nneed these predicate function that says, Dialogue: 0,0:23:47.76,0:23:51.74,Default,,0000,0000,0000,,well, that animal a is it an armadillo or\Nis it a rattlesnake and then we need to Dialogue: 0,0:23:51.74,0:23:55.40,Default,,0000,0000,0000,,fill in the gaps. And of course we've\Nwritten those functions already, so it Dialogue: 0,0:23:55.40,0:23:59.63,Default,,0000,0000,0000,,gets pretty easy. This is, I don't know if\Nyou've seen this, and I've run over this Dialogue: 0,0:23:59.63,0:24:03.69,Default,,0000,0000,0000,,very quickly and I've left out a lot of\Nsteps, this is an extremely bureaucratic Dialogue: 0,0:24:03.69,0:24:08.28,Default,,0000,0000,0000,,process and when you read about this at\Nfirst you think: "this is so boring, I Dialogue: 0,0:24:08.28,0:24:13.33,Default,,0000,0000,0000,,can't, I can't", you know this, you know\Nyou go like this right. And interestingly Dialogue: 0,0:24:13.33,0:24:17.68,Default,,0000,0000,0000,,if you practice this on your students,\Nsurprisingly pretty quickly they go like Dialogue: 0,0:24:17.68,0:24:21.86,Default,,0000,0000,0000,,this, because they realize that this\Nbureaucratic approach actually makes them Dialogue: 0,0:24:21.86,0:24:26.10,Default,,0000,0000,0000,,produce a working solution on their own.\NSome of them can't believe it, that it's Dialogue: 0,0:24:26.10,0:24:32.42,Default,,0000,0000,0000,,successful, but then they start smiling.\NBut it took a long, long time to a develop Dialogue: 0,0:24:32.42,0:24:37.02,Default,,0000,0000,0000,,this approach. So Matthias has been added,\NI think since the early 1990s, I've really Dialogue: 0,0:24:37.02,0:24:42.28,Default,,0000,0000,0000,,been involved in this process, I think\Nsince since about 2001. So really you need Dialogue: 0,0:24:42.28,0:24:47.00,Default,,0000,0000,0000,,to take an approach to teaching. You need\Nto observe how well it does and I can't Dialogue: 0,0:24:47.00,0:24:53.07,Default,,0000,0000,0000,,stress this enough: when you observe it is\Nnot enough to measure the popularity of Dialogue: 0,0:24:53.07,0:24:56.96,Default,,0000,0000,0000,,what you're doing, it's not enough to ask\Nyour students "do you like this stuff", Dialogue: 0,0:24:56.96,0:25:02.43,Default,,0000,0000,0000,,right, "is that something that's\Ninteresting", you know? I've seen a huge Dialogue: 0,0:25:02.43,0:25:07.09,Default,,0000,0000,0000,,bandwidth of things where we were\Nunsuccessful, but people just liked it, Dialogue: 0,0:25:07.09,0:25:12.37,Default,,0000,0000,0000,,just people just liked it fine and so,\Nthis process, you know, we repeated many Dialogue: 0,0:25:12.37,0:25:16.93,Default,,0000,0000,0000,,times and hopefully gonna repeat it many\Ntimes in the future. But it has produced Dialogue: 0,0:25:16.93,0:25:21.00,Default,,0000,0000,0000,,the following insights. You need, so it's\Nvery useful to have a very bureaucratic Dialogue: 0,0:25:21.00,0:25:26.49,Default,,0000,0000,0000,,approach to programming that we call\Ndesign recipes. I didn't much talk about Dialogue: 0,0:25:26.49,0:25:30.04,Default,,0000,0000,0000,,the fact that it's very helpful to have\Nprogramming languages that are Dialogue: 0,0:25:30.04,0:25:33.44,Default,,0000,0000,0000,,specifically developed for beginners or\Nfor learners, doesn't have to be Dialogue: 0,0:25:33.44,0:25:37.27,Default,,0000,0000,0000,,beginners. And it also helps to have a\Nprogramming environment that was designed Dialogue: 0,0:25:37.27,0:25:42.63,Default,,0000,0000,0000,,for beginners and, well, you can go either\Nto a page called "Program by Design" or Dialogue: 0,0:25:42.63,0:25:46.98,Default,,0000,0000,0000,,"Dein Programm" and you'll find a lot of\Ninformation about that. But it took a lot Dialogue: 0,0:25:46.98,0:25:51.56,Default,,0000,0000,0000,,of work and it's usually, it's not enough\Nto just take your professional programming Dialogue: 0,0:25:51.56,0:25:55.08,Default,,0000,0000,0000,,language and stick it on your kids. It\Nmight be, it might work for trivial Dialogue: 0,0:25:55.08,0:26:00.40,Default,,0000,0000,0000,,programs, but it's not going to scale\Nanywhere. So, yeah, well it's about Dialogue: 0,0:26:00.40,0:26:04.63,Default,,0000,0000,0000,,growing up, but I guess this one is about\Ngrowing down. So I think the progression Dialogue: 0,0:26:04.63,0:26:09.04,Default,,0000,0000,0000,,really should lead us, from you know, the\NC and C++ like unsave languages and all Dialogue: 0,0:26:09.04,0:26:14.51,Default,,0000,0000,0000,,the hacking of the past and that we like\Nto use when we make exploits to save Dialogue: 0,0:26:14.51,0:26:18.73,Default,,0000,0000,0000,,languages and runtimes and finally, we're\Nseeing something like Rust and ATS coming Dialogue: 0,0:26:18.73,0:26:22.97,Default,,0000,0000,0000,,up, I really only know how to do this\Nbureaucratic and systematic approach to Dialogue: 0,0:26:22.97,0:26:28.52,Default,,0000,0000,0000,,programming with functional languages and\Nif you've watched this closely, you saw Dialogue: 0,0:26:28.52,0:26:33.32,Default,,0000,0000,0000,,that what we did, was type driven, right?\NWe looked at the way our data is organized Dialogue: 0,0:26:33.32,0:26:39.43,Default,,0000,0000,0000,,and then organized our programs according\Nto that data. Whether you use a statically Dialogue: 0,0:26:39.43,0:26:43.35,Default,,0000,0000,0000,,typed language or not is kind of secondary\Nto that, but in the future I think we'll Dialogue: 0,0:26:43.35,0:26:47.20,Default,,0000,0000,0000,,see more of that. You will write down a\Nspecification of what you're trying to do Dialogue: 0,0:26:47.20,0:26:51.12,Default,,0000,0000,0000,,as part of your types and then your system\Nwill generate for them and that's also a Dialogue: 0,0:26:51.12,0:26:57.17,Default,,0000,0000,0000,,way of proceeding very systematically. So\NI think when you're teaching programming Dialogue: 0,0:26:57.17,0:27:03.46,Default,,0000,0000,0000,,it's, you know, being inclusive is very,\Nvery hard, right? It's not enough to get Dialogue: 0,0:27:03.46,0:27:09.29,Default,,0000,0000,0000,,people excited. It really is important to\Nimpart practical knowledge and competency. Dialogue: 0,0:27:09.29,0:27:13.29,Default,,0000,0000,0000,,And the only way I know don't know how to\Ndo this, is to teach a systematic Dialogue: 0,0:27:13.29,0:27:18.00,Default,,0000,0000,0000,,approach. You might call it bureaucratic\Nif you're German, but to my surprise even Dialogue: 0,0:27:18.00,0:27:23.84,Default,,0000,0000,0000,,the Sheldons like this after a while\Nanyway and we should really refocus or we Dialogue: 0,0:27:23.84,0:27:27.74,Default,,0000,0000,0000,,need to focus you know after all the\Nexploits we'seen over the past couple of Dialogue: 0,0:27:27.74,0:27:33.35,Default,,0000,0000,0000,,decades on correctness and I think this is\Nthe path to do that. Thank you very much. Dialogue: 0,0:27:33.35,0:27:35.48,Default,,0000,0000,0000,,{\i1}Applause{\i0} Dialogue: 0,0:27:35.48,0:27:40.77,Default,,0000,0000,0000,,Angel: Thank you Mike for this\Npresentation. We now have like two or Dialogue: 0,0:27:40.77,0:27:51.09,Default,,0000,0000,0000,,three minutes for questions. Please go to\Nthe mics one, two, three yourself. Ah, we Dialogue: 0,0:27:51.09,0:27:53.54,Default,,0000,0000,0000,,have from there. Dialogue: 0,0:27:56.60,0:28:00.20,Default,,0000,0000,0000,,Q: Hi! Mic on? Yes. So coming from a lot Dialogue: 0,0:28:00.20,0:28:04.72,Default,,0000,0000,0000,,of the software development world and\Npractical experience probably, delivering Dialogue: 0,0:28:04.72,0:28:09.54,Default,,0000,0000,0000,,with other customers, have you got any\Ninsights into how people would often do Dialogue: 0,0:28:09.54,0:28:14.07,Default,,0000,0000,0000,,teaching by code review, a direction for\Npeople to go in reading, to learn more Dialogue: 0,0:28:14.07,0:28:17.70,Default,,0000,0000,0000,,about code, learn more about the structure\Nof code, in the way that software Dialogue: 0,0:28:17.70,0:28:21.69,Default,,0000,0000,0000,,development often is typically taught? Do\Nyou have thoughts on that specifically in Dialogue: 0,0:28:21.69,0:28:24.73,Default,,0000,0000,0000,,this?\NA: So I think it's valuable but in my Dialogue: 0,0:28:24.73,0:28:29.03,Default,,0000,0000,0000,,experience it's just not enough, right? So\Nthe Sheldons of this world, they're able Dialogue: 0,0:28:29.03,0:28:32.95,Default,,0000,0000,0000,,to figure out how to program by\Nthemselves, essentially, right? By just Dialogue: 0,0:28:32.95,0:28:36.71,Default,,0000,0000,0000,,saying, you know, this piece of code is\Ngood. That's teaching by example, right? Dialogue: 0,0:28:36.71,0:28:40.67,Default,,0000,0000,0000,,This piece of code is good and this piece\Nof code is bad or we can improve upon, it Dialogue: 0,0:28:40.67,0:28:45.78,Default,,0000,0000,0000,,it's just not a constructive way. It's\Nhelpful, right, to sharpen the sense of, Dialogue: 0,0:28:45.78,0:28:49.95,Default,,0000,0000,0000,,and you know, what helped, it sharpens\Nyour review facilities which is an Dialogue: 0,0:28:49.95,0:28:54.83,Default,,0000,0000,0000,,important part in learning anything. But\Nreally, I think, so in my experience it's Dialogue: 0,0:28:54.83,0:29:01.60,Default,,0000,0000,0000,,completely crucial to insist that in\Nyour teaching methodology, you teach them Dialogue: 0,0:29:01.60,0:29:04.18,Default,,0000,0000,0000,,steps that they can actually follow,\Nright? Dialogue: 0,0:29:04.18,0:29:08.86,Default,,0000,0000,0000,,Q: True, I agree on that, but in respect\Nof how many modern software development Dialogue: 0,0:29:08.86,0:29:13.97,Default,,0000,0000,0000,,teams work and in a code review you can\Ngo, this approach will have this and this Dialogue: 0,0:29:13.97,0:29:18.73,Default,,0000,0000,0000,,problem, have you thought about doing it\Nthis way, what have you considered, do you Dialogue: 0,0:29:18.73,0:29:23.74,Default,,0000,0000,0000,,have any thoughts on that process in\Nteaching people in that process, in that Dialogue: 0,0:29:23.74,0:29:26.66,Default,,0000,0000,0000,,duration?\NA: So for beginners my experience has been Dialogue: 0,0:29:26.66,0:29:29.36,Default,,0000,0000,0000,,that it doesn't work very well, right?\NQ: Okay. Dialogue: 0,0:29:29.36,0:29:33.66,Default,,0000,0000,0000,,A: That's a, so it's a common educational\Npoint, right, that you need to teach Dialogue: 0,0:29:33.66,0:29:37.71,Default,,0000,0000,0000,,people, you know there are very different,\Nmany different approaches and we're gonna, Dialogue: 0,0:29:37.71,0:29:41.56,Default,,0000,0000,0000,,we're going to judge them and we're going\Nto say "this one is okay and this one is Dialogue: 0,0:29:41.56,0:29:45.52,Default,,0000,0000,0000,,maybe a little better". My experience has\Nbeen with the vast majority of students, Dialogue: 0,0:29:45.52,0:29:50.25,Default,,0000,0000,0000,,right, is, if you use that as your main\Nteaching paradigm the problem is, they Dialogue: 0,0:29:50.25,0:29:55.45,Default,,0000,0000,0000,,produce zero solutions and so it's a much\Nbetter idea to really insist on that one Dialogue: 0,0:29:55.45,0:29:57.85,Default,,0000,0000,0000,,correct solution and you can branch out\Nlater. Dialogue: 0,0:29:57.85,0:29:59.85,Default,,0000,0000,0000,,Angel: Okay.\NSpeaker: Does that make sense? Dialogue: 0,0:29:59.85,0:30:01.85,Default,,0000,0000,0000,,Angel: Thanks.\NSpeaker: Sorry. Dialogue: 0,0:30:01.85,0:30:04.73,Default,,0000,0000,0000,,Angel: Mic 1. No, it's okay. Short, quick\Nquestions, please. Dialogue: 0,0:30:04.73,0:30:08.44,Default,,0000,0000,0000,,Q: Yeah, well, I hope it's a short\Nquestion. Thank you very much for the Dialogue: 0,0:30:08.44,0:30:12.89,Default,,0000,0000,0000,,talk. I'm gonna crush my brains on what\Nyou've told for the coming days. There's Dialogue: 0,0:30:12.89,0:30:15.62,Default,,0000,0000,0000,,one thing very popular among youngsters:\Nthis is Arduino. Dialogue: 0,0:30:15.62,0:30:18.76,Default,,0000,0000,0000,,A: {\i1}giggles{\i0} Yeah.\NQ: It's stick up with C and C++ and you Dialogue: 0,0:30:18.76,0:30:21.91,Default,,0000,0000,0000,,get very crappy C code.\NSpeaker: Yeah, yeah. Dialogue: 0,0:30:21.91,0:30:28.40,Default,,0000,0000,0000,,Q: So how would you put this, what you've\Ntold tonight into the environment of such Dialogue: 0,0:30:28.40,0:30:32.49,Default,,0000,0000,0000,,a popular platform like Arduino?\NA: So I think I would try to make the Dialogue: 0,0:30:32.49,0:30:36.46,Default,,0000,0000,0000,,teaching languages work on an Arduino. I\Nthink that's gonna be very hard with the Dialogue: 0,0:30:36.46,0:30:40.20,Default,,0000,0000,0000,,really really small ones but with this\Nsort of medium sized one, it's a might, Dialogue: 0,0:30:40.20,0:30:45.01,Default,,0000,0000,0000,,actually be, might actually be possible.\NBut yeah, as you point out Dialogue: 0,0:30:45.01,0:30:49.80,Default,,0000,0000,0000,,{\i1}inhales/giggles{\i0}, there's a bunch of\Ncrappy C code running on Arduino. I can Dialogue: 0,0:30:49.80,0:30:53.89,Default,,0000,0000,0000,,see the attractiveness of that approach,\Nbut it's not one that I personally prefer. Dialogue: 0,0:30:53.89,0:30:56.75,Default,,0000,0000,0000,,Q: Could Scratch fill the gap?\NA: No. Dialogue: 0,0:30:56.75,0:30:58.61,Default,,0000,0000,0000,,Angel: {\i1}laughs{\i0}\NQ: Thank you very much. Dialogue: 0,0:30:58.61,0:31:03.55,Default,,0000,0000,0000,,Angel: That was a quick answer. I'm sorry\Nwe're running out of time, thanks for your Dialogue: 0,0:31:03.55,0:31:07.99,Default,,0000,0000,0000,,questions and thanks again Mike for your\Nwonderful talk. The applause... Dialogue: 0,0:31:07.99,0:31:13.70,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,0:31:14.54,0:31:17.96,Default,,0000,0000,0000,,{\i1}postroll music{\i0} Dialogue: 0,0:31:17.96,0:31:36.00,Default,,0000,0000,0000,,subtitles created by c3subtitles.de\Nin the year 2019. Join, and help us!