
Growing a Language (1998) [video] - tosh
https://www.youtube.com/watch?v=lw6TaiXzHAE
======
tikhonj
Absolutely my favorite tech talk—brilliant idea that's explained so well it
seems obvious in hindsight, even though it really wasn't. It's rare for a
single talk to change my fundamental way of thinking about an area I already
care about (programming language design), and "Growing a Language" managed it
in a _big_ way.

It applies to more than just language design too. Why do I love Emacs so much?
It isn't the idiosyncratic terminology or weird keybindings, it's the fact
that Emacs is an editor that grows. Once I understood basic Elisp, there was
no real friction to take Emacs and start molding it to exactly my needs and
preferences. Something I don't like? Something that's missing? I don't have to
spend hours setting up a plugin to fix it; chances are it will only take a few
lines to change whatever I want to change, and I can use Emacs's remarkable
discovery features to quickly find _which_ lines those are.

Why do people swear by command-line invocations and bash? Bash _is awful_. But
it's an environment that grows in a way that I've never seen with GUI apps. A
small set of simple tools and a universal way to compose them is remarkably
powerful, even if it's as awkward and error-prone as POSIX shell scripting.

Excel? I don't use it myself, but I've seen the same thing from Excel power
users: it goes beyond mere calculations to letting people seamlessly build
what they need _on top_ of Excel. Excel is integral to the modern world in a
way that no other pieces of office software is because it can grow to solve
complex problems in a way other tools can't. (With, as I've seen working at a
large company, occasionally terrifying consequences.)

What I would really love to see next is an alternative to Jupyter that can
grow in the same way. Maybe gtoolkit[1] is a candidate? That's what I'm
exploring now, and it's pretty exciting so far.

[1]: [https://gtoolkit.com/](https://gtoolkit.com/)

~~~
datalus
I used to work for a company that made simulation based corporate training
games. All the data was modeled in Excel and served as a database to read from
and write back to during runtime.

The frontend was written in Flash. I was the sole frontend developer for one
of the projects in this space and the backend had always amazed me. The Excel
sheets were nuts :D

~~~
stainforth
Training for what corporate purposes?

~~~
datalus
It was back in '07-'09, we would take a few server laptops and a whole bunch
of loaner laptops out to internal corporate seminars/conventions at like Bank
of America, Hilton, etc.

It appears to still be active but using more modern devices and UX. [0]

0: [https://www.abilitie.com/executive-
challenge](https://www.abilitie.com/executive-challenge)

------
dang
Previous threads about this classic, but HN has perhaps not really done it
justice yet:

2018:
[https://news.ycombinator.com/item?id=16847691](https://news.ycombinator.com/item?id=16847691)

2015:
[https://news.ycombinator.com/item?id=9918286](https://news.ycombinator.com/item?id=9918286)

2015:
[https://news.ycombinator.com/item?id=10153391](https://news.ycombinator.com/item?id=10153391)

2012:
[https://news.ycombinator.com/item?id=3744125](https://news.ycombinator.com/item?id=3744125)
(seanmcdirmid was there!)

2011:
[https://news.ycombinator.com/item?id=2359174](https://news.ycombinator.com/item?id=2359174)

2009:
[https://news.ycombinator.com/item?id=626380](https://news.ycombinator.com/item?id=626380)

2009 (2 comments):
[https://news.ycombinator.com/item?id=827107](https://news.ycombinator.com/item?id=827107)

2008:
[https://news.ycombinator.com/item?id=152311](https://news.ycombinator.com/item?id=152311)

2007 (1 comment):
[https://news.ycombinator.com/item?id=92542](https://news.ycombinator.com/item?id=92542)

------
pfarrell
This is a great example of content that should get reposted every six months
or so. Every budding programmer should digest it.

Also, this line cracks me up every time.

“I have to say the full phrase “Java programming language,” for there is a guy
who works where I do who deals with the laws of marks of trade, and he told me
I have to say it that way.”

------
mathgladiator
This was good, and much needed.

I'm currently writing my own programming language, and I'm thinking about how
to I encourage growth since I'm realizing that I'm still at the starting line.

I'm sorting out how I balance out "telling people and inviting people in"
versus "how do I polish what I want to polish?" versus "use the damn thing to
make things!"

The language is: [http://www.adama-lang.org/](http://www.adama-lang.org/) and
it is a work in progress

~~~
samatman
Very cool. Focusing on a domain is a good idea and this strikes me as a good
domain to focus on.

While I've never managed to write anything useful in Inform 7, I'm glad it
exists; it stretched my idea of what a programming language can be.

Good luck!

------
Naac
This talk is also available in PDF form:

[https://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf](https://www.cs.virginia.edu/~evans/cs655/readings/steele.pdf)

Although I would agree watching this talk with Steele's delivery is best.

------
nabla9
"And you're right: we were not out to win over the Lisp programmers; we were
after the C++ programmers. We managed to drag a lot of them about halfway to
Lisp. Aren't you happy?"

    
    
      – Guy Steele responding CL programmer criticism of Java

------
roca
I was lucky enough to be at that talk in '98\. I distinctly remember the "what
the hell is going on" vibe at the start. It felt like a Christopher Nolan
movie.

------
pixelmonkey
One of my favorite tech talks of all time. Really worth just sitting down and
truly listening to its full length, regardless of what programming tradition
you come from. I wrote some commentary on it related to a different HN post
here:

[https://news.ycombinator.com/item?id=10568382](https://news.ycombinator.com/item?id=10568382)

------
balfirevic
It's not often that "art" and "computer science lecture" sets overlap.

------
nabla9
Steele is the definition of "language lawyer". He knows programming languages.
He has been part of ANSI C, Common Lisp, Scheme and Java language
standardization.

He has coauthored "C: A Reference Manual", Common Lisp the Language,
Performance Fortran Handbook, and The Java Language Specification.

~~~
dang
Doesn't language lawyer usually imply pedantry? That's not Guy Steele. How
about language ascended master?

[https://en.wikisource.org/wiki/Lambda_Papers](https://en.wikisource.org/wiki/Lambda_Papers)

~~~
nabla9
_language lawyer_ : n.. A person, usually an experienced or senior software
engineer, who is intimately familiar with many or most of the numerous
restrictions and features (both useful and esoteric) applicable to one or more
computer programming languages. A language lawyer is distinguished by the
ability to show you the five sentences scattered through a 200-plus-page
manual that together imply the answer to your question “if only you had
thought to look there”.

[http://catb.org/jargon/html/L/language-
lawyer.html](http://catb.org/jargon/html/L/language-lawyer.html)

------
ngrilly
One of the best tech talk ever. Great example of a mise en abyme.

~~~
gjvc
[https://en.wikipedia.org/wiki/Mise_en_abyme](https://en.wikipedia.org/wiki/Mise_en_abyme)

~~~
ngrilly
Thanks for sharing a link explaining. I realize it's not obvious :)

------
swyx
so does anyone know why he apparently failed to get his proposed changes
through? given that the talk was so well regarded, it's curious it had zero
impact

------
db48x
Worth watching even if you hate Java.

------
throwawaw
I can't believe I had never seen this. Thank you.

------
jdontillman
For some reason that version has a large number of audio glitches.

But very recently the Computer History Museum published a cleaned-up version:

[https://youtu.be/lw6TaiXzHAE](https://youtu.be/lw6TaiXzHAE)

Good!

~~~
dang
Changed from
[https://www.youtube.com/watch?v=_ahvzDzKdB0](https://www.youtube.com/watch?v=_ahvzDzKdB0).
Thanks!

------
DreamOther
Its funny, I enjoy python for different reasons. The import statement and all
the "allowing the language to grow" is great, but not what makes me use it
over competitors. In fact, I'd argue pip and virtualenv are kind of worse to
use than npm, go get, rust crates etc - some might disagree here, but I feel
the experience could be a lot better.

Main reasons I love and continue to use python...

1\. Python 2/3 break. A breaking update sounds scary, but getting rid of the
accumulation of "language warts" all at once was literally amazing. And by all
at once, I mean a gradual transition over a decade. I also think Node's way of
having individual API's have an independent "stability" metric that is
unrelated to the platform or language is another decent way of handling this.

2\. They've taken great care with the most common data structures, with regard
to both performance and ergonomics. A python dictionary is wonderful to use
and is actually quite fast (specialized for common cases and transparently
alters hashing algorithms depending on input). You can use any immutable data
structure as a key (tuples!). Its so nice.

3\. For somewhat complicated work, the standard library actually has all the
good stuff baked in. heapq, deque, bisect, permutations, combinations, lru,
and the list goes on. Then convenience oriented data structures like Counter,
defaultdict and such that other languages would balk at adding. When you have
stuff like list and dictionary comprehensions layered on top of these baseline
algorithmic tools, it feels __so damn good __. Do these things have warts?
Yes, sometimes. Like heapq is default min heap with no way to change the
behavior other than negating the input /output - but I don't care, its there,
and its usable and you can explore it to the edges pretty quickly.

The only still-pretty-shitty parts that makes it less than perfect in my eyes
is the GIL combined with asyncio/async/await being modal.

This is just a guess, but it seems like languages that over-specify internals
paired with a goal of never breaking backwards compatibility are doomed to ...
not fail, clearly, but to be a pain in the ass to use forever. Take
unordered_map from C++: what an unholy mess made out of the most common data
structure in computer science. Yes, you can use Google's swiss table impl in
Abseil or some competitor, but the fact that I have an unwieldy poorly
designed hash map baked into standard library for all time is such a missed
opportunity. std::async was a huge missed opportunity as well (bad default
arguments, not guaranteed to be backed by a thread pool).

In short, not allowing for mistakes is a tragedy that creates pressure to
over-specify, which I think damages __everything __in ways you cannot predict.

------
chubot
At the beginning of the talk he needs to define "person" in terms of one word
axioms. So he takes "man" as an axiom, and says:

 _A woman is like a man but not of the same sex_

and

 _A person is a man or woman_

How about just:

 _A person is a kind of ape. It can talk, make tools, and walk on two legs. It
has hands and thumbs._

~~~
buzzwordninja
Because that does not illustrate the concept of building a language as clearly
and succinctly.

