7

GitHub - facundoolano/software-papers: 📚 A curated list of papers for Software E...

 1 year ago
source link: https://github.com/facundoolano/software-papers/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Papers for Software Engineers

A curated list of papers that may be of interest to Software Engineering students or professionals.

  1. Computing Machinery and Intelligence. Turing (1950).
    • Some Moral and Technical Consequences of Automation. Wiener (1960).
    • ELIZA—a computer program for the study of natural language communication between man and machine. Weizenbaum (1966).
  2. The Education of a Computer. Hopper (1952).
  3. A Method for the Construction of Minimum-Redundancy Codes. Huffman (1952).
  4. On the Shortest Spanning Subtree of a Graph and the Traveling Salesman Problem. Kruskal (1956).
  5. Recursive Functions of Symbolic Expressions and Their Computation by Machine. McCarthy (1960).
  6. Cramming More Components onto Integrated Circuits. Moore (1965).
    • Validity of the Single Processor Approach to Achieving Large-Scale Computing Capabilities. Amdahl (1967).
    • A Simple Capacity Model of Massively Parallel Transaction Systems. Gunther (1993).
  7. Scatter storage techniques. Morris (1968).
  8. Goto Statement Considered Harmful. Dijkstra (1968).
  9. A Relational Model of Data for Large Shared Data Banks. Codd (1970).
  10. On the Criteria To Be Used in Decomposing Systems into Modules. Parnas (1971).
  11. The UNIX Time- Sharing System. Ritchie, Thompson (1974).
  12. A Protocol for Packet Network Intercommunication. Cerf, Kahn (1974).
  13. Programming with Abstract Data Types. Liskov, Zilles (1974).
  14. Computer Programming as an Art. Knuth (1974).
  15. The Mythical Man Month. Brooks (1975).
  16. New Directions in Cryptography. Diffie, Hellman (1976).
  17. Communicating sequential processes. Hoare (1976).
  18. Time, Clocks, and the Ordering of Events in a Distributed System. Lamport (1978).
  19. End-To-End Arguments in System Design. Saltzer, Reed, Clark (1984).
  20. No Silver Bullet: Essence and Accidents of Software Engineering. Brooks (1987).
  21. Why Functional Programming Matters. Hughes (1990).
    • Can Programming Be Liberated from the von Neumann Style?. Backus (1978).
    • The Semantic Elegance of Applicative Languages. Turner (1981).
    • Church's Thesis and Functional Programming. Turner (2006).
  22. The anatomy of a large-scale hypertextual Web search engine. Brin, Page (1998).
  23. Dynamo, Amazon’s Highly Available Key-value store. DeCandia et al (2007).
  24. On Designing and Deploying Internet Scale Services. Hamilton (2007).
  25. Bitcoin, A peer-to-peer electronic cash system. Nakomoto (2008).
    • Ethereum: A Next-Generation Smart Contract and Decentralized Application Platform. Buterin (2014).
  26. Thinking Methodically about Performance. Gregg (2012).

Show full list in chronological order:

This list was inspired by (and draws from) the Papers We Love project and the Ideas That Created the Future book by Harry R. Lewis. I also found the morning paper blog to be an extremly useful resource.

Selection criteria

  1. The list should stay short. Let's say no more than 30 papers.
    • 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.
    • I tried to include one paper per each major topic and author. Since in the process I found a lot of noteworthy alternative, related or follow-up papers and I wanted to keep track of those as well, included them as sublist items (some of these sublists are currently longer than they should).
  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.
  3. They should be self-contained and readable enough to be approachable by the casual technical reader.
  4. They should be freely available online.
  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.
    • That being said, where possible I preferred the original paper on each subject over modern updates or summary papers.
  6. I tended to prefer topics that I can relate to my professional practice, typically papers originated in the industry or about innovations that later saw wide adoption. Likewise I tended to skip more theoretical papers, those focused on mathematical foundations for Computer Science, on electronic aspects of hardware, etc.

Disclaimer: I'm not a frequent paper reader, so I made this list as a sort of roadmap for myself. I haven't read all of the papers in the list yet; as I do, I may find than some don't meet the described criteria after all and remove them, or decide to add new ones.

And, yes, this repository is a way to procrastinate on the actual reading after I finished making the list.

Meta reads

A few interesting resources about reading papers from Papers We Love and elsewhere:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK