< Return to Video

Garden City Ruby 2014 - Panel

  • 0:27 - 0:35
    HEMANT KUMAR: So I would ask our panelists
    to come forward and chat.
  • 0:35 - 0:41
    So Chad is, Chad Fowler is the author of The
    Passionate Programmer
  • 0:41 - 0:45
    and he has been a-
  • 0:45 - 0:47
    CHAD FOWLER: Yes?
  • 0:47 - 0:52
    H.K.: He's been like, he's one of the oldest,
  • 0:52 - 0:56
    one of the oldest Ruby guys around. He's embarrassing
    me.
  • 0:56 - 1:02
    C.F.: I'm one of the oldest people here. Thank
    you Colby (00:01:00).
  • 1:02 - 1:09
    H.K.: And next, Yogi. Yogi is principal architect
    of Flipkart
  • 1:09 - 1:14
    and he has obviously worked in one of the
    largest
  • 1:14 - 1:21
    deployment serve and supply chain in Ruby,
    and yeah.
  • 1:21 - 1:27
    Next person I'm gonna ask is Baishampayan
    Ghose, uh, BG.
  • 1:27 - 1:31
    Is he outside? Can you, can anyone? So. You
    guys can sit.
  • 1:31 - 1:37
    C.F.: Yes, what?
  • 1:37 - 1:39
    H.K.: You guys can sit actually.
  • 1:39 - 1:42
    C.F.: He wants us to sit down. Sorry, I'll
    sit.
  • 1:42 - 1:47
    H.K.: So, yeah, our next panelist is Baishampayan
    Ghose.
  • 1:47 - 1:50
    He is a polyglot programmer
  • 1:50 - 1:55
    and he is CTO of Helpshift, a start-up running
    from California.
  • 1:55 - 2:02
    And last I would like to call on Venkat Subramaniyan.
  • 2:08 - 2:11
    He is CEO of Mahaswami Software.
  • 2:11 - 2:15
    He has been programming in Ruby for like ten
    years,
  • 2:15 - 2:22
    and for a real long time, so.
  • 2:22 - 2:29
    OK, so we'll start the panel discussion by
    asking the panelists like,
  • 2:31 - 2:37
    what is your current language of choice primarily,
    and why? Swami, Venkat.
  • 2:37 - 2:42
    Venkat Subramaniyan: OK, we use primarily
    Ruby.
  • 2:42 - 2:46
    We've been using Ruby for the past, I mean,
  • 2:46 - 2:49
    writing bigger-sized products since six, seven
    years.
  • 2:49 - 2:51
    But we use quite a bit of Java along with
    it.
  • 2:51 - 2:54
    H.K.: Why? Like, why do you use it? (00:02:51)
  • 2:54 - 2:58
    V.S.: Well, see there is some very, like,
  • 2:58 - 3:00
    well-established libraries, like reporting
    GINs,
  • 3:00 - 3:03
    and several stuff that you don't want to really,
    you know,
  • 3:03 - 3:04
    try to match from the Ruby side.
  • 3:04 - 3:06
    So we just bring the best of both worlds by
  • 3:06 - 3:08
    cutting forward all the good libraries.
  • 3:08 - 3:11
    Jewels we have used quite a bit. Jasper reports.
  • 3:11 - 3:14
    These are all stuff for which there isn't
    an equivalent exist,
  • 3:14 - 3:16
    and we just want to use the knowledge
  • 3:16 - 3:19
    and, you know, the well-established software
    there,
  • 3:19 - 3:25
    for their purpose. So that's one of the main
    reasons.
  • 3:25 - 3:29
    Baishampayan Ghose: So we use multiple languages,
    but,
  • 3:29 - 3:32
    Closure is our main programming language of
    choice.
  • 3:32 - 3:35
    We have been using it since I think late 2008.
  • 3:35 - 3:41
    We're one of the first companies to put Closure
    into production.
  • 3:41 - 3:43
    We use Closure because a variety of reasons,
    but,
  • 3:43 - 3:49
    I guess if I have to say name a few reasons,
    that would be,
  • 3:49 - 3:52
    Closure lets me focus on the problem,
  • 3:52 - 3:54
    and it pretty much gets out of the way.
  • 3:54 - 3:58
    And there is a lot of focus on awesome things
    like immutability,
  • 3:58 - 4:04
    data as a main construct for doing competition.
  • 4:04 - 4:07
    And of course it's a lisp so I get all the
    power,
  • 4:07 - 4:11
    and it's also something that runs in the JVM,
  • 4:11 - 4:16
    so I can also leverage the awesome Java ecosystem.
  • 4:16 - 4:17
    So yeah, but, at the same time,
  • 4:17 - 4:18
    we do use different languages for different
    needs.
  • 4:18 - 4:22
    We have used Erlang in the past, we use Go
    as well,
  • 4:22 - 4:28
    and of course there is JavaScript and a bunch
    of other languages.
  • 4:28 - 4:29
    H.K.: So do you think like, let's say,
  • 4:29 - 4:31
    Closure doesn't seem to be right language
    for
  • 4:31 - 4:34
    how to write utility to you know like
  • 4:34 - 4:38
    do something on my OS X, for example.
  • 4:38 - 4:40
    If I auto-install something or manage processes
    or anything.
  • 4:40 - 4:44
    Do you think like it's a right tool for that
    sort of thing?
  • 4:44 - 4:48
    B.G.: So, to build your, if you want to build
    a small utility,
  • 4:48 - 4:49
    you'd need a faster start-up time,
  • 4:49 - 4:51
    and that problem is inherent in JVM.
  • 4:51 - 4:55
    It has nothing to do with Closure, per se.
  • 4:55 - 4:57
    But Closure also has something called Closure
    Script,
  • 4:57 - 5:00
    which lets you write whatever code that you
    want to write in Closure,
  • 5:00 - 5:01
    but then the compiler compiles it down to
    JavaScript,
  • 5:01 - 5:08
    and basically you can create a node.js application
    out of Closure code.
  • 5:08 - 5:11
    You get all the flexibility and constructs
  • 5:11 - 5:14
    to build abstractions that Closure provides,
  • 5:14 - 5:18
    but you can target, you know, different run-times.
  • 5:18 - 5:22
    So you can run, you can build a shell utility
    as well.
  • 5:22 - 5:23
    C.F.: Do you actually do that?
  • 5:23 - 5:25
    Do you like write command line programs?
  • 5:25 - 5:29
    B.G.: We've done it a few times. We've done
    it a few times.
  • 5:29 - 5:30
    It's not something that we publicly do, but
    yeah,
  • 5:30 - 5:33
    Nailgun is another upload that you talked
    about in your talk, right.
  • 5:33 - 5:37
    And, so yeah, so that's what we do.
  • 5:37 - 5:38
    But there are other hacks, like tweaking
  • 5:38 - 5:39
    the boot class paths in JVM to make the start
    up times faster.
  • 5:39 - 5:44
    That's what something learning new is in Closure.
  • 5:44 - 5:49
    There are ways of getting it, but yeah, you
    are,
  • 5:49 - 5:53
    in a way, right that, by default, it's, Closure
    is probably not a,
  • 5:53 - 5:57
    not the right run time for building shell
    utilities.
  • 5:57 - 6:02
    H.K.: OK, so, before we move to Chad, like,
    you said like,
  • 6:02 - 6:03
    all the power of lisp actually,
  • 6:03 - 6:04
    so, can you elaborate on that?
  • 6:04 - 6:05
    What do you mean by all the power of Lisp?
  • 6:05 - 6:10
    B.G.: Sure. So, how many people use Emacs
    here?
  • 6:10 - 6:12
    Twenty percent maybe. You do?
  • 6:12 - 6:17
    C.F.: No, I don't personally.
  • 6:17 - 6:19
    Never.
  • 6:19 - 6:25
    B.G.: Never? But you talked about Emacs
  • 6:25 - 6:29
    as well as good software systems.
  • 6:29 - 6:32
    C.F.: Not to use, though, just as an example.
  • 6:32 - 6:37
    B.G.: Just to talk a lot. Anyway, so Emacs
    as a software
  • 6:37 - 6:38
    is thirty-five years old today,
  • 6:38 - 6:43
    and still is in production, so to speak,
  • 6:43 - 6:44
    you can still use it.
  • 6:44 - 6:47
    So, what can we learn from Emacs?
  • 6:47 - 6:51
    Well, the language is always available to
    use,
  • 6:51 - 6:54
    right, so if you compare it with, let's say,
  • 6:54 - 6:57
    Python or Java, there is a difference between
  • 6:57 - 7:00
    compile time and run time. When you are running,
  • 7:00 - 7:07
    the language is not available to you.
  • 7:07 - 7:10
    You cannot, you know, manipulate the code
    itself
  • 7:10 - 7:15
    while it is running, or generate new code,
    dynamically.
  • 7:15 - 7:22
    So that is one thing that lisp dialect exploits
    by design,
  • 7:23 - 7:26
    because they have something,
  • 7:26 - 7:27
    a property called homoiconicity,
  • 7:27 - 7:30
    which basically means that the code and data
  • 7:30 - 7:30
    are pretty much the same. Even though they
    may not be identical,
  • 7:30 - 7:30
    but, for all practical purposes they are the
    same.
  • 7:30 - 7:34
    That means when a Closure code is running,
  • 7:34 - 7:36
    it can manipulate itself while it's running,
  • 7:36 - 7:38
    and it can maybe generate new code, optimize
    something away.
  • 7:38 - 7:41
    So basically it lets you write code which
    writes more code,
  • 7:41 - 7:42
    so, and that is something which is always
    preferable.
  • 7:42 - 7:45
    It is better to write a code that writes more
    code
  • 7:45 - 7:52
    than to just write code. So, and there are
    many other features
  • 7:52 - 7:56
    that lisp has, for example, the language itself
    is so simple,
  • 7:56 - 8:01
    like there are just few primitives to understand
    and learn about.
  • 8:01 - 8:03
    Syntax is pretty much non-existent,
  • 8:03 - 8:04
    and very simple to understand and learn.
  • 8:04 - 8:09
    And that really reduces a lot of cognitive
    overload
  • 8:09 - 8:10
    that some languages might introduce.
  • 8:10 - 8:12
    So yeah, I mean, these are probably a few
    superficial advantages.
  • 8:12 - 8:18
    I can go deep into it, but maybe we can talk
    about it after.
  • 8:18 - 8:25
    H.K.: Yeah, so, Chad, like, what is your poison
    of choice?
  • 8:30 - 8:32
    C.F.: My poison of choice?
  • 8:32 - 8:35
    H.K.: Yeah.
  • 8:35 - 8:38
    C.F.: I guess, it's hard to answer that question.
  • 8:38 - 8:39
    I don't have an answer, right?
  • 8:39 - 8:44
    The one single answer I could give you is
    anything except for Ruby.
  • 8:44 - 8:44
    H.K.: OK.
  • 8:44 - 8:49
    C.F.: And I mean that very seriously.
  • 8:49 - 8:54
    I remember in 2007, I was at MountainWest
    Ruby Conference,
  • 8:54 - 8:57
    the first one, that Coby was talking about
    earlier,
  • 8:57 - 9:01
    and I did a keynote, my first- no, it wasn't
    my first keynote,
  • 9:01 - 9:02
    it was my first Ruby Conference keynote.
  • 9:02 - 9:06
    It was about, like, what do we do next, after
    Ruby?
  • 9:06 - 9:10
    And I was already deep in the like toil
  • 9:10 - 9:14
    and stress of being worried that I identified
  • 9:14 - 9:16
    too heavily with Ruby, in 2007.
  • 9:16 - 9:19
    So I wanted to like get out of the Ruby thing
  • 9:19 - 9:21
    and not be the Ruby guy,
  • 9:21 - 9:24
    and I'm still desperately trying to do that.
  • 9:24 - 9:27
    But, no, I mean, like, I said,
  • 9:27 - 9:29
    when I was speaking earlier,
  • 9:29 - 9:36
    I'm using Closure, Scala, Node, Java, Objective
    C, Ruby, Erlang, everything,
  • 9:36 - 9:40
    at work right now. I think probably what I'll
    learn next
  • 9:40 - 9:43
    really seriously is Objective C.
  • 9:43 - 9:47
    But I'm going to try to use it, even on the
    server,
  • 9:47 - 9:50
    as like a language to develop services in,
  • 9:50 - 9:52
    just as an experiment so I can learn it better
  • 9:52 - 9:55
    and do better job on the clients.
  • 9:55 - 9:58
    H.K.: So like not Ruby?
  • 9:58 - 10:01
    Is it because like you already had kind of
    a Ruby like,
  • 10:01 - 10:02
    you obviously work with Ruby as like with
    the,
  • 10:02 - 10:03
    along with Dave Thomas, and all of these guys,
  • 10:03 - 10:09
    you were one of the earlier adopters of Ruby,
    so like, are-
  • 10:09 - 10:12
    C.F.: Yeah, because I will never learn anything
    else about Ruby,
  • 10:12 - 10:14
    cause I know everything.
  • 10:14 - 10:18
    No, it's- I'm always suspicious of myself
  • 10:18 - 10:23
    when I identify too heavily with anything
    extrinsic to me.
  • 10:23 - 10:24
    Like for me to say I am a Ruby programmer-
  • 10:24 - 10:28
    if I say that, I feel bad, and I know that
    I've made a mistake.
  • 10:28 - 10:31
    I know that I'm creating some rigidity of
    value
  • 10:31 - 10:36
    that is ultimately counter productive to my
    success
  • 10:36 - 10:39
    and to the success of people around me.
  • 10:39 - 10:42
    So like I've been doing more Java in the past
    month
  • 10:42 - 10:47
    than Ruby, which I used to do full time in
    1999.
  • 10:47 - 10:50
    And it's been a really good freeing thing,
  • 10:50 - 10:53
    like I am not a Ruby programmer, I am a programmer,
  • 10:53 - 10:54
    and even that is kind of limiting,
  • 10:54 - 10:57
    because I'm more and less than that at the
    same time.
  • 10:57 - 11:00
    So it's not so much that I'm worried about
    Ruby itself,
  • 11:00 - 11:01
    it's that I'm worried about putting myself
  • 11:01 - 11:03
    into a bucket that I can't get out of,
  • 11:03 - 11:07
    even if it's a subconscious problem.
  • 11:07 - 11:14
    H.K.: OK, Yogi. Yeah, so what do you-
  • 11:14 - 11:14
    Yogi Kulkarni: Sure.
  • 11:14 - 11:17
    So, if you're asking about personal choice
    then,
  • 11:17 - 11:19
    sure, you know I like coding in Ruby.
  • 11:19 - 11:22
    I just love it because it's compact.
  • 11:22 - 11:26
    I feel the translation from my thoughts to
    code is shortest in Ruby,
  • 11:26 - 11:29
    so it just feels very natural.
  • 11:29 - 11:33
    But that said, I think I've moved the last
    seven years
  • 11:33 - 11:37
    from being a kind of a language geek, of sorts,
  • 11:37 - 11:40
    not really, but, I used to love program language
    theory
  • 11:40 - 11:42
    and getting into stuff like that,
  • 11:42 - 11:46
    but to actually not caring too much about
    it.
  • 11:46 - 11:48
    I think programming languages are good,
  • 11:48 - 11:51
    and they kind of get you excited,
  • 11:51 - 11:55
    but when it comes to actually solving hard
    problems,
  • 11:55 - 11:57
    it's the ecosystem that matters around that
    language.
  • 11:57 - 12:00
    Things like the tools, the profilers, the
    monitoring tools,
  • 12:00 - 12:04
    debuggers, you know that's the stuff which
    no language
  • 12:04 - 12:06
    is gonna save you when you're in production,
    right.
  • 12:06 - 12:07
    So you just need to have that,
  • 12:07 - 12:10
    the maturity of an ecosystem is really important
    there.
  • 12:10 - 12:13
    Which is why we keep going back to the JVM
    over and over,
  • 12:13 - 12:16
    and even the new languages are being built
    on the JVM as,
  • 12:16 - 12:19
    it's for exactly that reason.
  • 12:19 - 12:21
    But among the newer languages on the JVM,
  • 12:21 - 12:25
    I'm actually surprised that I've- so, I'm
    kind of
  • 12:25 - 12:26
    intrigued by Closure and Scala.
  • 12:26 - 12:29
    We actually looked at Scala very carefully
  • 12:29 - 12:32
    for the system I spoke about.
  • 12:32 - 12:36
    But I didn't think it gave the kind of jump.
  • 12:36 - 12:40
    I felt was kind of marginal,
  • 12:40 - 12:43
    the improvement over just doing good Java,
  • 12:43 - 12:45
    that Scala gave, that's arguable.
  • 12:45 - 12:47
    There's a lot of language features there,
  • 12:47 - 12:49
    possibly too many language features,
  • 12:49 - 12:52
    which is one of my concerns.
  • 12:52 - 12:53
    But Closure, we looked at that also,
  • 12:53 - 12:55
    but we didn't look, we didn't actually
  • 12:55 - 12:57
    take it that seriously, because of basically
  • 12:57 - 12:58
    the prefix notation being too alien.
  • 12:58 - 13:00
    We wanted something block structured
  • 13:00 - 13:04
    for people moving from Java to Ruby.
  • 13:04 - 13:06
    So I think, yeah,
  • 13:06 - 13:09
    those are the kind of things that are on my
    mind.
  • 13:09 - 13:13
    H.K.: OK. So, Ghose, do you- I'm gonna call
    you BG, OK?
  • 13:13 - 13:15
    Yeah, so, BG, do you ever like,
  • 13:15 - 13:19
    the programming languages do not matter all
    that much,
  • 13:19 - 13:23
    do you think the state of it are like if you
    improved like-
  • 13:23 - 13:28
    B.G.: I'm told Alan Pearl is here,
  • 13:28 - 13:32
    and he basically said that programming language
  • 13:32 - 13:36
    basically shapes the way you think about solving
    problems.
  • 13:36 - 13:37
    So even if you do not use Closure or Scala
  • 13:37 - 13:38
    or whatever fancy language that comes out,
  • 13:38 - 13:42
    you should try it out because ultimately
  • 13:42 - 13:45
    you're trying to solve a problem, right.
  • 13:45 - 13:47
    You have the problem at hand,
  • 13:47 - 13:50
    and you'd like to look at the problem from
    different perspectives.
  • 13:50 - 13:53
    See if you only have one way of looking at
    the problem,
  • 13:53 - 13:56
    then you know, by repeating the same approach
    a
  • 13:56 - 13:59
    thousand times is not going to help you.
  • 13:59 - 13:59
    You should look at different ways of
  • 13:59 - 14:00
    maybe approaching the problem,
  • 14:00 - 14:05
    and even understanding the problem itself.
  • 14:05 - 14:12
    Simple example, parallel processing can be
    done using threads.
  • 14:13 - 14:16
    You can use quarantines.
  • 14:16 - 14:17
    You can use CSB, you can use Actor.
  • 14:17 - 14:18
    What should I use, given any situation?
  • 14:18 - 14:19
    So even if that- if I don't even know about
    Actors or CSB,
  • 14:19 - 14:20
    I'll never be exposed to that line of thought,
  • 14:20 - 14:25
    so that code is basically to learn a language,
  • 14:25 - 14:28
    not to just switch wholesale to that language,
  • 14:28 - 14:34
    but to be able to appreciate new ways of looking
    at solving problems.
  • 14:34 - 14:37
    Y.K.: So I think that's a great point, and
    when I,
  • 14:37 - 14:40
    kind of, I missed mentioning this, see,
  • 14:40 - 14:42
    when I was a program language geek,
  • 14:42 - 14:46
    I think the one great important inspiration
    for me was SICP,
  • 14:46 - 14:49
    right, structural interpretation of computer
    programs.
  • 14:49 - 14:53
    And that's something which, again, goes back
    to what is,
  • 14:53 - 14:56
    what are the fundamental abstractions again,
  • 14:56 - 14:58
    you can reach out to solve problems of different
    natures, right.
  • 14:58 - 15:01
    And that was the crux of it, you can use data
    as abstraction,
  • 15:01 - 15:02
    procedures are abstraction,
  • 15:02 - 15:06
    stream processing and actually creating languages
    of your own.
  • 15:06 - 15:09
    So the point is that there are far more paradigms,
    right,
  • 15:09 - 15:11
    and I think getting a grasp of those paradigms
    is very critical,
  • 15:11 - 15:13
    but for that you don't necessarily need to
    go
  • 15:13 - 15:16
    every new languages around for you to see
    what
  • 15:16 - 15:19
    ideas are implemented well in which language,
  • 15:19 - 15:19
    what can you adopt.
  • 15:19 - 15:21
    Take for example, after reading SICP,
  • 15:21 - 15:24
    I think my Java programming became so much
    better,
  • 15:24 - 15:29
    I have said using more anonymous functions
    or classes,
  • 15:29 - 15:35
    yeah, that's ugly but, so yeah. So I totally
    agree with that.
  • 15:35 - 15:39
    H.K. So we, you talked about like,
  • 15:39 - 15:43
    how many of you heard of like something like,
  • 15:43 - 15:45
    or used a after patch in full or any sort
    of concurrent programming,
  • 15:45 - 15:47
    can we have a show of hands?
  • 15:47 - 15:50
    OK, so, anybody wants to explain like yeah?
  • 15:50 - 15:53
    B.G.: There is nothing to explain.
  • 15:53 - 15:57
    Just go and read on Wikipedia.
  • 15:57 - 15:59
    C.F.: Or DFM.
  • 15:59 - 16:03
    B.G.: Or DFM, yeah.
  • 16:03 - 16:06
    H.K.: So. Which language you think like does
  • 16:06 - 16:10
    the whole active pattern problem programming
    properly?
  • 16:10 - 16:13
    B.G.: So Actors are well implemented in Erlang,
  • 16:13 - 16:19
    and Echo, if you are using Scala, so take
    a look at it.
  • 16:19 - 16:21
    And again this is not a single bullet,
  • 16:21 - 16:22
    again go back to your own basics,
  • 16:22 - 16:23
    Fred Brooks told you guys many years back,
  • 16:23 - 16:24
    go back to your basics. (00:16:28 - ??)
  • 16:24 - 16:25
    So Actors will not solve all kinds of problems
  • 16:25 - 16:26
    for you but you should be aware that there
    is
  • 16:26 - 16:26
    another abstraction that I could probably
    leverage
  • 16:26 - 16:33
    to solve whatever problem that I have and
    can.
  • 16:38 - 16:43
    CSP is another thing that I briefly alluded
    to.
  • 16:43 - 16:47
    That's something that is embodied in Go.
  • 16:47 - 16:51
    So Yogi just said that you don't need to learn
    a programming language,
  • 16:51 - 16:55
    but look at systems where all these ideas
    are well-implemented,
  • 16:55 - 16:58
    but I would also argue that not all ideas
  • 16:58 - 17:02
    can be implemented as well in all languages.
  • 17:02 - 17:05
    So you cannot, for example, Java does not,
    I mean,
  • 17:05 - 17:08
    Java has something called Lambdas, but Java
    hasn't,
  • 17:08 - 17:09
    does not have any of those functions.
  • 17:09 - 17:11
    So if I really wanted to understand the value
  • 17:11 - 17:16
    and virtues of any of those functions,
  • 17:16 - 17:18
    I can't learn it through Java.
  • 17:18 - 17:20
    The closest I'll get to is dependent injection,
  • 17:20 - 17:23
    but that is yet another level of abstraction,
  • 17:23 - 17:29
    which basically removes me part of the way
    from the core goal, right.
  • 17:29 - 17:34
    So there are languages which are design to
    level certain principles.
  • 17:34 - 17:39
    Go for example is built on top of CSP,
  • 17:39 - 17:41
    and the channels are a first class thing,
  • 17:41 - 17:42
    Erlang, also has something similar.
  • 17:42 - 17:45
    So maybe learning those languages will expose
    you
  • 17:45 - 17:48
    to those ideas much better than something
    other language.
  • 17:48 - 17:49
    H.K.: Chad, you want to-
  • 17:49 - 17:50
    C.F.: Yeah, I think from a,
  • 17:50 - 17:53
    from the perspective of learning the paradigm,
  • 17:53 - 17:55
    I think Yogi is lucky that he is smart enough
  • 17:55 - 17:59
    to read a book and then get all these things.
  • 17:59 - 18:01
    My experience is not the same.
  • 18:01 - 18:02
    I'm honest about that.
  • 18:02 - 18:03
    I don't think you're not being sincere,
  • 18:03 - 18:07
    I think some people, including me,
  • 18:07 - 18:09
    have to actually use the thing,
  • 18:09 - 18:12
    not just the language but the paradigm.
  • 18:12 - 18:16
    So like I can read about Actors in five minutes.
  • 18:16 - 18:20
    I totally understand it from a theoretical
    perspective.
  • 18:20 - 18:21
    But it takes awhile,
  • 18:21 - 18:22
    and it takes actually trying
  • 18:22 - 18:27
    for me to really get where it makes sense,
    you know.
  • 18:27 - 18:28
    B.G.: To appreciate it.
  • 18:28 - 18:31
    and also to appreciate the edges of it.
  • 18:31 - 18:34
    So I actually think like,
  • 18:34 - 18:36
    I've been trying to get out of Ruby
  • 18:36 - 18:37
    as I've been saying.
  • 18:37 - 18:39
    I mean the truth is I have learned,
  • 18:39 - 18:41
    I don't know how many programming languages
  • 18:41 - 18:42
    since I started doing Ruby,
  • 18:42 - 18:44
    but I have never stuck to one.
  • 18:44 - 18:46
    I have, but you know,
  • 18:46 - 18:48
    I have rarely stuck to one long enough to
    where
  • 18:48 - 18:51
    I really, really thought like that,
  • 18:51 - 18:53
    and like the best case scenario for me
  • 18:53 - 18:59
    in picking up these other paradigms is to
    like
  • 18:59 - 19:04
    get so into Go programming that then I go
    back to Ruby,
  • 19:04 - 19:07
    and I go to do something, and I don't try
    to implement channels,
  • 19:07 - 19:11
    I just say, damn it, channels aren't here,
    I'm frustrated now.
  • 19:11 - 19:14
    And it, I see that this language isn't perfect
  • 19:14 - 19:15
    because no language is.
  • 19:15 - 19:17
    But you can't get to that point,
  • 19:17 - 19:19
    and that's like where the maturity comes from,
  • 19:19 - 19:22
    where you're not in love with any certain
    thing,
  • 19:22 - 19:24
    and you're, you see the entire landscape,
  • 19:24 - 19:26
    and this is a part of why I can't answer the
    question
  • 19:26 - 19:28
    of what my go-to language is right now.
  • 19:28 - 19:31
    Like I'm doing a lot of Scala because there
  • 19:31 - 19:35
    are certain things that I'm working on that
    work really well with Actors.
  • 19:35 - 19:39
    Like I can conceptualize them with Actors
    and that's what I'm gonna-
  • 19:39 - 19:42
    I'm gonna write it in Scala because we already
    have the JVM,
  • 19:42 - 19:45
    so therefore it's easy to do Scala versus
    Erlang.
  • 19:45 - 19:48
    H.K.: But still there's a problem here.
  • 19:48 - 19:50
    Like the way you approach programming language
  • 19:50 - 19:53
    for example like in Ruby world for example,
  • 19:53 - 19:57
    like Eric Hodel or [00"19"54] ??
  • 19:57 - 19:59
    these guys are maintaining tools that you
    have written actually,
  • 19:59 - 20:02
    for many years back, and those tools all have,
  • 20:02 - 20:05
    like for example Ruby gems didn't have proper
  • 20:05 - 20:09
    test suite for awhile actually, and like the
    building-
  • 20:09 - 20:12
    C.F.: That's because tests are a design smell.
  • 20:12 - 20:13
    That's why.
  • 20:13 - 20:18
    H.K.: My point is like building a tools like
    of a language,
  • 20:18 - 20:19
    around a language takes time actually.
  • 20:19 - 20:22
    Do you think like for example like Eric Hodel
  • 20:22 - 20:24
    and these guys are probably working with this
    thing
  • 20:24 - 20:26
    for like nine years or so,
  • 20:26 - 20:28
    and they're still doing it, right,
  • 20:28 - 20:30
    so how do you like, if, how do you fix that?
  • 20:30 - 20:34
    Like you need to stay long-term in a language
  • 20:34 - 20:37
    to really change it, right, or like am I wrong
    here?
  • 20:37 - 20:40
    C.F.: You mean you need to stay in it to change
    the language itself?
  • 20:40 - 20:42
    H.K.: To change the language or build like
  • 20:42 - 20:47
    the infrastructure or the libraries, gems
    to support it.
  • 20:47 - 20:48
    C.F.: Yeah, somebody does.
  • 20:48 - 20:51
    It doesn't have to be me, right.
  • 20:51 - 20:53
    B.G.: Again, so let me add something to what
    Chad said.
  • 20:53 - 20:57
    So Chad said that I don't want to remain a
    Ruby programmer.
  • 20:57 - 21:00
    I think what he means is the Ruby mindset,
    OK,
  • 21:00 - 21:04
    or any mindset thereof. It's not about writing,
  • 21:04 - 21:05
    just coding that language.
  • 21:05 - 21:06
    So you can still be a Ruby programmer for
    twenty years,
  • 21:06 - 21:10
    but that doesn't mean you keep the same mindset
  • 21:10 - 21:13
    all the time, right. There are things which
    are not even new,
  • 21:13 - 21:15
    but we are not discovering those things
  • 21:15 - 21:17
    because we are not looking beyond Ruby.
  • 21:17 - 21:19
    H.K.: Can anyone else, sorry -
  • 21:19 - 21:22
    can anyone else carry the mic
  • 21:22 - 21:26
    and give it to the audience actually because-
    there's no mic
  • 21:26 - 21:27
    B.G.: It's not just about Ruby, per se, right,
  • 21:27 - 21:28
    it's about any- it's applicable to any language,
  • 21:28 - 21:32
    like JavaScript, or Scala, or even Java for
    that matter.
  • 21:32 - 21:36
    V.S.: So this, this is kind of intrinsic to,
  • 21:36 - 21:40
    something intrinsic to all we actually select
  • 21:40 - 21:43
    a language or set of languages to develop
    these tastes,
  • 21:43 - 21:44
    depending on the nature of the problem,
  • 21:44 - 21:47
    I guess you pick what is called like a language
  • 21:47 - 21:50
    to which other languages can actually circle
    around
  • 21:50 - 21:53
    and support various smaller problems,
  • 21:53 - 21:55
    whereas this core language that you're picking
    is solving
  • 21:55 - 21:58
    like majority of the nature of the problem.
  • 21:58 - 22:00
    For example, web application,
  • 22:00 - 22:01
    but you got some parallelism stuff
  • 22:01 - 22:03
    that you need to do or you got some
  • 22:03 - 22:05
    functional programming stuff you need to do
    like Scala,
  • 22:05 - 22:07
    so you probably pick one language, well like,
  • 22:07 - 22:10
    Ruby, as to kind of like hold everything together,
  • 22:10 - 22:12
    but you do have these other languages in which
  • 22:12 - 22:12
    you actually solve problems differently.
  • 22:12 - 22:19
    So it's more of- but different problems in
    some contexts,
  • 22:19 - 22:20
    Scala may be the code language,
  • 22:20 - 22:22
    and you may want to wrap it around Ruby
  • 22:22 - 22:24
    a little bit or maybe other things a little
    bit as well,
  • 22:24 - 22:26
    so it's more of starting from the
  • 22:26 - 22:28
    architecture of the nature of the problem,
  • 22:28 - 22:31
    but being polyglots, you have this choice
    now,
  • 22:31 - 22:33
    not to implement and struggle with one language
  • 22:33 - 22:35
    like you just talked about example, but I
    wish
  • 22:35 - 22:37
    channels were there in one particular case.
  • 22:37 - 22:40
    But now you could pick, if you can become
    a polyglot
  • 22:40 - 22:42
    and learn these other languages to a good
    degree,
  • 22:42 - 22:45
    you could pick other languages to compliment
    it
  • 22:45 - 22:47
    and solve those specific problems. So this
    seems
  • 22:47 - 22:49
    to be an approach that's kind of intrinsically
  • 22:49 - 22:50
    developing right now.
  • 22:50 - 22:55
    QUERANT: I have a point very close to what
    you're saying.
  • 22:55 - 23:00
    Like based on, like especially what you said
    about languages, right.
  • 23:00 - 23:04
    Like a general message could be use the right
    tool
  • 23:04 - 23:07
    for the right thing kind of a thing,
  • 23:07 - 23:13
    but the problem could be that not everyone
    can pick up,
  • 23:13 - 23:15
    so when you go into a code based on,
  • 23:15 - 23:17
    let's say, five different languages are being
    used
  • 23:17 - 23:19
    for the right kind of problems,
  • 23:19 - 23:21
    so they are doing the right thing,
  • 23:21 - 23:22
    but for someone to go into that code base
  • 23:22 - 23:25
    and pick it up would become very hard right,
  • 23:25 - 23:27
    because not everybody's turned in that way.
  • 23:27 - 23:30
    So that's like, so polyglot comes with a very
    heavy cost
  • 23:30 - 23:32
    of being able to replace yourself.
  • 23:32 - 23:34
    At least that's been my experience,
  • 23:34 - 23:36
    so that's my first question,
  • 23:36 - 23:40
    and like adding onto that like it's very easy
  • 23:40 - 23:44
    like you said you know like to pick up a book,
  • 23:44 - 23:45
    read through it, go through some you know
  • 23:45 - 23:47
    tutorials or whatever it is but like Yogi
  • 23:47 - 23:49
    was saying how his team had a,
  • 23:49 - 23:51
    they needed about three to four months
  • 23:51 - 23:54
    to start writing idiomatic Ruby, right,
  • 23:54 - 23:55
    and that is a big deal,
  • 23:55 - 23:57
    because in those three to four months
  • 23:57 - 24:00
    it's critical that you keep churning out code,
    right.
  • 24:00 - 24:01
    You'll kill yourself or you can't
  • 24:01 - 24:04
    come to a halt because now you're getting
    this new language on board.
  • 24:04 - 24:08
    You guys had the luxury of having an existing
    system,
  • 24:08 - 24:10
    which was, and you were replacing that system,
  • 24:10 - 24:12
    but that's not necessarily always the case.
  • 24:12 - 24:17
    You have to write, so- yeah, so
  • 24:17 - 24:17
    H.K.: [indecipherable] (00:24:14)
  • 24:17 - 24:20
    QUERANT: Yeah, so like my second point was
    around, like,
  • 24:20 - 24:23
    that was the first question for polyglot recruiting
  • 24:23 - 24:24
    and things like that would become very hard,
  • 24:24 - 24:26
    how do you know that.
  • 24:26 - 24:29
    Second, it's easy to pick up a language on
    a theoretical sense,
  • 24:29 - 24:32
    but to be able to start writing idiomatic
    programs
  • 24:32 - 24:36
    while also developing production-quality code,
  • 24:36 - 24:39
    do you guys have any experience about how
    you got that working?
  • 24:39 - 24:43
    H.K.: That was the second question here that
  • 24:43 - 24:47
    I was about to ask actually, which was like,
  • 24:47 - 24:48
    at least one part of, but like,
  • 24:48 - 24:51
    how does an organization adopt a new you know
    like language?
  • 24:51 - 24:52
    For example in Flipkart, like,
  • 24:52 - 24:54
    or the company where all of us work,
  • 24:54 - 24:57
    like you know like there's a,
  • 24:57 - 24:58
    in January a programmer decides I'm going
    to build
  • 24:58 - 25:00
    this program in Erlang or I'm going to build
    this thing
  • 25:00 - 25:03
    in Go and there's nobody else Go,
  • 25:03 - 25:04
    nobody else doing Go,
  • 25:04 - 25:06
    so as like you guys,
  • 25:06 - 25:09
    a senior person in your respective companies,
  • 25:09 - 25:12
    so do you listen to that guy or -
  • 25:12 - 25:16
    our deployment system is attuned for like
    JVM deployment
  • 25:16 - 25:20
    or Ruby deployment and whole package management
    or whatever,
  • 25:20 - 25:21
    and don't write this.
  • 25:21 - 25:24
    So there is like an aspect of like adopting
    a new technology,
  • 25:24 - 25:28
    hiring, you know like the skill, the idea
    of entry,
  • 25:28 - 25:35
    like in code business which are like- so how
    do you tackle that problem in general?
  • 25:36 - 25:42
    Y.K.: So it's a hard problem, right. So at
    Flipkart,
  • 25:42 - 25:45
    we were already fairly polyglot,
  • 25:45 - 25:49
    for example we all, the website is in PHP,
  • 25:49 - 25:51
    the search engine is in Closure,
  • 25:51 - 25:53
    the UGC system is written in Scala,
  • 25:53 - 25:55
    Java is all over the place,
  • 25:55 - 25:56
    Ruby came into the supply chain,
  • 25:56 - 25:59
    node.js is there in the seller platform and
    more.
  • 25:59 - 26:00
    So we were already there,
  • 26:00 - 26:03
    but we actually ran into a few problems there.
  • 26:03 - 26:07
    So when, I think the question of technology
    selection
  • 26:07 - 26:09
    is actually quite critical.
  • 26:09 - 26:11
    Very often a lot of it is driven by,
  • 26:11 - 26:15
    is mostly blog-driven decision making,
  • 26:15 - 26:21
    and that is, that can be quite scary.
  • 26:21 - 26:23
    So we've started to put in some kind of process,
  • 26:23 - 26:25
    it's hard, it's not worked so far.
  • 26:25 - 26:26
    We've been trying for one year
  • 26:26 - 26:27
    and the process is like,
  • 26:27 - 26:29
    you know OK go up to somebody else in the
    team
  • 26:29 - 26:31
    and just ask them, just bounce off your thoughts
  • 26:31 - 26:34
    first before you kind of take up a new system,
  • 26:34 - 26:34
    a new technology.
  • 26:34 - 26:38
    So we tried to formalize that, we failed miserably
    at it.
  • 26:38 - 26:41
    But right now what we have set focus on is
    interfaces.
  • 26:41 - 26:46
    So we've become fairly diligent about
  • 26:46 - 26:49
    making sure that the interface and contracts
    are good,
  • 26:49 - 26:51
    building systems, and then the systems can
    call independently,
  • 26:51 - 26:52
    whatever tech stack they use,
  • 26:52 - 26:54
    as long as the team is committed to it,
  • 26:54 - 26:56
    that's not a completely way-out language.
  • 26:56 - 26:59
    So we moved from being predominantly
  • 26:59 - 27:03
    thrift-oriented interfaces to HTTP,
  • 27:03 - 27:03
    and that's added a huge amount of value.
  • 27:03 - 27:07
    QUERANT: Can you say what thrift is? (00:27:06
    - indecipherable)
  • 27:07 - 27:11
    Y.K.: Sure. So Thrift is a binding protocol
  • 27:11 - 27:12
    which came out of Facebook I think,
  • 27:12 - 27:15
    so it basically gives you both RPCM point
  • 27:15 - 27:17
    and a data utilization mechanism,
  • 27:17 - 27:22
    so it's basically like Corba,
  • 27:22 - 27:23
    but it's, so it basically gives you a fast,
    uh-
  • 27:23 - 27:25
    C.F.: These people are too young for that
    actually.
  • 27:25 - 27:28
    Y.K.: Oops. What is Corba? Yeah.
  • 27:28 - 27:31
    C.F.: Do not ask that question.
  • 27:31 - 27:34
    B.G.: That'll be a big panel discussion by
    itself, right.
  • 27:34 - 27:36
    C.F.: You have to be at least twenty-one to
    hear
  • 27:36 - 27:39
    about Corba and not everyone in this room
    is twenty-one.
  • 27:39 - 27:44
    Y.K.: Protocol buffers. It's more like that,
    OK anyway. So-
  • 27:44 - 27:47
    C.F.: I think connection is open too, right-
  • 27:47 - 27:47
    Y.K.: Sorry?
  • 27:47 - 27:49
    C.F.: You can keep a long-running PCP connection
    with that.
  • 27:49 - 27:54
    Y.K.: With Thrift you can do it, yes I think
    so. Yes.
  • 27:54 - 27:57
    C.F.: You can keep a long-running PCP connection
    open too,
  • 27:57 - 28:00
    which makes performance better than HTTP in
    some cases.
  • 28:00 - 28:04
    Y.K.: Right, but if you already moved to HTTP
    1.1%
  • 28:04 - 28:05
    connections that's kind of taken care of.
  • 28:05 - 28:08
    So yeah most modern libraries have that. So-
  • 28:08 - 28:10
    H.K.: We are digressing I think-
  • 28:10 - 28:12
    Y.K.: Yeah, where were we?
  • 28:12 - 28:13
    C.F.: Let's keep digressing, let's go.
  • 28:13 - 28:17
    Y.K.: We were talking about the language and
    like the context-
  • 28:17 - 28:19
    Y.K.: Right, so we become pretty delusioned
    about contacts,
  • 28:19 - 28:24
    so HTTP and the, and actually having sensible
    rest end points
  • 28:24 - 28:26
    and resources has become kind of defacto,
  • 28:26 - 28:28
    and that's actually helped a lot.
  • 28:28 - 28:30
    So systems within Flipkart are extremely open,
  • 28:30 - 28:33
    you can actually query them pretty easily
    to extract data,
  • 28:33 - 28:37
    not push data to it, but yeah, so I think
    that works.
  • 28:37 - 28:41
    And then each team can independently take
    decisions
  • 28:41 - 28:42
    with some guidelines at hand,
  • 28:42 - 28:45
    so we kind of brought people towards
  • 28:45 - 28:48
    a few languages and technology stacks that
    have worked,
  • 28:48 - 28:50
    but not insist on it, so if somebody goes
    out and says you know,
  • 28:50 - 28:52
    Elixir is also meant for these reasons,
  • 28:52 - 28:54
    we'll at least ask them that OK,
  • 28:54 - 28:57
    does it check a box on tooling,
  • 28:57 - 28:59
    on some mode of profiling or monitoring,
  • 28:59 - 29:01
    and basically a small check list of sorts.
  • 29:01 - 29:03
    We have not implemented this yet.
  • 29:03 - 29:04
    It's probably going to-
  • 29:04 - 29:07
    shit's going to hit the fan when we kind of
    suggest it,
  • 29:07 - 29:09
    but yeah that's the idea.
  • 29:09 - 29:13
    C.F.: Our solution is a little more messy,
  • 29:13 - 29:18
    I guess, as you would probably expect from
    me.
  • 29:18 - 29:21
    But like you said, not too way-out language,
  • 29:21 - 29:24
    I like the way-out languages, and I would
    like everyone
  • 29:24 - 29:28
    to be able to do any weird language they want,
  • 29:28 - 29:31
    cause I hate that being a thing that people
    talk about
  • 29:31 - 29:33
    and are frustrated about at work.
  • 29:33 - 29:35
    Such a stupid thing to worry about.
  • 29:35 - 29:38
    So as I talked about in my talk this morning,
  • 29:38 - 29:41
    I will tell developers, any language you want,
    fine,
  • 29:41 - 29:44
    go ahead, but you have to write very little
    code,
  • 29:44 - 29:46
    it has to be a very small well-defined thing.
  • 29:46 - 29:49
    We are also working very hard on the interface
    definitions,
  • 29:49 - 29:52
    and that's why I was talking about that JSON
    Schema validation stuff,
  • 29:52 - 29:56
    to add one more layer of monitoring to it.
  • 29:56 - 30:02
    But most importantly, I want to hire people
    that I trust,
  • 30:02 - 30:05
    and I want to show them that I trust them.
  • 30:05 - 30:07
    So if someone really, really wants to do something
    in Elixir,
  • 30:07 - 30:11
    and I have one guy who really, really wants
    to do something in Elixir,
  • 30:11 - 30:14
    he actually proposed it for one project and
    I said fine,
  • 30:14 - 30:16
    whatever. Then we realized we needed to do
    a lot of stuff
  • 30:16 - 30:20
    that talked to Amazon SQS, and there was no
    good Erlang library
  • 30:20 - 30:22
    or Elixir library we could find,
  • 30:22 - 30:25
    so we did it in Scala instead, because it
    was easier.
  • 30:25 - 30:28
    But he made the choice, not me, and so,
  • 30:28 - 30:32
    like, we have one thing in Lua even, in engine
    X.
  • 30:32 - 30:38
    I would love to have like Assembly and Objective
    C on the server,
  • 30:38 - 30:40
    you know any, maybe, I don't know, Visual
    Basic,
  • 30:40 - 30:43
    does that still exist? We could do that too.
  • 30:43 - 30:44
    Off-screen: It totally does.
  • 30:44 - 30:45
    C.F.: Yeah, it does. All right, awesome.
  • 30:45 - 30:46
    Server-side Visual Basic.
  • 30:46 - 30:52
    B.G.: So I guess it's more of a cultural problem,
  • 30:52 - 30:55
    it's not really a technical problem.
  • 30:55 - 30:58
    And I think it can be solved by setting the
    right expectations
  • 30:58 - 31:04
    and what Chad said, totally agree. Trust your
    team members.
  • 31:04 - 31:08
    Give them the opportunity to try out new tools,
    and you know, prove them.
  • 31:08 - 31:12
    So what we do is that, when a new programming
    language
  • 31:12 - 31:14
    comes out, any way as such we are using a
    cool
  • 31:14 - 31:19
    and really hip programming. But if something
    cooler comes out,
  • 31:19 - 31:23
    like, I don't know, something might come out
    tomorrow.
  • 31:23 - 31:29
    But we always have encouraged people to try
    out new languages
  • 31:29 - 31:33
    and maybe build a internal project and show
    it to us
  • 31:33 - 31:37
    and we take a collective decision in such
    cases.
  • 31:37 - 31:39
    But, yeah. So I think it seems more like a
    cultural situation,
  • 31:39 - 31:41
    and as far as hiring is concerned, I think
    it's better off,
  • 31:41 - 31:45
    better if you hire programmers, instead of
    Ruby programmers
  • 31:45 - 31:48
    or Java programmers, or PHP programmers.
  • 31:48 - 31:51
    Get people who can write code and who can
    learn new things,
  • 31:51 - 31:55
    because even in the Ruby world, you are doing
    new things every day.
  • 31:55 - 32:01
    If you cannot learn new tools or techniques
    then you are stuck.
  • 32:01 - 32:02
    QUERANT: (indecipherable - 00:31:57)
  • 32:02 - 32:04
    B.G.: A code base, you are talking about a
    code base.
  • 32:04 - 32:04
    QUERANT: (indecipherable - 00:32:04)
  • 32:04 - 32:07
    B.G.: So idioms are formed over time, right,
  • 32:07 - 32:10
    and they are also learned over time.
  • 32:10 - 32:12
    So if you are working on a sufficiently complicated
    code base,
  • 32:12 - 32:15
    any way will take you some time to grok it,
  • 32:15 - 32:16
    if there's and existing code base.
  • 32:16 - 32:18
    Now if you were trying to learn something
  • 32:18 - 32:20
    and to build something fresh.
  • 32:20 - 32:22
    It will take you some time, there will be
    some iterative-
  • 32:22 - 32:25
    some iterations, right. That, I think is perfectly
    normal.
  • 32:25 - 32:28
    C.F.: Yeah, I actually meant to answer the
    idiomatic thing.
  • 32:28 - 32:31
    If it works and everyone can understand it,
  • 32:31 - 32:32
    I don't really care.
  • 32:32 - 32:34
    Like let it look like Java code written
  • 32:34 - 32:37
    with Ruby syntax. Doesn't matter if it performs
  • 32:37 - 32:39
    and the person enjoyed doing it and it,
  • 32:39 - 32:42
    you know, didn't take them forever,
  • 32:42 - 32:44
    and it's not completely confusing.
  • 32:44 - 32:47
    But, and my answer to that is keep it really
    small.
  • 32:47 - 32:51
    If it does, it doesn't matter if it's idiomatic
    at all.
  • 32:51 - 32:51
    H.K.: But there's like-
  • 32:51 - 32:55
    B.G.: Another thing, just one thing that I'll
    add is that,
  • 32:55 - 32:56
    how do you really define idiomatic code, OK?
  • 32:56 - 33:00
    A code in which you are able to leverage the
    features
  • 33:00 - 33:04
    of a programming language the best is idiomatic
    code, right.
  • 33:04 - 33:05
    So if you're championing a programming language
  • 33:05 - 33:09
    you are trying to introduce the new programming
    language to your company,
  • 33:09 - 33:12
    and of course you'd like to exploit all its
    features, right.
  • 33:12 - 33:16
    Unless it is handed down to you by your boss,
    right.
  • 33:16 - 33:19
    So if someone is championing a new programming
    language,
  • 33:19 - 33:24
    it's his prerogative to you know to learn
    what the idioms are,
  • 33:24 - 33:25
    maybe figure them out over time.
  • 33:25 - 33:28
    H.K. This not working?
  • 33:28 - 33:35
    B.G.: Yeah that doesn't seem to work.
  • 33:36 - 33:38
    V.S.: So it's gonna be a slow process, you
    know,
  • 33:38 - 33:41
    obviously we just talked about lots of languages,
  • 33:41 - 33:43
    and the key thing is are we doing in house,
  • 33:43 - 33:45
    we have control of the deployment environment,
  • 33:45 - 33:46
    versus, we are gonna consult.
  • 33:46 - 33:49
    So for example, Flipkart, or, in several cases,
  • 33:49 - 33:52
    that there's a lot, you're in control of the
    whole thing,
  • 33:52 - 33:54
    that, and you basically decide, or,
  • 33:54 - 33:56
    you live with the consequences of the whole
    thing, right.
  • 33:56 - 33:59
    Then when you're dealing with the customer-based
    solution,
  • 33:59 - 34:01
    obviously there's a lot more constraints as
    to,
  • 34:01 - 34:03
    you know, he would look for somethings that
    he can
  • 34:03 - 34:05
    add more people to work with as opposed to
    just you,
  • 34:05 - 34:06
    and what if you can go away,
  • 34:06 - 34:08
    and in-house holds the same problem.
  • 34:08 - 34:11
    So probably to start with just learn one more
    language.
  • 34:11 - 34:13
    Just learn one more language and start using
    it,
  • 34:13 - 34:14
    and it's gonna take some time, like you said,
  • 34:14 - 34:16
    it's just cultural thing, you know.
  • 34:16 - 34:18
    Particularly in India the context is not just,
  • 34:18 - 34:22
    you know, just start with one more language,
  • 34:22 - 34:23
    try to use it in deployment,
  • 34:23 - 34:26
    so it doesn't look like you're grabbing this
    opportunity
  • 34:26 - 34:29
    to as many language as possible into solution
    you build,
  • 34:29 - 34:31
    just for the sake of learning new things.
  • 34:31 - 34:34
    But just do one more language, carefully.
  • 34:34 - 34:35
    But in order for you to do that
  • 34:35 - 34:38
    you probably will have to casually learn five-six
    languages.
  • 34:38 - 34:39
    And you may want to pick that language
  • 34:39 - 34:41
    that you want and it's gonna be a slow process.
  • 34:41 - 34:41
    You're not gonna be able to finally deliver
    all this,
  • 34:41 - 34:47
    and then you know, introduce a new language
    just like that next day.
  • 34:47 - 34:49
    C.F.: Yeah, when I started learning Ruby,
  • 34:49 - 34:52
    I started using it in 2000 network,
  • 34:52 - 34:54
    and it was to generate Java code,
  • 34:54 - 34:55
    because no one would let me deploy Ruby.
  • 34:55 - 34:57
    So I just wrote Java generators
  • 34:57 - 34:59
    and I wrote everything like as a DSL in Ruby.
  • 34:59 - 35:01
    V.S.: Yeah absolutely.
  • 35:01 - 35:03
    My first experience with Ruby was not really
    mainstream.
  • 35:03 - 35:05
    We were just doing, it was called load disk
    conductors.
  • 35:05 - 35:07
    It was an OpenSource thing that we were just
    doing.
  • 35:07 - 35:09
    So what we wanted is we wanted to drive these
    command lines,
  • 35:09 - 35:11
    and Ruby was a language to do that.
  • 35:11 - 35:13
    So there are other opportunities for you to
    use
  • 35:13 - 35:15
    new languages may not be in your main code
    base,
  • 35:15 - 35:17
    all the supporting tool systems as well.
  • 35:17 - 35:18
    So there's a lot of opportunities,
  • 35:18 - 35:20
    so you may not look at it as,
  • 35:20 - 35:25
    can I change my main language, or how soon
    can I do it?
  • 35:25 - 35:26
    K.H.: So-
  • 35:26 - 35:28
    Y.K.: So, one of the, I don't know,
  • 35:28 - 35:31
    this is a thought, this has been kind of crossing
    my mind repeatedly,
  • 35:31 - 35:33
    and kind of worrying me, also.
  • 35:33 - 35:38
    So I used to be kind of involved in the language
    choice wars a lot,
  • 35:38 - 35:45
    and always on the now try out something new
    side.
  • 35:45 - 35:46
    And I've kind of discovered a completely
  • 35:46 - 35:48
    different way of working at Flipkart,
  • 35:48 - 35:50
    and some of the other people who've been there.
  • 35:50 - 35:53
    They kind of shook me out of,
  • 35:53 - 35:56
    maybe my Thoughtworks influenced it in a certain
    way.
  • 35:56 - 36:00
    So, and there's a very key point when that
    happened.
  • 36:00 - 36:03
    So I think the difference was this, right.
  • 36:03 - 36:05
    The take-away was that,
  • 36:05 - 36:07
    if I'm arguing about a programming language,
  • 36:07 - 36:12
    I probably don't understand the problem domain
    well enough, right.
  • 36:12 - 36:16
    And I've seen cases where systems have been
    built
  • 36:16 - 36:19
    which go fundamentally towards the problem
    being solved as really about,
  • 36:19 - 36:20
    and modeled the code abstraction so beautifully,
  • 36:20 - 36:24
    that then, or it identified the co-op section
    so beautifully
  • 36:24 - 36:29
    that it doesn't matter which language you
    implement it in,
  • 36:29 - 36:30
    because that problem is solved.
  • 36:30 - 36:33
    And even before we started implementation
    that is beautiful.
  • 36:33 - 36:34
    I think with this giant perspective,
  • 36:34 - 36:36
    I think somewhere that has got lost.
  • 36:36 - 36:39
    We try to kind of get into implementation
    much sooner.
  • 36:39 - 36:42
    So if I could actually go back and say what's
    the most,
  • 36:42 - 36:43
    my favorite programming language,
  • 36:43 - 36:45
    I think I would say domain-driven design actually.
  • 36:45 - 36:48
    I would actually just recommend people to...
  • 36:48 - 36:50
    oh and actually do that on my team also, too,
  • 36:50 - 36:54
    actually read that book and try and apply
    it.
  • 36:54 - 36:57
    Because I think a huge set of wins are possible
    from that,
  • 36:57 - 37:00
    without even going down to the programming
    language level.
  • 37:00 - 37:04
    C.F.: Yeah, the programming language is a
    tactical choice,
  • 37:04 - 37:07
    in most cases, right, but the domain,
  • 37:07 - 37:09
    it's like what you were saying about performance
    earlier.
  • 37:09 - 37:13
    You could use Java or you could use JRuby,
    doesn't really matter,
  • 37:13 - 37:15
    because the database is gonna be slow, right.
  • 37:15 - 37:18
    When it comes to application design and architecture,
  • 37:18 - 37:22
    it's really a hierarchy, so domain-driven
    design is
  • 37:22 - 37:24
    at a level higher than the languages.
  • 37:24 - 37:27
    I would still say that the languages make
    you think differently,
  • 37:27 - 37:31
    and some languages suit different domains
    better,
  • 37:31 - 37:33
    and having really open-mindedly going,
  • 37:33 - 37:37
    gone back to Java recently for various reasons,
  • 37:37 - 37:41
    I can tell you that it's terrible to use,
    it really is.
  • 37:41 - 37:43
    It wastes my time compared to Ruby
  • 37:43 - 37:46
    and compared to Scala and compared to more
    modern languages.
  • 37:46 - 37:47
    And it's not a knock against Java -
  • 37:47 - 37:50
    Java's older and doesn't have those benefits.
  • 37:50 - 37:53
    So I think tactically, it's a bit of an exaggeration
  • 37:53 - 37:55
    to say that the language doesn't matter, but
    I get your point.
  • 37:55 - 37:58
    Y.K.: Sure. So just as a counterpoint to that.
  • 37:58 - 38:00
    Actually having gone from Ruby back to Java,
  • 38:00 - 38:03
    there's a few very low-latency systems that
    we had to
  • 38:03 - 38:08
    build out recently and those are built with
    some of the newer Java stacks,
  • 38:08 - 38:13
    like say dropwizard which has got Hibernate
    integrated into it,
  • 38:13 - 38:17
    and Netti and, so it's basically a complete
    stack
  • 38:17 - 38:18
    and actual systems and the designs that came
    out of it
  • 38:18 - 38:19
    were actually pretty good,
  • 38:19 - 38:22
    and I was surprised and actually happy
  • 38:22 - 38:23
    to go back and look at Java.
  • 38:23 - 38:27
    And I actually enjoy looking forward to Java
    ahead.
  • 38:27 - 38:30
    More than Scala in a sense.
  • 38:30 - 38:32
    H.K.: That's good, because-
  • 38:32 - 38:37
    So the Java aid that you mentioned and then
    Scala.
  • 38:37 - 38:38
    So there's a couple of things
  • 38:38 - 38:44
    like if you talked about this Java like and
    Scala like,
  • 38:44 - 38:45
    why would you choose like, for example, today,
  • 38:45 - 38:47
    like Java it is not released.
  • 38:47 - 38:52
    But what would issues like, is there any reason
    to choose
  • 38:52 - 38:55
    like Scala over Java now actually?
  • 38:55 - 38:58
    Because now for example, (00:38:57 - ??)
  • 38:58 - 39:00
    is a good system, but it is usable from both
    the languages,
  • 39:00 - 39:04
    right, so is there any reason to pick- Chad?
  • 39:04 - 39:10
    C.F.: Yes. So the question is,
  • 39:10 - 39:12
    is there any reason to pick Java over Scala,
  • 39:12 - 39:14
    or Scala over Java. Does one win?
  • 39:14 - 39:19
    H.K.: No, no, no, no. Just Java, like Scala
    over Java, like-
  • 39:19 - 39:22
    C.F.: Is Scal- or, should you actually,
  • 39:22 - 39:24
    because of Java aid, does Scala need-
  • 39:24 - 39:25
    H.K.: Or Java seven, yeah.
  • 39:25 - 39:29
    C.F.: Java seven, then yes. Like.
  • 39:29 - 39:35
    For me I see Scala as like totally over-engineered,
  • 39:35 - 39:39
    in the same way that Yogi almost said, but
    like,
  • 39:39 - 39:43
    too many features. But, and I'm even writing
    a book about it,
  • 39:43 - 39:46
    but I kind of hate it.
  • 39:46 - 39:49
    That said, you can program Scala like Java
  • 39:49 - 39:52
    with less annoying syntax. You can do that,
  • 39:52 - 39:54
    you can make it be like a Java program,
  • 39:54 - 39:57
    and if you do, I would argue very strongly,
  • 39:57 - 39:58
    and maybe, and this is subjective
  • 39:58 - 40:01
    and maybe even kind of fashion-oriented,
  • 40:01 - 40:03
    I would argue that the Scala code is better
    to look at
  • 40:03 - 40:06
    and easier to write than the Java code.
  • 40:06 - 40:09
    There's less typing, and I mean that in two
    sense.
  • 40:09 - 40:10
    Less typing on the keyboard
  • 40:10 - 40:15
    and less having to explicitly type because
    of type inference.
  • 40:15 - 40:19
    I'm sure, and like with Java seven there are
    Lambdas,
  • 40:19 - 40:21
    with Java 8 I'm sure it's gonna be some sort
    of
  • 40:21 - 40:24
    anemic thing that doesn't quite work the way
    we want it to.
  • 40:24 - 40:25
    It's perfect in Scala.
  • 40:25 - 40:27
    There's a lot of great stuff about Scala,
  • 40:27 - 40:32
    as a next evolution of Java.
  • 40:32 - 40:34
    But, you can also, like Ruby,
  • 40:34 - 40:38
    with meta-programming and eval and all the
    crazy stuff you can do,
  • 40:38 - 40:45
    you can completely shoot yourself in the foot
    with it, too.
  • 40:47 - 40:54
    QUERANT: So, when we compare these languages,
  • 40:55 - 40:57
    like Java and Ruby and all that,
  • 40:57 - 41:00
    the thing that we kind of focus on is the
    amount of,
  • 41:00 - 41:05
    volume of code. Volume of code doesn't lead
    to the ease of understanding.
  • 41:05 - 41:08
    One of the thing that Java really does well
  • 41:08 - 41:12
    is things are so simple that there's no,
  • 41:12 - 41:14
    there's implicit stuff happening behind
  • 41:14 - 41:17
    the scenes and all that. And very, very well-factored
    Java code
  • 41:17 - 41:19
    is not so ugly to look at.
  • 41:19 - 41:21
    We have written all small methods
  • 41:21 - 41:23
    and composed stuff out of it.
  • 41:23 - 41:25
    It's not so ugly to write or ugly to look
    at it. So-
  • 41:25 - 41:27
    C.F.: I would like to answer that
  • 41:27 - 41:29
    even if you're not asking me,
  • 41:29 - 41:31
    cause I could imagine myself saying that
  • 41:31 - 41:33
    if I were in the audience.
  • 41:33 - 41:36
    But right now I strongly disagree with you.
  • 41:36 - 41:42
    I think Java is simple as a language, yes,
  • 41:42 - 41:47
    but what it leads to is, because of its lack
    of flexibility,
  • 41:47 - 41:49
    it's not the volume of code that I hate -
  • 41:49 - 41:51
    I mean sometimes it is, sometimes it's literally
    because
  • 41:51 - 41:54
    I have to type date date equals new date.
  • 41:54 - 41:56
    I don't need that.
  • 41:56 - 41:59
    But it's also the ability to be expressive,
  • 41:59 - 42:02
    and to me that's where Java strongly lacks.
  • 42:02 - 42:06
    It's pretty good as a system language, like,
  • 42:06 - 42:08
    at the point where you decide you need to
    make that distinction,
  • 42:08 - 42:11
    but maybe as things get faster you don't need
    to anymore.
  • 42:11 - 42:15
    But I believe that the abstractions that people
    end up creating for Java,
  • 42:15 - 42:19
    at least idiomatic Java, like in the Java
    world,
  • 42:19 - 42:22
    idiomatic is a bad sign, I would say,
  • 42:22 - 42:24
    because it leads to this kind of pattern soup
    thing.
  • 42:24 - 42:27
    And it's true that you can reason about it,
  • 42:27 - 42:29
    because it's statically typed, and there are
  • 42:29 - 42:31
    less opportunities for meta-programming,
  • 42:31 - 42:34
    but it's a slow process in my experience of
    reasoning about it,
  • 42:34 - 42:37
    because you get so far away from the domain,
  • 42:37 - 42:40
    creating all these factories and interfaces
    and crap,
  • 42:40 - 42:43
    just so that you can make it testable and
    plugable,
  • 42:43 - 42:48
    that it, the actual logic and the core of
    the business gets lost.
  • 42:48 - 42:52
    Do you have a- anyone have a point to make
    on that?
  • 42:52 - 42:56
    B.G.: So yeah, I totally agree with Chad here.
  • 42:56 - 42:58
    Java the language is designed to be very simple,
  • 42:58 - 43:00
    but at the same time it's also very rigid.
  • 43:00 - 43:04
    So imagine explaining philosophy to a kid,
    right.
  • 43:04 - 43:07
    The kid probably has a vocabulary of maybe
    hundred words.
  • 43:07 - 43:12
    How do you do that? You cannot discuss the
    existence of God,
  • 43:12 - 43:15
    you know, or maybe the nature of knowledge,
  • 43:15 - 43:18
    in front of a kid, because the kid doesn't
    have the vocabulary
  • 43:18 - 43:21
    that you need to communicate with that child,
    right.
  • 43:21 - 43:24
    So what you end up doing is over-simplification.
  • 43:24 - 43:27
    So by the time you simplify the concepts to
  • 43:27 - 43:29
    the primitives that the child can understand,
  • 43:29 - 43:33
    you're far away from Aristotle and Plato,
    you know.
  • 43:33 - 43:37
    So that's the example that I give you.
  • 43:37 - 43:39
    QUERANT: I have a question.
  • 43:39 - 43:42
    At what point do you feel comfortable or something
  • 43:42 - 43:46
    like a threshold level for new languages to
    be used in production,
  • 43:46 - 43:48
    you know, like, there are some languages which
    are
  • 43:48 - 43:50
    coming up now but you still you know
  • 43:50 - 43:51
    that it's not something that you use.
  • 43:51 - 43:54
    As for me I would probably look at an example,
  • 43:54 - 43:56
    if I would say OK, there are quite a few systems,
  • 43:56 - 43:58
    big huge systems based on Ruby, I could recommend
  • 43:58 - 44:01
    it to someone people who are comfortable say
    if
  • 44:01 - 44:04
    they say it is OK if I use Ruby yeah say because
  • 44:04 - 44:06
    there are people who use it. But at production
    level
  • 44:06 - 44:08
    when that new language is- at what point do
    you feel
  • 44:08 - 44:09
    comfortable to say that, OK, this is viable
    to use
  • 44:09 - 44:09
    in production?
  • 44:09 - 44:10
    B.G.: Fantastic question. I would say that
    this is a
  • 44:10 - 44:10
    case that you need to develop over time, and
    I think
  • 44:10 - 44:11
    it comes with experience. The more you learn
    of different
  • 44:11 - 44:17
    programming languages, the better you get
    at evaluating them,
  • 44:17 - 44:24
    but having said that, community support does
    matter,
  • 44:25 - 44:28
    based on-
  • 44:28 - 44:32
    (00:44:36 - dead audio - 00:44:37)
  • 44:32 - 44:39
    OK, you can have a language which can have
    a
  • 44:40 - 44:42
    huge community around it.
  • 44:42 - 44:44
    That does not necessarily equate to the language
    being awesome, OK.
  • 44:44 - 44:46
    Documentation is also another thing, ?? (00:44:45)
  • 44:46 - 44:47
    is also another thing.
  • 44:47 - 44:53
    But again I would say that one of the ways
    is to really see,
  • 44:53 - 44:56
    what is the USB of the language, what kind
    of problem
  • 44:56 - 44:59
    is the language helping you solve, OK. If
    you see that,
  • 44:59 - 45:02
    it's like you already know Python, and there
    is Ruby,
  • 45:02 - 45:04
    not really very different, honestly.
  • 45:04 - 45:08
    So, but if you see Go, again, very different,
  • 45:08 - 45:12
    a lot of interesting concepts, and so you
    might
  • 45:12 - 45:17
    find problems where that language might fit
    in just perfectly, right.
  • 45:17 - 45:22
    So it's OK to maybe wait for a production
    by a larger community,
  • 45:22 - 45:25
    but sometimes you have to be that champion
    yourself, right.
  • 45:25 - 45:28
    Someone started using the language first,
    when Ruby came out, right.
  • 45:28 - 45:30
    (00:45:27) was the guy, probably.
  • 45:30 - 45:32
    That's why he's worshiped today.
  • 45:32 - 45:36
    So why not be the (name) yourself.
  • 45:36 - 45:39
    QUERANT: (indecipherable - 00:45:37)
  • 45:39 - 45:44
    Y.K.: Yup. Yeah, so I think it's,
  • 45:44 - 45:47
    there are quite a few kind of milestones for
    a language
  • 45:47 - 45:49
    to go through, but I think the most critical,
  • 45:49 - 45:51
    so again, it depends on the kind of client
  • 45:51 - 45:53
    that you're kind of suggesting this to, right,
  • 45:53 - 45:54
    like if it's a small start up then sure,
  • 45:54 - 45:55
    you have a lot more flexibility.
  • 45:55 - 45:57
    If it's a larger system, it has to scale,
  • 45:57 - 45:59
    you got different constraints.
  • 45:59 - 46:02
    But I think by and large the existence
  • 46:02 - 46:08
    of a very low latency production profiler
  • 46:08 - 46:12
    or on-time run system is probably that milestone.
  • 46:12 - 46:15
    The moment that it is in place,
  • 46:15 - 46:17
    a profiler which can actually run in production,
  • 46:17 - 46:20
    for that language, I think that marks a very
    critical
  • 46:20 - 46:22
    milestone when the language starts evolving
    at a very
  • 46:22 - 46:25
    different pace. Because you start kind of
    finding issues
  • 46:25 - 46:28
    which you never had been able to find before,
    right.
  • 46:28 - 46:31
    So for example, with both tools, we've been
    able to do
  • 46:31 - 46:33
    amazing things in production with Ruby, which
    was just
  • 46:33 - 46:35
    not possible before we knew, even the commercial
    ordinative,
  • 46:35 - 46:38
    like ?? (00:46:35) for that matter, right,
    so either a
  • 46:38 - 46:40
    commercial or opensource production profiling
    tool I
  • 46:40 - 46:41
    think is a pretty significant milestone.
  • 46:41 - 46:44
    QUERANT: I have a couple of questions here.
  • 46:44 - 46:46
    B.G.: Right, Yogi.
  • 46:46 - 46:51
    Y.K.: I don't know. Haven't you seen production?
  • 46:51 - 46:56
    B.G.: The production level compiler which
    you can plug into a running system?
  • 46:56 - 46:59
    Y.K.: So there are-
  • 46:59 - 47:03
    (00:46:58 - dead audio - 00:47:29)
  • 47:03 - 47:08
    B.G.: Yeah, but those are Valgrind but, which
    is not probably-
  • 47:08 - 47:09
    Y.K.: Sure.
  • 47:09 - 47:12
    B.G.: I think, what I will say is that,
  • 47:12 - 47:16
    Yogi is talking about the presence of a profiler
    being very important.
  • 47:16 - 47:19
    I think again it depends on the domain that
    you are in.
  • 47:19 - 47:22
    What kind of company you work for, what your
    challenges are.
  • 47:22 - 47:25
    It could just be documentation for you. Right
    or it could be
  • 47:25 - 47:30
    just the existence of a all-out library for
    you, right.
  • 47:30 - 47:35
    So I think it depends. The answer, real answer
    is it really depends.
  • 47:35 - 47:39
    QUERANT: I have a question. Like when do we
    actually
  • 47:39 - 47:43
    choose a interpreted language versus a compile
    language,
  • 47:43 - 47:45
    is my first question. Like for example,
  • 47:45 - 47:48
    Ruby's interpreted language, and like Java
    is kind of both,
  • 47:48 - 47:52
    like when do we actually choose that one is
    the first question,
  • 47:52 - 47:53
    and second question is-
  • 47:53 - 48:00
    H.K.: Just ask one question. Please ask one
    question.
  • 48:03 - 48:09
    QUERANT: Yeah. The question is asked.
  • 48:09 - 48:15
    Y.K.: So, OK again this is, as Baishampayan
    said,
  • 48:15 - 48:19
    it's kind of a black art. But roughly the
    euristics that I used were,
  • 48:19 - 48:24
    is primarily driven by is the system gonna
    be
  • 48:24 - 48:31
    CPU-bound or IO-bound? What kind of latencies
    do you need? Do you want
  • 48:35 - 48:38
    (00:48:27 - dead audio - 00:48:42)
  • 48:38 - 48:43
    I'd probably go straight away to
  • 48:43 - 48:48
    Java or any other static-type language,
  • 48:48 - 48:50
    which gives those kind of performance.
  • 48:50 - 48:54
    So I think latency is one. I don't know - you
    might-
  • 48:54 - 48:57
    B.G.: So I would say that the differences
    between
  • 48:57 - 48:59
    interpreted and compile languages, they are
    kind of
  • 48:59 - 49:02
    like blurring these days. I think you, what
    you really mean,
  • 49:02 - 49:05
    is a native language versus a language that
    runs in the VM.
  • 49:05 - 49:12
    OK. So I think VMs are as fast as natively
    compiled languages today.
  • 49:12 - 49:17
    And so for example, one of the lowest latency
    languages
  • 49:17 - 49:20
    would be Erlang, but it's not really a natively
  • 49:20 - 49:23
    ompiled language for that matter.
  • 49:23 - 49:28
    So again, Yogi is absolutely right, it depends
    on the problem.
  • 49:28 - 49:31
    If it's CPO-bound, maybe you should use a
    language
  • 49:31 - 49:34
    which spits out a native binary or maybe
  • 49:34 - 49:37
    has a very fast git compiler inside of VM.
  • 49:37 - 49:41
    Or if it's IO-bound, which most web-applications
    are by the way,
  • 49:41 - 49:44
    then just use Python, Ruby or whatever, or
    JavaScript.
  • 49:44 - 49:49
    C.F.: Yeah, but in, it is a blurring not only
    of that boundary,
  • 49:49 - 49:50
    but a blurring of concerns.
  • 49:50 - 49:56
    So like you said you have never used Ruby
    for something that
  • 49:56 - 49:57
    requires that low-latency. That's because
    Ruby's not fast enough,
  • 49:57 - 49:58
    not because it's an interpretive language,
    right.
  • 49:58 - 50:04
    If it were, yeah, so I would personally say
    on anything where
  • 50:04 - 50:04
    I don't mind having the source code present,
    which means any
  • 50:04 - 50:05
    server-side thing for example, I would use
    interpretive languages,
  • 50:05 - 50:05
    because it's a pain in the ass, I don't want
    to do that.
  • 50:05 - 50:05
    And what all of these things do is the answer,
    effectively
  • 50:05 - 50:05
    just compile it for you, anyway.
  • 50:05 - 50:05
    QUERANT: My question is for all panel members.
  • 50:05 - 50:06
    From invention of a competitive we're seeing
    that
  • 50:06 - 50:06
    there are so many languages came and gone,
  • 50:06 - 50:13
    and each language right on the veil,
  • 50:13 - 50:20
    are serving out their time.
  • 50:34 - 50:41
    I would say that today Ruby is one of those
    languages riding on the veil.
  • 50:45 - 50:48
    C is the only language which is there for
    a long time,
  • 50:48 - 50:51
    and it is from the starting of the computer
    still it is there.
  • 50:51 - 50:56
    So my question is, how long do you think that
    the Ruby will be last,
  • 50:56 - 50:59
    and what is going to be the next veil? Will
    it be Closure, or Scala,
  • 50:59 - 51:04
    Go or any other language, because the moment
    is coming to the market
  • 51:04 - 51:07
    and total paradigm of programming is changing.
  • 51:07 - 51:09
    B.G.: Great question. I will just, in my recollection,
  • 51:09 - 51:12
    the oldest language that is still in existence
    is Lisp,
  • 51:12 - 51:18
    and not C. It predates Unix and C by twenty
    years.
  • 51:18 - 51:18
    And anyway-
  • 51:18 - 51:21
    C.F.: So that's a huge wave is what you're
    saying.
  • 51:21 - 51:22
    B.G.: Huge wave.
  • 51:22 - 51:27
    C.F.: We're still in the Lisp bubble, which
    will soon burst.
  • 51:27 - 51:31
    Everyone will realize that was stupid.
  • 51:31 - 51:35
    Do you really want an answer to that question.
    We didn't really answer it.
  • 51:35 - 51:38
    B.G.: So languages do come and go but paradigms
    do stay,
  • 51:38 - 51:41
    OK. So fine, don't focus on languages,
  • 51:41 - 51:43
    focus on learning different paradigms.
  • 51:43 - 51:46
    C.F.: But they don't really come and go that
    much.
  • 51:46 - 51:47
    I mean think about it, like-
  • 51:47 - 51:50
    B.G.: They might, like PHP fell out of favor.
  • 51:50 - 51:52
    C.F.: But it's not, not it's out of fashion.
    Fashion.
  • 51:52 - 51:53
    B.G.: It is that.
  • 51:53 - 51:56
    C.F.: It is heavily deployed, right, you're
    running it.
  • 51:56 - 51:57
    So it still exists.
  • 51:57 - 52:00
    H.K.: A bit sheepishly but running.
  • 52:00 - 52:04
    V.K.: But remember one thing. Ruby is older
    than Java.
  • 52:04 - 52:07
    It's been there since 2004.
  • 52:07 - 52:09
    But how many people started referring to Ruby
  • 52:09 - 52:12
    until Ruby on Rails came? So it's a solution
    that language
  • 52:12 - 52:15
    or a framework provides this, what inspired
    everything.
  • 52:15 - 52:18
    In fact Ruby on Rails inspired the entire
    ecosystem
  • 52:18 - 52:21
    much more of other languages beyond just Ruby.
  • 52:21 - 52:25
    So that's in fact, it's Ruby on Rails that
    made Ruby popular.
  • 52:25 - 52:28
    B.G.: It's also Ruby's Achille's heel, by
    the way.
  • 52:28 - 52:30
    V.K.: Absolutely. There's a downside to it,
    extra-
  • 52:30 - 52:32
    B.G.: I'll keep patching FTW, right? Not.
  • 52:32 - 52:35
    V.K.: But remember, you know, we were doing
    all
  • 52:35 - 52:39
    this web XML business till Ruby on Rails came
    about,
  • 52:39 - 52:43
    and all this other stuff. So what changed,
    if you were to call it,
  • 52:43 - 52:46
    you would call it Ruby on Rails for the better,
    rather than Ruby-
  • 52:46 - 52:48
    H.K.: Are you saying that the whole rest
  • 52:48 - 52:52
    thing was because of Rails? Venkat?
  • 52:52 - 52:56
    V.K.: Certainly the moment was more simplification,
  • 52:56 - 52:58
    convection over configuration,
  • 52:58 - 53:00
    so that's what the Ruby on Rails was inspiring.
  • 53:00 - 53:01
    So you could just say that, you know,
  • 53:01 - 53:04
    people who were doing Ruby on Rails were doing
    more
  • 53:04 - 53:06
    rest than people who were doing dot net
  • 53:06 - 53:07
    and doing the sub-business.
  • 53:07 - 53:11
    But by the way, sub seems to be effectively
    dead, right.
  • 53:11 - 53:13
    C.F.: But unfortunately it's dead
  • 53:13 - 53:16
    in the same way that PHP is dead. It still
    exists.
  • 53:16 - 53:20
    V.K.: That's true. The same that Colba is
    dead, right.
  • 53:20 - 53:21
    C.F.: And Colba, for that matter. Sorry kids.
  • 53:21 - 53:25
    V.K.: And that will never go away, because
    as long as-
  • 53:25 - 53:31
    H.K.: So the next question that I wanted to
    ask is like,
  • 53:31 - 53:32
    Yogi talked about in his presentation, like,
  • 53:32 - 53:35
    how using a service architecture,
  • 53:35 - 53:38
    like for interface-based for, you know like
    multiple small
  • 53:38 - 53:40
    micro-applications, small applications.
  • 53:40 - 53:43
    So the next question is like how do you go
    about
  • 53:43 - 53:45
    in an organization, you have a product,
  • 53:45 - 53:47
    or maybe more than one product.
  • 53:47 - 53:51
    How do you go about building a true polyglot
    system,
  • 53:51 - 53:53
    where you know like programmers are encouraged
    to come
  • 53:53 - 53:56
    and you know like use different languages.
  • 53:56 - 53:59
    Does this require like some previous thought,
  • 53:59 - 54:00
    or does it happen automatically, like, yeah.
  • 54:00 - 54:04
    What are the best practices and everything?
  • 54:04 - 54:08
    C.F.: It's for one of us isn't it.
  • 54:08 - 54:11
    Or he says it's for me and I say it's for
    you.
  • 54:11 - 54:16
    OK, so I, actually Yogi did sort of answer
    this a minute ago.
  • 54:16 - 54:18
    You know, you really do need to focus on the
  • 54:18 - 54:20
    architecture of the system first.
  • 54:20 - 54:23
    That's essentially what my whole rant was
    this morning,
  • 54:23 - 54:26
    is about the architecture of a system that's
  • 54:26 - 54:32
    made of small components that interact in
    well-defined ways
  • 54:32 - 54:35
    with very clear responsibilities of each component,
  • 54:35 - 54:38
    and the components can and will be thrown
    away.
  • 54:38 - 54:41
    I think for us once we have that set up,
  • 54:41 - 54:44
    I really can say yes, write a service in Rust,
  • 54:44 - 54:46
    I don't care. I don't even know what it looks
    like,
  • 54:46 - 54:48
    I haven't bothered to read about it yet.
  • 54:48 - 54:51
    It's fine. Yeah, it's like C++.
  • 54:51 - 54:54
    So yeah it's excellent. It's battle-worn.
  • 54:54 - 54:57
    But if it performs well enough
  • 54:57 - 54:59
    and it actually works and we're monitoring
    it
  • 54:59 - 55:03
    and doing these, and it's deployable in the
    way that we can deploy,
  • 55:03 - 55:07
    I don't need an ecosystem for polyglot programming
    then.
  • 55:07 - 55:09
    I just need to encourage people to try things
  • 55:09 - 55:13
    and to throw them away if they didn't work
    out.
  • 55:13 - 55:15
    H.K.: Venkat, you had something-
  • 55:15 - 55:16
    V.K.: Actually there's something
  • 55:16 - 55:19
    we just talked about this morning.
  • 55:19 - 55:22
    We have to move away from a language requiring
  • 55:22 - 55:24
    to be hidden in a web service just to be safe,
  • 55:24 - 55:26
    and you can throw it away later.
  • 55:26 - 55:28
    I think the languages will have to find a
    way to work together,
  • 55:28 - 55:31
    where you don't need to hide things behind
    rest.
  • 55:31 - 55:34
    All these languages will have to come with
    a way to improve,
  • 55:34 - 55:37
    thereby they should, Ruby should really
  • 55:37 - 55:39
    see a world of coexistence with Java,
  • 55:39 - 55:41
    and a world of coexistence with dot net.
  • 55:41 - 55:43
    Because in many cases we develop in, like
    JRuby,
  • 55:43 - 55:45
    right. You develop in Ruby and you deploy
    it in Java,
  • 55:45 - 55:47
    or J to E, with all the monitoring tools,
  • 55:47 - 55:49
    and you talked about profiling.
  • 55:49 - 55:53
    JVM and the JV-maker system is very great
    for deployments
  • 55:53 - 55:56
    actually better. So in order for you to use
    it,
  • 55:56 - 55:58
    the Ruby language has to become friendly with
    Java.
  • 55:58 - 56:00
    The simplest thing for example is RJB, which
    is a bridge to
  • 56:00 - 56:03
    Java, which is still, we use by the way,
  • 56:03 - 56:05
    over in JRuby as well as separately.
  • 56:05 - 56:07
    So you need a way to actually have one language
  • 56:07 - 56:10
    talk to another in somewhat standardized,
    simpler,
  • 56:10 - 56:11
    less overhead mechanism.
  • 56:11 - 56:14
    And I think that would really encourage people
  • 56:14 - 56:17
    to use different languages without having
  • 56:17 - 56:19
    to build this up layer or risk layer.
  • 56:19 - 56:22
    Y.K.: So you're saying that at like binary
    level,
  • 56:22 - 56:25
    actually like a foreign function interface
    and.
  • 56:25 - 56:27
    I think the simplest way to do that is still
    over the network.
  • 56:27 - 56:29
    Like when it's rest or it's zero MQO or whatever,
    right,
  • 56:29 - 56:32
    it's like independent processes interacting
    with each other,
  • 56:32 - 56:34
    isolated, not messing with each other.
  • 56:34 - 56:37
    It just works well. Not convince the RJB or-
  • 56:37 - 56:38
    V.K.: You're talking about it from an architecting
  • 56:38 - 56:41
    a bigger system standpoint, but I'm just talking
    about
  • 56:41 - 56:44
    simply, I'm running this web application,
    but certain
  • 56:44 - 56:46
    part has to be paralyzed. I should be able
    to do it
  • 56:46 - 56:51
    with less overhead, less new layers, if a
    simpler
  • 56:51 - 56:52
    problem exists where that's applicable, right.
  • 56:52 - 56:54
    What you were just talking about, it's applicable,
  • 56:54 - 56:57
    has certain complexity and certain layer,
    but
  • 56:57 - 56:59
    generally encouraging people to apply multiple
  • 56:59 - 57:02
    languages to a single solution, right now,
  • 57:02 - 57:03
    has so much overhead.
  • 57:03 - 57:06
    I mean, today colleges are teach kids,
  • 57:06 - 57:08
    people about different languages,
  • 57:08 - 57:10
    but it's as if, like if you don't get a job
  • 57:10 - 57:13
    in Java then go and look for a dot net job.
  • 57:13 - 57:14
    That's really how we are learning multiple
    languages,
  • 57:14 - 57:16
    so but we are not learning, it's not that
  • 57:16 - 57:18
    we are not learning multiple languages,
  • 57:18 - 57:20
    but we are not polyglots by default or
  • 57:20 - 57:23
    by simplicity of the system.
  • 57:23 - 57:25
    That is I believe, if you want to be,
  • 57:25 - 57:26
    if you want to encourage polyglotism,
  • 57:26 - 57:28
    you just have to go to the next level
  • 57:28 - 57:30
    where languages will have to coexist with
    each other.
  • 57:30 - 57:31
    B.G.: I think-
  • 57:31 - 57:32
    V.K.: That is what we built with that notion.
  • 57:32 - 57:34
    B.G.: Fair enough. So I think co-existence
    can
  • 57:34 - 57:36
    be looked at from different angles.
  • 57:36 - 57:39
    I think what you're talking about is run-time
    co-existence,
  • 57:39 - 57:43
    you know, inside one run-time you have multiple
    languages running.
  • 57:43 - 57:44
    I don't know that that's technically feasible-
  • 57:44 - 57:46
    V.K.: It may not be run time, it may not be
  • 57:46 - 57:49
    a single process co-existence- it would be
    a multi-process.
  • 57:49 - 57:51
    B.G.: But it would have to be over some network,
    right.
  • 57:51 - 57:53
    V.K.: No. For example, take RGB.
  • 57:53 - 57:54
    B.G.: How does it work?
  • 57:54 - 57:56
    V.K.: It's almost like you're just calling
  • 57:56 - 57:57
    it into the process and kind of like-
  • 57:57 - 57:58
    B.G.: But how does it really work?
  • 57:58 - 58:00
    V.K.: It could even be-
  • 58:00 - 58:02
    C.F.: It's still one process, right, RGB.
  • 58:02 - 58:03
    B.G.: Yeah it's still one process.
  • 58:03 - 58:03
    V.K.: I agree.
  • 58:03 - 58:05
    B.G.: It's still one process, right.
  • 58:05 - 58:07
    V.K.: JVM does its own thing, right.
  • 58:07 - 58:09
    In a way JVM has its own layer-
  • 58:09 - 58:10
    B.G.: But ultimately it's all JVM bite code-
  • 58:10 - 58:11
    V.K.: True.
  • 58:11 - 58:15
    B.G.: So I think we are all building, or have
    to
  • 58:15 - 58:17
    build distributor systems at the end of the
    day today,
  • 58:17 - 58:19
    and we're also trying to build abstractions.
  • 58:19 - 58:21
    Right, that is the whole goal of building
  • 58:21 - 58:25
    a software architecture that lets, let me
    find out which parts
  • 58:25 - 58:27
    I can abstract and how.
  • 58:27 - 58:29
    So what Yogi talked about,
  • 58:29 - 58:30
    and totally agree with him,
  • 58:30 - 58:35
    I think the best approach is to abstract away
    the optimal concerns
  • 58:35 - 58:36
    and constructs of the system
  • 58:36 - 58:39
    and tie them together using one language
  • 58:39 - 58:40
    that is spoken on the system.
  • 58:40 - 58:43
    So I think they used JSON in JSON Schema for
    the-
  • 58:43 - 58:44
    Y.K.: It was in HTTP.
  • 58:44 - 58:45
    B.G.: It was in HTTP, OK, yeah.
  • 58:45 - 58:48
    So what you could use- you guys use it-
  • 58:48 - 58:50
    you could use a message queue or maybe use
  • 58:50 - 58:53
    something like zero in cue sockets to communicate
  • 58:53 - 58:58
    over and maybe use Thrift or even JSON data
    for communication, but-
  • 58:58 - 58:59
    H.K.: So-
  • 58:59 - 59:01
    B.G.: The idea is to basically build a system
  • 59:01 - 59:05
    of optimal components tied together but using
    one system,
  • 59:05 - 59:06
    but then for the message buzz you can either
  • 59:06 - 59:09
    use a socket or a message queue.
  • 59:09 - 59:14
    H.K.: So, there's definitely a lot of tools
    which are,
  • 59:14 - 59:18
    like run-times that exist which allow run-time
    re-use of languages,
  • 59:18 - 59:22
    for example like, either on top of the LLVM
    or on top of JVM,
  • 59:22 - 59:25
    you know like how you have Closure collections
    you can use
  • 59:25 - 59:27
    from JRuby actually, there are projects that
    allow that.
  • 59:27 - 59:29
    Do you think that all those are basically
    toys
  • 59:29 - 59:33
    and shouldn't be used in any seriousness?
  • 59:33 - 59:35
    B.G.: Closure collections are not toys.
  • 59:35 - 59:39
    But what I would say that, I think that this
    idea,
  • 59:39 - 59:43
    it can be applied to the JVM languages,
  • 59:43 - 59:44
    but many times you have to use some language
  • 59:44 - 59:47
    which is not available on the JVM, right.
  • 59:47 - 59:48
    And you cannot use LLVM for it,
  • 59:48 - 59:51
    because it's something which is much lower
    level
  • 59:51 - 59:54
    than the JVM. So you'll have to use the network
  • 59:54 - 59:57
    to communicate over each other.
  • 59:57 - 60:00
    But as far as JVM languages are concerned,
    yeah, why not.
  • 60:00 - 60:04
    At a theoretical level, inter-opt between
    languages
  • 60:04 - 60:07
    is something that we should shoot for. Absolutely.
  • 60:07 - 60:10
    QUERANT: I have a complaint and a question
    here.
  • 60:10 - 60:14
    Complaint: You're arguing too much.
  • 60:14 - 60:17
    You obviously are in disagreement.
  • 60:17 - 60:18
    So
  • 60:18 - 60:22
    B.G.: Agreeing too each other.
  • 60:22 - 60:27
    C.F.: Closure collections are a toy then-
  • 60:27 - 60:29
    I actually, when he was saying are these things
    a toy,
  • 60:29 - 60:33
    I don't mean Closure collections, but I do
    think that,
  • 60:33 - 60:38
    the whole idea of interrupt in a VM or in
    a process is overrated.
  • 60:38 - 60:41
    And I think it's overrated, like,
  • 60:41 - 60:44
    I remember being at Fu Camp talking to the
    parrot guys
  • 60:44 - 60:47
    and LLVM guys awhile back in a workshop,
  • 60:47 - 60:48
    and they were all complaining because they
  • 60:48 - 60:52
    had tried to do like JavaScript on all these
    different VMs.
  • 60:52 - 60:54
    They realized that like an array in JavaScript
  • 60:54 - 60:56
    has different semantics then like an array
    in Java
  • 60:56 - 60:58
    and an array in Ruby. You know if you add
  • 60:58 - 61:01
    something way off in the distance,
  • 61:01 - 61:03
    past the end of the array, in some languages
  • 61:03 - 61:05
    it's an error and in some languages it nil
    fills,
  • 61:05 - 61:08
    in some languages it's you know, so like,
  • 61:08 - 61:09
    that's a really stupid example,
  • 61:09 - 61:12
    and you can all imagine there's some way to
    solve that.
  • 61:12 - 61:15
    But with the more interesting features of
    the language,
  • 61:15 - 61:18
    that lead us to want to be polyglots,
  • 61:18 - 61:21
    like I don't really think it makes sense to
    instantiate
  • 61:21 - 61:23
    a Ruby class from Java, for example.
  • 61:23 - 61:24
    Because the Ruby class does different
  • 61:24 - 61:28
    things than the Java class and vice versa.
  • 61:28 - 61:30
    Yes it can sometimes be nice.
  • 61:30 - 61:31
    So like when you're in Closure
  • 61:31 - 61:33
    and you want to use someone's ancient
  • 61:33 - 61:36
    Java library that has been working for years,
  • 61:36 - 61:38
    you just do it. When you do it, though,
  • 61:38 - 61:39
    it's hideous, and it like, the Java interrupt
  • 61:39 - 61:42
    is really not nice. And you know you're doing
    -
  • 61:42 - 61:45
    it works fine. But it's uglier than Closure
    code.
  • 61:45 - 61:47
    Right, so then you want to write something
    so it
  • 61:47 - 61:50
    looks like Closure and feels like Closure.
  • 61:50 - 61:54
    So personally I think an operating system
    is also
  • 61:54 - 61:57
    like one process, you can think of it that
    way these days.
  • 61:57 - 61:59
    It didn't use to be the case. But I can spin
    one up
  • 61:59 - 62:02
    and start running it, and then have language
    interrupt
  • 62:02 - 62:05
    with multiple processes in there talking via
    sockets,
  • 62:05 - 62:08
    and it's conceptually not very different.
    Like if
  • 62:08 - 62:09
    I describe it to my mom she won't know the
    difference
  • 62:09 - 62:12
    between that and a virtual machine, so.
  • 62:12 - 62:14
    B.G.: There's domain sockets in Unix, right.
  • 62:14 - 62:15
    C.F.: Oh yeah domain sockets in Unix. Of course.
  • 62:15 - 62:17
    This might be the solution, then.
  • 62:17 - 62:19
    QUERANT: Quick question to all the panelists.
  • 62:19 - 62:23
    As we stand today, what is the minimum number
    of languages,
  • 62:23 - 62:28
    minimum set-up languages you would recommend
    to all the programmers.
  • 62:28 - 62:33
    H.K.: 01:02:30 - dead audio
  • 62:33 - 62:38
    C.F.: Did you tell him his question was invalid,
    is that it? I disagree.
  • 62:38 - 62:44
    H.K.: So what I was trying to-
  • 62:44 - 62:44
    B.G.: I would say it's a really awesome question.
  • 62:44 - 62:48
    I would say is that maybe don't worry too
    much about
  • 62:48 - 62:50
    the number of languages that you are learning,
  • 62:50 - 62:53
    but number of different paradigms that you
    are learning, right.
  • 62:53 - 62:59
    H.K.: So the question was like, like a kind
    of paraphrasing, like, so-
  • 62:59 - 63:02
    B.G.: Doesn't matter. Look at the paradigms.
  • 63:02 - 63:05
    If you already know C, then don't bother about
    C++,
  • 63:05 - 63:08
    you know, for example, or whatever.
  • 63:08 - 63:12
    H.K.: Yeah so the next question I had here
    was like,
  • 63:12 - 63:16
    I'm just jumping back and forth, but like
    yeah,
  • 63:16 - 63:18
    what next programming languages, like for
    example,
  • 63:18 - 63:23
    you guys are looking forward to. Like you
    know
  • 63:23 - 63:26
    starting with Swami like, sorry, Venkat, like-
  • 63:26 - 63:31
    V.K.: OK I'm just looking for a better Ruby.
  • 63:31 - 63:33
    H.K.: What do you mean by that?
  • 63:33 - 63:35
    V.K.: It's more of- I'm just looking for a
  • 63:35 - 63:37
    standardized Ruby where I should be able to
  • 63:37 - 63:40
    switch between the Java world and the MRA
    world,
  • 63:40 - 63:42
    without lots of friction and you know, and
    better
  • 63:42 - 63:44
    performing Ruby generally speaking. When as
    much
  • 63:44 - 63:47
    as we just talked about low-level you know
    you talk
  • 63:47 - 63:49
    low-latency stuff. I think we can't keep saying
    that
  • 63:49 - 63:54
    Ruby's, you know, it's really slow for a reason,
    right.
  • 63:54 - 63:58
    And Ruby can run in a hot spot. I want- Java
    was slow
  • 63:58 - 64:00
    because of hot- before hotspot. But Java became
    very,
  • 64:00 - 64:03
    very fast through that time and lots of new
    work has
  • 64:03 - 64:05
    put in there. So there has to be some research
    into
  • 64:05 - 64:08
    performance in Ruby I think or something.
    I'm just looking
  • 64:08 - 64:14
    for better Ruby essentially. For my investment
    of time and
  • 64:14 - 64:16
    language. But certainly, I mean I would like
    to learn Scala
  • 64:16 - 64:17
    and stuff that like, something.
  • 64:17 - 64:21
    B.G.: So for me learning a new programming
    language is
  • 64:21 - 64:24
    more like a cognitive exercise to expand my
    own thought
  • 64:24 - 64:30
    processes, not specifically to you know apply
    in production.
  • 64:30 - 64:33
    So the new language that I will be learning
    in 2014 is Factor,
  • 64:33 - 64:35
    and you should check it out.
  • 64:35 - 64:39
    C.F.: I was gonna say Factor.
  • 64:39 - 64:41
    We should not sit next to each other. We're
    too similar.
  • 64:41 - 64:44
    H.K.: Why, but why, can you just like say
    why exactly Factor?
  • 64:44 - 64:49
    C.F.: I would say Factor because it really
    hurts to,
  • 64:49 - 64:50
    it hurts in a non-stupid way.
  • 64:50 - 64:54
    Like if you learn Befunge it hurts in a stupid
    way.
  • 64:54 - 64:57
    Like there's no reason to learn Befunge except
    for fun.
  • 64:57 - 65:01
    Factor, though, there's something clearly
    there, right.
  • 65:01 - 65:07
    It's concatenative programming. It's a different
    way of having to think.
  • 65:07 - 65:10
    And it's a different way that to me feels
  • 65:10 - 65:15
    like it's deeper than it is stupid. It, so,
    actually
  • 65:15 - 65:20
    I wouldn't probably learn it now, but I almost
    said that though.
  • 65:20 - 65:21
    It was on my list.
  • 65:21 - 65:25
    B.G.: I already know APL and a little bit
    of J maybe.
  • 65:25 - 65:29
    But APL is, again another concatenative language,
  • 65:29 - 65:30
    which inspired Factor.
  • 65:30 - 65:34
    APL is some language which I can read but
    cannot type,
  • 65:34 - 65:36
    because to type APL code you need a separate
    keyboard.
  • 65:36 - 65:40
    That's why I'm learning Factor this year.
  • 65:40 - 65:41
    H.K.: Yogi?
  • 65:41 - 65:46
    Y.K.: I don't know, Sanskrit, maybe. (01:04:41
    ??)
  • 65:46 - 65:49
    But yeah, I think Go or Haskel.
  • 65:49 - 65:53
    I think there the most differences from what
    I already know, so.
  • 65:53 - 65:58
    H.K.: Fair enough. So I think a lot of first
    -
  • 65:58 - 66:01
    learn programming languages and then the Dave
    Thomas
  • 66:01 - 66:05
    like his book Pragmatic Programmer recommends
    like learn
  • 66:05 - 66:06
    a programming language a year actually.
  • 66:06 - 66:10
    And so one of the things that I've been
  • 66:10 - 66:13
    wondering is like, how do you exactly like
  • 66:13 - 66:15
    go about learning a language? You cannot,
  • 66:15 - 66:19
    so like you cannot go to Flipkart and deploy
  • 66:19 - 66:21
    a production system in Hascal, that, I don't
  • 66:21 - 66:25
    know if you allow, but we talked about that
    already, actually.
  • 66:25 - 66:27
    So but like how do, how does a person like
  • 66:27 - 66:28
    when picking up a language go about
  • 66:28 - 66:32
    learning a programming language, and like
    so-
  • 66:32 - 66:35
    V.K.: So I think I've probably got the -
  • 66:35 - 66:39
    so yeah like. I actually read the manual.
  • 66:39 - 66:44
    Yeah, I'm so boring. And so I just read the
    manual
  • 66:44 - 66:47
    just to get a flavor of what it's about and
    what's possible.
  • 66:47 - 66:51
    Without going deeply into it it usually takes
  • 66:51 - 66:52
    like a few hours, because it's really superficial.
  • 66:52 - 66:54
    But once I get a sense of what the language
    is about,
  • 66:54 - 66:55
    what the code constructs are, then do a second
    pass
  • 66:55 - 66:56
    to kind of just decide really what's it about
  • 66:56 - 66:56
    and then play around with some code. But as-
  • 66:56 - 66:56
    (01:07:03 - dead audio space 01:07:47)
  • 66:56 - 66:57
    C.F.: I would try to do some simple services
  • 66:57 - 67:02
    and you know stuff with Actors running in
    the background.
  • 67:02 - 67:09
    And whenever I saw something I didn't understand
  • 67:30 - 67:37
    I would just go look in the source code for
    play.
  • 67:52 - 67:59
    Then I would look at this crazy Scala type
    stuff
  • 67:59 - 68:01
    and have to then read the manual for a few
    hours
  • 68:01 - 68:04
    to figure out what's happening. But now I
    will never forget,
  • 68:04 - 68:06
    because I encountered it through a painful
    situation,
  • 68:06 - 68:11
    so I have like the emotional trigger to never
    let go of that knowledge.
  • 68:11 - 68:13
    B.G.: That's interesting, yeah.
  • 68:13 - 68:17
    I think, so every new language brings a different
    way
  • 68:17 - 68:20
    of thinking to the table. So reading the manual
  • 68:20 - 68:23
    should be the first thing that you should
    do I think.
  • 68:23 - 68:25
    Maybe because, usually the manual is written
  • 68:25 - 68:26
    by the author of the language,
  • 68:26 - 68:30
    or at least some supporting material about
    the rational
  • 68:30 - 68:32
    or the ethos of language.
  • 68:32 - 68:34
    And once you have some superficial idea
  • 68:34 - 68:37
    what the language, start building something.
  • 68:37 - 68:39
    And at the same time look at the source code
  • 68:39 - 68:42
    of the language, or maybe the standard library
  • 68:42 - 68:45
    or some other products or tools that have
    already
  • 68:45 - 68:46
    been written in that language,
  • 68:46 - 68:48
    to get a sense of how things are detected,
  • 68:48 - 68:50
    what the idioms could be.
  • 68:50 - 68:54
    And basically read more code, and then write.
  • 68:54 - 68:57
    I think I've always benefited more from
  • 68:57 - 68:59
    reading a lot more code than writing.
  • 68:59 - 69:03
    V.K.: Yeah I think the problem comes first
    in,
  • 69:03 - 69:03
    I don't choose a language, just more of a
    problem,
  • 69:03 - 69:06
    and I think this language could be better
    to solve that problem,
  • 69:06 - 69:08
    and then just to find the quickest way to
    solve the problem
  • 69:08 - 69:10
    and learn the crux of the language.
  • 69:10 - 69:14
    And then go learn further by looking into
    the manual and other stuff.
  • 69:14 - 69:18
    H.K.: So Chad I was talking to you before
  • 69:18 - 69:22
    and like you said like don't just learn a
    language,
  • 69:22 - 69:23
    deploy something production like similar,
  • 69:23 - 69:27
    and don't learn a language in a year, like
    spend time with it.
  • 69:27 - 69:29
    Build something, solve a hard problem,
  • 69:29 - 69:32
    build something complicated, how do you say-
  • 69:32 - 69:35
    C.F.: Well yeah what I was telling you about
    is Dave Thomas,
  • 69:35 - 69:38
    who is one of the authors of Pragmatic Programmer
  • 69:38 - 69:41
    who coined this language of the year idea,
  • 69:41 - 69:45
    he spoke at RubyConf 2010 and he said that
    he had
  • 69:45 - 69:48
    revised his thoughts on what the challenge
    should be.
  • 69:48 - 69:50
    Instead of just learning a language every
    year,
  • 69:50 - 69:53
    I think he has the same problem I do, he can't
    retain it.
  • 69:53 - 69:56
    He challenged everyone to learn a language
    and deploy it
  • 69:56 - 69:59
    to production every year.
  • 69:59 - 70:02
    Because to him again it's the same thing I
    just described for myself,
  • 70:02 - 70:06
    that he personally can't hold on to the knowledge
  • 70:06 - 70:08
    unless he experiences the real pain
  • 70:08 - 70:11
    of putting something into practice.
  • 70:11 - 70:12
    V.K.: Absolutely.
  • 70:12 - 70:15
    H.K.: So the pretty much like,
  • 70:15 - 70:18
    you learn programming languages like a lot
    of persons,
  • 70:18 - 70:21
    but really our day jobs still requires to
    programm in Ruby
  • 70:21 - 70:25
    or Java or whatever, so, one of the key things
    like,
  • 70:25 - 70:28
    you write Lisp, you become a better Java programmer.
  • 70:28 - 70:31
    That's the wisdom so, like, how do you exactly
    go
  • 70:31 - 70:32
    about adopting features, you know like, for
    example,
  • 70:32 - 70:38
    like Closure or Scala or Haskel or Go, and
    you know
  • 70:38 - 70:42
    like the language the you program in day to
    day,
  • 70:42 - 70:44
    maybe for the dayjob. So like,
  • 70:44 - 70:45
    B.G.: How do you adopt a new language?
  • 70:45 - 70:47
    H.K.: How do you adopt features?
  • 70:47 - 70:47
    B.G.: Ideas.
  • 70:47 - 70:48
    H.K.: Ideas, yeah.
  • 70:48 - 70:51
    B.G.: So, as I said, every language has a
    different
  • 70:51 - 70:56
    way of you know solving problems. So for example
  • 70:56 - 70:57
    if I take the example of Closure, in Closure
    there
  • 70:57 - 71:01
    is a lot of emphasis on data. OK, you don't
    hide data
  • 71:01 - 71:04
    inside objects and stuff.
  • 71:04 - 71:07
    You basically treat everything as first class
    data structures
  • 71:07 - 71:10
    and then manipulate the data using standard
    library
  • 71:10 - 71:13
    functions and spit it out into a different
    format
  • 71:13 - 71:16
    if you need to. So that, some design or architectural
  • 71:16 - 71:19
    thinking that can be applied to any language,
    right.
  • 71:19 - 71:21
    I know people who are actual provisional
  • 71:21 - 71:23
    Python programmers, who learned Closure,
  • 71:23 - 71:26
    did some real programming in Closure,
  • 71:26 - 71:28
    and went back to doing Python
  • 71:28 - 71:31
    and came back to me and told me that my Python
    code
  • 71:31 - 71:33
    is so much better now, right.
  • 71:33 - 71:35
    So I think it's not just about Closure
  • 71:35 - 71:40
    or any specific language, but the idea is
    that,
  • 71:40 - 71:42
    get a taste of the language,
  • 71:42 - 71:45
    see how they think about solving problems,
  • 71:45 - 71:46
    and you know, you may not be able
  • 71:46 - 71:48
    to transport all the ideas,
  • 71:48 - 71:49
    like if you like channels in
  • 71:49 - 71:52
    Go you cannot build a channel-like thing in
    Java,
  • 71:52 - 71:55
    for example. It would be very hard for you
    to do it.
  • 71:55 - 71:58
    But at least if you have an appreciation for
    it,
  • 71:58 - 71:59
    maybe who knows tomorrow you might
  • 71:59 - 72:03
    be able to use a third party library to use
    it.
  • 72:03 - 72:07
    C.F.: There's actually a problem that can
    happen,
  • 72:07 - 72:09
    though. So you can take good things,
  • 72:09 - 72:13
    like the data orientation or the ideas of
    immutability
  • 72:13 - 72:17
    by default in Closure and then just try to
    make your
  • 72:17 - 72:20
    Ruby code be like that, because you understand
    the benefits.
  • 72:20 - 72:23
    Or you could do stuff like try
  • 72:23 - 72:26
    (01:12:23 - dead audio space - 01:12:36)
  • 72:26 - 72:30
    it's even possible to then simulate the features
  • 72:30 - 72:35
    of one of these languages that you're learning
    from,
  • 72:35 - 72:41
    but you emulate them in an environment that's
    not friendly to them,
  • 72:41 - 72:48
    and it's a bad idea. So I would say don't
    go too crazy trying
  • 72:48 - 72:51
    to make Ruby be functional more than it is,
  • 72:51 - 72:53
    or to be Actor-oriented or whatever.
  • 72:53 - 72:57
    B.G.: There will always be incidents (01:12:53)
  • 72:57 - 72:59
    in practice, right.
  • 72:59 - 73:03
    You'll figure it out if you try to apply it.
  • 73:03 - 73:07
    Y.K.: I'm gonna agree with Chad, so.
  • 73:07 - 73:12
    V.K. Yeah, OK, I'm not into this functional
    side
  • 73:12 - 73:16
    or you know the Lisp side of Closure set of
    things yet.
  • 73:16 - 73:18
    So my experience is essentially trying to
    play more
  • 73:18 - 73:21
    ideas from Ruby into Java, and there was a-
  • 73:21 - 73:23
    you know probably Java at level that we just
    talked about.
  • 73:23 - 73:26
    It's such a, what is it called, a restrictive
    language.
  • 73:26 - 73:29
    There is a lot that I could actually learn
    and apply to
  • 73:29 - 73:31
    Java and Ruby which was really exciting.
  • 73:31 - 73:32
    There were libraries,
  • 73:32 - 73:35
    I think there were coming up for like
  • 73:35 - 73:37
    calling anonymous functions or proc like things
  • 73:37 - 73:39
    that I could actually use them.
  • 73:39 - 73:41
    So those are, it was not really really tangible
    at
  • 73:41 - 73:45
    specific example I could give. My Java programming
    extensively improved.
  • 73:45 - 73:49
    Or readability of the code improved by having
    written Ruby code.
  • 73:49 - 73:52
    Some of it will actually happen naturally
    I believe.
  • 73:52 - 73:54
    B.G.: I don't think that -
  • 73:54 - 73:56
    For example I was doing a lot of Python before
  • 73:56 - 74:00
    I started doing some real Lisp programming.
  • 74:00 - 74:03
    Python always had the map and filter and reduce
    functions.
  • 74:03 - 74:05
    I was never able to appreciate those functions
    when
  • 74:05 - 74:08
    I was just a Python programmer, OK. For example,
  • 74:08 - 74:12
    Closure has something called protocols, OK.
  • 74:12 - 74:16
    How many people here have heard about refinements
    in Ruby 2.0.
  • 74:16 - 74:17
    C.F.: Refinements, yeah.
  • 74:17 - 74:20
    B.G.: Yeah. It's a new feature.
  • 74:20 - 74:23
    So, see, minority. OK, it's a really good
    feature,
  • 74:23 - 74:26
    and it lets you do code monkey patching but
    restricted
  • 74:26 - 74:29
    to a specific module, OK. So I think that,
  • 74:29 - 74:32
    Ruby guys don't, are often are don't
  • 74:32 - 74:37
    understand benefits then it's kind of like
    a shame, right.
  • 74:37 - 74:39
    Y.K.: Yeah but that's a point right,
  • 74:39 - 74:41
    that's something which has to happen at the
    language level.
  • 74:41 - 74:45
    Like as a application developer who's not
    working on the language itself,
  • 74:45 - 74:49
    adoption of features from other languages
    will run into bottle necks.
  • 74:49 - 74:52
    So that's definitely one area where, for example
    in the Java world, right,
  • 74:52 - 74:56
    when you move back from a lot of the ex-Ruby
    programmers
  • 74:56 - 74:58
    move back to Java, and they created some beautiful
    libraries.
  • 74:58 - 75:03
    Like for example I know an ex-thoughtworker
    who's done
  • 75:03 - 75:06
    a library called (01:15:03), which allows
    you to kind of mimic
  • 75:06 - 75:07
    Closures in Java, and it works through
  • 75:07 - 75:13
    actually hooking up a Java agent at run time.
  • 75:13 - 75:15
    So the point is it's a beautiful experiment,
  • 75:15 - 75:17
    but you can't really use that in production
  • 75:17 - 75:19
    because your IDs not going to recognize it,
  • 75:19 - 75:21
    you know simple things like that which might
  • 75:21 - 75:23
    seem like trivial but they actually hurt,
    because
  • 75:23 - 75:26
    another the code syntax highlighting is kind
    of
  • 75:26 - 75:28
    gone for a toss. The debug obviously doesn't
    work,
  • 75:28 - 75:28
    you can't-
  • 75:28 - 75:34
    So you got to hook up the agent while running
    the app.
  • 75:34 - 75:39
    So it becomes tricky, so I think a lot of
    the language
  • 75:39 - 75:42
    features which get adopted do get a lot of
    those frameworks.
  • 75:42 - 75:44
    For example, Actor systems, even though we
    don't have
  • 75:44 - 75:49
    it in Java, kind of analogies of that have
    been funnily
  • 75:49 - 75:52
    enough systems like Mule (01:15:40) right,
    which is again
  • 75:52 - 75:55
    enterprising and boring, but essentially it
    solves
  • 75:55 - 75:57
    the same problem. Like not at the language
    level but
  • 75:57 - 76:00
    it allows you to coordinate independent Actors
  • 76:00 - 76:04
    and construct bulges (01:16:01) of flows which
    kind
  • 76:04 - 76:07
    of do something productive and allow you to
    scale
  • 76:07 - 76:08
    out in a very simple way, right.
  • 76:08 - 76:12
    So frameworks end up kind of taking their
    place in a certain way.
  • 76:12 - 76:14
    I think it's difficult to bring it down to
    a language very well.
  • 76:14 - 76:17
    V.K.: That kind of introduced like using
  • 76:17 - 76:18
    play framework in Java, right.
  • 76:18 - 76:20
    It actually brings a lot of Rails goodness
  • 76:20 - 76:23
    and Rails inspiration into Java, so you don't,
  • 76:23 - 76:24
    it's not necessarily about the language weights.
  • 76:24 - 76:27
    It's also things like dimension or configuration,
  • 76:27 - 76:29
    which can be learned and applied into other
    languages.
  • 76:29 - 76:32
    So just ideas are behind a specific paradigm,
  • 76:32 - 76:35
    the simplicity or the philosophy behind it
    can
  • 76:35 - 76:37
    be applied into other languages, like Java
    from Ruby.
  • 76:37 - 76:40
    So I think the framework side of it plays
    I think a big role.
  • 76:40 - 76:41
    Y.K.: Yeah that's a great point because there's
  • 76:41 - 76:46
    funnily enough right like a framework like
    Rails
  • 76:46 - 76:49
    or Sinatra was invented in Java. Why is that?
  • 76:49 - 76:52
    Because the thought process that's behind
    Java
  • 76:52 - 76:54
    is just not tooled to the kind of thinking
    and
  • 76:54 - 76:56
    such lightweight simplistic services.
  • 76:56 - 76:59
    And it only took somebody to kind of look
    at Ruby,
  • 76:59 - 77:01
    see its simplicity and be able to kind of
    build
  • 77:01 - 77:02
    something so simple as Sinatra, like it's
    beautiful.
  • 77:02 - 77:04
    And now that thought process has come out.
  • 77:04 - 77:06
    So yeah play's a great example actually.
  • 77:06 - 77:08
    V.K.: Yeah I think there's two things you
    know,
  • 77:08 - 77:11
    the discussion kind of weighed towards more
    towards
  • 77:11 - 77:14
    the paradigms, more. But I think there is
    an
  • 77:14 - 77:16
    things like simplicity, conventional configuration
  • 77:16 - 77:20
    or concepts, which is another side that languages
    have,
  • 77:20 - 77:23
    which are not specific to how to make parallelism
    better
  • 77:23 - 77:25
    which are not specific to how to do functional
    programming,
  • 77:25 - 77:27
    but still something which was not done before
    or
  • 77:27 - 77:30
    easy enough in your language, which you could
    have applied.
  • 77:30 - 77:31
    You know the language is easier.
  • 77:31 - 77:33
    But those are not new libraries
  • 77:33 - 77:35
    or nothing to do with really specific functions.
  • 77:35 - 77:37
    But you could get better in other languages
    by
  • 77:37 - 77:39
    looking at this other philosophy behind
  • 77:39 - 77:42
    the language just beyond a specific paradigm
  • 77:42 - 77:43
    of the strength of the language.
  • 77:43 - 77:47
    H.K.: So we are about to close the panel discussion.
  • 77:47 - 77:51
    Any questions? We have time for questions.
  • 77:51 - 77:52
    Actually.
  • 77:52 - 77:55
    C.F.: Or how about you just raise your hand
  • 77:55 - 77:56
    if you want to ask a question
  • 77:56 - 77:59
    and otherwise we'll all get tea. You have
    a question.
  • 77:59 - 78:05
    B.G.: Or we can just move the discussion to
    the break room.
  • 78:05 - 78:10
    We could do that. So let's just you know - OK.
  • 78:10 - 78:17
    QUERANT: So I worked in different programming
    languages.
  • 78:18 - 78:23
    So about four to five, so I think programming
    languages
  • 78:23 - 78:26
    rose to such heights because either because
    the programming
  • 78:26 - 78:29
    language itself or through its supporting
    libraries.
  • 78:29 - 78:33
    For example, Ruby was not in so much mainstream
    until
  • 78:33 - 78:39
    Rails came into existence. And Python for
    scientific calculation.
  • 78:39 - 78:42
    C for internal system, you know Linux kind
    of stuff.
  • 78:42 - 78:43
    C++ for games and other stuff.
  • 78:43 - 78:46
    So what all, I mean do these programming languages
  • 78:46 - 78:50
    have and uh, example like Scala, Closure,
    Go, Erlang.
  • 78:50 - 78:53
    So these are upcoming, like dot also.
  • 78:53 - 78:55
    So what do these programming languages have
  • 78:55 - 78:57
    that they'll come on call. I mean what do
    these libraries,
  • 78:57 - 79:00
    I mean what are the bigger libraries that
    they have,
  • 79:00 - 79:03
    so that people like me can use them for certain
    purpose.
  • 79:03 - 79:06
    So what all they are useful for?
  • 79:06 - 79:09
    C.F.: That'll take awhile.
  • 79:09 - 79:11
    B.G.: That's a very long-winded question.
  • 79:11 - 79:14
    I'll very quickly answer that.
  • 79:14 - 79:17
    Every language probably has a killer app,
    right,
  • 79:17 - 79:20
    to champion it or maybe make it famous or
    popular.
  • 79:20 - 79:26
    Not every, not all languages have one specific
    killer app,
  • 79:26 - 79:28
    for example, while, what would you say the
  • 79:28 - 79:30
    killer app for JavaScript is, right?
  • 79:30 - 79:32
    Or what about Objective C?
  • 79:32 - 79:34
    Right, just that you don't have any other
    choice
  • 79:34 - 79:37
    in those cases, right. If you want to program
    for the browser,
  • 79:37 - 79:39
    JavaScript is your only choice,
  • 79:39 - 79:42
    Objective C if you are doing Apple programming,
    right.
  • 79:42 - 79:45
    So yeah, I mean, every once in awhile there
  • 79:45 - 79:48
    are projects or libraries or products which
  • 79:48 - 79:49
    do come and make something very famous.
  • 79:49 - 79:55
    But it may not be true for everything.
  • 80:01 - 80:03
    H.K.: If anybody has any other questions
  • 80:03 - 80:06
    then I can (drowned out by applause - 01:20:05)
  • 80:07 - 80:09
    Thank you.
Title:
Garden City Ruby 2014 - Panel
Description:

more » « less
Duration:
01:20:41

English subtitles

Revisions