8 ms·
Technical Papers Every Programmer Should Read (At Least Twice)
- rhizome 15y agoIs this title still referring to the object mentor essays that were posted a couple weeks ago?
- jroll 15y ago"All papers are freely available online" Why not have links to each one?
- fogus 15y agoSorry. My Markdown syntax was bad. There are now links to the articles marked by ↗.
- Tichy 15y agoCan't find the link for "Organizing Programs Without Classes". The Oracle site says "click here to download", but there is nothing to click?
- patrickyeon 15y agoI see a postscript version here: http://www.cs.ucsb.edu/~urs/oocsb/self/papers/organizing-programs.html http://www.cs.ucsb.edu/~urs/oocsb/self/papers/organizing-pro...
- Tichy 15y agoThanks!
- russellallen 15y agoPDF: http://selflanguage.org/_static/published/organizing-programs.pdf http://selflanguage.org/_static/published/organizing-program...
- lelf 15y agohere is link to ps.gz. And you can find PDF at http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.127.5320 http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.127.5...
- pjscott 15y agoThis is a great collection of papers, and I don't mean to downplay how happy I am to find it, but you might want to use a linking method that's more obvious, like having relevant text be blue and underlined. The principle of least surprise is important, usually more important than cleverness in design. (Now I'm going to go off and read that Lamport paper.)
- deleted 15y ago[deleted]
- njharman 15y ago"link to paper" comes to mind...
- jroll 15y agoGreat! Thank you so much.
- wgrover 15y agoSeeing Leslie Lamport's first paper (about braids, for a high school math journal) makes me want to put together a list of computer scientists' first papers. Now I've got two favorites: Leslie Lamport, "Braid Theory": http://research.microsoft.com/en-us/um/people/lamport/pubs/bxscience.pdf http://research.microsoft.com/en-us/um/people/lamport/pubs/b... Don Knuth, "The Potrzebie System of Weights and Measures", Mad Magazine: http://upload.wikimedia.org/wikipedia/en/5/52/Potrzeb.jpg http://upload.wikimedia.org/wikipedia/en/5/52/Potrzeb.jpg
- jules 15y agoOther great papers: Flapjax: A Programming Language for Ajax Applications: http://www.cs.brown.edu/~sk/Publications/Papers/Published/mgbcgbk-flapjax/ http://www.cs.brown.edu/~sk/Publications/Papers/Published/mg... Embedded probabalistic programming: http://okmij.org/ftp/kakuritu/dsl-paper.pdf http://okmij.org/ftp/kakuritu/dsl-paper.pdf Memoization of Top-down Parsing: http://arxiv.org/PS_cache/cmp-lg/pdf/9504/9504016v1.pdf http://arxiv.org/PS_cache/cmp-lg/pdf/9504/9504016v1.pdf
- zackattack 15y agoAny other entrepreneurs integrating this into their standard employee training manual?
- papaf 15y agoI read a random sampling paper recently which took a simple problem and approached it in ways that were much more elegant than I did. Its almost a toy problem but I found the paper really interesting: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.138.784 http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.138.7...
- mietek 15y agoFun fact: I was asked to find a solution to this problem during an interview at a proprietary trading firm last year. I wish I had read this paper before.
- psykotic 15y agoThe algorithm for the simplest variant of that problem (take a single random sample from a list of a priori unknown length) can be derived by simple inductive reasoning. If the list has size 1, the problem is trivially solved. Otherwise suppose we have a list (x:xs) and we recursively solve the problem for xs. If all the recursion returns is the random sample from xs, we clearly have insufficient information to take a random sample from (x:xs), so we need to strengthen the induction hypothesis by having the recursion also return the length of xs. Let (r', n') be the random sample and length for xs. Then the result for (x:xs) is (r, n) where n = n' + 1 and r = x with probability 1/n or else r'. Another way to derive this algorithm is to notice that any solution must implicitly or explicitly compute the length of the list as a byproduct. If you start by writing down the recursive function for computing the length of a list, composed with the straightforward recursive function for taking a random sample from a list of known length, you can apply a standard fusion and deforesting transformation to combine them into a single pass, and you end up with the same algorithm as above. Here's a fun problem to ponder. Find the most frequently occurring element of a list in O(n) time and O(1) space. You may assume that this element occupies more than half of the list's entries.
- DigitalBison 15y ago>Then the result for (x:xs) is (r, n) where n = n' + 1 and r = x with probability 1/n or else r'. Do you mean r = x:r' instead of r = x?
- mitultiwari 15y agoNice collection of papers. Thanks for sharing! Here is a set of papers about distributed systems, which I read in a course and found very useful to get good understanding of distributed systems research so far: http://www.cs.utexas.edu/~dahlin/Classes/GradOS/index.html http://www.cs.utexas.edu/~dahlin/Classes/GradOS/index.html
- ajross 15y agoI don't mean to speak badly of this bibliography. Of the papers in the list I've read, they're all great. And I'll add the others to my list and make sure I get to them. But I think the premise of the blog post is a little flawed. Reading papers is a poor way to make yourself a better programmer. Read them in spare moments, sure, but spend your time reading code, not paper. At best, these things will help you avoid some design mistakes in the code you write for yourself in your own sandboxes. In the real world, you're dealing with code written by people who haven't read these papers. And this is where you're going to spend all your time: maintaining and fixing and enhancing stuff that missed all the advice in the papers. This is especially true of "day job" programmers, but it's true at startups too, even at seed-stage oens. Admonitions to do stuff like re-read "Out of the Tar Pit" every six months is just bad advice to my mind. It's a good way to convince yourself you're smarter than everyone else. It's a bad way to get better at debugging.
- fogus 15y agobut spend your time reading code, not paper. These things are not mutually exclusive. I agree that you should definitely read code also; good and bad. However, this is a post about one specific thing: great papers. Admonitions That's a bit strong. I listed some papers that I like and believe important. I don't recall providing admonitions if you didn't read them. re-read "Out of the Tar Pit" every six months is just bad advice to my mind. That's just me. I like that paper and so I re-read it. I wouldn't say that you nor anyone else should do the same. It's a good way to convince yourself you're smarter than everyone else. I'm sorry, have we met?
- gfodor 15y agoNot buying it. Programmers in our field could do worse than be up-to-date on the history of the major ideas in computer science, before they fire up their editor and start hacking stuff out. Obviously, you can do both, too.
- daveed 15y agoI disagree with you. All the programmers I know have plenty of coding/reviews in their day-to-day. A much smaller amount of time is dedicated to reading papers - after all, it's not their job. If we can agree that both are valuable, why is the author wrong for pointing people to things that they likely focus less on?
- russellallen 15y agoCopies of most of the Self papers in PDF can be downloaded from the official Self language website: http://selflanguage.org/documentation/published/index.html http://selflanguage.org/documentation/published/index.html
- deleted 15y ago[deleted]
- samyzee 15y agoFor some reason I feel that a thorough understanding of most of these papers(except perhaps Lamports Algorithms) is beyond my current intellectual capabilities.But nevertheless I will try.
- bbg 15y agoI'm going to be that guy: "as a compliment to this paper" --> complement "no higher complement." --> compliment Thanks for a cool post.
- nithinag 15y agoThanks for the post.
- wunki 15y agoArchived the papers mentioned by fogus and converted the .ps files to .pdf. For those who want quick access to them, download here: http://c.wunki.org/A2s0 http://c.wunki.org/A2s0
- Luyt 15y agoThanks for the effort you took to make these papers more accessible. I've downloaded them to my computer.
- tybris 15y agoWhy? Most of the contents of these papers have made their way into books and programming languages. There's nothing wrong with getting it from a secondary source.
- scott_s 15y agoI find that reading primary sources reminds me that I can be a primary source. It reminds me that these ideas that I rely on were thought up by people, not handed down from Mt. Olympus. The historian in me is also just fascinated to see the source of an idea that has made a large impact.
- zephyrfalcon 15y agoWhat would be useful is a site that collects links to CS papers, then for each paper lets users (who presumably actually read that paper) comment on it, and/or rate it. Or does such a beast already exist?
- spacemanaki 15y agoWell there's a thread over on the CS Stack Exchange about favorite papers, but it sort of doesn't fit what you describe: http://cstheory.stackexchange.com/questions/1168/what-papers-should-everyone-read http://cstheory.stackexchange.com/questions/1168/what-papers...
- charlieok 15y agoMendeley [1] does some of what you're talking about. Primarily it's a way to organize your own collection of papers and access them from native or web apps on various devices. It also has some social features, like connecting users with similar interests and sharing tags on papers. Its "Computer and Information Science" category [2] lists the papers with the most "readers" which I think in this case means "Mendeley users who have added this paper to their collection". Its most read paper in that category is the MapReduce paper [3]. Oddly, as I look at it now, I don't see a feature for rating or commenting on the paper, which could be a useful addition. Of course, the authoritative method of rating papers is citations of other papers, right? That's what led to PageRank after all, and most of the main sites for finding papers have used citation counts for a long time. [1] http://www.mendeley.com http://www.mendeley.com [2] http://www.mendeley.com/computer-and-information-science/ http://www.mendeley.com/computer-and-information-science/ [3] http://www.mendeley.com/research/mapreducemerge-simplified-relational-data-processing-on-large-clusters/ http://www.mendeley.com/research/mapreducemerge-simplified-r...
- charlieok 15y agooops. Correction: The MapReduce paper doesn't have the most readers in Mendeley. I just saw it at the top of the "Popular" list on the computer and information science page. So they must have some other way they're sorting that list.
- Luyt 15y agoI'd like to see Joel Spolsky's epic article on unicode added to the list: http://www.joelonsoftware.com/articles/Unicode.html http://www.joelonsoftware.com/articles/Unicode.html "if [...] you don't know the basics of characters, character sets, encodings, and Unicode, and I catch you, I'm going to punish you by making you peel onions for 6 months in a submarine. I swear I will."
- papaf 15y agoThats an interesting article you linked to but the original article is about peer reviewed academic papers. Meta comment: I find that downvoting people are aren't being rude and abusive is bad manners.
- scott_s 15y agoA Fast File System for UNIX: http://www.cs.berkeley.edu/~brewer/cs262/FFS.pdf http://www.cs.berkeley.edu/~brewer/cs262/FFS.pdf Modern filesystems are based on this design. They add significant features - like journaling - but by reading this paper, you will form a basis for how modern file systems work. The Google Filesystem: http://labs.google.com/papers/gfs.html http://labs.google.com/papers/gfs.html Great example of what you can design when you decide certain things - like storing small files - are not important. MapReduce: Simplified Data Processing on Large Clusters: http://research.google.com/archive/mapreduce.html http://research.google.com/archive/mapreduce.html Great example of taking an existing idea and using it to achieve high performance. The Implementation of the Cilk 5 Multithreaded Language: http://supertech.csail.mit.edu/papers/cilk5.pdf http://supertech.csail.mit.edu/papers/cilk5.pdf Apple's Grand Central Dispatch uses a lot of ideas from this paper.