1
00:00:03,526 --> 00:00:04,268
Hello.

2
00:00:04,268 --> 00:00:07,714
In this video, we're going to talk about
something that I've referred to as

3
00:00:07,714 --> 00:00:09,526
the economy of programming languages.

4
00:00:16,202 --> 00:00:18,524
So the idea behind this video is that,

5
00:00:18,524 --> 00:00:23,172
before we get into the detail of how
languages are implemented or designed,

6
00:00:23,172 --> 00:00:27,601
I wanted to say something about how
languages work in the real world, and

7
00:00:27,601 --> 00:00:31,130
why certain languages are used and
others are not.

8
00:00:31,130 --> 00:00:35,520
If you look around, there's actually a few
obvious questions that come up to anybody

9
00:00:35,520 --> 00:00:39,320
who thinks about programming languages for
more than a few minutes.

10
00:00:39,320 --> 00:00:41,920
One question is, why are there so
many of these things?

11
00:00:41,920 --> 00:00:47,050
We have hundreds, if not thousands,
of programming languages in everyday use,

12
00:00:47,050 --> 00:00:49,760
and why do all of these
things need to exist?

13
00:00:49,760 --> 00:00:53,260
Why wouldn't one programming language,
for example, be enough?

14
00:00:53,260 --> 00:00:55,400
A related question, but
slightly different is,

15
00:00:55,400 --> 00:00:57,360
why are there new programming languages?

16
00:00:57,360 --> 00:01:00,820
Given that we have so
many programming languages already,

17
00:01:00,820 --> 00:01:04,200
what is the need for
new ones to be created?

18
00:01:05,840 --> 00:01:09,040
Finally, how do we know a good
programming language when we see it?

19
00:01:09,040 --> 00:01:12,671
What makes a good programming language,
and what makes a bad programming language?

20
00:01:12,671 --> 00:01:18,964
I just wanted to spend, this video anyway,
talking about these three questions.

21
00:01:18,964 --> 00:01:24,038
As we'll see, I think the answers
to these questions are largely

22
00:01:24,038 --> 00:01:28,744
independent of the technical
aspects of language design and

23
00:01:28,744 --> 00:01:33,463
implementation, but
very interesting in their own right.

24
00:01:33,463 --> 00:01:38,259
Let's begin with the question of why are
there some many programming languages, and

25
00:01:38,259 --> 00:01:42,066
at least a partial answer to this
question is not too hard to come by.

26
00:01:42,066 --> 00:01:46,087
If you think for a few minutes, you'd
realize that the application domains for

27
00:01:46,087 --> 00:01:49,720
programming have very distinctive and
conflicting needs.

28
00:01:49,720 --> 00:01:55,510
That is, it's very hard to design one
language that would actually do everything

29
00:01:55,510 --> 00:02:00,820
in every situation for all programmers,
and let's just go through some examples.

30
00:02:00,820 --> 00:02:06,926
One domain that you might not think
about very much is scientific

31
00:02:06,926 --> 00:02:12,170
computing, so these are all the big
calculations that are done for

32
00:02:12,170 --> 00:02:16,716
engineering applications primarily,
but also big science and

33
00:02:16,716 --> 00:02:23,070
long-running experiments,
simulation experiments.

34
00:02:23,070 --> 00:02:26,360
What are the needs for such computations?

35
00:02:26,360 --> 00:02:30,250
Well, typically,
you need very good floating point support.

36
00:02:30,250 --> 00:02:31,290
I'll abbreviate that as FP.

37
00:02:32,360 --> 00:02:35,720
You need good support for arrays and

38
00:02:35,720 --> 00:02:40,873
operations on arrays because
the most common data type

39
00:02:40,873 --> 00:02:45,691
in most scientific applications
is large arrays of

40
00:02:45,691 --> 00:02:51,196
floating point numbers, and
you also need parallelism.

41
00:02:51,196 --> 00:02:54,345
Today to get sufficient
performance you really have to

42
00:02:54,345 --> 00:02:57,220
exploit parallelism in these applications,
and

43
00:02:57,220 --> 00:03:00,926
not every language actually
supports all of these things well.

44
00:03:00,926 --> 00:03:03,839
This is actually not an exhaustive
list of the things you need, but

45
00:03:03,839 --> 00:03:06,600
it's a few distinctive
things that are needed.

46
00:03:06,600 --> 00:03:11,240
One language that has traditionally done
a very good job of supporting these things

47
00:03:11,240 --> 00:03:16,090
is Fortran, and Fortran is still heavily
used in the scientific community.

48
00:03:16,090 --> 00:03:18,940
It was originally designed for
scientific applications.

49
00:03:18,940 --> 00:03:26,090
If you recall, the name means formula
translation, and it has evolved over time.

50
00:03:26,090 --> 00:03:29,090
It doesn't really look much like
the original language anymore,

51
00:03:29,090 --> 00:03:32,950
but it's always retained this core
constituency in scientific computing and

52
00:03:32,950 --> 00:03:36,040
remains one of the leading
languages in that domain.

53
00:03:37,250 --> 00:03:43,044
Now, a completely different kind of
domain is business applications.

54
00:03:47,107 --> 00:03:48,270
What do you need here?

55
00:03:48,270 --> 00:03:51,050
Well, so here you're going to
need things like persistence.

56
00:03:52,620 --> 00:03:55,010
You don't want to lose your data.

57
00:03:55,010 --> 00:03:57,440
Businesses go to a lot of
trouble to get the data, and

58
00:03:57,440 --> 00:04:03,470
they need a way to hold onto it, and
they want that to be extremely reliable.

59
00:04:03,470 --> 00:04:08,150
You're going to need good report
facilities because, typically,

60
00:04:08,150 --> 00:04:12,490
you want to do something with the data,
so you need good facilities for

61
00:04:12,490 --> 00:04:17,670
report generation, and, also,
you want to be able to exploit the data.

62
00:04:17,670 --> 00:04:20,970
The data is actually, in many modern
businesses, one of the most valuable

63
00:04:20,970 --> 00:04:26,630
assets, and so you need good facilities
for asking questions about your data.

64
00:04:26,630 --> 00:04:28,900
Let's call it data analysis.

65
00:04:28,900 --> 00:04:32,710
Again, this is not an exhaustive
list of things that you need,

66
00:04:32,710 --> 00:04:35,260
but it is representative, I would say.

67
00:04:36,520 --> 00:04:41,645
Probably the most common, or one of
the most commonly used languages for

68
00:04:41,645 --> 00:04:46,815
this class of applications, is SQL,
the database query language.

69
00:04:46,815 --> 00:04:52,255
Relational databases and
their associated programming languages,

70
00:04:52,255 --> 00:04:57,975
but most notably SQL, really
dominate in this application domain.

71
00:04:59,155 --> 00:05:03,347
Then, another domain, let's do one more,
is systems programming.

72
00:05:06,423 --> 00:05:10,845
By this, I mean things like embedded
systems, things that control devices,

73
00:05:10,845 --> 00:05:15,410
operating systems, things like that,
and what are the characteristics here?

74
00:05:15,410 --> 00:05:19,440
Well, we need very low level
control of the resources.

75
00:05:19,440 --> 00:05:24,220
The whole point of systems programming is
to do a good job of managing resources,

76
00:05:24,220 --> 00:05:28,510
and so we really want fine grain
control over the resources.

77
00:05:30,340 --> 00:05:34,664
Often there's a time aspect, so you might
have some real-time constraints, so

78
00:05:34,664 --> 00:05:36,805
you need to be able to reason about time.

79
00:05:40,544 --> 00:05:43,595
Because these are actually,
again, devices, and

80
00:05:43,595 --> 00:05:47,560
they need to be able to react
within certain amounts of time.

81
00:05:47,560 --> 00:05:50,010
If it's a network device or
something like that,

82
00:05:50,010 --> 00:05:53,590
you need to be responsive to the network,
lots and lots of things.

83
00:05:53,590 --> 00:05:58,120
Lots and lots of examples where timing is
important, and these are just two aspects,

84
00:05:58,120 --> 00:06:00,750
and I'm running out of space here,
so I'll just stop with that.

85
00:06:00,750 --> 00:06:04,080
But again, these are representative
of the kinds of things you need

86
00:06:04,080 --> 00:06:05,110
in systems programming.

87
00:06:06,260 --> 00:06:10,200
Probably today, still the most widely
used systems programming language, or

88
00:06:10,200 --> 00:06:14,300
family of systems programming languages,
is the C and,

89
00:06:14,300 --> 00:06:17,672
to some extent, C++ family of languages.

90
00:06:19,330 --> 00:06:22,920
As you can see, the requirements in these
different domains are just completely

91
00:06:22,920 --> 00:06:24,203
different from each other.

92
00:06:24,203 --> 00:06:28,105
What's important in one domain,
or most important in one domain,

93
00:06:28,105 --> 00:06:31,732
is not the same as in another domain,
and it's easy, I think,

94
00:06:31,732 --> 00:06:36,044
to imagine at least that it would be
difficult to integrate all of these into

95
00:06:36,044 --> 00:06:39,351
one system that would do a good
job on all of these things.

96
00:06:43,575 --> 00:06:45,310
That brings us to our second question.

97
00:06:45,310 --> 00:06:47,540
Why are there new programming languages?

98
00:06:47,540 --> 00:06:50,000
Okay.
There are so many languages in existence.

99
00:06:50,000 --> 00:06:52,760
Why would we ever need
to design a new one?

100
00:06:54,190 --> 00:06:57,380
I'm going to begin the answer to this
question with an observation that,

101
00:06:57,380 --> 00:07:01,670
at first glance, has nothing to
do with the question at all, so

102
00:07:01,670 --> 00:07:03,220
let me just take a moment to explain it.

103
00:07:03,220 --> 00:07:07,360
I claim that programmer training is the
dominant cost for a programming language,

104
00:07:07,360 --> 00:07:08,710
and I think this is really important,

105
00:07:08,710 --> 00:07:13,500
so I'm just going to emphasize
the bit that's important here.

106
00:07:13,500 --> 00:07:14,940
It's the programmer training.

107
00:07:14,940 --> 00:07:18,300
The cost of educating
the programmers in the language.

108
00:07:18,300 --> 00:07:20,580
If you think about a programming language,

109
00:07:20,580 --> 00:07:24,660
there are several things that have to
happen for that language to get used.

110
00:07:24,660 --> 00:07:27,570
Somebody has to design it, but
that's really not very expensive.

111
00:07:27,570 --> 00:07:31,030
That's just one or
a very few people, typically.

112
00:07:31,030 --> 00:07:35,640
Somebody has to build a compiler, but that
is also not actually all that expensive.

113
00:07:35,640 --> 00:07:37,310
Maybe 10 to 20 people for

114
00:07:37,310 --> 00:07:40,740
a really large compiler project
can build quite a good compiler.

115
00:07:41,890 --> 00:07:45,387
The real cost is in all the users,
in educating them.

116
00:07:45,387 --> 00:07:48,692
If you have thousands or
hundreds of thousands or

117
00:07:48,692 --> 00:07:51,754
millions of users of a language,
the time and

118
00:07:51,754 --> 00:07:57,095
money that it takes to teach them all
the language is really the dominant cost.

119
00:07:57,095 --> 00:08:01,375
Here I don't mean just the actual
dollar expense of buying textbooks and

120
00:08:01,375 --> 00:08:04,140
taking classes and things like that.

121
00:08:04,140 --> 00:08:07,900
It's also the fact that the programmers
have to decide that it's worth it for

122
00:08:07,900 --> 00:08:12,640
them to learn this language, and many
programmers learn on their own time, but

123
00:08:12,640 --> 00:08:14,095
that's a use of their time.

124
00:08:14,095 --> 00:08:19,180
The expense of their time is a real
economic cost, and so, if you think about

125
00:08:19,180 --> 00:08:23,680
the number of hours that it takes to teach
a population of a million programmers

126
00:08:23,680 --> 00:08:29,019
a language, that's really quite
a significant economic investment.

127
00:08:30,040 --> 00:08:30,700
All right.

128
00:08:30,700 --> 00:08:35,080
Now, from this observation, we can make
a couple of predictions pretty easily.

129
00:08:35,080 --> 00:08:37,980
Again, these are just predictions,

130
00:08:37,980 --> 00:08:43,080
now, that follow from this claim
if you believe that it's true.

131
00:08:43,080 --> 00:08:48,463
Let me erase that and
fix it, so first prediction

132
00:08:48,463 --> 00:08:54,651
is that widely-used languages
will be slow to change.

133
00:09:01,373 --> 00:09:02,650
Why should that be true?

134
00:09:02,650 --> 00:09:07,100
Well, if I make a change to
a language that lots of people use,

135
00:09:07,100 --> 00:09:11,730
I have to educate everybody in
that community about the change.

136
00:09:11,730 --> 00:09:15,310
Even relatively minor
language extensions or

137
00:09:15,310 --> 00:09:19,740
small changes to syntax small new
features, even just simple changes in

138
00:09:19,740 --> 00:09:22,560
the interface of the compiler,
if you have a lot of users,

139
00:09:22,560 --> 00:09:28,250
it takes a very long time and it's quite
expensive to teach them all about that.

140
00:09:28,250 --> 00:09:35,420
As languages become widely used,
their rate of change will slow down.

141
00:09:36,670 --> 00:09:40,700
This predicts that over time, as the world
of programming grows, as we have more and

142
00:09:40,700 --> 00:09:43,960
more programmers in the world, we would
expect the most popular languages,

143
00:09:43,960 --> 00:09:48,780
which will have larger and larger user
bases, larger and larger programmer bases,

144
00:09:48,780 --> 00:09:53,620
to become more and more ossified,
to evolve more and more slowly.

145
00:09:53,620 --> 00:09:54,340
I think, actually,

146
00:09:54,340 --> 00:09:57,830
what you see in practice is very
consistent with that prediction.

147
00:09:59,080 --> 00:10:04,120
Now, at the other end of the spectrum,
this same observation

148
00:10:04,120 --> 00:10:08,640
makes an almost what appears to
be a contradictory prediction,

149
00:10:08,640 --> 00:10:12,670
which is that it's easy
to start a new language.

150
00:10:16,600 --> 00:10:21,730
That, in fact, the cost of starting up a
new language is very low, and why is that?

151
00:10:21,730 --> 00:10:26,420
Well, because you start zero users, and
so there's essentially zero training cost

152
00:10:26,420 --> 00:10:29,730
at the beginning, and then,
even when you have just a few users,

153
00:10:29,730 --> 00:10:35,490
the cost of teaching them the changes
in the language is not very high.

154
00:10:35,490 --> 00:10:38,960
New languages can evolve
much more quickly.

155
00:10:38,960 --> 00:10:43,342
They can adapt much more
quickly to changing situations.

156
00:10:43,342 --> 00:10:48,560
It's just not very costly to experiment

157
00:10:48,560 --> 00:10:52,485
with a new language at all, and there's
a tension between these two things.

158
00:10:52,485 --> 00:10:55,415
Okay?

159
00:10:55,415 --> 00:11:00,605
When is a programmer going to choose
between a widely used existing language

160
00:11:00,605 --> 00:11:05,319
that perhaps doesn't change very
quickly and a brand new language?

161
00:11:05,319 --> 00:11:09,358
They're going to choose it if their

162
00:11:09,358 --> 00:11:14,620
productivity now exceeds
the training cost.

163
00:11:16,500 --> 00:11:19,610
If they perceive that by
spending a little bit of time and

164
00:11:19,610 --> 00:11:23,848
money to learn this new language they're
going to be much more productive over

165
00:11:23,848 --> 00:11:27,970
a relatively short period of time,
then they're going to make the switch.

166
00:11:27,970 --> 00:11:29,107
Okay?

167
00:11:29,107 --> 00:11:31,400
When is this likely to happen?

168
00:11:32,610 --> 00:11:39,006
Well, putting this all together,
languages are most likely to be adopted.

169
00:11:44,148 --> 00:11:45,379
To fill a void.

170
00:11:50,080 --> 00:11:54,220
Okay, and, again, this is a prediction
that follows from the fact of programmer

171
00:11:54,220 --> 00:11:55,606
training is the main cost.

172
00:11:55,606 --> 00:11:57,326
What do I mean by this?

173
00:11:57,326 --> 00:12:03,105
Well, what I mean is that programming
languages exist for a purpose.

174
00:12:03,105 --> 00:12:05,165
People use them to get work done, and

175
00:12:05,165 --> 00:12:08,953
because we're still in the middle
of the information revolution,

176
00:12:08,953 --> 00:12:12,417
there are new application domains
coming along all the time.

177
00:12:12,417 --> 00:12:17,381
There are new kinds of programming
that emerge every few years, or

178
00:12:17,381 --> 00:12:19,970
even more often than that.

179
00:12:19,970 --> 00:12:21,940
In terms of recent history,

180
00:12:21,940 --> 00:12:25,660
mobile applications are now
something that's relatively new, and

181
00:12:25,660 --> 00:12:30,030
there's a lot of new technology built
up to support mobile computing.

182
00:12:30,030 --> 00:12:34,010
A few years ago it was the Internet itself
was the new programming platform, and

183
00:12:34,010 --> 00:12:36,935
a bunch of new programming
languages like Java, in particular,

184
00:12:36,935 --> 00:12:41,750
got started during that time.

185
00:12:41,750 --> 00:12:46,460
New programming niches open up because the
technology changes, what people want to

186
00:12:46,460 --> 00:12:51,360
do with software changes, and this
creates new opportunities for languages.

187
00:12:51,360 --> 00:12:56,410
The old languages are slow to change,
and so they have some difficulty

188
00:12:58,050 --> 00:13:02,040
adapting to fit these new domains.

189
00:13:02,040 --> 00:13:05,610
They aren't really necessarily well-suited
to them for the reasons we talked about

190
00:13:05,610 --> 00:13:10,480
on the previous slide with the previous
question because it's hard to have

191
00:13:10,480 --> 00:13:16,180
one language that incorporates
all the features you would want.

192
00:13:16,180 --> 00:13:19,920
The new languages are not necessarily
perfect for these application domains.

193
00:13:19,920 --> 00:13:24,360
They're slow to adapt to
the new situation, and

194
00:13:24,360 --> 00:13:26,490
this tends to call forth new languages.

195
00:13:26,490 --> 00:13:31,410
When there's a new opportunity in
some application domain, if there

196
00:13:31,410 --> 00:13:35,329
are enough programmers to support the
language, often a new language will arise.

197
00:13:37,570 --> 00:13:41,560
I just want to point out another
prediction that can be made from this

198
00:13:41,560 --> 00:13:46,251
one observation, that programmer training,
again, I'll underline that,

199
00:13:46,251 --> 00:13:49,206
is the dominant cost for
a programming language.

200
00:13:49,206 --> 00:13:51,189
That is that new languages.

201
00:13:55,684 --> 00:13:57,343
Tend to look like old languages.

202
00:14:06,665 --> 00:14:10,700
That is, that new languages are rarely,
if ever, completely new.

203
00:14:10,700 --> 00:14:15,940
They have a family resemblance
to some predecessor language,

204
00:14:15,940 --> 00:14:19,890
sometimes a number of predecessor
languages, and why is that?

205
00:14:20,950 --> 00:14:24,490
Well, partly that it's hard to think of
truly new things, but also, I think that

206
00:14:24,490 --> 00:14:29,280
there's an economic benefit to this,
namely that it reduces the training cost.

207
00:14:29,280 --> 00:14:31,760
By having your new language
look like an old language,

208
00:14:31,760 --> 00:14:35,380
by leveraging off what people
already know about the old language,

209
00:14:35,380 --> 00:14:37,520
you make it easier for
people to learn the new language.

210
00:14:37,520 --> 00:14:39,640
You make them learn it more quickly, and

211
00:14:39,640 --> 00:14:44,990
the most classic example
of this is Java versus C++.

212
00:14:44,990 --> 00:14:49,670
Where Java was designed to
look a lot like C++, and

213
00:14:49,670 --> 00:14:53,520
that was, I think,
very conscious to make it easy for

214
00:14:53,520 --> 00:14:57,210
all of the existing C++ programmers
to start programming in Java.

215
00:15:00,960 --> 00:15:04,922
Finally, we can ask ourselves,
what is a good programming language?

216
00:15:04,922 --> 00:15:09,623
Here, unfortunately,
the situation is much less clear.

217
00:15:09,623 --> 00:15:16,652
I would make just one claim,
that there is no, and I'll emphasize no,

218
00:15:16,652 --> 00:15:21,820
universally accepted metric for
language design.

219
00:15:26,590 --> 00:15:28,020
What do I mean by that?

220
00:15:28,020 --> 00:15:33,820
Well, I guess,
the most important part of this

221
00:15:33,820 --> 00:15:37,980
statement is the universally accepted bit,
so

222
00:15:37,980 --> 00:15:41,630
I mean that people don't agree
on what makes a good language.

223
00:15:41,630 --> 00:15:45,580
There are lots of metrics out there, and
people have proposed lots of ways of

224
00:15:45,580 --> 00:15:50,800
measuring programming languages,
but most people don't

225
00:15:50,800 --> 00:15:55,750
believe that these are very good measures,
and there is certainly no consensus.

226
00:15:55,750 --> 00:15:58,430
If you just look at
the world of programmers,

227
00:15:58,430 --> 00:16:02,050
they can't agree on what the best language
is, and to convince yourselves of this,

228
00:16:02,050 --> 00:16:07,007
just go and take a look at any of the many
Newsgroup posts where people get into

229
00:16:07,007 --> 00:16:11,220
semi-religious arguments about
why one group of languages, or

230
00:16:11,220 --> 00:16:14,159
particular language,
is better than another language.

231
00:16:15,670 --> 00:16:19,755
Even in the research community,
in the scientific community and

232
00:16:19,755 --> 00:16:22,949
among the people who design languages,
I would say

233
00:16:22,949 --> 00:16:27,937
that there is no universally accepted
consensus on what makes a good language.

234
00:16:27,937 --> 00:16:31,699
To just kind of illustrate
the difficulties in trying to come up with

235
00:16:31,699 --> 00:16:35,461
such a metric, let me discuss one
that I've heard people propose,

236
00:16:35,461 --> 00:16:38,502
in all seriousness, and
that is that a good language.

237
00:16:42,971 --> 00:16:44,570
Is one people use.

238
00:16:50,400 --> 00:16:54,400
Let me put a question mark on that
because I don't believe this statement,

239
00:16:56,320 --> 00:17:00,130
and I think, with a moment's reflection,

240
00:17:00,130 --> 00:17:04,140
I can convince you that
this isn't a great measure.

241
00:17:04,140 --> 00:17:06,770
On the positive side,
I guess, the argument for

242
00:17:06,770 --> 00:17:10,060
this is that it's a very clear measure.

243
00:17:10,060 --> 00:17:11,770
It measures the popularity
of the language.

244
00:17:11,770 --> 00:17:14,319
How many people are actually using it,
and presumably

245
00:17:15,450 --> 00:17:19,380
languages that are more widely used
are more widely used for a good reason.

246
00:17:19,380 --> 00:17:24,323
In some sense, perhaps, they are better
languages, but this would imply,

247
00:17:24,323 --> 00:17:28,203
if you believe this and
follow it to its logical conclusion,

248
00:17:28,203 --> 00:17:30,805
that Visual Basic is the best language.

249
00:17:34,486 --> 00:17:38,027
Yeah, above all other
programming languages, and

250
00:17:38,027 --> 00:17:41,020
I have nothing against Visual Basic.

251
00:17:41,020 --> 00:17:45,700
It's a well-designed system, but I don't
even think the designers of Visual Basic

252
00:17:45,700 --> 00:17:50,820
would claim that it is, in fact,
the world's best programming language.

253
00:17:50,820 --> 00:17:55,110
As we saw in the discussion that
we just had, there are many,

254
00:17:55,110 --> 00:17:58,860
many other factors besides
technical excellence

255
00:17:58,860 --> 00:18:03,230
that go into whether a programming
language is widely used or not.

256
00:18:03,230 --> 00:18:07,820
In fact, technical excellence is probably
not even the most important reason

257
00:18:07,820 --> 00:18:09,330
that a language might be used.

258
00:18:09,330 --> 00:18:15,030
It has much more to do with
whether it addresses a niche or

259
00:18:15,030 --> 00:18:18,410
an application domain for
which there isn't a better tool.

260
00:18:18,410 --> 00:18:21,430
Then, once it's established and has lots
of users, of course, there's inertia and

261
00:18:21,430 --> 00:18:23,960
history that aid it in surviving.

262
00:18:23,960 --> 00:18:30,560
That's why we still have FORTRAN and COBOL
and lots of other languages from long,

263
00:18:30,560 --> 00:18:34,600
long ago that we could, if we were
starting over today, design much better.

264
00:18:37,020 --> 00:18:40,280
To conclude this video on the economy
of programming languages,

265
00:18:40,280 --> 00:18:44,360
I think the two most important things to
remember are that application domains have

266
00:18:44,360 --> 00:18:47,770
conflicting needs, and, therefore,

267
00:18:47,770 --> 00:18:52,440
it's difficult to design one system

268
00:18:54,640 --> 00:18:57,590
that incorporates everything
that you would like to have.

269
00:18:59,470 --> 00:19:04,030
You can't get all the features
that you would like into

270
00:19:04,030 --> 00:19:08,070
a single system in a coherent design,
at least it's very hard to do that, and so

271
00:19:08,070 --> 00:19:14,320
it takes a lot of time to add new
features to existing systems.

272
00:19:14,320 --> 00:19:18,844
The second point is that programmer
training is the dominant cost for

273
00:19:18,844 --> 00:19:24,382
a programming language, and together
these two things, these two observations,

274
00:19:24,382 --> 00:19:28,360
these really explain why we
get new programming languages.

275
00:19:28,360 --> 00:19:33,026
Because the old languages are difficult
to change, and when we have new

276
00:19:33,026 --> 00:19:38,472
opportunities, it's often easier and more
direct to just design the language for

277
00:19:38,472 --> 00:19:43,218
those rather than trying to move
the entire community of programmers and

278
00:19:43,218 --> 00:19:47,143
existing systems to accommodate
those new applications.

