Skip to content
Raincode Labs Logo
  • Home
  • Dragons
  • Services
  • Podcast
  • Mainframe
    • PACBASE
    • DATAKOM
    • DSL
  • Academics
  • Careers
  • Blog
Sitemaparmin2017-02-28T10:52:42+00:00
  • About
  • Academics
  • Careers
  • Cliff Click
  • Contact
  • Contest
  • DATAKOM
  • Dragons
  • DSL
  • Gérard Berry
  • Home
  • Julien Verlaguet
  • Leandro Melo
  • Manuel Serrano
  • PACBASE
  • Partners
  • Privacy Policy
  • Services
  • Sitemap
  • WeSpeakYourLanguage
  • XTRM TECH Contest
  •  Doug Lea
  • Category: Blog
    • Bankia Spain Migration: Raincode Labs Completes Successful Migration From PACBASE
    • Automatic migration of DFSORT workloads to SyncSort wins award at IEEE conference
    • Bankia Chooses Raincode Labs for PACBASE migration
    • Case Study: Bespoke, Platform-specific Compilers
    • How Early Bad Smell Detection Can Save Your Project
    • Demystifying DSLs Part II : A Working Definition
    • Demystifying DSLs Part I: Time is of the Essence
    • How Domain Specific Languages Change our Lives
    • The Brain Challenge: Arithmetic Puzzle
    • CoCoDo Recap – 4/4/17 – Conference Brussels
    • Raincode Labs’ Participation to LLVM Community Continues!
    • LLVM Wordplay
    • Raincode Labs Sponsors International Compiler Construction Conference
  • Category: DSL
  • Category: Events
  • Category: Languages
  • Julien Verlaguet
  • xtrmtech submit
  • test
  • Xtrm.tech
  • Download the White Paper CA Gen
  • LLVM Compiler Engineer
  • Compiler Engineer Junior
  • Compiler Engineer
  • blog
  • datakom
  • Packbase
  • Careers
  • homepage slider
  • sections

RAINCODE LABS HEADQUARTERS

Rue de la Caserne 45
1000 Brussels
Belgium

Phone: +32 2 522 06 63

RAINCODE LABS INDIA

#1144, Guru Nilayam, 3rd Floor
Sector 2, HSR Layout Bangalore
560 102 India

Phone: +91 99450 47258

NAVIGATION

  • DATAKOM
  • PACBASE
  • DSL
  • Academics
  • Partners

CONTACT US

    Copyright 2012 - 2021 Raincode Labs | All Rights Reserved
    LinkedInFacebookTwitter
    Julien Verlaguet
    Audio file

    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
    ne
    eded 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
    p
    eople, 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
    k
    ind 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
    excitin
    g. 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
    litt
    le 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.

    Submit your response!

      By clicking "Send", you accept the terms of the contest.
      I accept the terms.

      Xtrm.tech

        test

        Download the White Paper CA Gen

          Go to Top