├── .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 [](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 [](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 |
--------------------------------------------------------------------------------