We Speak Your Language S01 E01
Intro: Welcome to ‘We Speak Your Language’, the podcast for computer language geeks and nerds. This first episode is hosted by Jan Vitek and is brought to you by Raincode Labs. Enjoy.
Jan: Welcome to ‘We Speak Your Language’, a new podcast about programming languages and the people who create and work on them. My name is Jan Vitek and I’ll be your host today. Our guest today will be Julien Verlaguet. I have known Julien for over 7 years. We met when I was on sabbatical in Palo Alto. Julien was working with Facebook, and we had a shared interest in adding static types to ugly dynamic languages. In my case, I was interested in adding types to R, and Julian, while he was working at Facebook, so PHP was his poison of choice. Since then, the type PHP, which is called Hack, has been widely used internally in Facebook and open sourced for external consumption. Julien has now moved on to a new language project called Skip, I will ask him questions about both of these topics during this session.
Julien: I’m Julien Verlaguet. I’ve been working most of my career for Facebook for close to 10 years, I joined in 2009. At first my position was around static analysis and then it became clear that we needed more properties in PHP. That’s when the idea started to float around to create a dialect of PHP called Hack which was one of the main contributions and main projects I worked on at Facebook. After, I worked on Skip, which is another programming language for incremental computing, the idea to work on Skip came after working on Hack. So that’s me and that’s more or less the world I’ve evolved around in programming languages Hack and Skip.
Jan: I suppose a fair question would be to ask you how Hack came to be.
Julien: That’s a good question. There were a lot of different factors. Back then Facebook had an evolving PHP code base, and back in those days PHP was still very much the dominant language. Today Facebook has many services, there was a lot of acquisitions for example Instagram which is written in Python. Now the ecosystem has changed but back then it was still very much PHP centric and as the codebase was growing, we were running into problems to do simple analysis such as refactoring. I was in the security engineering team, and we had problems to track, for example, the places where you could have forgotten to escape something or where you did something wrong in terms of security. I was working on analysis tools back in those days and it became clear that we were running out of juice, the analysis we were writing was working, but on very small examples and at the scale of Facebook we were running out of options to make the codebase better. So, the original idea around Hack was not to do a mass migration as the one that ended up happening, but the idea was to create a subset of PHP that was going to be strongly and statically typed and the original intent was to have that subset be used by experts, for example the people who write the cryptographic library, the people who write things that are critical to the codebase, that was the original intent. However, after it was originally adopted, we realized that it wasn’t going to be possible to have subsets of the codebase that are so well isolated that you can actually type them, so there were too many things going in and out of that subset that as we were working with it was clear that we needed to have a better interop between the two. After that the language loosened up in the sense
Jan: What was your first thought when you saw a large program written in PHP? Julien: I know what you’re trying to do here, you’re trying to get me to bash PHP! It depends on the program, because there are very different kinds of PHP code and we figured this out once Hack was open sourced – we went out there trying to figure out where Hack could be used in existing projects, and it turned out that the kind of PHP that was written at Facebook at the time was very different from the kind that you see in most open–source projects out there. The typical open–source project, what I would call ‘PHP old school’ is where you have a bunch of statements that are global statements. You take these global statements, and you make a couple of SQL queries and then you spit out some HTML directly in the page. That style comes with a lot of problems, one of these problems is security, for example whether you escaped the URL correctly and similar issues. It turns out that even if you think you did, you probably didn’t, and so I wouldn’t say I’m a fan of that type of PHP, what I like is programs that work well and don’t have security problems. But then the other kind of PHP, the more modern version looks similar to an untyped Java, if you will. The object model is close to Java, it’s not exactly the same for obvious reasons, but if you take that kind of PHP and you a semi reasonable type system to it, you have an experience that is pretty good.
Jan: I’ve heard some people talk about these retroactively added type system as lipstick on pigs. I was wondering what your opinion is, can you make it better than that?
Julien: Well, I think they’re right, it is lipstick on a pig some sense. Firstly, your problem is either, you create a type system that is good, the kind of type system that you would design if you were designing the language from scratch. The problem with those systems is that you’re going to break compatibility with a ton of code, let me give you a concrete example. One of the main features of Hack, and one that you don’t find in that kind of type system typically is the option type. Very early on we wanted an option type and typically it’s the kind of type that you don’t find in those types of languages. Normally NULL is compatible with everything else and that’s it, except that in PHP, NULL is really evil, because it can turn into anything, instead of giving you a full stop with a null pointer exception, which is annoying but fixable, PHP will just silently convert it into whatever it wants, and you end up with writing zero in a database out of nowhere. Clearly, we wanted a type that captures the fact that something can be NULL as a result of that. Now the problem is that now you have a type system where you want an option type, that’s great, but what are the consequences? There are a ton of APIs that return NULL, and when they do, it’s kind of a mistake, it’s an error case, a concrete example of this is array access. When you access an array in PHP, first of all an array is a very strange thing – but we’re just going to assume it works like a C or a Java array, which it isn’t, but let’s just assume that for now. Typically, in a normal programming language, if you do an access that’s out of bounds, it’s going to throw, but not in PHP, in PHP will it give you back NULL. Now, you are designing the language and you have that horrible choice where either you the make type correct, then when you access something out of bound, you get an option type that you actually have to check for NULL and everybody is going to hate you, and nobody is going to use your language. Or you lie. You say no, the type is T, you’re accessing an array of T and it comes back as a T. And now you have something that’s usable, but now you have a type that’s a
Julien: Can it be computer science?
Julien: I can still work as a programmer, right? This is a tough one. I’ve always been fascinated with 3D graphics. But I really don’t know much about that. I spent a year and a half working on AI at the Facebook lab in New York, and that was fascinating. I really enjoy system programming, I could see myself work hacking on kernels or things like that. In fact the answer is pretty much all of programming except for the web. Just working on CSS and HTML I think I would go do something else, I would stop programming, so that’s how much I hate CSS.
Jan: So, our next question is what would you do if you weren’t involving involved in computing at all?
Julien: Probably maths. That was my second strong suit when I was in school, the two subjects that I was really good at was computer science and maths, but maths I was less talented, so if I if I look at the people who are really good at maths, I wasn’t I wasn’t coming close to them and I found it less enjoyable. So, thinking of how you’re going to prove something, I find it enjoyable, but thinking of how you’re going to program something, I find it more enjoyable because it runs and it’s kind of magic. You press that button, and it just does things and every time that happens, I’m like a child. But to answer your question, maths.
Jan: How old were you when you wrote code for the first time?
Julien: I believe I was seven years old. My parents bought me an Amstrad, I don’t know if you remember those? I was going on with the Amstrad CPC 464plus I believe was the name of the beast. Of course, because I was seven or eight years old, I wanted to play video games. But the problem with that Amstrad was that it was coming with games that you had, you had to buy tapes and put the tapes in etc., and my parents would not buy me those. So, I had this big book about basic and at the end of the book there were games, but the games were written down, so you actually had to write down the code off the video game to be able to play the game. What ended up happening is that I was copying this code without understanding what was going on. But obviously, it was never working because I was making mistakes as I was copying. So, then I was frustrated, and I needed that bloody thing to run, and as a result of that, I started debugging the code, and as a result of that, well I was kind of forced to understand what was going on and so that’s how I got involved in in programming.
Jan: What software project would you have loved to be part of?
Julien: Oh wow, well there are quite a few. Definitely the OCaml compiler, because they were my heroes when I was growing up. Leroy and OCaml at Inria, that was kind of the grail of what awesome people. But then there are quite a few others, I would have loved to be involved in Linux at the time where it came to be, but I was too young to be involved, but I think these are the two major ones, OCaml and Linux.
Jan: What do you consider to be the most important quality in for someone in our trade?
Julien: I have worked with a lot of people, and I think the one trait is obviously that you need some level of intelligence to be a good programmer. So this is this is true, but I would say that the level of intelligence you need is relatively low. You don’t have to be a genius to program well, and quite
frankly, if I look at my career, the people who’ve achieved the most were rarely, those who were the smartest, the thing that they had was grit. So they kept on going no matter what. But I would say the most important one is kindness because without kindness you’re never going to go anywhere. You’re not going to go very far, well, It’s not entirely true. I’m going to answer in two phases. I would say the most important thing in our trade to succeed is grit. The thing that I care the most about is kindness. Sure, if you have a lot of grit and you keep on going no matter what you know they throw at to you, you’re probably going to be successful, and that’s probably going to be true in a lot of things, not just computer science. But if you’re a jerk, you’re probably working at like 5% of what you could be doing because there are a ton of smart people who will not want to talk to you. I mean, think about it right, you wake up, you go somewhere, that’s called work. I mean not these days because of COVID, but at the end of the day, what I think most people want, including myself, is to be happy. And who wants to go every day to talk to a jerk? I don’t want to talk to you if you’re a jerk. I don’t have time for this and so at some point in life, I think when you’re young and stupid, such as I was at some point and I’m still stupid, just not so young anymore, you’re thinking ‘That guy is so good. I’m going to put up with how much of an a****** he is. Just because he’s so good.’ I’m going to learn so much from him right, but. I think it’s not a good proposition, eventually you’re going to be sad, you’re going to be tired, you’re going to want to surround yourself by kind people, including at work kind of people you want to have a beer with and you’re going to produce much more and you’re going to be much happier, so I would say kindness is at the top of my list.
Jan: If there was one language you wished never existed, you could erase from the planet, which would that be?
Jan: Lastly, what would you like to be remembered for? Julien: Oh god, I don’t think I want to be remembered. I really like to be anonymous, but I was happy at some point to have a little bit of exposure with Hack. I was going to conferences, and I was talking to people and what I really liked about it was that it was an opportunity to meet a lot of interesting people, especially people who were users of the language that I was building, that was always super exciting. I was happy to have some exposure because of that, but outside of that, if when you typed my name in Google nothing appeared, I would be happier.
I like to be in a cave, I like to be by myself with my friends playing with my toys. And I know it’s a little bit in contradiction, but I’m incredibly proud of Skip, and I mean that’s the thing I’m the proudest of in terms of design. That is really the thing that I’m proud of, but do I want to be remembered for it? No, not necessarily. I’m happy that it works. I’m very happy that I get to play, and I get to write awesome code with it now, the goal is not so much posterity.
Jan: Thank you Julien for answering our questions. This is the end of the broadcast of ‘We Speak Your Language’ and see you next time.
Julien: Thanks a lot for having me that was very fun. Outro: We hope you enjoyed this episode of ‘We Speak Your Language’ and stay tuned for the next episode for more nice talks about computer languages and programming. Have a great day.
Your Name (required)
Your University (required)
Your Email (required)
Your Phone number (required)
By clicking "Send", you accept the terms of the contest.
I accept the terms.
Your coding interest
First Name *
Last Name *