For our first episode we would like to introduce Julien Verlaguet. Having been employed at Facebook for almost a decade, Julien worked predominantly as the head open source developer on their type PHP Hack. Julien since continued at Facebook to develop the SKIP language and currently works self-employed as the head open source developer of SKIP.
For our first episode we would like to introduce Julien Verlaguet. Having been employed at Facebook for almost a decade, Julien worked predominantly as the head open source developer on their type PHP Hack. Julien since continued at Facebook to develop the SKIP language and currently works self-employed as the head open source developer of SKIP.
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
that the first version was meant to be sound, and then it became clear that it wasn’t going to fly,
there was just too much code that was not going to type check this way, and so the language
changed to become more like PHP but with a type system on top of it.
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
Jan: What would you do if you weren’t involved in languages and tools for programmers?
Julien: Can it be computer science?
Jan: Anything.
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?
Julien: Oh wow, that’s a that’s a good question. I really don’t know. I would say JavaScript. The three
mainstream languages that I detest the most are PHP, JavaScript and Python. But the two others you
kind of have a choice, you’re writing PHP because you want to write PHP. And now if you use Hack,
you’re actually better off and then you have plenty of other object-oriented languages out there that
you can choose from. Same issue with Python, you’re writing Python, you can probably write
whatever you’re writing right now in Python in Go or whatever better alternative there is out there,
OCaml for that matter. But JavaScript, you’re stuck with it, if you want to do anything meaningful in
the web, which is pervasive today, you’re stuck with it.
If I had a magic wand, then I could say OK, you’re not going to design this thing in two weeks, and
you’re going to have a community of people who know what they’re doing designing something for
the web and do it well, that’s probably what I would do, and I would add that it’s also because the
language community did not do their job. It’s true that back then they were, you know, spending all
their time talking about monads and how they were going to compile lazy languages efficiently,
which is useful and interesting. But the world needed language for the web, and nobody was
thinking about that people were thinking about monads etc. So, in a way, it’s also a failure from the
language community not to have provided at the time the language that people needed.
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’. Stay tuned for next month’s episode with Doug Lea to discuss his work on concurrency memory management and Java library design. Have a great day.