├── .gitignore ├── .tool-versions ├── .github ├── FUNDING.yml ├── pull_request_template.md └── workflows │ └── tests.yml ├── LICENSE ├── check_links.py ├── gen_readme.py ├── README.md.template ├── papers.yml └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | venv 3 | -------------------------------------------------------------------------------- /.tool-versions: -------------------------------------------------------------------------------- 1 | python 3.9.18 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [facundoolano] 2 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | on: 3 | push: 4 | branches: 5 | - main 6 | pull_request: 7 | schedule: 8 | - cron: '0 0 * * *' 9 | jobs: 10 | checks: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v3 14 | - name: Check README is updated 15 | run: ./gen_readme.py | diff README.md - 16 | - name: Set up Python 17 | uses: actions/setup-python@v4 18 | with: 19 | python-version: 3.9 20 | - name: Install dependencies 21 | run: | 22 | python -m pip install --upgrade pip 23 | pip install requests pyyaml 24 | - name: Check links 25 | # try 3 times or fail 26 | run: ./check_links.py || ./check_links.py || ./check_links.py 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Facundo Olano 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /check_links.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # checks that all links in the paper yaml are reachable 3 | # requires pip install pyyaml requests 4 | 5 | 6 | import requests 7 | import urllib3 8 | import yaml 9 | 10 | # the parnas1972 paper is throwing cert errors and I can't find another link for it. 11 | # so requesting with verify=False and disabling warnings for now 12 | urllib3.disable_warnings() 13 | 14 | 15 | HEADERS = {'User-Agent': 'My User Agent 1.0'} 16 | 17 | with open('papers.yml') as file_: 18 | papers = yaml.safe_load(file_) 19 | 20 | for paper in papers: 21 | papers += paper.get('related', []) 22 | 23 | 24 | exit_code = 0 25 | for paper in papers: 26 | ref = paper['author'].replace(',', '').split(' ')[0] + str(paper['year']) 27 | print(f'{ref}...', end='', flush=True) 28 | 29 | if '.acm.org/' in paper['link']: 30 | # the acm library (which has the majority of the paper links) 31 | # is now denying requests without javascript enabled 32 | # I'm skipping them since it's better to assume they work and check the rest 33 | # than removing this script or trying to find alternative sources for all the papers 34 | print('skipping ACM') 35 | continue 36 | 37 | response = requests.head(paper['link'], headers=HEADERS, verify=False) 38 | if response.status_code == 405: 39 | response = requests.get(paper['link'], headers=HEADERS, verify=False) 40 | if response.ok: 41 | print('ok') 42 | else: 43 | exit_code = 1 44 | print(' ERROR') 45 | print(f' failed fetching {paper["link"]}') 46 | 47 | exit(exit_code) 48 | -------------------------------------------------------------------------------- /gen_readme.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # usage: 3 | # ./gen_readme.py > README.md 4 | # 5 | # requires pip install pyyaml 6 | 7 | import yaml 8 | 9 | 10 | def load_papers(): 11 | def markdown(paper, bold=False): 12 | entry = f'{paper["title"]}. [{paper["author"]} ({paper["year"]})]({paper["link"]}).' 13 | if bold: 14 | entry = f'**{entry}**' 15 | 16 | entry += '\n' 17 | 18 | # if the title ends with ? don't append a period 19 | return entry.replace('?.', '?') 20 | 21 | with open('papers.yml') as file_: 22 | papers = yaml.safe_load(file_) 23 | 24 | for paper in papers: 25 | paper['markdown'] = markdown(paper, bold=True) 26 | for related in paper.setdefault('related', []): 27 | related['markdown'] = markdown(related, bold=False) 28 | 29 | paper['related'].sort(key=lambda p: p['year']) 30 | 31 | return papers 32 | 33 | 34 | def render_readme(papers): 35 | with open('README.md.template') as template: 36 | readme = template.read() 37 | 38 | # Full nested list 39 | papers_full = '' 40 | for paper in papers: 41 | papers_full += '1. ' + paper['markdown'] 42 | papers_full += ' \\\n' 43 | topics = '; '.join(paper['topics']) 44 | papers_full += f" {topics}\n" 45 | for related in paper['related']: 46 | papers_full += ' * ' + related['markdown'] 47 | papers_full += '\n' 48 | readme = readme.replace('{{ PAPERS_FULL }}', papers_full) 49 | 50 | # top-level only 51 | papers_top = '' 52 | for paper in papers: 53 | papers_top += '1. ' + paper['markdown'] 54 | readme = readme.replace('{{ PAPERS_TOC }}', papers_top) 55 | 56 | # chronological flat list 57 | all_papers = [] 58 | for paper in papers: 59 | all_papers.append(paper) 60 | all_papers += paper['related'] 61 | 62 | papers_sorted = '' 63 | for paper in sorted(all_papers, key=lambda p: p['year']): 64 | papers_sorted += '1. ' + paper['markdown'] 65 | readme = readme.replace('{{ PAPERS_SORTED }}', papers_sorted) 66 | 67 | return readme 68 | 69 | 70 | if __name__ == '__main__': 71 | papers = load_papers() 72 | output = render_readme(papers) 73 | print(output) 74 | -------------------------------------------------------------------------------- /README.md.template: -------------------------------------------------------------------------------- 1 | # Papers for Software Engineers [![workflow](https://github.com/facundoolano/software-papers/actions/workflows/tests.yml/badge.svg)](https://github.com/facundoolano/software-papers/actions/workflows/tests.yml) 2 | 3 | A curated list of papers that may be of interest to Software Engineering students or professionals. 4 | See the [sources](#sources) and [selection criteria](#selection-criteria) below. 5 | 6 |
7 | 8 |
9 | List of papers by topic 10 |
11 | 12 | {{ PAPERS_FULL }} 13 | 14 |
15 | 16 |
17 | 18 |
19 | Top-level papers only 20 |
21 | 22 | {{ PAPERS_TOC }} 23 | 24 |
25 | 26 |
27 | 28 |
29 | All papers in chronological order 30 |
31 | 32 | {{ PAPERS_SORTED }} 33 | 34 |
35 | 36 | ## Sources 37 | This list was inspired by (and draws from) several books and paper collections: 38 | 39 | * [Papers We Love](https://paperswelove.org/) 40 | * [Ideas That Created the Future](https://mitpress.mit.edu/books/ideas-created-future) 41 | * [The Innovators](https://www.simonandschuster.com/books/The-Innovators/Walter-Isaacson/9781476708706) 42 | * [The morning paper](https://blog.acolyer.org/) 43 | * [Distributed systems for fun and profit](http://book.mixu.net/distsys/index.html) 44 | * [Readings in Database Systems (the Red Book)](http://www.redbook.io/) 45 | * [Fermat's Library](https://fermatslibrary.com/journal_club) 46 | * [Classics in Human-Computer Interaction](https://medium.com/@aschugart/classics-in-hci-research-papers-critical-to-the-field-of-human-computer-interaction-1344039334a5) 47 | * [Awesome Compilers](https://github.com/aalhour/awesome-compilers#papers) 48 | * [Distributed Consensus Reading List](https://heidihoward.github.io/distributed-consensus-reading-list/) 49 | * [The Decade of Deep Learning](https://bmk.sh/2019/12/31/The-Decade-of-Deep-Learning/) 50 | 51 | ## Meta reads 52 | 53 | A few interesting resources about reading papers from Papers We Love and elsewhere: 54 | 55 | - [Should I read papers?](https://michaelrbernste.in/2014/10/21/should-i-read-papers.html) 56 | - [How to Read an Academic Article](https://organizationsandmarkets.com/2010/08/31/how-to-read-an-academic-article/) 57 | - How to Read a Paper. [Keshav (2007)](http://ccr.sigcomm.org/online/files/p83-keshavA.pdf). 58 | - Efficient Reading of Papers in Science and Technology. [Hanson (1999)](https://www.cs.columbia.edu/~hgs/netbib/efficientReading.pdf). 59 | - On ICSE’s “Most Influential Papers”. [Parnas (1995)](https://dl.acm.org/doi/pdf/10.1145/219308.219312). 60 | 61 | ## Selection criteria 62 | 63 | 1. The list should stay short. Let's say no more than 30 papers. 64 | - The idea is not to include every interesting paper that I come across but rather to keep a representative list that's possible to read from start to finish with a similar level of effort as reading a technical book from cover to cover. 65 | - I tried to include one paper per each major topic and author. Since in the process I found a lot of noteworthy alternatives, related or follow-up papers and I wanted to keep track of those as well, I included them as sublist items. 66 | 2. The papers shouldn't be too long. For the same reasons as the previous item, I try to avoid papers longer than 20 or 30 pages. 67 | 3. They should be self-contained and readable enough to be approachable by the casual technical reader. 68 | 4. They should be freely available online. 69 | 5. Although historical relevance was taken into account, I omitted seminal papers in the cases where I found them hard to approach, when the main subject of the paper wasn't the thing that made them influential, etc. 70 | - Examples of this are classic works by Von Neumann, Turing and Shannon. 71 | - That being said, where possible I preferred the original paper on each subject over modern updates or survey papers. 72 | 6. I tended to prefer topics that I can relate to my professional practice, typically papers originated in the industry 73 | or about innovations that later saw wide adoption. 74 | - Similarly, I tended to skip more theoretical papers, those focusing on mathematical foundations for Computer Science, electronic aspects of hardware, etc. 75 | 7. I sorted the list by a mix of relatedness of topics and a vague chronological relevance, such that it makes sense to read it in the suggested order. For example, historical and seminal topics go first, contemporary internet-era developments last, networking precedes distributed systems, etc. 76 | 77 | -------------------------------------------------------------------------------- /papers.yml: -------------------------------------------------------------------------------- 1 | - title: Von Neumann's First Computer Program 2 | author: Knuth 3 | year: 1970 4 | link: https://dl.acm.org/doi/pdf/10.1145/356580.356581 5 | topics: [Computer History, Early Programming] 6 | related: 7 | - title: The Education of a Computer 8 | author: Hopper 9 | year: 1952 10 | link: https://people.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/p243-hopper.pdf 11 | - title: Programming Considered as a Human Activity 12 | author: Dijkstra 13 | year: 1965 14 | link: https://www.cs.utexas.edu/~EWD/transcriptions/EWD01xx/EWD117.html 15 | - title: Goto Statement Considered Harmful 16 | author: Dijkstra 17 | year: 1968 18 | link: https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf 19 | - title: Recursive Programming 20 | author: Dijkstra 21 | year: 1960 22 | link: https://www.ics.uci.edu/~jajones/INF102-S18/readings/07_dijkstra.pdf 23 | - title: Program development by stepwise refinement 24 | author: Wirth 25 | year: 1971 26 | link: https://dl.acm.org/doi/pdf/10.1145/362575.362577 27 | - title: The paradigms of programming 28 | author: Floyd 29 | year: 1979 30 | link: https://dl.acm.org/doi/pdf/10.1145/1283920.1283934 31 | - title: Computer Programming as an Art 32 | author: Knuth 33 | year: 1974 34 | link: http://www.cs.bilkent.edu.tr/~canf/knuth1974.pdf 35 | - title: Literate Programming 36 | author: Knuth 37 | year: 1984 38 | link: http://www.literateprogramming.com/knuthweb.pdf 39 | - title: The Humble Programmer 40 | author: Dijkstra 41 | year: 1972 42 | link: http://rkka21.ru/docs/turing-award/ed1972e.pdf 43 | 44 | - title: Computing Machinery and Intelligence 45 | author: Turing 46 | year: 1950 47 | link: https://www.csee.umbc.edu/courses/471/papers/turing.pdf 48 | topics: [Early Artificial Intelligence] 49 | related: 50 | - title: ELIZA—a computer program for the study of natural language communication between man and machine 51 | author: Weizenbaum 52 | year: 1966 53 | link: http://web.stanford.edu/class/cs124/p36-weizenabaum.pdf 54 | - title: Some Moral and Technical Consequences of Automation 55 | author: Wiener 56 | year: 1960 57 | link: https://nissenbaum.tech.cornell.edu/papers/Wiener.pdf 58 | - title: Steps towards Artificial Intelligence 59 | author: Minsky 60 | year: 1960 61 | link: http://worrydream.com/refs/Minsky%20-%20Steps%20Toward%20Artificial%20Intelligence.pdf 62 | - title: A Theory of the Learnable 63 | author: Valiant 64 | year: 1984 65 | link: https://people.mpi-inf.mpg.de/~mehlhorn/SeminarEvolvability/ValiantLearnable.pdf 66 | 67 | - title: A Method for the Construction of Minimum-Redundancy Codes 68 | author: Huffman 69 | year: 1952 70 | link: http://compression.ru/download/articles/huff/huffman_1952_minimum-redundancy-codes.pdf 71 | topics: [Information Theory] 72 | related: 73 | - title: Prediction and Entropy of Printed English 74 | author: Shannon 75 | year: 1950 76 | link: https://www.princeton.edu/~wbialek/rome/refs/shannon_51.pdf 77 | - title: Fifty Years of Shannon Theory 78 | author: Verdú 79 | year: 1998 80 | link: https://monoskop.org/images/7/78/Verdu_Sergio_1998_Fifty_Years_of_Shannon_Theory.pdf 81 | - title: A Universal Algorithm for Sequential Data Compression 82 | author: Ziv, Lempel 83 | year: 1977 84 | link: https://courses.cs.duke.edu/spring03/cps296.5/papers/ziv_lempel_1977_universal_algorithm.pdf 85 | 86 | - title: Engineering a Sort Function 87 | author: Bentley, McIlroy 88 | year: 1993 89 | link: https://cs.fit.edu/~pkc/classes/writing/samples/bentley93engineering.pdf 90 | topics: [Data Structures, Algorithms] 91 | related: 92 | - title: Quicksort 93 | author: Hoare 94 | year: 1962 95 | link: https://dl.acm.org/doi/pdf/10.5555/63445.C1104357 96 | - title: "Programming pearls: Algorithm design techniques" 97 | author: Bentley 98 | year: 1984 99 | link: https://dl.acm.org/doi/pdf/10.1145/358234.381162 100 | - title: "Programming pearls: The back of the envelope" 101 | author: Bentley 102 | year: 1984 103 | link: https://dl.acm.org/doi/pdf/10.1145/357994.381168 104 | - title: On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem 105 | author: Kruskal 106 | year: 1956 107 | link: https://www.ams.org/proc/1956-007-01/S0002-9939-1956-0078686-7/S0002-9939-1956-0078686-7.pdf 108 | - title: A Note on Two Problems in Connexion with Graphs 109 | author: Dijkstra 110 | year: 1959 111 | link: https://jmvidal.cse.sc.edu/library/dijkstra59a.pdf 112 | - title: The Ubiquitous B-Tree 113 | author: Comer 114 | year: 1979 115 | link: http://carlosproal.com/ir/papers/p121-comer.pdf 116 | - title: Space/Time Trade-offs in Hash Coding with Allowable Errors 117 | author: Bloom 118 | year: 1970 119 | link: https://dl.acm.org/doi/pdf/10.1145/362686.362692 120 | - title: Making data structures persistent 121 | author: Driscoll et al 122 | year: 1986 123 | link: https://dl.acm.org/doi/pdf/10.1145/12130.12142 124 | 125 | - title: A Design Methodology for Reliable Software Systems 126 | author: Liskov 127 | year: 1972 128 | link: https://dl.acm.org/doi/pdf/10.1145/1479992.1480018 129 | topics: [Software Design] 130 | related: 131 | - title: On the Criteria To Be Used in Decomposing Systems into Modules 132 | author: Parnas 133 | year: 1972 134 | link: https://dl.acm.org/doi/pdf/10.1145/361598.361623 135 | - title: Information Distribution Aspects of Design Methodology 136 | author: Parnas 137 | year: 1972 138 | link: https://cseweb.ucsd.edu/~wgg/CSE218/Parnas-IFIP71-information-distribution.PDF 139 | - title: Designing Software for Ease of Extension and Contraction 140 | author: Parnas 141 | year: 1979 142 | link: https://courses.cs.washington.edu/courses/cse503/08wi/parnas-1979.pdf 143 | - title: Programming as Theory Building 144 | author: Naur 145 | year: 1985 146 | link: https://pages.cs.wisc.edu/~remzi/Naur.pdf 147 | - title: Towards a Theory of Conceptual Design for Software 148 | author: Jackson 149 | year: 2015 150 | link: https://groups.csail.mit.edu/sdg/pubs/2015/concept-essay.pdf 151 | - title: Programming with Abstract Data Types 152 | author: Liskov, Zilles 153 | year: 1974 154 | link: https://dl.acm.org/doi/pdf/10.1145/942572.807045 155 | 156 | - title: "Programming Paradigms for Dummies: What Every Programmer Should Know" 157 | author: Van Roy 158 | year: 2012 159 | link: https://webperso.info.ucl.ac.be/~pvr/VanRoyChapter.pdf 160 | topics: [Programming Paradigms] 161 | related: 162 | - title: On understanding types, data abstraction, and polymorphism 163 | author: Cardelli, Wegner 164 | year: 1985 165 | link: https://dl.acm.org/doi/pdf/10.1145/6041.6042 166 | - title: "SELF: The Power of Simplicity" 167 | author: Ungar, Smith 168 | year: 1991 169 | link: https://people.eecs.berkeley.edu/~fateman/264/papers/selfpower.ps 170 | - title: The Smalltalk-76 Programming System Design and Implementation 171 | author: Ingalls 172 | year: 1978 173 | link: https://dl.acm.org/doi/pdf/10.1145/512760.512762 174 | - title: A Theory of Type Polymorphism in Programming 175 | author: Milner 176 | year: 1978 177 | link: https://homepages.inf.ed.ac.uk/wadler/papers/papers-we-love/milner-type-polymorphism.pdf 178 | - title: Why Functional Programming Matters 179 | author: Hughes 180 | year: 1990 181 | link: https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf 182 | - title: Can Programming Be Liberated from the von Neumann Style? 183 | author: Backus 184 | year: 1978 185 | link: https://dl.acm.org/doi/pdf/10.1145/359576.359579 186 | - title: The Semantic Elegance of Applicative Languages 187 | author: Turner 188 | year: 1981 189 | link: http://nsl.com/misc/sasl/paraffins-turner.pdf 190 | - title: Recursive Functions of Symbolic Expressions and Their Computation by Machine 191 | author: McCarthy 192 | year: 1960 193 | link: http://jmc.stanford.edu/articles/recursive/recursive.pdf 194 | - title: "QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs" 195 | author: Claessen, Hughes 196 | year: 2000 197 | link: https://dl.acm.org/doi/pdf/10.1145/351240.351266 198 | - title: The essence of functional programming 199 | author: Wadler 200 | year: 1992 201 | link: https://dl.acm.org/doi/pdf/10.1145/143165.143169 202 | - title: Church's Thesis and Functional Programming 203 | author: Turner 204 | year: 2006 205 | link: https://kar.kent.ac.uk/88944/1/ctfp.pdf_nocoversheet 206 | - title: The Semantics of Predicate Logic as a Programming Language 207 | author: Van Emden, Kowalski 208 | year: 1976 209 | link: https://dl.acm.org/doi/pdf/10.1145/321978.321991 210 | 211 | - title: An Incremental Approach to Compiler Construction 212 | author: Ghuloum 213 | year: 2006 214 | link: http://scheme2006.cs.uchicago.edu/11-ghuloum.pdf 215 | topics: [Language Design, Compilers] 216 | related: 217 | - title: "Programming pearls: little languages" 218 | author: Bentley 219 | year: 1986 220 | link: https://dl.acm.org/doi/pdf/10.1145/6424.315691 221 | - title: A Nanopass Framework for Compiler Education 222 | author: Sarkar, Waddell, Dybvig 223 | year: 2005 224 | link: "https://www.cambridge.org/core/services/aop-cambridge-core/content/view/1E378B9B451270AF6A155FA0C21C04A3/S0956796805005605a.pdf/educational_pearl_a_nanopass_framework_for_compiler_education.pdf" 225 | - title: "LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation" 226 | author: Lattner, Adve 227 | year: 2004 228 | link: https://llvm.org/pubs/2004-01-30-CGO-LLVM.pdf 229 | - title: Bringing the Web up to Speed with WebAssembly 230 | year: 2017 231 | author: Haas 232 | link: https://dl.acm.org/doi/pdf/10.1145/3062341.3062363 233 | - title: A Brief History of Just-In-Time 234 | author: Aycock 235 | year: 2003 236 | link: https://www.cs.tufts.edu/comp/150CMP/papers/aycock03jit.pdf 237 | - title: The Essence of Compiling with Continuations 238 | author: Flanagan et al 239 | year: 1993 240 | link: https://dl.acm.org/doi/pdf/10.1145/173262.155113 241 | - title: The Next 700 Programming Languages 242 | author: Landin 243 | year: 1966 244 | link: https://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf 245 | - title: A Unified Theory of Garbage Collection 246 | author: Bacon, Cheng, Rajan 247 | year: 2004 248 | link: https://courses.cs.washington.edu/courses/cse590p/05au/p50-bacon.pdf 249 | 250 | - title: "No Silver Bullet: Essence and Accidents of Software Engineering" 251 | author: Brooks 252 | year: 1987 253 | link: http://worrydream.com/refs/Brooks-NoSilverBullet.pdf 254 | topics: [Software Engineering, Project Management] 255 | related: 256 | - title: The Mythical Man Month 257 | author: Brooks 258 | year: 1975 259 | link: https://www.cs.virginia.edu/~evans/greatworks/mythical.pdf 260 | - title: How do committees invent? 261 | author: Conway 262 | year: 1968 263 | link: https://www.melconway.com/Home/pdf/committees.pdf 264 | - title: Managing the Development of Large Software Systems 265 | author: Royce 266 | year: 1970 267 | link: https://dl.acm.org/doi/pdf/10.5555/41765.41801 268 | - title: The Cathedral and the Bazaar 269 | author: Raymond 270 | year: 1998 271 | link: http://users.ece.utexas.edu/~perry/education/382v-s08/papers/raymond.pdf 272 | - title: On Building Systems That Will Fail 273 | author: Corbató 274 | year: 1991 275 | link: https://dl.acm.org/doi/pdf/10.1145/114669.114686 276 | - title: Out of the Tar Pit 277 | author: Moseley, Marks 278 | year: 2006 279 | link: http://curtclifton.net/papers/MoseleyMarks06a.pdf 280 | - title: Software Aging 281 | author: Parnas 282 | year: 1994 283 | link: https://dl.acm.org/doi/pdf/10.5555/257734.257788 284 | - title: Laws of Software Evolution Revisited 285 | author: Lehman 286 | year: 1997 287 | link: https://www.rose-hulman.edu/Class/csse/csse490/cs490-const-and-evol/LawsOfSoftwareEvolutionRevisited.pdf 288 | 289 | - title: Communicating sequential processes 290 | author: Hoare 291 | year: 1978 292 | link: https://www.cs.cmu.edu/~crary/819-f09/Hoare78.pdf 293 | topics: [Concurrency] 294 | related: 295 | - title: Solution Of a Problem in Concurrent Program Control 296 | author: Dijkstra 297 | year: 1965 298 | link: https://dl.acm.org/doi/pdf/10.1145/365559.365617 299 | - title: On the Duality of Operating System Structures 300 | author: Lauer, Needham 301 | year: 1978 302 | link: https://dl.acm.org/doi/pdf/10.1145/850657.850658 303 | - title: "Monitors: An operating system structuring concept" 304 | author: Hoare 305 | year: 1974 306 | link: https://dl.acm.org/doi/pdf/10.1145/355620.361161 307 | - title: Software Transactional Memory 308 | author: Shavit, Touitou 309 | year: 1997 310 | link: https://groups.csail.mit.edu/tds/papers/Shavit/ShavitTouitou.pdf 311 | 312 | - title: The UNIX Time- Sharing System 313 | author: Ritchie, Thompson 314 | year: 1974 315 | link: https://dsf.berkeley.edu/cs262/unix.pdf 316 | topics: [Operating Systems] 317 | related: 318 | - title: The Structure of the \"THE\"-Multiprogramming System 319 | author: Dijkstra 320 | year: 1968 321 | link: https://www.eecs.ucf.edu/~eurip/papers/dijkstra-the68.pdf 322 | - title: The nucleus of a multiprogramming system 323 | author: Hansen 324 | year: 1970 325 | link: http://www.brinch-hansen.net/papers/1970a.pdf 326 | - title: An Experimental Time-Sharing System 327 | author: Corbató, Merwin Daggett, Daley 328 | year: 1962 329 | link: http://larch-www.lcs.mit.edu:8001/~corbato/sjcc62/ 330 | - title: Reflections on Trusting Trust 331 | author: Thompson 332 | year: 1984 333 | link: https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf 334 | - title: The Design and Implementation of a Log-Structured File System 335 | author: Rosenblum, Ousterhout 336 | year: 1991 337 | link: https://people.eecs.berkeley.edu/~brewer/cs262/LFS.pdf 338 | 339 | - title: A Relational Model of Data for Large Shared Data Banks 340 | author: Codd 341 | year: 1970 342 | link: https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf 343 | topics: [Databases] 344 | related: 345 | - title: Access Path Selection in a Relational Database Management System 346 | author: Selinger et al 347 | year: 1979 348 | link: https://courses.cs.duke.edu/compsci516/cps216/spring03/papers/selinger-etal-1979.pdf 349 | - title: Granularity of Locks and Degrees of Consistency in a Shared Data Base 350 | author: Gray et al 351 | year: 1975 352 | link: https://www.cs.cmu.edu/~natassa/courses/15-721/papers/GrayLocks.pdf 353 | - title: "The Transaction Concept: Virtues and Limitations" 354 | author: Gray 355 | year: 1981 356 | link: https://jimgray.azurewebsites.net/papers/theTransactionConcept.pdf 357 | - title: The design of POSTGRES 358 | author: Stonebraker, Rowe 359 | year: 1986 360 | link: https://dl.acm.org/doi/pdf/10.1145/16856.16888 361 | - title: Rules of Thumb in Data Engineering 362 | author: Gray, Shenay 363 | year: 1999 364 | link: http://research.microsoft.com/en-us/um/people/gray/papers/ms_tr_99_100_rules_of_thumb_in_data_engineering.pdf 365 | 366 | - title: A Protocol for Packet Network Intercommunication 367 | author: Cerf, Kahn 368 | year: 1974 369 | link: https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf 370 | topics: [Networking] 371 | related: 372 | - title: The Design Philosophy of the DARPA Internet Protocols 373 | author: Clark 374 | year: 1988 375 | link: http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-clark.pdf 376 | - title: "Ethernet: Distributed packet switching for local computer networks" 377 | author: Metcalfe, Boggs 378 | year: 1978 379 | link: https://dl.acm.org/doi/pdf/10.1145/360248.360253 380 | - title: End-To-End Arguments in System Design 381 | author: Saltzer, Reed, Clark 382 | year: 1984 383 | link: https://groups.csail.mit.edu/ana/Publications/PubPDFs/End-to-End%20Arguments%20in%20System%20Design.pdf 384 | - title: An algorithm for distributed computation of a Spanning Tree in an Extended LAN 385 | author: Perlman 386 | year: 1985 387 | link: https://dl.acm.org/doi/pdf/10.1145/319056.319004 388 | - title: "TOR: The second generation onion router" 389 | author: Dingledine et al 390 | year: 2004 391 | link: https://svn-archive.torproject.org/svn/projects/design-paper/tor-design.pdf 392 | - title: Why the Internet only just works 393 | author: Handley 394 | year: 2006 395 | link: https://www2.cs.uh.edu/~gnawali/courses/cosc6377-f17/papers/Handley06.pdf 396 | - title: The Network is Reliable 397 | author: Bailis, Kingsbury 398 | year: 2014 399 | link: https://queue.acm.org/detail.cfm?id=2655736 400 | 401 | - title: New Directions in Cryptography 402 | author: Diffie, Hellman 403 | year: 1976 404 | link: https://ee.stanford.edu/~hellman/publications/24.pdf 405 | topics: [Cryptography] 406 | related: 407 | - title: A Method for Obtaining Digital Signatures and Public-Key Cryptosystems 408 | author: Rivest, Shamir, Adleman 409 | year: 1978 410 | link: https://dl.acm.org/doi/pdf/10.1145/359340.359342 411 | - title: How To Share A Secret 412 | author: Shamir 413 | year: 1979 414 | link: https://web.mit.edu/6.857/OldStuff/Fall03/ref/Shamir-HowToShareASecret.pdf 415 | - title: A Digital Signature Based on a Conventional Encryption Function 416 | author: Merkle 417 | year: 1987 418 | link: https://people.eecs.berkeley.edu/~raluca/cs261-f15/readings/merkle.pdf 419 | - title: The Salsa20 family of stream ciphers 420 | author: Bernstein 421 | year: 2007 422 | link: https://cr.yp.to/snuffle/salsafamily-20071225.pdf 423 | 424 | - title: Time, Clocks, and the Ordering of Events in a Distributed System 425 | author: Lamport 426 | year: 1978 427 | link: https://lamport.azurewebsites.net/pubs/time-clocks.pdf 428 | topics: [Distributed Systems] 429 | related: 430 | - title: The Byzantine Generals Problem 431 | author: Lamport, Shostak, Pease 432 | year: 1982 433 | link: https://lamport.azurewebsites.net/pubs/byz.pdf 434 | - title: Impossibility of Distributed Consensus With One Faulty Process 435 | author: Fisher, Lynch, Patterson 436 | year: 1985 437 | link: https://groups.csail.mit.edu/tds/papers/Lynch/jacm85.pdf 438 | - title: Self-stabilizing systems in spite of distributed control 439 | author: Dijkstra 440 | year: 1974 441 | link: https://dl.acm.org/doi/pdf/10.1145/361179.361202 442 | - title: Paxos made simple 443 | author: Lamport 444 | year: 2001 445 | link: https://lamport.azurewebsites.net/pubs/paxos-simple.pdf 446 | - title: "Paxos made live - An Engineering Perspective" 447 | author: Chandra, Griesemer, Redstone 448 | year: 2007 449 | link: https://www.cs.utexas.edu/users/lorenzo/corsi/cs380d/papers/paper2-1.pdf 450 | - title: In Search of an Understandable Consensus Algorithm 451 | author: Ongaro, Ousterhout 452 | year: 2014 453 | link: https://raft.github.io/raft.pdf 454 | - title: "Implementing Fault-Tolerant Services Using the State Machine Approach: A Tutorial" 455 | author: Schneider 456 | year: 1990 457 | link: https://www.cs.cornell.edu/fbs/publications/SMSurvey.pdf 458 | - title: Practical Byzantine Fault Tolerance 459 | author: Castro, Liskov 460 | year: 1999 461 | link: http://pmg.csail.mit.edu/papers/osdi99.pdf 462 | 463 | - title: "Designing for Usability: Key Principles and What Designers Think" 464 | author: Gould, Lewis 465 | year: 1985 466 | link: https://dl.acm.org/doi/pdf/10.1145/3166.3170 467 | topics: [Human-Computer Interaction, User Interfaces] 468 | related: 469 | - title: As We May Think 470 | author: Bush 471 | year: 1945 472 | link: https://web.mit.edu/STS.035/www/PDFs/think.pdf 473 | - title: Man-Computer symbiosis 474 | author: Licklider 475 | year: 1958 476 | link: http://worrydream.com/refs/Licklider%20-%20Man-Computer%20Symbiosis.pdf 477 | - title: Some Thoughts About the Social Implications of Accessible Computing 478 | author: David, Fano 479 | year: 1965 480 | link: https://dl.acm.org/doi/pdf/10.1145/1463891.1463917 481 | - title: Tutorials for the First-Time Computer User 482 | author: Al-Awar, Chapanis, Ford 483 | year: 1981 484 | link: https://drive.google.com/file/d/1zA4LkSHoanjjhOVCwYzrkdkdzgPbKWJ9/view?usp=sharing 485 | - title: "The star user interface: an overview" 486 | author: Smith, Irby, Kimball 487 | year: 1982 488 | link: https://dl.acm.org/doi/pdf/10.1145/1500774.1500840 489 | - title: Design Principles for Human-Computer Interfaces 490 | author: Norman 491 | year: 1983 492 | link: https://dl.acm.org/doi/pdf/10.1145/800045.801571 493 | - title: "Human-Computer Interaction: Psychology as a Science of Design" 494 | author: Carroll 495 | year: 1997 496 | link: https://home.cs.colorado.edu/~martin/Csci6402/Papers/carroll97.pdf 497 | 498 | - title: The anatomy of a large-scale hypertextual Web search engine 499 | author: Brin, Page 500 | year: 1998 501 | link: https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/334.pdf 502 | topics: [Information Retrieval, World-Wide Web] 503 | related: 504 | - title: A Statistical Interpretation of Term Specificity in Retrieval 505 | author: Spärck Jones 506 | year: 1972 507 | link: http://openlib.org/home/krichel/courses/lis618/readings/spaerk-jones72.pdf 508 | - title: "The PageRank Citation Ranking: Bringing Order to the Web" 509 | author: Page, Brin, Motwani 510 | year: 1998 511 | link: https://www.cis.upenn.edu/~mkearns/teaching/NetworkedLife/pagerank.pdf 512 | - title: "Information Management: A Proposal" 513 | author: Berners-Lee 514 | year: 1990 515 | link: https://cds.cern.ch/record/369245/files/dd-89-001.pdf 516 | 517 | - title: Dynamo, Amazon’s Highly Available Key-value store 518 | author: DeCandia et al 519 | year: 2007 520 | link: https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf 521 | topics: [Internet Scale Data Systems] 522 | related: 523 | - title: The Google File System 524 | author: Ghemawat, Gobioff, Leung 525 | year: 2003 526 | link: https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/035fc972c796d33122033a0614bc94cff1527999.pdf 527 | - title: "MapReduce: Simplified Data Processing on Large Clusters" 528 | author: Dean, Ghemawat 529 | year: 2004 530 | link: https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/16cb30b4b92fd4989b8619a61752a2387c6dd474.pdf 531 | - title: "Bigtable: A Distributed Storage System for Structured Data" 532 | author: Chang et al 533 | year: 2006 534 | link: https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/68a74a85e1662fe02ff3967497f31fda7f32225c.pdf 535 | - title: 'CAP Twelve Years Later: How the "Rules" Have Changed' 536 | author: Brewer 537 | year: 2012 538 | link: https://sites.cs.ucsb.edu/~rich/class/cs293b-cloud/papers/brewer-cap.pdf 539 | - title: "Kafka: a Distributed Messaging System for Log Processing" 540 | author: Kreps, Narkhede, Rao 541 | year: 2011 542 | link: http://notes.stephenholiday.com/Kafka.pdf 543 | - title: "ZooKeeper: wait-free coordination for internet scale systems" 544 | author: Hunt et al 545 | year: 2010 546 | link: https://www.usenix.org/legacy/event/atc10/tech/full_papers/Hunt.pdf 547 | - title: The Hadoop Distributed File System 548 | author: Shvachko et al 549 | year: 2010 550 | link: https://cse.buffalo.edu/~okennedy/courses/papers/hdfs.pdf 551 | - title: "Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases" 552 | author: Verbitski et al 553 | year: 2017 554 | link: https://pages.cs.wisc.edu/~yxy/cs764-f20/papers/aurora-sigmod-17.pdf 555 | 556 | - title: On Designing and Deploying Internet Scale Services 557 | author: Hamilton 558 | year: 2007 559 | link: https://s3.amazonaws.com/systemsandpapers/papers/hamilton.pdf 560 | topics: [Operations, Reliability, Fault-tolerance] 561 | related: 562 | - title: Ironies of Automation 563 | author: Bainbridge 564 | year: 1983 565 | link: https://ckrybus.com/static/papers/Bainbridge_1983_Automatica.pdf 566 | - title: Why do computers stop and what can be done about it? 567 | author: Gray 568 | year: 1985 569 | link: https://jimgray.azurewebsites.net/papers/TandemTR85.7_WhyDoComputersStop.pdf 570 | - title: "Recovery Oriented Computing (ROC): Motivation, Definition, Techniques, and Case Studies" 571 | author: Patterson et al 572 | year: 2002 573 | link: http://www2.eecs.berkeley.edu/Pubs/TechRpts/2002/CSD-02-1175.pdf 574 | - title: Crash-Only Software 575 | author: Candea, Fox 576 | year: 2003 577 | link: https://research.cs.wisc.edu/areas/os/ReadingGroup/os-old/Papers/HotOSIX/Candea-CrashOnlySoftware.pdf 578 | - title: Building on Quicksand 579 | author: Helland, Campbell 580 | year: 2009 581 | link: https://arxiv.org/ftp/arxiv/papers/0909/0909.1788.pdf 582 | 583 | - title: Bitcoin, A peer-to-peer electronic cash system 584 | author: Nakamoto 585 | year: 2008 586 | link: https://bitcoin.org/bitcoin.pdf 587 | topics: [Decentralized Distributed Systems, Peer-to-peer systems] 588 | related: 589 | - title: "Operational transformation in real-time group editors: issues, algorithms, and achievements" 590 | author: Sun, Ellis 591 | year: 1998 592 | link: https://dl.acm.org/doi/pdf/10.1145/289444.289469 593 | - title: Conflict-free Replicated Data Types 594 | author: Shapiro et al 595 | year: 2011 596 | link: https://inria.hal.science/hal-00932836/file/CRDTs_SSS-2011.pdf 597 | - title: "Incentives Build Robustness in BitTorrent" 598 | author: Cohen 599 | link: https://www.bittorrent.org/bittorrentecon.pdf 600 | year: 2003 601 | - title: "IPFS - Content Addressed, Versioned, P2P File System" 602 | year: 2014 603 | author: Benet 604 | link: https://raw.githubusercontent.com/ipfs/papers/master/ipfs-cap2pfs/ipfs-p2p-file-system.pdf 605 | - title: "Kademlia: A Peer-to-Peer Information System Based on the XOR Metric" 606 | link: https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf 607 | year: 2002 608 | author: Maymounkov, Mazières 609 | - title: "Local-First Software: You Own Your Data, in spite of the Cloud" 610 | year: 2019 611 | author: Kleppmann et al 612 | link: https://www.inkandswitch.com/local-first/static/local-first.pdf 613 | - title: "Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform" 614 | author: Buterin 615 | year: 2014 616 | link: https://ethereum.org/content/whitepaper/whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf 617 | 618 | - title: A Few Useful Things to Know About Machine Learning 619 | author: Domingos 620 | year: 2012 621 | link: https://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf 622 | topics: [Machine Learning] 623 | related: 624 | - title: Deep Learning 625 | author: LeCun, Bengio, Hinton 626 | year: 2015 627 | link: https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf 628 | - title: "Statistical Modeling: The Two Cultures" 629 | author: Breiman 630 | year: 2001 631 | # link: http://www2.math.uu.se/~thulin/mm/breiman.pdf 632 | link: https://projecteuclid.org/journalArticle/Download?urlId=10.1214%2Fss%2F1009213726 633 | - title: The Unreasonable Effectiveness of Data 634 | author: Halevy, Norvig, Pereira 635 | year: 2009 636 | link: https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/35179.pdf 637 | - title: Attention Is All You Need 638 | author: Vaswani et al 639 | year: 2017 640 | link: https://arxiv.org/pdf/1706.03762.pdf 641 | - title: Generative Adversarial Nets 642 | author: Goodfellow et al 643 | year: 2014 644 | link: https://arxiv.org/pdf/1406.2661 645 | - title: ImageNet Classification with Deep Convolutional Neural Networks 646 | author: Krizhevsky, Sutskever, Hinton 647 | year: 2012 648 | link: https://www.cs.cmu.edu/~epxing/Class/10715-14f/reading/imagenet.pdf 649 | - title: Playing Atari with Deep Reinforcement Learning 650 | author: Mnih et al 651 | year: 2013 652 | link: https://arxiv.org/pdf/1312.5602.pdf 653 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Papers for Software Engineers [![workflow](https://github.com/facundoolano/software-papers/actions/workflows/tests.yml/badge.svg)](https://github.com/facundoolano/software-papers/actions/workflows/tests.yml) 2 | 3 | A curated list of papers that may be of interest to Software Engineering students or professionals. 4 | See the [sources](#sources) and [selection criteria](#selection-criteria) below. 5 | 6 |
7 | 8 |
9 | List of papers by topic 10 |
11 | 12 | 1. **Von Neumann's First Computer Program. [Knuth (1970)](https://dl.acm.org/doi/pdf/10.1145/356580.356581).** 13 | \ 14 | Computer History; Early Programming 15 | * The Education of a Computer. [Hopper (1952)](https://people.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/p243-hopper.pdf). 16 | * Recursive Programming. [Dijkstra (1960)](https://www.ics.uci.edu/~jajones/INF102-S18/readings/07_dijkstra.pdf). 17 | * Programming Considered as a Human Activity. [Dijkstra (1965)](https://www.cs.utexas.edu/~EWD/transcriptions/EWD01xx/EWD117.html). 18 | * Goto Statement Considered Harmful. [Dijkstra (1968)](https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf). 19 | * Program development by stepwise refinement. [Wirth (1971)](https://dl.acm.org/doi/pdf/10.1145/362575.362577). 20 | * The Humble Programmer. [Dijkstra (1972)](http://rkka21.ru/docs/turing-award/ed1972e.pdf). 21 | * Computer Programming as an Art. [Knuth (1974)](http://www.cs.bilkent.edu.tr/~canf/knuth1974.pdf). 22 | * The paradigms of programming. [Floyd (1979)](https://dl.acm.org/doi/pdf/10.1145/1283920.1283934). 23 | * Literate Programming. [Knuth (1984)](http://www.literateprogramming.com/knuthweb.pdf). 24 | 25 | 1. **Computing Machinery and Intelligence. [Turing (1950)](https://www.csee.umbc.edu/courses/471/papers/turing.pdf).** 26 | \ 27 | Early Artificial Intelligence 28 | * Some Moral and Technical Consequences of Automation. [Wiener (1960)](https://nissenbaum.tech.cornell.edu/papers/Wiener.pdf). 29 | * Steps towards Artificial Intelligence. [Minsky (1960)](http://worrydream.com/refs/Minsky%20-%20Steps%20Toward%20Artificial%20Intelligence.pdf). 30 | * ELIZA—a computer program for the study of natural language communication between man and machine. [Weizenbaum (1966)](http://web.stanford.edu/class/cs124/p36-weizenabaum.pdf). 31 | * A Theory of the Learnable. [Valiant (1984)](https://people.mpi-inf.mpg.de/~mehlhorn/SeminarEvolvability/ValiantLearnable.pdf). 32 | 33 | 1. **A Method for the Construction of Minimum-Redundancy Codes. [Huffman (1952)](http://compression.ru/download/articles/huff/huffman_1952_minimum-redundancy-codes.pdf).** 34 | \ 35 | Information Theory 36 | * Prediction and Entropy of Printed English. [Shannon (1950)](https://www.princeton.edu/~wbialek/rome/refs/shannon_51.pdf). 37 | * A Universal Algorithm for Sequential Data Compression. [Ziv, Lempel (1977)](https://courses.cs.duke.edu/spring03/cps296.5/papers/ziv_lempel_1977_universal_algorithm.pdf). 38 | * Fifty Years of Shannon Theory. [Verdú (1998)](https://monoskop.org/images/7/78/Verdu_Sergio_1998_Fifty_Years_of_Shannon_Theory.pdf). 39 | 40 | 1. **Engineering a Sort Function. [Bentley, McIlroy (1993)](https://cs.fit.edu/~pkc/classes/writing/samples/bentley93engineering.pdf).** 41 | \ 42 | Data Structures; Algorithms 43 | * On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem. [Kruskal (1956)](https://www.ams.org/proc/1956-007-01/S0002-9939-1956-0078686-7/S0002-9939-1956-0078686-7.pdf). 44 | * A Note on Two Problems in Connexion with Graphs. [Dijkstra (1959)](https://jmvidal.cse.sc.edu/library/dijkstra59a.pdf). 45 | * Quicksort. [Hoare (1962)](https://dl.acm.org/doi/pdf/10.5555/63445.C1104357). 46 | * Space/Time Trade-offs in Hash Coding with Allowable Errors. [Bloom (1970)](https://dl.acm.org/doi/pdf/10.1145/362686.362692). 47 | * The Ubiquitous B-Tree. [Comer (1979)](http://carlosproal.com/ir/papers/p121-comer.pdf). 48 | * Programming pearls: Algorithm design techniques. [Bentley (1984)](https://dl.acm.org/doi/pdf/10.1145/358234.381162). 49 | * Programming pearls: The back of the envelope. [Bentley (1984)](https://dl.acm.org/doi/pdf/10.1145/357994.381168). 50 | * Making data structures persistent. [Driscoll et al (1986)](https://dl.acm.org/doi/pdf/10.1145/12130.12142). 51 | 52 | 1. **A Design Methodology for Reliable Software Systems. [Liskov (1972)](https://dl.acm.org/doi/pdf/10.1145/1479992.1480018).** 53 | \ 54 | Software Design 55 | * On the Criteria To Be Used in Decomposing Systems into Modules. [Parnas (1972)](https://dl.acm.org/doi/pdf/10.1145/361598.361623). 56 | * Information Distribution Aspects of Design Methodology. [Parnas (1972)](https://cseweb.ucsd.edu/~wgg/CSE218/Parnas-IFIP71-information-distribution.PDF). 57 | * Programming with Abstract Data Types. [Liskov, Zilles (1974)](https://dl.acm.org/doi/pdf/10.1145/942572.807045). 58 | * Designing Software for Ease of Extension and Contraction. [Parnas (1979)](https://courses.cs.washington.edu/courses/cse503/08wi/parnas-1979.pdf). 59 | * Programming as Theory Building. [Naur (1985)](https://pages.cs.wisc.edu/~remzi/Naur.pdf). 60 | * Towards a Theory of Conceptual Design for Software. [Jackson (2015)](https://groups.csail.mit.edu/sdg/pubs/2015/concept-essay.pdf). 61 | 62 | 1. **Programming Paradigms for Dummies: What Every Programmer Should Know. [Van Roy (2012)](https://webperso.info.ucl.ac.be/~pvr/VanRoyChapter.pdf).** 63 | \ 64 | Programming Paradigms 65 | * Recursive Functions of Symbolic Expressions and Their Computation by Machine. [McCarthy (1960)](http://jmc.stanford.edu/articles/recursive/recursive.pdf). 66 | * The Semantics of Predicate Logic as a Programming Language. [Van Emden, Kowalski (1976)](https://dl.acm.org/doi/pdf/10.1145/321978.321991). 67 | * The Smalltalk-76 Programming System Design and Implementation. [Ingalls (1978)](https://dl.acm.org/doi/pdf/10.1145/512760.512762). 68 | * A Theory of Type Polymorphism in Programming. [Milner (1978)](https://homepages.inf.ed.ac.uk/wadler/papers/papers-we-love/milner-type-polymorphism.pdf). 69 | * Can Programming Be Liberated from the von Neumann Style? [Backus (1978)](https://dl.acm.org/doi/pdf/10.1145/359576.359579). 70 | * The Semantic Elegance of Applicative Languages. [Turner (1981)](http://nsl.com/misc/sasl/paraffins-turner.pdf). 71 | * On understanding types, data abstraction, and polymorphism. [Cardelli, Wegner (1985)](https://dl.acm.org/doi/pdf/10.1145/6041.6042). 72 | * Why Functional Programming Matters. [Hughes (1990)](https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf). 73 | * SELF: The Power of Simplicity. [Ungar, Smith (1991)](https://people.eecs.berkeley.edu/~fateman/264/papers/selfpower.ps). 74 | * The essence of functional programming. [Wadler (1992)](https://dl.acm.org/doi/pdf/10.1145/143165.143169). 75 | * QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs. [Claessen, Hughes (2000)](https://dl.acm.org/doi/pdf/10.1145/351240.351266). 76 | * Church's Thesis and Functional Programming. [Turner (2006)](https://kar.kent.ac.uk/88944/1/ctfp.pdf_nocoversheet). 77 | 78 | 1. **An Incremental Approach to Compiler Construction. [Ghuloum (2006)](http://scheme2006.cs.uchicago.edu/11-ghuloum.pdf).** 79 | \ 80 | Language Design; Compilers 81 | * The Next 700 Programming Languages. [Landin (1966)](https://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf). 82 | * Programming pearls: little languages. [Bentley (1986)](https://dl.acm.org/doi/pdf/10.1145/6424.315691). 83 | * The Essence of Compiling with Continuations. [Flanagan et al (1993)](https://dl.acm.org/doi/pdf/10.1145/173262.155113). 84 | * A Brief History of Just-In-Time. [Aycock (2003)](https://www.cs.tufts.edu/comp/150CMP/papers/aycock03jit.pdf). 85 | * LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation. [Lattner, Adve (2004)](https://llvm.org/pubs/2004-01-30-CGO-LLVM.pdf). 86 | * A Unified Theory of Garbage Collection. [Bacon, Cheng, Rajan (2004)](https://courses.cs.washington.edu/courses/cse590p/05au/p50-bacon.pdf). 87 | * A Nanopass Framework for Compiler Education. [Sarkar, Waddell, Dybvig (2005)](https://www.cambridge.org/core/services/aop-cambridge-core/content/view/1E378B9B451270AF6A155FA0C21C04A3/S0956796805005605a.pdf/educational_pearl_a_nanopass_framework_for_compiler_education.pdf). 88 | * Bringing the Web up to Speed with WebAssembly. [Haas (2017)](https://dl.acm.org/doi/pdf/10.1145/3062341.3062363). 89 | 90 | 1. **No Silver Bullet: Essence and Accidents of Software Engineering. [Brooks (1987)](http://worrydream.com/refs/Brooks-NoSilverBullet.pdf).** 91 | \ 92 | Software Engineering; Project Management 93 | * How do committees invent? [Conway (1968)](https://www.melconway.com/Home/pdf/committees.pdf). 94 | * Managing the Development of Large Software Systems. [Royce (1970)](https://dl.acm.org/doi/pdf/10.5555/41765.41801). 95 | * The Mythical Man Month. [Brooks (1975)](https://www.cs.virginia.edu/~evans/greatworks/mythical.pdf). 96 | * On Building Systems That Will Fail. [Corbató (1991)](https://dl.acm.org/doi/pdf/10.1145/114669.114686). 97 | * Software Aging. [Parnas (1994)](https://dl.acm.org/doi/pdf/10.5555/257734.257788). 98 | * Laws of Software Evolution Revisited. [Lehman (1997)](https://www.rose-hulman.edu/Class/csse/csse490/cs490-const-and-evol/LawsOfSoftwareEvolutionRevisited.pdf). 99 | * The Cathedral and the Bazaar. [Raymond (1998)](http://users.ece.utexas.edu/~perry/education/382v-s08/papers/raymond.pdf). 100 | * Out of the Tar Pit. [Moseley, Marks (2006)](http://curtclifton.net/papers/MoseleyMarks06a.pdf). 101 | 102 | 1. **Communicating sequential processes. [Hoare (1978)](https://www.cs.cmu.edu/~crary/819-f09/Hoare78.pdf).** 103 | \ 104 | Concurrency 105 | * Solution Of a Problem in Concurrent Program Control. [Dijkstra (1965)](https://dl.acm.org/doi/pdf/10.1145/365559.365617). 106 | * Monitors: An operating system structuring concept. [Hoare (1974)](https://dl.acm.org/doi/pdf/10.1145/355620.361161). 107 | * On the Duality of Operating System Structures. [Lauer, Needham (1978)](https://dl.acm.org/doi/pdf/10.1145/850657.850658). 108 | * Software Transactional Memory. [Shavit, Touitou (1997)](https://groups.csail.mit.edu/tds/papers/Shavit/ShavitTouitou.pdf). 109 | 110 | 1. **The UNIX Time- Sharing System. [Ritchie, Thompson (1974)](https://dsf.berkeley.edu/cs262/unix.pdf).** 111 | \ 112 | Operating Systems 113 | * An Experimental Time-Sharing System. [Corbató, Merwin Daggett, Daley (1962)](http://larch-www.lcs.mit.edu:8001/~corbato/sjcc62/). 114 | * The Structure of the \"THE\"-Multiprogramming System. [Dijkstra (1968)](https://www.eecs.ucf.edu/~eurip/papers/dijkstra-the68.pdf). 115 | * The nucleus of a multiprogramming system. [Hansen (1970)](http://www.brinch-hansen.net/papers/1970a.pdf). 116 | * Reflections on Trusting Trust. [Thompson (1984)](https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf). 117 | * The Design and Implementation of a Log-Structured File System. [Rosenblum, Ousterhout (1991)](https://people.eecs.berkeley.edu/~brewer/cs262/LFS.pdf). 118 | 119 | 1. **A Relational Model of Data for Large Shared Data Banks. [Codd (1970)](https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf).** 120 | \ 121 | Databases 122 | * Granularity of Locks and Degrees of Consistency in a Shared Data Base. [Gray et al (1975)](https://www.cs.cmu.edu/~natassa/courses/15-721/papers/GrayLocks.pdf). 123 | * Access Path Selection in a Relational Database Management System. [Selinger et al (1979)](https://courses.cs.duke.edu/compsci516/cps216/spring03/papers/selinger-etal-1979.pdf). 124 | * The Transaction Concept: Virtues and Limitations. [Gray (1981)](https://jimgray.azurewebsites.net/papers/theTransactionConcept.pdf). 125 | * The design of POSTGRES. [Stonebraker, Rowe (1986)](https://dl.acm.org/doi/pdf/10.1145/16856.16888). 126 | * Rules of Thumb in Data Engineering. [Gray, Shenay (1999)](http://research.microsoft.com/en-us/um/people/gray/papers/ms_tr_99_100_rules_of_thumb_in_data_engineering.pdf). 127 | 128 | 1. **A Protocol for Packet Network Intercommunication. [Cerf, Kahn (1974)](https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf).** 129 | \ 130 | Networking 131 | * Ethernet: Distributed packet switching for local computer networks. [Metcalfe, Boggs (1978)](https://dl.acm.org/doi/pdf/10.1145/360248.360253). 132 | * End-To-End Arguments in System Design. [Saltzer, Reed, Clark (1984)](https://groups.csail.mit.edu/ana/Publications/PubPDFs/End-to-End%20Arguments%20in%20System%20Design.pdf). 133 | * An algorithm for distributed computation of a Spanning Tree in an Extended LAN. [Perlman (1985)](https://dl.acm.org/doi/pdf/10.1145/319056.319004). 134 | * The Design Philosophy of the DARPA Internet Protocols. [Clark (1988)](http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-clark.pdf). 135 | * TOR: The second generation onion router. [Dingledine et al (2004)](https://svn-archive.torproject.org/svn/projects/design-paper/tor-design.pdf). 136 | * Why the Internet only just works. [Handley (2006)](https://www2.cs.uh.edu/~gnawali/courses/cosc6377-f17/papers/Handley06.pdf). 137 | * The Network is Reliable. [Bailis, Kingsbury (2014)](https://queue.acm.org/detail.cfm?id=2655736). 138 | 139 | 1. **New Directions in Cryptography. [Diffie, Hellman (1976)](https://ee.stanford.edu/~hellman/publications/24.pdf).** 140 | \ 141 | Cryptography 142 | * A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. [Rivest, Shamir, Adleman (1978)](https://dl.acm.org/doi/pdf/10.1145/359340.359342). 143 | * How To Share A Secret. [Shamir (1979)](https://web.mit.edu/6.857/OldStuff/Fall03/ref/Shamir-HowToShareASecret.pdf). 144 | * A Digital Signature Based on a Conventional Encryption Function. [Merkle (1987)](https://people.eecs.berkeley.edu/~raluca/cs261-f15/readings/merkle.pdf). 145 | * The Salsa20 family of stream ciphers. [Bernstein (2007)](https://cr.yp.to/snuffle/salsafamily-20071225.pdf). 146 | 147 | 1. **Time, Clocks, and the Ordering of Events in a Distributed System. [Lamport (1978)](https://lamport.azurewebsites.net/pubs/time-clocks.pdf).** 148 | \ 149 | Distributed Systems 150 | * Self-stabilizing systems in spite of distributed control. [Dijkstra (1974)](https://dl.acm.org/doi/pdf/10.1145/361179.361202). 151 | * The Byzantine Generals Problem. [Lamport, Shostak, Pease (1982)](https://lamport.azurewebsites.net/pubs/byz.pdf). 152 | * Impossibility of Distributed Consensus With One Faulty Process. [Fisher, Lynch, Patterson (1985)](https://groups.csail.mit.edu/tds/papers/Lynch/jacm85.pdf). 153 | * Implementing Fault-Tolerant Services Using the State Machine Approach: A Tutorial. [Schneider (1990)](https://www.cs.cornell.edu/fbs/publications/SMSurvey.pdf). 154 | * Practical Byzantine Fault Tolerance. [Castro, Liskov (1999)](http://pmg.csail.mit.edu/papers/osdi99.pdf). 155 | * Paxos made simple. [Lamport (2001)](https://lamport.azurewebsites.net/pubs/paxos-simple.pdf). 156 | * Paxos made live - An Engineering Perspective. [Chandra, Griesemer, Redstone (2007)](https://www.cs.utexas.edu/users/lorenzo/corsi/cs380d/papers/paper2-1.pdf). 157 | * In Search of an Understandable Consensus Algorithm. [Ongaro, Ousterhout (2014)](https://raft.github.io/raft.pdf). 158 | 159 | 1. **Designing for Usability: Key Principles and What Designers Think. [Gould, Lewis (1985)](https://dl.acm.org/doi/pdf/10.1145/3166.3170).** 160 | \ 161 | Human-Computer Interaction; User Interfaces 162 | * As We May Think. [Bush (1945)](https://web.mit.edu/STS.035/www/PDFs/think.pdf). 163 | * Man-Computer symbiosis. [Licklider (1958)](http://worrydream.com/refs/Licklider%20-%20Man-Computer%20Symbiosis.pdf). 164 | * Some Thoughts About the Social Implications of Accessible Computing. [David, Fano (1965)](https://dl.acm.org/doi/pdf/10.1145/1463891.1463917). 165 | * Tutorials for the First-Time Computer User. [Al-Awar, Chapanis, Ford (1981)](https://drive.google.com/file/d/1zA4LkSHoanjjhOVCwYzrkdkdzgPbKWJ9/view?usp=sharing). 166 | * The star user interface: an overview. [Smith, Irby, Kimball (1982)](https://dl.acm.org/doi/pdf/10.1145/1500774.1500840). 167 | * Design Principles for Human-Computer Interfaces. [Norman (1983)](https://dl.acm.org/doi/pdf/10.1145/800045.801571). 168 | * Human-Computer Interaction: Psychology as a Science of Design. [Carroll (1997)](https://home.cs.colorado.edu/~martin/Csci6402/Papers/carroll97.pdf). 169 | 170 | 1. **The anatomy of a large-scale hypertextual Web search engine. [Brin, Page (1998)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/334.pdf).** 171 | \ 172 | Information Retrieval; World-Wide Web 173 | * A Statistical Interpretation of Term Specificity in Retrieval. [Spärck Jones (1972)](http://openlib.org/home/krichel/courses/lis618/readings/spaerk-jones72.pdf). 174 | * Information Management: A Proposal. [Berners-Lee (1990)](https://cds.cern.ch/record/369245/files/dd-89-001.pdf). 175 | * The PageRank Citation Ranking: Bringing Order to the Web. [Page, Brin, Motwani (1998)](https://www.cis.upenn.edu/~mkearns/teaching/NetworkedLife/pagerank.pdf). 176 | 177 | 1. **Dynamo, Amazon’s Highly Available Key-value store. [DeCandia et al (2007)](https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf).** 178 | \ 179 | Internet Scale Data Systems 180 | * The Google File System. [Ghemawat, Gobioff, Leung (2003)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/035fc972c796d33122033a0614bc94cff1527999.pdf). 181 | * MapReduce: Simplified Data Processing on Large Clusters. [Dean, Ghemawat (2004)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/16cb30b4b92fd4989b8619a61752a2387c6dd474.pdf). 182 | * Bigtable: A Distributed Storage System for Structured Data. [Chang et al (2006)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/68a74a85e1662fe02ff3967497f31fda7f32225c.pdf). 183 | * ZooKeeper: wait-free coordination for internet scale systems. [Hunt et al (2010)](https://www.usenix.org/legacy/event/atc10/tech/full_papers/Hunt.pdf). 184 | * The Hadoop Distributed File System. [Shvachko et al (2010)](https://cse.buffalo.edu/~okennedy/courses/papers/hdfs.pdf). 185 | * Kafka: a Distributed Messaging System for Log Processing. [Kreps, Narkhede, Rao (2011)](http://notes.stephenholiday.com/Kafka.pdf). 186 | * CAP Twelve Years Later: How the "Rules" Have Changed. [Brewer (2012)](https://sites.cs.ucsb.edu/~rich/class/cs293b-cloud/papers/brewer-cap.pdf). 187 | * Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases. [Verbitski et al (2017)](https://pages.cs.wisc.edu/~yxy/cs764-f20/papers/aurora-sigmod-17.pdf). 188 | 189 | 1. **On Designing and Deploying Internet Scale Services. [Hamilton (2007)](https://s3.amazonaws.com/systemsandpapers/papers/hamilton.pdf).** 190 | \ 191 | Operations; Reliability; Fault-tolerance 192 | * Ironies of Automation. [Bainbridge (1983)](https://ckrybus.com/static/papers/Bainbridge_1983_Automatica.pdf). 193 | * Why do computers stop and what can be done about it? [Gray (1985)](https://jimgray.azurewebsites.net/papers/TandemTR85.7_WhyDoComputersStop.pdf). 194 | * Recovery Oriented Computing (ROC): Motivation, Definition, Techniques, and Case Studies. [Patterson et al (2002)](http://www2.eecs.berkeley.edu/Pubs/TechRpts/2002/CSD-02-1175.pdf). 195 | * Crash-Only Software. [Candea, Fox (2003)](https://research.cs.wisc.edu/areas/os/ReadingGroup/os-old/Papers/HotOSIX/Candea-CrashOnlySoftware.pdf). 196 | * Building on Quicksand. [Helland, Campbell (2009)](https://arxiv.org/ftp/arxiv/papers/0909/0909.1788.pdf). 197 | 198 | 1. **Bitcoin, A peer-to-peer electronic cash system. [Nakamoto (2008)](https://bitcoin.org/bitcoin.pdf).** 199 | \ 200 | Decentralized Distributed Systems; Peer-to-peer systems 201 | * Operational transformation in real-time group editors: issues, algorithms, and achievements. [Sun, Ellis (1998)](https://dl.acm.org/doi/pdf/10.1145/289444.289469). 202 | * Kademlia: A Peer-to-Peer Information System Based on the XOR Metric. [Maymounkov, Mazières (2002)](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf). 203 | * Incentives Build Robustness in BitTorrent. [Cohen (2003)](https://www.bittorrent.org/bittorrentecon.pdf). 204 | * Conflict-free Replicated Data Types. [Shapiro et al (2011)](https://inria.hal.science/hal-00932836/file/CRDTs_SSS-2011.pdf). 205 | * IPFS - Content Addressed, Versioned, P2P File System. [Benet (2014)](https://raw.githubusercontent.com/ipfs/papers/master/ipfs-cap2pfs/ipfs-p2p-file-system.pdf). 206 | * Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform. [Buterin (2014)](https://ethereum.org/content/whitepaper/whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf). 207 | * Local-First Software: You Own Your Data, in spite of the Cloud. [Kleppmann et al (2019)](https://www.inkandswitch.com/local-first/static/local-first.pdf). 208 | 209 | 1. **A Few Useful Things to Know About Machine Learning. [Domingos (2012)](https://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf).** 210 | \ 211 | Machine Learning 212 | * Statistical Modeling: The Two Cultures. [Breiman (2001)](https://projecteuclid.org/journalArticle/Download?urlId=10.1214%2Fss%2F1009213726). 213 | * The Unreasonable Effectiveness of Data. [Halevy, Norvig, Pereira (2009)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/35179.pdf). 214 | * ImageNet Classification with Deep Convolutional Neural Networks. [Krizhevsky, Sutskever, Hinton (2012)](https://www.cs.cmu.edu/~epxing/Class/10715-14f/reading/imagenet.pdf). 215 | * Playing Atari with Deep Reinforcement Learning. [Mnih et al (2013)](https://arxiv.org/pdf/1312.5602.pdf). 216 | * Generative Adversarial Nets. [Goodfellow et al (2014)](https://arxiv.org/pdf/1406.2661). 217 | * Deep Learning. [LeCun, Bengio, Hinton (2015)](https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf). 218 | * Attention Is All You Need. [Vaswani et al (2017)](https://arxiv.org/pdf/1706.03762.pdf). 219 | 220 | 221 | 222 |
223 | 224 |
225 | 226 |
227 | Top-level papers only 228 |
229 | 230 | 1. **Von Neumann's First Computer Program. [Knuth (1970)](https://dl.acm.org/doi/pdf/10.1145/356580.356581).** 231 | 1. **Computing Machinery and Intelligence. [Turing (1950)](https://www.csee.umbc.edu/courses/471/papers/turing.pdf).** 232 | 1. **A Method for the Construction of Minimum-Redundancy Codes. [Huffman (1952)](http://compression.ru/download/articles/huff/huffman_1952_minimum-redundancy-codes.pdf).** 233 | 1. **Engineering a Sort Function. [Bentley, McIlroy (1993)](https://cs.fit.edu/~pkc/classes/writing/samples/bentley93engineering.pdf).** 234 | 1. **A Design Methodology for Reliable Software Systems. [Liskov (1972)](https://dl.acm.org/doi/pdf/10.1145/1479992.1480018).** 235 | 1. **Programming Paradigms for Dummies: What Every Programmer Should Know. [Van Roy (2012)](https://webperso.info.ucl.ac.be/~pvr/VanRoyChapter.pdf).** 236 | 1. **An Incremental Approach to Compiler Construction. [Ghuloum (2006)](http://scheme2006.cs.uchicago.edu/11-ghuloum.pdf).** 237 | 1. **No Silver Bullet: Essence and Accidents of Software Engineering. [Brooks (1987)](http://worrydream.com/refs/Brooks-NoSilverBullet.pdf).** 238 | 1. **Communicating sequential processes. [Hoare (1978)](https://www.cs.cmu.edu/~crary/819-f09/Hoare78.pdf).** 239 | 1. **The UNIX Time- Sharing System. [Ritchie, Thompson (1974)](https://dsf.berkeley.edu/cs262/unix.pdf).** 240 | 1. **A Relational Model of Data for Large Shared Data Banks. [Codd (1970)](https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf).** 241 | 1. **A Protocol for Packet Network Intercommunication. [Cerf, Kahn (1974)](https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf).** 242 | 1. **New Directions in Cryptography. [Diffie, Hellman (1976)](https://ee.stanford.edu/~hellman/publications/24.pdf).** 243 | 1. **Time, Clocks, and the Ordering of Events in a Distributed System. [Lamport (1978)](https://lamport.azurewebsites.net/pubs/time-clocks.pdf).** 244 | 1. **Designing for Usability: Key Principles and What Designers Think. [Gould, Lewis (1985)](https://dl.acm.org/doi/pdf/10.1145/3166.3170).** 245 | 1. **The anatomy of a large-scale hypertextual Web search engine. [Brin, Page (1998)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/334.pdf).** 246 | 1. **Dynamo, Amazon’s Highly Available Key-value store. [DeCandia et al (2007)](https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf).** 247 | 1. **On Designing and Deploying Internet Scale Services. [Hamilton (2007)](https://s3.amazonaws.com/systemsandpapers/papers/hamilton.pdf).** 248 | 1. **Bitcoin, A peer-to-peer electronic cash system. [Nakamoto (2008)](https://bitcoin.org/bitcoin.pdf).** 249 | 1. **A Few Useful Things to Know About Machine Learning. [Domingos (2012)](https://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf).** 250 | 251 | 252 |
253 | 254 |
255 | 256 |
257 | All papers in chronological order 258 |
259 | 260 | 1. As We May Think. [Bush (1945)](https://web.mit.edu/STS.035/www/PDFs/think.pdf). 261 | 1. **Computing Machinery and Intelligence. [Turing (1950)](https://www.csee.umbc.edu/courses/471/papers/turing.pdf).** 262 | 1. Prediction and Entropy of Printed English. [Shannon (1950)](https://www.princeton.edu/~wbialek/rome/refs/shannon_51.pdf). 263 | 1. The Education of a Computer. [Hopper (1952)](https://people.cs.umass.edu/~emery/classes/cmpsci691st/readings/PL/p243-hopper.pdf). 264 | 1. **A Method for the Construction of Minimum-Redundancy Codes. [Huffman (1952)](http://compression.ru/download/articles/huff/huffman_1952_minimum-redundancy-codes.pdf).** 265 | 1. On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem. [Kruskal (1956)](https://www.ams.org/proc/1956-007-01/S0002-9939-1956-0078686-7/S0002-9939-1956-0078686-7.pdf). 266 | 1. Man-Computer symbiosis. [Licklider (1958)](http://worrydream.com/refs/Licklider%20-%20Man-Computer%20Symbiosis.pdf). 267 | 1. A Note on Two Problems in Connexion with Graphs. [Dijkstra (1959)](https://jmvidal.cse.sc.edu/library/dijkstra59a.pdf). 268 | 1. Recursive Programming. [Dijkstra (1960)](https://www.ics.uci.edu/~jajones/INF102-S18/readings/07_dijkstra.pdf). 269 | 1. Some Moral and Technical Consequences of Automation. [Wiener (1960)](https://nissenbaum.tech.cornell.edu/papers/Wiener.pdf). 270 | 1. Steps towards Artificial Intelligence. [Minsky (1960)](http://worrydream.com/refs/Minsky%20-%20Steps%20Toward%20Artificial%20Intelligence.pdf). 271 | 1. Recursive Functions of Symbolic Expressions and Their Computation by Machine. [McCarthy (1960)](http://jmc.stanford.edu/articles/recursive/recursive.pdf). 272 | 1. Quicksort. [Hoare (1962)](https://dl.acm.org/doi/pdf/10.5555/63445.C1104357). 273 | 1. An Experimental Time-Sharing System. [Corbató, Merwin Daggett, Daley (1962)](http://larch-www.lcs.mit.edu:8001/~corbato/sjcc62/). 274 | 1. Programming Considered as a Human Activity. [Dijkstra (1965)](https://www.cs.utexas.edu/~EWD/transcriptions/EWD01xx/EWD117.html). 275 | 1. Solution Of a Problem in Concurrent Program Control. [Dijkstra (1965)](https://dl.acm.org/doi/pdf/10.1145/365559.365617). 276 | 1. Some Thoughts About the Social Implications of Accessible Computing. [David, Fano (1965)](https://dl.acm.org/doi/pdf/10.1145/1463891.1463917). 277 | 1. ELIZA—a computer program for the study of natural language communication between man and machine. [Weizenbaum (1966)](http://web.stanford.edu/class/cs124/p36-weizenabaum.pdf). 278 | 1. The Next 700 Programming Languages. [Landin (1966)](https://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf). 279 | 1. Goto Statement Considered Harmful. [Dijkstra (1968)](https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf). 280 | 1. How do committees invent? [Conway (1968)](https://www.melconway.com/Home/pdf/committees.pdf). 281 | 1. The Structure of the \"THE\"-Multiprogramming System. [Dijkstra (1968)](https://www.eecs.ucf.edu/~eurip/papers/dijkstra-the68.pdf). 282 | 1. **Von Neumann's First Computer Program. [Knuth (1970)](https://dl.acm.org/doi/pdf/10.1145/356580.356581).** 283 | 1. Space/Time Trade-offs in Hash Coding with Allowable Errors. [Bloom (1970)](https://dl.acm.org/doi/pdf/10.1145/362686.362692). 284 | 1. Managing the Development of Large Software Systems. [Royce (1970)](https://dl.acm.org/doi/pdf/10.5555/41765.41801). 285 | 1. The nucleus of a multiprogramming system. [Hansen (1970)](http://www.brinch-hansen.net/papers/1970a.pdf). 286 | 1. **A Relational Model of Data for Large Shared Data Banks. [Codd (1970)](https://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf).** 287 | 1. Program development by stepwise refinement. [Wirth (1971)](https://dl.acm.org/doi/pdf/10.1145/362575.362577). 288 | 1. The Humble Programmer. [Dijkstra (1972)](http://rkka21.ru/docs/turing-award/ed1972e.pdf). 289 | 1. **A Design Methodology for Reliable Software Systems. [Liskov (1972)](https://dl.acm.org/doi/pdf/10.1145/1479992.1480018).** 290 | 1. On the Criteria To Be Used in Decomposing Systems into Modules. [Parnas (1972)](https://dl.acm.org/doi/pdf/10.1145/361598.361623). 291 | 1. Information Distribution Aspects of Design Methodology. [Parnas (1972)](https://cseweb.ucsd.edu/~wgg/CSE218/Parnas-IFIP71-information-distribution.PDF). 292 | 1. A Statistical Interpretation of Term Specificity in Retrieval. [Spärck Jones (1972)](http://openlib.org/home/krichel/courses/lis618/readings/spaerk-jones72.pdf). 293 | 1. Computer Programming as an Art. [Knuth (1974)](http://www.cs.bilkent.edu.tr/~canf/knuth1974.pdf). 294 | 1. Programming with Abstract Data Types. [Liskov, Zilles (1974)](https://dl.acm.org/doi/pdf/10.1145/942572.807045). 295 | 1. Monitors: An operating system structuring concept. [Hoare (1974)](https://dl.acm.org/doi/pdf/10.1145/355620.361161). 296 | 1. **The UNIX Time- Sharing System. [Ritchie, Thompson (1974)](https://dsf.berkeley.edu/cs262/unix.pdf).** 297 | 1. **A Protocol for Packet Network Intercommunication. [Cerf, Kahn (1974)](https://www.cs.princeton.edu/courses/archive/fall06/cos561/papers/cerf74.pdf).** 298 | 1. Self-stabilizing systems in spite of distributed control. [Dijkstra (1974)](https://dl.acm.org/doi/pdf/10.1145/361179.361202). 299 | 1. The Mythical Man Month. [Brooks (1975)](https://www.cs.virginia.edu/~evans/greatworks/mythical.pdf). 300 | 1. Granularity of Locks and Degrees of Consistency in a Shared Data Base. [Gray et al (1975)](https://www.cs.cmu.edu/~natassa/courses/15-721/papers/GrayLocks.pdf). 301 | 1. The Semantics of Predicate Logic as a Programming Language. [Van Emden, Kowalski (1976)](https://dl.acm.org/doi/pdf/10.1145/321978.321991). 302 | 1. **New Directions in Cryptography. [Diffie, Hellman (1976)](https://ee.stanford.edu/~hellman/publications/24.pdf).** 303 | 1. A Universal Algorithm for Sequential Data Compression. [Ziv, Lempel (1977)](https://courses.cs.duke.edu/spring03/cps296.5/papers/ziv_lempel_1977_universal_algorithm.pdf). 304 | 1. The Smalltalk-76 Programming System Design and Implementation. [Ingalls (1978)](https://dl.acm.org/doi/pdf/10.1145/512760.512762). 305 | 1. A Theory of Type Polymorphism in Programming. [Milner (1978)](https://homepages.inf.ed.ac.uk/wadler/papers/papers-we-love/milner-type-polymorphism.pdf). 306 | 1. Can Programming Be Liberated from the von Neumann Style? [Backus (1978)](https://dl.acm.org/doi/pdf/10.1145/359576.359579). 307 | 1. **Communicating sequential processes. [Hoare (1978)](https://www.cs.cmu.edu/~crary/819-f09/Hoare78.pdf).** 308 | 1. On the Duality of Operating System Structures. [Lauer, Needham (1978)](https://dl.acm.org/doi/pdf/10.1145/850657.850658). 309 | 1. Ethernet: Distributed packet switching for local computer networks. [Metcalfe, Boggs (1978)](https://dl.acm.org/doi/pdf/10.1145/360248.360253). 310 | 1. A Method for Obtaining Digital Signatures and Public-Key Cryptosystems. [Rivest, Shamir, Adleman (1978)](https://dl.acm.org/doi/pdf/10.1145/359340.359342). 311 | 1. **Time, Clocks, and the Ordering of Events in a Distributed System. [Lamport (1978)](https://lamport.azurewebsites.net/pubs/time-clocks.pdf).** 312 | 1. The paradigms of programming. [Floyd (1979)](https://dl.acm.org/doi/pdf/10.1145/1283920.1283934). 313 | 1. The Ubiquitous B-Tree. [Comer (1979)](http://carlosproal.com/ir/papers/p121-comer.pdf). 314 | 1. Designing Software for Ease of Extension and Contraction. [Parnas (1979)](https://courses.cs.washington.edu/courses/cse503/08wi/parnas-1979.pdf). 315 | 1. Access Path Selection in a Relational Database Management System. [Selinger et al (1979)](https://courses.cs.duke.edu/compsci516/cps216/spring03/papers/selinger-etal-1979.pdf). 316 | 1. How To Share A Secret. [Shamir (1979)](https://web.mit.edu/6.857/OldStuff/Fall03/ref/Shamir-HowToShareASecret.pdf). 317 | 1. The Semantic Elegance of Applicative Languages. [Turner (1981)](http://nsl.com/misc/sasl/paraffins-turner.pdf). 318 | 1. The Transaction Concept: Virtues and Limitations. [Gray (1981)](https://jimgray.azurewebsites.net/papers/theTransactionConcept.pdf). 319 | 1. Tutorials for the First-Time Computer User. [Al-Awar, Chapanis, Ford (1981)](https://drive.google.com/file/d/1zA4LkSHoanjjhOVCwYzrkdkdzgPbKWJ9/view?usp=sharing). 320 | 1. The Byzantine Generals Problem. [Lamport, Shostak, Pease (1982)](https://lamport.azurewebsites.net/pubs/byz.pdf). 321 | 1. The star user interface: an overview. [Smith, Irby, Kimball (1982)](https://dl.acm.org/doi/pdf/10.1145/1500774.1500840). 322 | 1. Design Principles for Human-Computer Interfaces. [Norman (1983)](https://dl.acm.org/doi/pdf/10.1145/800045.801571). 323 | 1. Ironies of Automation. [Bainbridge (1983)](https://ckrybus.com/static/papers/Bainbridge_1983_Automatica.pdf). 324 | 1. Literate Programming. [Knuth (1984)](http://www.literateprogramming.com/knuthweb.pdf). 325 | 1. A Theory of the Learnable. [Valiant (1984)](https://people.mpi-inf.mpg.de/~mehlhorn/SeminarEvolvability/ValiantLearnable.pdf). 326 | 1. Programming pearls: Algorithm design techniques. [Bentley (1984)](https://dl.acm.org/doi/pdf/10.1145/358234.381162). 327 | 1. Programming pearls: The back of the envelope. [Bentley (1984)](https://dl.acm.org/doi/pdf/10.1145/357994.381168). 328 | 1. Reflections on Trusting Trust. [Thompson (1984)](https://www.cs.cmu.edu/~rdriley/487/papers/Thompson_1984_ReflectionsonTrustingTrust.pdf). 329 | 1. End-To-End Arguments in System Design. [Saltzer, Reed, Clark (1984)](https://groups.csail.mit.edu/ana/Publications/PubPDFs/End-to-End%20Arguments%20in%20System%20Design.pdf). 330 | 1. Programming as Theory Building. [Naur (1985)](https://pages.cs.wisc.edu/~remzi/Naur.pdf). 331 | 1. On understanding types, data abstraction, and polymorphism. [Cardelli, Wegner (1985)](https://dl.acm.org/doi/pdf/10.1145/6041.6042). 332 | 1. An algorithm for distributed computation of a Spanning Tree in an Extended LAN. [Perlman (1985)](https://dl.acm.org/doi/pdf/10.1145/319056.319004). 333 | 1. Impossibility of Distributed Consensus With One Faulty Process. [Fisher, Lynch, Patterson (1985)](https://groups.csail.mit.edu/tds/papers/Lynch/jacm85.pdf). 334 | 1. **Designing for Usability: Key Principles and What Designers Think. [Gould, Lewis (1985)](https://dl.acm.org/doi/pdf/10.1145/3166.3170).** 335 | 1. Why do computers stop and what can be done about it? [Gray (1985)](https://jimgray.azurewebsites.net/papers/TandemTR85.7_WhyDoComputersStop.pdf). 336 | 1. Making data structures persistent. [Driscoll et al (1986)](https://dl.acm.org/doi/pdf/10.1145/12130.12142). 337 | 1. Programming pearls: little languages. [Bentley (1986)](https://dl.acm.org/doi/pdf/10.1145/6424.315691). 338 | 1. The design of POSTGRES. [Stonebraker, Rowe (1986)](https://dl.acm.org/doi/pdf/10.1145/16856.16888). 339 | 1. **No Silver Bullet: Essence and Accidents of Software Engineering. [Brooks (1987)](http://worrydream.com/refs/Brooks-NoSilverBullet.pdf).** 340 | 1. A Digital Signature Based on a Conventional Encryption Function. [Merkle (1987)](https://people.eecs.berkeley.edu/~raluca/cs261-f15/readings/merkle.pdf). 341 | 1. The Design Philosophy of the DARPA Internet Protocols. [Clark (1988)](http://ccr.sigcomm.org/archive/1995/jan95/ccr-9501-clark.pdf). 342 | 1. Why Functional Programming Matters. [Hughes (1990)](https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf). 343 | 1. Implementing Fault-Tolerant Services Using the State Machine Approach: A Tutorial. [Schneider (1990)](https://www.cs.cornell.edu/fbs/publications/SMSurvey.pdf). 344 | 1. Information Management: A Proposal. [Berners-Lee (1990)](https://cds.cern.ch/record/369245/files/dd-89-001.pdf). 345 | 1. SELF: The Power of Simplicity. [Ungar, Smith (1991)](https://people.eecs.berkeley.edu/~fateman/264/papers/selfpower.ps). 346 | 1. On Building Systems That Will Fail. [Corbató (1991)](https://dl.acm.org/doi/pdf/10.1145/114669.114686). 347 | 1. The Design and Implementation of a Log-Structured File System. [Rosenblum, Ousterhout (1991)](https://people.eecs.berkeley.edu/~brewer/cs262/LFS.pdf). 348 | 1. The essence of functional programming. [Wadler (1992)](https://dl.acm.org/doi/pdf/10.1145/143165.143169). 349 | 1. **Engineering a Sort Function. [Bentley, McIlroy (1993)](https://cs.fit.edu/~pkc/classes/writing/samples/bentley93engineering.pdf).** 350 | 1. The Essence of Compiling with Continuations. [Flanagan et al (1993)](https://dl.acm.org/doi/pdf/10.1145/173262.155113). 351 | 1. Software Aging. [Parnas (1994)](https://dl.acm.org/doi/pdf/10.5555/257734.257788). 352 | 1. Laws of Software Evolution Revisited. [Lehman (1997)](https://www.rose-hulman.edu/Class/csse/csse490/cs490-const-and-evol/LawsOfSoftwareEvolutionRevisited.pdf). 353 | 1. Software Transactional Memory. [Shavit, Touitou (1997)](https://groups.csail.mit.edu/tds/papers/Shavit/ShavitTouitou.pdf). 354 | 1. Human-Computer Interaction: Psychology as a Science of Design. [Carroll (1997)](https://home.cs.colorado.edu/~martin/Csci6402/Papers/carroll97.pdf). 355 | 1. Fifty Years of Shannon Theory. [Verdú (1998)](https://monoskop.org/images/7/78/Verdu_Sergio_1998_Fifty_Years_of_Shannon_Theory.pdf). 356 | 1. The Cathedral and the Bazaar. [Raymond (1998)](http://users.ece.utexas.edu/~perry/education/382v-s08/papers/raymond.pdf). 357 | 1. **The anatomy of a large-scale hypertextual Web search engine. [Brin, Page (1998)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/334.pdf).** 358 | 1. The PageRank Citation Ranking: Bringing Order to the Web. [Page, Brin, Motwani (1998)](https://www.cis.upenn.edu/~mkearns/teaching/NetworkedLife/pagerank.pdf). 359 | 1. Operational transformation in real-time group editors: issues, algorithms, and achievements. [Sun, Ellis (1998)](https://dl.acm.org/doi/pdf/10.1145/289444.289469). 360 | 1. Rules of Thumb in Data Engineering. [Gray, Shenay (1999)](http://research.microsoft.com/en-us/um/people/gray/papers/ms_tr_99_100_rules_of_thumb_in_data_engineering.pdf). 361 | 1. Practical Byzantine Fault Tolerance. [Castro, Liskov (1999)](http://pmg.csail.mit.edu/papers/osdi99.pdf). 362 | 1. QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs. [Claessen, Hughes (2000)](https://dl.acm.org/doi/pdf/10.1145/351240.351266). 363 | 1. Paxos made simple. [Lamport (2001)](https://lamport.azurewebsites.net/pubs/paxos-simple.pdf). 364 | 1. Statistical Modeling: The Two Cultures. [Breiman (2001)](https://projecteuclid.org/journalArticle/Download?urlId=10.1214%2Fss%2F1009213726). 365 | 1. Recovery Oriented Computing (ROC): Motivation, Definition, Techniques, and Case Studies. [Patterson et al (2002)](http://www2.eecs.berkeley.edu/Pubs/TechRpts/2002/CSD-02-1175.pdf). 366 | 1. Kademlia: A Peer-to-Peer Information System Based on the XOR Metric. [Maymounkov, Mazières (2002)](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf). 367 | 1. A Brief History of Just-In-Time. [Aycock (2003)](https://www.cs.tufts.edu/comp/150CMP/papers/aycock03jit.pdf). 368 | 1. The Google File System. [Ghemawat, Gobioff, Leung (2003)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/035fc972c796d33122033a0614bc94cff1527999.pdf). 369 | 1. Crash-Only Software. [Candea, Fox (2003)](https://research.cs.wisc.edu/areas/os/ReadingGroup/os-old/Papers/HotOSIX/Candea-CrashOnlySoftware.pdf). 370 | 1. Incentives Build Robustness in BitTorrent. [Cohen (2003)](https://www.bittorrent.org/bittorrentecon.pdf). 371 | 1. LLVM: A Compilation Framework for Lifelong Program Analysis & Transformation. [Lattner, Adve (2004)](https://llvm.org/pubs/2004-01-30-CGO-LLVM.pdf). 372 | 1. A Unified Theory of Garbage Collection. [Bacon, Cheng, Rajan (2004)](https://courses.cs.washington.edu/courses/cse590p/05au/p50-bacon.pdf). 373 | 1. TOR: The second generation onion router. [Dingledine et al (2004)](https://svn-archive.torproject.org/svn/projects/design-paper/tor-design.pdf). 374 | 1. MapReduce: Simplified Data Processing on Large Clusters. [Dean, Ghemawat (2004)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/16cb30b4b92fd4989b8619a61752a2387c6dd474.pdf). 375 | 1. A Nanopass Framework for Compiler Education. [Sarkar, Waddell, Dybvig (2005)](https://www.cambridge.org/core/services/aop-cambridge-core/content/view/1E378B9B451270AF6A155FA0C21C04A3/S0956796805005605a.pdf/educational_pearl_a_nanopass_framework_for_compiler_education.pdf). 376 | 1. Church's Thesis and Functional Programming. [Turner (2006)](https://kar.kent.ac.uk/88944/1/ctfp.pdf_nocoversheet). 377 | 1. **An Incremental Approach to Compiler Construction. [Ghuloum (2006)](http://scheme2006.cs.uchicago.edu/11-ghuloum.pdf).** 378 | 1. Out of the Tar Pit. [Moseley, Marks (2006)](http://curtclifton.net/papers/MoseleyMarks06a.pdf). 379 | 1. Why the Internet only just works. [Handley (2006)](https://www2.cs.uh.edu/~gnawali/courses/cosc6377-f17/papers/Handley06.pdf). 380 | 1. Bigtable: A Distributed Storage System for Structured Data. [Chang et al (2006)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/68a74a85e1662fe02ff3967497f31fda7f32225c.pdf). 381 | 1. The Salsa20 family of stream ciphers. [Bernstein (2007)](https://cr.yp.to/snuffle/salsafamily-20071225.pdf). 382 | 1. Paxos made live - An Engineering Perspective. [Chandra, Griesemer, Redstone (2007)](https://www.cs.utexas.edu/users/lorenzo/corsi/cs380d/papers/paper2-1.pdf). 383 | 1. **Dynamo, Amazon’s Highly Available Key-value store. [DeCandia et al (2007)](https://www.allthingsdistributed.com/files/amazon-dynamo-sosp2007.pdf).** 384 | 1. **On Designing and Deploying Internet Scale Services. [Hamilton (2007)](https://s3.amazonaws.com/systemsandpapers/papers/hamilton.pdf).** 385 | 1. **Bitcoin, A peer-to-peer electronic cash system. [Nakamoto (2008)](https://bitcoin.org/bitcoin.pdf).** 386 | 1. Building on Quicksand. [Helland, Campbell (2009)](https://arxiv.org/ftp/arxiv/papers/0909/0909.1788.pdf). 387 | 1. The Unreasonable Effectiveness of Data. [Halevy, Norvig, Pereira (2009)](https://storage.googleapis.com/gweb-research2023-media/pubtools/pdf/35179.pdf). 388 | 1. ZooKeeper: wait-free coordination for internet scale systems. [Hunt et al (2010)](https://www.usenix.org/legacy/event/atc10/tech/full_papers/Hunt.pdf). 389 | 1. The Hadoop Distributed File System. [Shvachko et al (2010)](https://cse.buffalo.edu/~okennedy/courses/papers/hdfs.pdf). 390 | 1. Kafka: a Distributed Messaging System for Log Processing. [Kreps, Narkhede, Rao (2011)](http://notes.stephenholiday.com/Kafka.pdf). 391 | 1. Conflict-free Replicated Data Types. [Shapiro et al (2011)](https://inria.hal.science/hal-00932836/file/CRDTs_SSS-2011.pdf). 392 | 1. **Programming Paradigms for Dummies: What Every Programmer Should Know. [Van Roy (2012)](https://webperso.info.ucl.ac.be/~pvr/VanRoyChapter.pdf).** 393 | 1. CAP Twelve Years Later: How the "Rules" Have Changed. [Brewer (2012)](https://sites.cs.ucsb.edu/~rich/class/cs293b-cloud/papers/brewer-cap.pdf). 394 | 1. **A Few Useful Things to Know About Machine Learning. [Domingos (2012)](https://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf).** 395 | 1. ImageNet Classification with Deep Convolutional Neural Networks. [Krizhevsky, Sutskever, Hinton (2012)](https://www.cs.cmu.edu/~epxing/Class/10715-14f/reading/imagenet.pdf). 396 | 1. Playing Atari with Deep Reinforcement Learning. [Mnih et al (2013)](https://arxiv.org/pdf/1312.5602.pdf). 397 | 1. The Network is Reliable. [Bailis, Kingsbury (2014)](https://queue.acm.org/detail.cfm?id=2655736). 398 | 1. In Search of an Understandable Consensus Algorithm. [Ongaro, Ousterhout (2014)](https://raft.github.io/raft.pdf). 399 | 1. IPFS - Content Addressed, Versioned, P2P File System. [Benet (2014)](https://raw.githubusercontent.com/ipfs/papers/master/ipfs-cap2pfs/ipfs-p2p-file-system.pdf). 400 | 1. Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform. [Buterin (2014)](https://ethereum.org/content/whitepaper/whitepaper-pdf/Ethereum_Whitepaper_-_Buterin_2014.pdf). 401 | 1. Generative Adversarial Nets. [Goodfellow et al (2014)](https://arxiv.org/pdf/1406.2661). 402 | 1. Towards a Theory of Conceptual Design for Software. [Jackson (2015)](https://groups.csail.mit.edu/sdg/pubs/2015/concept-essay.pdf). 403 | 1. Deep Learning. [LeCun, Bengio, Hinton (2015)](https://www.cs.toronto.edu/~hinton/absps/NatureDeepReview.pdf). 404 | 1. Bringing the Web up to Speed with WebAssembly. [Haas (2017)](https://dl.acm.org/doi/pdf/10.1145/3062341.3062363). 405 | 1. Amazon Aurora: Design Considerations for High Throughput Cloud-Native Relational Databases. [Verbitski et al (2017)](https://pages.cs.wisc.edu/~yxy/cs764-f20/papers/aurora-sigmod-17.pdf). 406 | 1. Attention Is All You Need. [Vaswani et al (2017)](https://arxiv.org/pdf/1706.03762.pdf). 407 | 1. Local-First Software: You Own Your Data, in spite of the Cloud. [Kleppmann et al (2019)](https://www.inkandswitch.com/local-first/static/local-first.pdf). 408 | 409 | 410 |
411 | 412 | ## Sources 413 | This list was inspired by (and draws from) several books and paper collections: 414 | 415 | * [Papers We Love](https://paperswelove.org/) 416 | * [Ideas That Created the Future](https://mitpress.mit.edu/books/ideas-created-future) 417 | * [The Innovators](https://www.simonandschuster.com/books/The-Innovators/Walter-Isaacson/9781476708706) 418 | * [The morning paper](https://blog.acolyer.org/) 419 | * [Distributed systems for fun and profit](http://book.mixu.net/distsys/index.html) 420 | * [Readings in Database Systems (the Red Book)](http://www.redbook.io/) 421 | * [Fermat's Library](https://fermatslibrary.com/journal_club) 422 | * [Classics in Human-Computer Interaction](https://medium.com/@aschugart/classics-in-hci-research-papers-critical-to-the-field-of-human-computer-interaction-1344039334a5) 423 | * [Awesome Compilers](https://github.com/aalhour/awesome-compilers#papers) 424 | * [Distributed Consensus Reading List](https://heidihoward.github.io/distributed-consensus-reading-list/) 425 | * [The Decade of Deep Learning](https://bmk.sh/2019/12/31/The-Decade-of-Deep-Learning/) 426 | 427 | ## Meta reads 428 | 429 | A few interesting resources about reading papers from Papers We Love and elsewhere: 430 | 431 | - [Should I read papers?](https://michaelrbernste.in/2014/10/21/should-i-read-papers.html) 432 | - [How to Read an Academic Article](https://organizationsandmarkets.com/2010/08/31/how-to-read-an-academic-article/) 433 | - How to Read a Paper. [Keshav (2007)](http://ccr.sigcomm.org/online/files/p83-keshavA.pdf). 434 | - Efficient Reading of Papers in Science and Technology. [Hanson (1999)](https://www.cs.columbia.edu/~hgs/netbib/efficientReading.pdf). 435 | - On ICSE’s “Most Influential Papers”. [Parnas (1995)](https://dl.acm.org/doi/pdf/10.1145/219308.219312). 436 | 437 | ## Selection criteria 438 | 439 | 1. The list should stay short. Let's say no more than 30 papers. 440 | - The idea is not to include every interesting paper that I come across but rather to keep a representative list that's possible to read from start to finish with a similar level of effort as reading a technical book from cover to cover. 441 | - I tried to include one paper per each major topic and author. Since in the process I found a lot of noteworthy alternatives, related or follow-up papers and I wanted to keep track of those as well, I included them as sublist items. 442 | 2. The papers shouldn't be too long. For the same reasons as the previous item, I try to avoid papers longer than 20 or 30 pages. 443 | 3. They should be self-contained and readable enough to be approachable by the casual technical reader. 444 | 4. They should be freely available online. 445 | 5. Although historical relevance was taken into account, I omitted seminal papers in the cases where I found them hard to approach, when the main subject of the paper wasn't the thing that made them influential, etc. 446 | - Examples of this are classic works by Von Neumann, Turing and Shannon. 447 | - That being said, where possible I preferred the original paper on each subject over modern updates or survey papers. 448 | 6. I tended to prefer topics that I can relate to my professional practice, typically papers originated in the industry 449 | or about innovations that later saw wide adoption. 450 | - Similarly, I tended to skip more theoretical papers, those focusing on mathematical foundations for Computer Science, electronic aspects of hardware, etc. 451 | 7. I sorted the list by a mix of relatedness of topics and a vague chronological relevance, such that it makes sense to read it in the suggested order. For example, historical and seminal topics go first, contemporary internet-era developments last, networking precedes distributed systems, etc. 452 | 453 | 454 | --------------------------------------------------------------------------------