Faculdade

Department

MIEI Reading List

A selection of famous works on Computer Science and Engineering, selected by DI FCT UNL faculty members, that every MIEI student should know about.

Notice that the links to the ACM Digital Library are only accessible on campus (or via VPN).

Many thanks to all contributors!

60s

P. J. Landin. The next 700 programming languages. CACM 66.

E. W. Dijkstra. Go to statement considered harmful. 1968.

A. C. Kay, "A Personal Computer for Children of All Ages",  Xerox PARC, 1968.

C.A.R. Hoare.  An Axiomatic Basis of Computer Programming, CACM 69.

70s

E.F. Codd. A Relational Model of Data for Large Shared Data Banks.CACM 70.

S.A. Cook. The complexity of Theorem Proving Procedures, STOC 71.

Parnas, D. L.: On the Criteria To Be Used in Decomposing Systems into Modules. CACM, 1972.

C. A. R. Hoare. Monitors: an operating system structuring concept. CACM 1974. 

D. M. Ritchie and K Thompson. 1974. The UNIX time-sharing system. CACM 74.

B. Liskov, S. Zilles. Programming with abstract data types. ACM SIGPLAN Notices, 1974.

Dijkstra, E. W., Guarded commands, nondeterminacy and formal derivation of programs, CACM 75.

D. E. Knuth, Big Omicron and big Omega and big Theta, 1976.

R. Metcalfe, D. Boggs, Ethernet: Distributed Packet Switching for Local Computer Networks, CACM 76.

M. Shaw, W. A. Wulf, Ralph L. Abstraction and verification in Alphard: defining and specifying iteration and generators. CACM 77.

R. M. Needham and M. D. Schroeder. Using encryption for authentication in large networks of computers. CACM 78. 

P. Brinch Hansen. 1978. Distributed processes: a concurrent programming concept. CACM 78..

L Lamport. Time, clocks, and the ordering of events in a distributed system. CACM 78. 

R. Rivest, A. Shamir, L. Adleman, A Method for Obtaining Digital Signatures and Public-Key Cryptosystems, CACM 78.

C. A. R. Hoare. Communicating sequential processes. CACM 78.

R. Milner. A theory of type polymorphism in programming. Journal of Computer and System Sciences, 1978.

80s

Denning, P. J., Working sets past and present, IEEE TSE 1980. 

Dijkstra, E. W. "On the role of scientific thought", Selected writings on Computing: A Personal Perspective, 1982.

B. W. Lampson. Hints for computer system design. SOSP '83.

Reynolds, J.C. Types, abstraction, and parametric polymorphism. Information Processing. 1993.

J. H. Saltzer, D. P. Reed, and D. D. Clark. End-to-end arguments in system design. ACM TCS, 1984.

K. Mani Chandy, L. Lamport, Distributed snapshots: determining global states of distributed systems, ACM TOCS,1985.

Cardelli, L.; Wegner, P. "On understanding types, data abstraction, and polymorphism". ACM CSurveys, 1985.

E. M. Clarke, E. A. Emerson and A. P. Sistla. Automatic verification of finite-state concurrent systems using temporal logic specifications. ACM TOPLAS 86.

D. Clark. The Design Philosophy of the DARPA Internet Protocols. SIGCOMM 88.

90s

Bernstein, P. A., Transaction processing monitors, CACM 1990.

M. Herlihy: Optimistic Concurrency Control for Abstract Data Types. ACM TODS, 1990.

L. Cardelli. "Typeful programming". DEC Technical Report, 1991.

Macintosh Human Interface Guidelines, Apple Computer, Inc, 1992.

Parnas, D. L. (1994, May). Software Aging.ICSE'94.

Tim Berners-Lee, et al, “The World Wide Web,CACM 94.

J. Gosling, H. McGilton, The Java Language Environment, A White Paper, 1996.

N. Shavit, D. Touitou. Software Transactional Memory. PODC 1995.

Aleph One. "Smashing The Stack For Fun And Profit", Phrack magazine, 1996.

Brooks, F. P. The mythical man-month. Addison-Wesley, 1995.

H. Ishii and B. Ullmer, Tangible Bits: Towards Seamless Interfaces between People, Bits and Atoms. CHI 97. 

S. Abiteboul: Querying Semi-Structured Data. ICDT 97.

G. C. Necula. Proof-carrying code. POPL97.

L. Cardelli. Global Computation, DEC Technical Report, 97.

G Kiczales, J Lamping, A Mendhekar, C Maeda, C Lopes, JM Loingtier, J Irwin, Aspect-oriented programming, ECOOP'97.

Weiser, M.. The computer for the 21st century. ACM SIGMOBILE Review, 1999.

P. Brinch Hansen: Java's Insecure Parallelism. SIGPLAN Notices 1999.

00s

F. B. Schneider, G. Morrisett, and R. Harper. A Language-based Approach to Security. Informatics: 10 Years Back, 10 Years Ahead, 2000.

P. Wadler, "Proofs are Programs: 19th Century Logic and 21st Century Computing",Avaya Labs, 2000.

C. Strachey. Fundamental concepts in programming languages. Higher-Order and Symbolic Computation, 2000.

Beck, Kent; et al. "Manifesto for Agile Software Development". Agile Alliance, 2001.

J, Reynolds. Separation Logic: A Logic for Shared Mutable Data Structures, LICS'02.

L. Lamport. "The Future of Computing: Logic or Biology", 2003.

Kitchenham, B. A., Dyba, T., & Jorgensen, M. (2004, May). Evidence-based software engineering. In Software Engineering, ICSE'04.

T. Mitchell, The Discipline of Machine Learning, CMU-ML-06-108, 2006.

Denning, P. J.; Dunham, R. "Innovation as language action". CACM 06.

J. Wing, "Computational Thinking", CACM 06.

L. Cardelli, "Can a Systems Biologist Fix a Tamagotchi?",  Microsoft Research, 2007.

Denning, P. J. "Computing is a natural science". CACM 07.

Galen C. Hunt and James R. Larus. "Singularity: Rethinking the Software Stack”, ACM SIGOPS OS Review, 2007.

J. Dean and S. Ghemawat, MapReduce: Simpled Data Processing on Large Clusters, CACM 08.

M. Odersky, "The Scala Experiment — Can We Provide Better Language Support for Component Systems?", POPL 08.

C.A.R. Hoare. Viewpoint - Retrospective: an axiomatic basis for computer programming. CACM 09.