
1
00:00:03,553 --> 00:00:35,668
I was hired at Netscape in April 1995
Netscape had already launched it's 1.0

2
00:00:35,668 --> 00:00:40,521
Mosaic killer. If you remember, Mosaic was
the big, I think Mosaic was the big

3
00:00:40,521 --> 00:00:45,495
browser until Netscape took over. So when
I came to Netscape they'd been going for

4
00:00:45,495 --> 00:00:49,432
about a year. I actually had an option to
go in at the beginning, I passed it up.

5
00:00:49,432 --> 00:00:54,028
But I went in, in time to do what I was
tempted to do, which is a programming

6
00:00:54,028 --> 00:00:58,075
language for HTML for web designers and
programmers to use, embedded directly in

7
00:00:58,075 --> 00:01:02,385
the webpage. Not something that was, like,
coming along at the time called Java,

8
00:01:02,385 --> 00:01:07,009
which was more of a professional's
language, where you would write real code

9
00:01:07,009 --> 00:01:11,042
with type declarations and you'd have to
write that code in a way that compiled. I

10
00:01:11,042 --> 00:01:15,059
was writing something, JavaScript that
could be used by people who didn't know

11
00:01:15,059 --> 00:01:19,082
what a compiler was. They were just gonna
load it, it was like basic. And that was

12
00:01:19,082 --> 00:01:23,091
really the pitch that we would make, two
languages, not one in August the

13
00:01:23,091 --> 00:01:28,061
Microsoft's visual basic for C++, so
JavaScript for java. Bill Joy of Sun

14
00:01:28,061 --> 00:01:33,032
actually liked that idea and agreed with
and he was the guy that signed the

15
00:01:33,032 --> 00:01:38,021
trademark license by which what I had
created became JavaScript. The name is a

16
00:01:38,021 --> 00:01:42,839
total lie. It's not really related to
Java, so much as to its common ancestors C

17
00:01:42,839 --> 00:01:48,037
in Syntax. And to the extent that we made
it easy to use, and something you could

18
00:01:48,037 --> 00:01:53,051
copy paste program, or start small from
scripts, and grow to programs. Javascript

19
00:01:53,051 --> 00:01:58,026
has succeeded massively. It was also an
incredible rush job, so there were

20
00:01:58,026 --> 00:02:03,665
mistakes in it and something that I think
is important about it, is that I knew

21
00:02:03,665 --> 00:02:07,858
there would be mistakes, and there would
be gaps. So I made it very malleable as a

22
00:02:07,858 --> 00:02:12,186
language. And that has enabled developers
make it be what they want it to be, to

23
00:02:12,186 --> 00:02:17,095
project their own style of not just API,
but almost language pattern on it. And

24
00:02:17,095 --> 00:02:21,341
create their own innovation networks to
Eric Von Hippel's phrase, or innovation

25
00:02:21,341 --> 00:02:26,011
tool kits on top of it. So, it's not a
language that tries to restrict you to one

26
00:02:26,011 --> 00:02:29,227
paradigm, it's a, a multi-paradigm
language. ≫> I mean there's all

27
00:02:29,227 --> 00:02:33,317
these things where our language comes out
and immediately trips and falls and you

28
00:02:33,317 --> 00:02:36,882
have to sort of, it's okay. ≫> Mm.
Hm. ≫> the second time. But there

29
00:02:36,882 --> 00:02:40,270
wasn't really a trip and fall in
Javascript. Why? ≫> So, you could

30
00:02:40,270 --> 00:02:44,431
say that it hasn't been a version two and
that's true, cause I've tried to work on

31
00:02:44,431 --> 00:02:47,715
what might be a big version two, that was
called the fourth edition, and that

32
00:02:47,715 --> 00:02:51,618
failed. There has been evolution. The web
is all about evolution. People don't quite

33
00:02:51,618 --> 00:02:56,172
see this while you're in the midst of it
because it's micro evolution. But web

34
00:02:56,172 --> 00:03:00,854
pages from the'90's don't all render
properly these days. They don't all work

35
00:03:00,854 --> 00:03:05,501
right and a lot of them are lost and only
available through webarchive.org.

36
00:03:05,501 --> 00:03:10,320
Javascript had enough at the beginning,
enough good parts to use Crawford's phrase

37
00:03:10,320 --> 00:03:14,579
or enough genetic material from other
languages. You know, first class functions

38
00:03:14,741 --> 00:03:19,461
prototypical inheritance from self. The
inheritance of first class functions from

39
00:03:19,461 --> 00:03:24,541
scheme is really kind of a fraud because
scheme is different in many ways and I

40
00:03:24,541 --> 00:03:29,618
couldn't make those, differences manifest.
I, I couldn't do the scheme thing in

41
00:03:29,618 --> 00:03:34,417
Javascript. I was under these marching
orders to make it look like Java. I had

42
00:03:34,417 --> 00:03:39,269
ten days to prototype it. So scheme was
more of a spiritual than an actual

43
00:03:39,269 --> 00:03:44,920
influence. But first class functions are
very powerful, and they, fit with an event

44
00:03:44,920 --> 00:03:50,040
handling, sort of, programming model. I
was inspired by Atkinson's Hypercard. So

45
00:03:50,040 --> 00:03:54,924
that's why you see on click in JavaScript.
Hypercard had this pattern for event

46
00:03:54,924 --> 00:03:59,745
handlers called on, you know, on page,
down or whatever. So. Javascript had

47
00:03:59,745 --> 00:04:04,178
enough good at the beginning to survive.
Now, if you think back though to the mid

48
00:04:04,178 --> 00:04:08,125
90's, Javascript was cursed, because it
was mainly used for annoyances like little

49
00:04:08,125 --> 00:04:11,992
scrolling messages and the status bar at
the bottom of your browser or flashing

50
00:04:11,992 --> 00:04:15,904
images or things that popped up windows
massively. We could have put in controls

51
00:04:15,904 --> 00:04:20,087
for those and we should have. Eventually
browsers Fi refox kind of championed this,

52
00:04:20,087 --> 00:04:23,977
lead this automatic suppression of
annoyances that made it all much better.

53
00:04:23,977 --> 00:04:28,055
And with Moore's Law compounding and with
Javascript getting some evolutionary

54
00:04:28,055 --> 00:04:32,756
improvements in the standards process, it
became really quite fast enough and good

55
00:04:32,756 --> 00:04:37,797
enough in 2004 and five to get the Web 2.0
revolution that was, I think, tied in with

56
00:04:37,797 --> 00:04:42,310
Firefox's retaking market share from IE,
and developers realizing that there was a

57
00:04:42,310 --> 00:04:47,200
client side to the programming stack that
could be expressive and powerful, and

58
00:04:47,200 --> 00:04:52,044
could be fast enough thanks to faster
computers, mainly. ≫> You must've

59
00:04:52,044 --> 00:04:55,775
had some training, some kind of. ≫ Oh,
I've done a lot of. ≫> Set of

60
00:04:55,775 --> 00:04:59,016
experiences. ≫> Yeah. ≫> Thank
kind of got to the point where you could

61
00:04:59,016 --> 00:05:02,586
pull from scheme, and.>> Mm. Hm.
I've implemented a, I was sort of a

62
00:05:02,586 --> 00:05:06,719
language buff when I first entered
computer science. I was a math-physics

63
00:05:06,719 --> 00:05:10,858
major originally, and it ended up
math-computer science when I finally got

64
00:05:10,858 --> 00:05:15,581
my undergraduate degree. So, I was
programming formal language theory applied

65
00:05:15,581 --> 00:05:19,942
to recognizing languages, [inaudible]
analysis, Parsers, automatically

66
00:05:19,942 --> 00:05:25,107
constructed parsers from grammar. I love
that stuff because it was all very pretty

67
00:05:25,107 --> 00:05:30,831
and clean theoretically and it's still is,
it hasn't changed a lot. There's been only

68
00:05:30,831 --> 00:05:36,048
one or two innovations since my time in
the university in the early 80's. So what,

69
00:05:36,048 --> 00:05:40,592
what that gave me was the ability to
quickly knock out, you know sort of a

70
00:05:40,592 --> 00:05:45,627
language interpreter. I could do the, the
parser and the scanner, I could generate

71
00:05:45,627 --> 00:05:50,495
bytecode because Netscape wanted to do a
server side embedding in JavaScript, even

72
00:05:50,495 --> 00:05:54,773
though it could have been three walker or
something that interpreted parts for you.

73
00:05:54,773 --> 00:05:59,047
I mad a bytecode, for it and it was an
internal bytecode, not the Java bytecode

74
00:05:59,047 --> 00:06:02,987
that's become a handicap for Java, I
think. And I knocked all that out really

75
00:06:02,987 --> 00:06:07,540
quickly because I had done it before. I
done it at Silicon Graphics, the field of

76
00:06:07,540 --> 00:06:11,666
network monitoring tools to capture
packets based on expressions over fields

77
00:06:11,666 --> 00:06:15,340
of the various pr otocol headers. I've
done it for fun, just to make my own

78
00:06:15,340 --> 00:06:19,220
languages. And finally, I got to do it
really quickly. The, the speed was an

79
00:06:19,220 --> 00:06:23,285
issue for me. It was partly, we were all
feeling like Microsoft was gonna come

80
00:06:23,285 --> 00:06:27,198
after Netscape because they had tried to
buy Netscape in late '94 for too little

81
00:06:27,198 --> 00:06:31,758
money. I, I'd heard about this, in this
before my time at Netscape. But we also

82
00:06:31,758 --> 00:06:37,020
were in a weird game period with respect
to Java. Because, even at Netscape, some

83
00:06:37,020 --> 00:06:41,082
people thought, well, if we have Java, do
we really need a second language? They

84
00:06:41,082 --> 00:06:46,062
didn't see the benefit of the Visual Basic
companion language for a much larger

85
00:06:46,062 --> 00:06:50,315
cohort of programmers or amateurs,
designers, beginners. To, to write Java is

86
00:06:50,315 --> 00:06:55,866
to write C++ for the Microsoft platform,
that they took a lot of education and

87
00:06:55,866 --> 00:07:00,010
greater pay. It was a higher priced
proposition to get people gluing

88
00:07:00,010 --> 00:07:05,029
components together and designing pages
and filling gaps using JavaScript as they

89
00:07:05,029 --> 00:07:09,053
did in Basic, in Visual Basic and
Microsoft Windows was cheaper and

90
00:07:09,053 --> 00:07:13,456
wider-spread. It also enabled this, user
innovation tool kit approach, to use Von

91
00:07:13,456 --> 00:07:17,635
Hibbel's phrase again, because Javascript
was malleable, because there were so many

92
00:07:17,635 --> 00:07:21,379
web designers, he would see different
schools of thought on how to use it emerge

93
00:07:21,379 --> 00:07:24,641
and this has become quite clear over the
last ten years with the various Javascript

94
00:07:24,641 --> 00:07:28,220
libraries. And I think that's actually an
advantage, as I said earlier, to

95
00:07:28,220 --> 00:07:32,065
Javascript, that we're not telling you,
here's the one way to write it, here's the

96
00:07:32,065 --> 00:07:36,063
one true object oriented paradigm, here's
the only way you should ever make a usable

97
00:07:36,063 --> 00:07:40,008
extraction. It's not umixed, right? It's
hard for beginners. People reinvent

98
00:07:40,008 --> 00:07:43,081
certain wheels, and make mistakes doing
it, or don't have, like having to acquire

99
00:07:43,081 --> 00:07:47,072
a library. But you see jQuery, probably
why, because it gives people this very,

100
00:07:47,245 --> 00:07:51,644
sweet, query and do paradigm. And, and
again it's not mandatory with Javascript,

101
00:07:51,644 --> 00:07:55,628
but a lot of people learn that, and they
think that is Javascript. They think

102
00:07:55,628 --> 00:07:59,782
jQuery is a language, or they think, you
know, jQuery is the tail that wagged the

103
00:07:59,782 --> 00:08:04,699
dog. Jquery is great and John Resig used
to work with us at Mozilla, and, but there

104
00:08:04,699 --> 00:08:08,797
are so many good libraries out there now.
And they're shrinking and becoming more

105
00:08:08,797 --> 00:08:12,931
compositional, which is a good trend. So,
Javascript by being maleable, and sort of

106
00:08:12,931 --> 00:08:16,550
fostering user innovation, I think has,
played a unique role. If I had done

107
00:08:16,550 --> 00:08:21,472
something more rigid, I think it, are
greater when it failed. ≫> I, I just

108
00:08:21,472 --> 00:08:27,014
can't imagine how you would have escaped
from the [inaudible] pattern of C++.

109
00:08:27,014 --> 00:08:31,833
≫> Partly I had to because if I'd
done classes in Javascript back in those

110
00:08:31,833 --> 00:08:35,760
ten days in May in 1995. I think I would
have been told, this is too much like

111
00:08:35,760 --> 00:08:39,751
Java, you're competing with Java, you
know, somebody at Sun would have yelled at

112
00:08:39,751 --> 00:08:43,062
Bill Joy more than they did, and they
might have killed the deal. So, I was

113
00:08:43,062 --> 00:08:47,073
definitely not only under time constraint
but under marketing orders. Make it look

114
00:08:47,073 --> 00:08:51,078
like Java, but don't make it to big for
its bridges. It's just this sort of silly

115
00:08:51,078 --> 00:08:54,428
little brother language, right? The
sidekick to Java. ≫> But then you

116
00:08:54,428 --> 00:08:57,451
put in it's primitives. ≫> I snuck
some stuff in, yeah. ≫> You put some

117
00:08:57,451 --> 00:09:01,802
primitives, you know, like closures and
all those other things that. ≫> huh.

118
00:09:01,802 --> 00:09:05,997
≫> That is like, you can build what
you want. . ≫> Yes, and that. Kind

119
00:09:05,997 --> 00:09:10,532
of went under the radar for a lot of
people. It wasn't all even always there in

120
00:09:10,532 --> 00:09:15,286
a good working order in the first release.
But over the next few years it became not

121
00:09:15,286 --> 00:09:19,450
only well known, I would say more
standardized than well known. Over the

122
00:09:19,450 --> 00:09:23,741
next ten years it became evangelized like
Crawford's [inaudible] of the closure

123
00:09:23,741 --> 00:09:27,817
pattern and good uses you can make with
closures. So people find the malleability

124
00:09:27,817 --> 00:09:31,946
and the expressionist and the power
compelling enough that some people

125
00:09:31,946 --> 00:09:36,506
actually resist any version two. They say,
I don't want you to add cliches or common

126
00:09:36,506 --> 00:09:41,339
special forms for patterns that I'm more
happy writing myself or acquiring at the

127
00:09:41,339 --> 00:09:44,768
library myself. ≫> You, you've
created an abstraction that implement ers

128
00:09:44,775 --> 00:09:48,337
can do crazy things. ≫> Mm-hm.
≫> Where people can rethink what the

129
00:09:48,337 --> 00:09:52,689
interrupters are supposed to do. ≫>
They can. ≫> And they can just say,

130
00:09:52,689 --> 00:09:56,044
okay, here comes V8 and it's [inaudible],
a lot of things differently right?

131
00:09:56,044 --> 00:09:59,280
≫> Optimizations that haven't been
tried. I would, I knew about these

132
00:09:59,280 --> 00:10:03,689
optimizations because I had studied small
talked in self. But nobody gotten the time

133
00:10:03,689 --> 00:10:08,334
and money. Google was maybe first. There
were other efforts going in parallel and

134
00:10:08,334 --> 00:10:13,021
Apple and Mozilla have kept up as best
they can, but V8 deserves a lot of credit

135
00:10:13,021 --> 00:10:17,006
for pushing this forward. It wasn't quite
as first on the scene as they claim

136
00:10:17,006 --> 00:10:20,993
because they all came together in 2008.
But it has been very helpful and it has

137
00:10:20,993 --> 00:10:25,012
shown people what can be done. What's
interesting to me is that you then go and

138
00:10:25,012 --> 00:10:29,233
put different, more intensive workloads on
the language and you see there's a new VA

139
00:10:29,233 --> 00:10:33,325
that should come out of somewhere. It may
not come out of Google because they may

140
00:10:33,325 --> 00:10:37,065
have tired of launching JavaScript. In
fact, I believe DART is a response to

141
00:10:37,065 --> 00:10:41,133
that, by the principals who did VA. They
want to do a language where they don't

142
00:10:41,133 --> 00:10:45,032
have to worry about all this crazy
compatibility. It may not succeed and it

143
00:10:45,032 --> 00:10:49,077
also doesn't give Java script the next
level of performance but I. I believe that

144
00:10:49,077 --> 00:10:53,213
level is there, and it's still improving
in performance much more dramatically than

145
00:10:53,213 --> 00:10:57,177
a language like Java, where the gains are
percents or fractions of percent on the

146
00:10:57,177 --> 00:11:02,207
center of benchmarks. But a lot of HTML5
development now, "HTML5" Javascript, CSS,

147
00:11:02,207 --> 00:11:07,050
Web ADI's beyond what's in HTML5, is
taking off, you're seeing like, Zynga

148
00:11:07,050 --> 00:11:11,075
doing HTML5 only games. It's really coming
faster than some thought, and I talked to

149
00:11:11,075 --> 00:11:15,070
Venture Capitalist Fred Wilson of Union
Square in New York, he said yes, it's

150
00:11:15,070 --> 00:11:18,821
here. He thought it would take years,
it's, we've turned that corner. And so you

151
00:11:18,821 --> 00:11:22,559
call it HTML5, what it really means is
it's the web stack, it's the same stack

152
00:11:22,559 --> 00:11:27,642
you use to right web pages and post to web
apps you can write apps that run in your

153
00:11:27,642 --> 00:11:32,547
device. Apps that are m aybe hosted, maybe
offline. Maybe the line is blurred so that

154
00:11:32,547 --> 00:11:36,574
you can associate them with a URL, but can
also take them on the plane without any

155
00:11:36,574 --> 00:11:56,675
fear that you're going to lose anything by
disconnecting from the internet.
