
Great Works in Programming Languages - timf
http://www.cis.upenn.edu/~bcpierce/courses/670Fall04/GreatWorksInPL.shtml
======
exDM69
I'm a bit surprised not to see any papers by Simon Peyton-Jones (of Haskell
fame) on the list. I guess most of the papers on this list were old classics
and many of the authors have already passed away or retired.

SPJ is one of the most relevant programming language researchers of the past
20 years, but maybe his work is "too new" for this list. Reading his books and
papers taught sparked the interest in programming languages in me.

~~~
dscrd
Perhaps it's still questionable whether his work will have any actual effect
on the industry as a whole, as opposed to just academia.

~~~
octo_t
Are you serious? SPJ's work has been incredibly instrumental in bringing
functional features (such as LINQ) to C#

See: [http://www.infoq.com/interviews/simon-peyton-jones-about-
mai...](http://www.infoq.com/interviews/simon-peyton-jones-about-mainstream-
programming-languages)

[http://research.microsoft.com/en-
us/um/people/simonpj/papers...](http://research.microsoft.com/en-
us/um/people/simonpj/papers/haskell-retrospective/ecoop-july09.pdf)

------
angersock
You know what'd be even better?

A public vault of this articles so we can all learn easily instead of having
to go through journal publishers.

EDIT: Why thank you, Lazyweb!

~~~
lambda
Greatest of the great:

C. A. R. Hoare. An axiomatic basis for computer programming:
[http://sigpl.or.kr/school/2005w/slides/2_17_1.pdf](http://sigpl.or.kr/school/2005w/slides/2_17_1.pdf)

Peter J. Landin. The next 700 programming languages:
[http://www.thecorememory.com/Next_700.pdf](http://www.thecorememory.com/Next_700.pdf)

Robin Milner. A theory of type polymorphism in programming:
[http://courses.engr.illinois.edu/cs421/sp2012/project/milner...](http://courses.engr.illinois.edu/cs421/sp2012/project/milner-
polymorphism.pdf)

Gordon Plotkin. Call-by-name, call-by-value, and the λ-calculus :
[http://www.sciencedirect.com/science/article/pii/03043975759...](http://www.sciencedirect.com/science/article/pii/0304397575900171)
(PDF link at upper right of page)

John C. Reynolds. Towards a theory of type structure:
[http://repository.cmu.edu/cgi/viewcontent.cgi?article=2289&c...](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2289&context=compsci&sei-
redir=1)

Pretty great works:

Luca Cardelli. A semantics of multiple inheritance:
[http://lucacardelli.name/Papers/Inheritance.pdf](http://lucacardelli.name/Papers/Inheritance.pdf)

Luis Damas and Robin Milner. Principal type schemes for functional programs:
[http://web.cs.wpi.edu/~cs4536/c12/milner-
damas_principal_typ...](http://web.cs.wpi.edu/~cs4536/c12/milner-
damas_principal_types.pdf)

Edsger W. Dijkstra. Recursive programming:
[http://oai.cwi.nl/oai/asset/9253/9253A.pdf](http://oai.cwi.nl/oai/asset/9253/9253A.pdf)

Edsger W. Dijkstra. Go to statement considered harmful:
[http://www.massey.ac.nz/~kahawick/159331/Goto-Harmful-
Dijkst...](http://www.massey.ac.nz/~kahawick/159331/Goto-Harmful-Dijkstra.pdf)

William A. Howard. The formulas-as-types notion of construction:
[http://www.cs.cmu.edu/~crary/819-f09/Howard80.pdf](http://www.cs.cmu.edu/~crary/819-f09/Howard80.pdf)

Robert Kowalski. Predicate logic as programming language:
[http://65.99.230.10:81/collect/computer/index/assoc/HASH0183...](http://65.99.230.10:81/collect/computer/index/assoc/HASH0183.dir/doc.pdf)

Peter J. Landin. The mechanical evaluation of expressions:
[http://ropas.snu.ac.kr/lib/dock/La1964.pdf](http://ropas.snu.ac.kr/lib/dock/La1964.pdf)

John McCarthy. Recursive functions of symbolic expressions and their
computation by machine:
[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.111...](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.111.8833&rep=rep1&type=pdf)

Eugenio Moggi. Computational lambda-calculus and monads:
[http://pdf.aminer.org/000/267/711/lazy_lambda_calculus_theor...](http://pdf.aminer.org/000/267/711/lazy_lambda_calculus_theories_models_and_local_structure_characterization_extended.pdf)

Greg Morrisett, David Walker, Karl Crary, and Neal Glew. From System-F to
typed assembly language:
[http://staff.ustc.edu.cn/~xyfeng/reading/p527-morrisett.pdf](http://staff.ustc.edu.cn/~xyfeng/reading/p527-morrisett.pdf)

George C. Necula. Proof-carrying code:
[http://www.utdallas.edu/~kxh060100/Papers/necula96.pdf](http://www.utdallas.edu/~kxh060100/Papers/necula96.pdf)

Gordon D. Plotkin. LCF considered as a programming language:
[http://www.sciencedirect.com/science/article/pii/03043975779...](http://www.sciencedirect.com/science/article/pii/0304397577900445)

Gordon D. Plotkin. A structural approach to operational semantics:
[https://www.alice.virginia.edu/~weimer/2006-655/reading/plot...](https://www.alice.virginia.edu/~weimer/2006-655/reading/plotkin81structural.pdf)

Guy Lewis Steele Jr. RABBIT: A compiler for SCHEME
ftp://publications.ai.mit.edu/ai-publications/pdf/AITR-474.pdf

OK, I think the first two sections are plenty. You can search for the rest
yourself on Google Scholar (I found most of these as the first hit on Google
Scholar, one or two took looking through a few hits or doing a Google search
as well)

~~~
mathattack
Awesome! When I was reading the article, I thought, "This was what God had in
mind when she created links. Where are they?"

------
mixedbit
'Can Programming Be Liberated from the von. Neumann Style?' by John Backus is
another great work very worth studying:

'Conventional programming languages are growing ever more enormous, but not
stronger. Inherent defects at the most basic level cause them to be both fat
and weak: their primitive word-at-a-time style of programming inherited from
their common ancestor—the von Neumann computer, their close coupling of
semantics to state transitions, their division of programming into a world of
expressions and a world of statements, their inability to effectively use
powerful combining forms for building new programs from existing ones, and
their lack of useful mathematical properties for reasoning about programs.'

Thankfully, 30+ years later these problems are widely fixed ;)

[http://www.thocp.net/biographies/papers/backus_turingaward_l...](http://www.thocp.net/biographies/papers/backus_turingaward_lecture.pdf)

------
csense
The most recent paper in the first section was written in 1978.

The majority of the ones in the first two sections were written before I was
born; only three were written in the 1990's.

The only one from the 21st century (published in 2000) is in the least-
prestigious third section.

Does it take time for good ideas to accumulate the recognition needed to be
included in this list? Or was all the low-hanging fruit quickly picked in the
early days of the computer age, and only hard problems remain on which little
progress has been made?

Haven't any new ideas been introduced by the innovations of modern languages
like Python, Lisp, Haskell and Ruby? Or even C++, Java and JavaScript?

Or is language implementation, almost without exception, a series of
engineering refinements that happen in a decades-long process after
theoretical foundations are first published?

~~~
exDM69
> Or was all the low-hanging fruit quickly picked in the early days of the
> computer age, and only hard problems remain on which little progress has
> been made?

Yes, most of the ground breaking theories were researched and documented
decades ago. And some of that stuff has yet to make itself to mainstream
programming languages (e.g. type inference).

> Haven't any new ideas been introduced by the innovations of modern languages
> like Python, Lisp, Haskell and Ruby? Or even C++, Java and JavaScript?

Apart from Lisp and Haskell, the "modern" languages you mention are rather
boring when it comes to programming language design and there isn't too much
research behind them. There has been a lot of practical work and research in
garbage collection, run time systems, compiler back ends, just in time
compilation and virtual machines. But when it comes to language design, the
mainstream programming languages are really conservative.

~~~
jfb
Too, Lisp was described for the first time in _1958_. See "Pretty Great
Works", #8.

------
zwieback
Since the list is a lot about typing I wanted to see Liskov-Wing "A Behavioral
Notion of Subtyping" in there.

[http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=213...](http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=213162B5E8875E6BDB3D104B452F036B?doi=10.1.1.39.1223&rep=rep1&type=pdf)

I found that pretty interesting and it caused a lot of discussion.

------
Locke1689
Ugh, if you look at the bottom of the pretty great works you will see Guy
Steele's master's thesis where he defined the Scheme programming language and
its compiler.

I know when I was writing my thesis I was pretty disgusted that he ruined it
for all of us mere mortals. ;)

~~~
quantumet
I think Claude Shannon's (of information theory fame) master's thesis beats
out all others in the field of computer science.

"A Symbolic Analysis of Relay and Switching Circuits", 1938, proves that you
can use electrical switches to do boolean algebra! He basically invented the
digital computer, as a master's thesis.

~~~
sp332
Not to diminish Shannon's genius at all, but he wasn't the first to make logic
circuits.
[http://projecteuclid.org/DPubS/Repository/1.0/Disseminate?vi...](http://projecteuclid.org/DPubS/Repository/1.0/Disseminate?view=body&id=pdf_1&handle=euclid.bams/1183541145)
On page 917 you can see Charles Sanders Pierce and Alan Marquand made some in
the 1880's.

------
boothead
Does this count?

[http://james-iry.blogspot.com/2009/05/brief-incomplete-
and-m...](http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-
wrong.html)

It's a masterpiece!

~~~
tehwalrus
That is wonderful. As a physicist whose first language was FORTRAN, I
particularly like "It is a syntax error to write FORTRAN while not wearing a
blue tie."

------
swah
If anyone doesn't know, Benjamin Pierce is the author of a highly regarded
book, Types and Programming Languages. (I'm yet to study it, its advanced
supposedly...)

~~~
octo_t
I was looking for Featherweight Java[1] on that list before I decided it would
have been vein for him to include a paper by himself on the list.

[1]
[http://web.eecs.umich.edu/~bchandra/courses/papers/Igarashi_...](http://web.eecs.umich.edu/~bchandra/courses/papers/Igarashi_FJ.pdf)

------
tel
Only one paper by Filinski? I've been picking through 'Declarative
Continuations and Categorical Duality' where he shows the duality between
values and continuations by generalizing lambda calculus to a symmetric
version. It's incredible beautiful.

------
6ren

      My second remark is that our intellectual powers are rather geared to master static
      relations and that our powers to visualize processes evolving in time are relatively
      poorly developed. For that reason we should do (as wise programmers aware of our
      limitations) our utmost to shorten the conceptual gap between the static program and
      the dynamic process, to make the correspondence between the program (spread out in
      text space) and the process (spread out in time) as trivial as possible.
    

From Dijkstra's "Go To Statement Considered Harmful"

------
trippy_biscuits
More of Plotkin's publications:

[http://homepages.inf.ed.ac.uk/gdp/publications/](http://homepages.inf.ed.ac.uk/gdp/publications/)

------
kenko
When I saw this was hosted at upenn.edu, I was _certain_ it was a Kenneth
Goldsmith project.

~~~
adregan
I too was expecting something very different. Something nice and uncreative.

------
jph
Great reading list! How about "The Semantic Web" by Tim Berners-Lee?

~~~
angersock
Oh, the one by the Web Developer?

------
papsosouid
>Robin Milner. A theory of type polymorphism in programming. Journal of
Computer and System Sciences, 17:348-375, August 1978

It is in the top 5 and yet none of the go developers will acknowledge that it
exists.

