background preloader

Great Works in Programming Languages

Great Works in Programming Languages
In September, 2004, I posted a query to the Types list asking people to name the five most important papers ever written in the area of programming languages. This page collects the responses I received. (A few are missing because I am still tracking down bibliographic information.) Many thanks to Frank Atanassow, David Benson, Nick Benton, Karl Crary, Olivier Danvy, Mariangiola Dezani, Dan Friedman, Alwyn Goodloe, Pieter Hartel, Michael Hicks, Robert Irwin, Luis Lamb, Rod Moten, Rishiyur Nikhil, Tobias Nipkow, Jens Palsberg, and John Reynolds for contributing. Additional suggestions are welcome. (Bibtex format preferred!) The greatest of the great (mentioned by many people): C. Peter J. Robin Milner. Gordon Plotkin. John C. Pretty great works (mentioned by multiple people): Luca Cardelli. Luis Damas and Robin Milner. Edsger W. Edsger W. William A. Robert Kowalski. Peter J. John McCarthy. Eugenio Moggi. Greg Morrisett, David Walker, Karl Crary, and Neal Glew. George C. Gordon D. Gordon D.

Compilers: Principles, Techniques, and Tools Compilers: Principles, Techniques, and Tools[1] is a computer science textbook by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman about compiler construction. Although more than two decades have passed since the publication of the first edition, it is widely regarded as the classic definitive compiler technology text.[2] It is affectionately known as the Dragon Book to a generation of computer scientists [3][4] as its cover depicts a knight and a dragon in battle, a metaphor for conquering complexity. First edition[edit] The first edition is informally called the 'red dragon book' to distinguish it from the second edition[5] and from Aho & Ullman’s 1977 Principles of Compiler Design sometimes known as the 'green dragon book' [5] Topics covered in the first edition include: Second edition[edit] Following in the tradition of its two predecessors, the second edition features a dragon and a knight on its cover, and is informally known as the purple dragon. See also[edit]

The Mythical Man-Month The Mythical Man-Month: Essays on Software Engineering is a book on software engineering and project management by Fred Brooks, whose central theme is that "adding manpower to a late software project makes it later". This idea is known as Brooks' law, and is presented along with the second-system effect and advocacy of prototyping. Brooks' observations are based on his experiences at IBM while managing the development of OS/360. He had added more programmers to a project falling behind schedule, a decision that he would later conclude had, counter-intuitively, delayed the project even further. The work was first published in 1975 (ISBN 0-201-00650-2), reprinted with corrections in 1982, and republished in an anniversary edition with four extra chapters in 1995 (ISBN 0-201-83595-9), including a reprint of the essay "No Silver Bullet" with commentary by the author. Ideas presented[edit] The mythical man-month[edit] Brooks discusses several causes of scheduling failures. The manual[edit]

Design Patterns It has been highly influential to the field of software engineering and is regarded as an important source for object-oriented design theory and practice. More than 500,000 copies have been sold in English and in 13 other languages. The authors are often referred to as the Gang of Four (GoF).[1] History[edit] Introduction, Chapter 1[edit] Chapter 1 is a discussion of object-oriented design techniques, based on the authors' experience, which they believe would lead to good object-oriented software design, including: clients remain unaware of the specific types of objects they use, as long as the object adheres to the interfaceclients remain unaware of the classes that implement these objects; clients only know about the abstract class(es) defining the interface Use of an interface also leads to dynamic binding and polymorphism, which are central features of object-oriented programming. The authors admit that delegation and parameterization are very powerful but add a warning: Formatting[edit]

Introduction to Algorithms, Third Edition Table of Contents I Foundations Introduction 3 1 The Role of Algorithms in Computing 5 1.1 Algorithms 5 1.2 Algorithms as a technology 11 2 Getting Started 16 2.1 Insertion sort 16 2.2 Analyzing algorithms 23 2.3 Designing algorithms 29 3 Growth of Functions 43 3.1 Asymptotic notation 43 3.2 Standard notations and common functions 53 4 Divide-and-Conquer 65 4.1 The maximum-subarray problem 68 4.2 Strassen's algorithm for matrix multiplication 75 4.3 The substitution method for solving recurrences 83 4.4 The recursion-tree method for solving recurrences 88 4.5 The master method for solving recurrences 93 4.6 Proof of the master theorem 97 5 Probabilistic Analysis and Randomized Algorithms 114 5.1 The hiring problem 114 5.2 Indicator random variables 118 5.3 Randomized algorithms 122 5.4 Probabilistic analysis and further uses of indicator random variables 130 II Sorting and Order Statistics Introduction 147 6 Heapsort 151 6.1 Heaps 151 6.2 Maintaining the heap property 154 6.3 Building a heap 156 7 Quicksort 170 Index

The C Programming Language Book cover of The C Programming Language, first edition Book cover of The C Programming Language, second edition History[edit] The first edition of the book, published in 1978, was the first widely available book on the C programming language. C was created by Dennis Ritchie. Influence[edit] The C Programming Language has often been cited as a model for technical writing, due to the book's clear presentation and concise treatment. We have tried to retain the brevity of the first edition. Perhaps the most famous example program from the book is its "hello, world" program, which just prints out the text "hello, world" to the terminal, as an illustration of a minimal working C program. Before the advent of ANSI C, the first edition of the text served as the de facto standard of the language for writers of C compilers. Appendix A, the reference manual, is not the standard, but our attempt to convey the essentials of the standard in a smaller space. See also[edit] The C++ Programming Language

Structure and Interpretation of Computer Programs Content[edit] The program also introduces a practical implementation of the register machine concept, defining and developing an assembler for such a construct, which is used as a virtual machine for the implementation of interpreters and compilers in the book, and as a testbed for illustrating the implementation and effect of modifications to the evaluation mechanism. Working Scheme systems based on the design described in this book are quite common student projects. Characters[edit] The book uses some fictional characters repeatedly: Ben Bitdiddle. License[edit] The book is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.[4] Coursework[edit] Reception[edit] BYTE recommended SICP "for professional programmers who are really interested in their profession". Influence[edit] SICP has been influential in computer science education, and a number of later books have been inspired by its style. References[edit] Further reading[edit] External links[edit]

The Pragmatic Bookshelf You’re a Pragmatic Programmer. You aren’t wedded to any particular technology, but you have a broad enough background in the science, and your experience with practical projects allows you to choose good solutions in particular situations. Theory and practice combine to make you strong. The Pragmatic Programmer Book First published back at the turn of the century in 1999, The Pragmatic Programmer: From Journeyman to Master still expresses our beliefs about successful software development. Pragmatic Programmer Tips The original seventy tips from The Pragmatic Programmer. And now, for the first time ever, you can now get the DRM-free PDF, epub, and mobi versions of The Pragmatic Programmer directly from us. New Title Announcements and Sales Do you get our email newsletter?