What goes in a README?

& (verbiage overflow)Thu 01 December 2016RSS

In my job I spend a lot of time reading other people’s GitHub accounts — poking through their code and sometimes installing it to try out. Many README files are too sparse to be useful to me in that. As a result I have to spend time on my own, figuring out what’s going on in the code, or else abandon the effort. If I abandon the effort, I then have to fight the temptation to assume the programmer is lazy or the code isn’t finished. That outcome is not ideal if my reason for reading the code was to evaluate the programmer’s skill and attention to detail.

A README isn’t just designed for other users encountering your code for the first time; it will also be useful to you after you’ve been away from the project for a while — if you’re like most people, you’ll have forgotten a lot about it by then.

Below are the things I look for in a repository README file.


  1. What the project does.

    Even if there isn’t anything else in the README itself, a link to any separate documentation site can go here, as can a statement of any software license covering the code.

  2. How to install it, including dependencies.

    Be aware that you may be relying on dependencies that were put in place long ago, and that you’ve forgotten about. The user needs to know about them, though. One way you can make sure you have all dependencies accounted for is to write a script to populate a container for tools such as Vagrant or Docker. You should also mention what operating systems the project has been tested on, because that is a kind of dependency, too.

  3. How to run the code.

    You should illustrate, even if it is obvious to you. If there are separate compilation or linking steps, show them; if your code is meant to be run in a REPL or browser console, say so here.

    This is also the place to name the main sorts of functionality provided by the project, and to illustrate them. Remember, after time passes, you may have trouble remembering what you’ve actually built here.

  4. Discussion and references.

    If the project is meant to display your skills, in the manner of a portfolio, it would be nice to hear about design decisions, surprises you encountered, and anything of interest you learned while doing the project. If there are external sources that were useful to you, cite them here. If there are people to thank, you might do that here, too.

  5. Work still to be done, known bugs, future plans.


Not all of this has to go into one huge README file. You can put separate sections into separate files — if there are two or more of them, you may like to place them in a directory called doc or something similarly suggestive. Nor does a README have to be exhaustive — but it should address the several headings I’ve listed above.

[end]

Comments are enabled.



All prior articles

  1. Self-segregation
  2. Python decorators for object-oriented method behaviors
  3. The English Level of This Year's Principal Presidential Candidates
  4. Chao on Wenyan
  5. Face 面子
  6. Some Questions about the Recurse Center
  7. De-duplicate Apple Calendars on Mavericks
  8. Transcribing Voice Recordings on OS X, 3 — another example
  9. Transcribing Voice Recordings on OS X, 2 — more examples
  10. Transcribing Voice Recordings on OS X
  11. Interview with Rachel Vincent
  12. The Pre-Morse Origin of Two Morse Code Symbols
  13. “The Man Who Knew Infinity” — 2015 movie about Ramanujan
  14. Why does Python have two ways to filter a comprehension?
  15. There is no ternary operator in Python
  16. Does Fortran have a two-way decision function?
  17. Debugging the Art Museum
  18. Learning to Throw Books Away
  19. About Me
  20. Walter Murch on Standing at Work
  21. “Our Kind of Story”
  22. Revisiting the Taiwan national anthem
  23. Review of Button, Phonetic Ambiguity in the Chinese Script
  24. Importing Modules under Pytest
  25. Two Git Accounts on One Computer
  26. Pytest parametrization — passing multiple data-items to a single test
  27. Markdown Basic References
  28. Two Curious Things about screen.width and screen.height on Mobile Firefox and under iOS.
  29. Where Do I Stand on Digital Advertising?
  30. Progressing to the Next Level after Two Years at Hacker School
  31. Health Insurance $5,600/year ⇨ $12,600/year to Keep Our Doctor
  32. Always Use Dry-run Options If Possible
  33. Basic Interaction with Man-pages
  34. Taiwanese Cantillation Prosody and the Standard Tradition of Regulated Verse
  35. Automated Transcription of a Lyric’s Melody
  36. Quote-Unquote: Quick Python Conversion to and from URI Standard Format
  37. Literate Code in Crista Lopes’s Exercises in Programming Style
  38. Special Computer Help for an Uncooperative Person in Need
  39. Richard Bellman on Multistage Decision Processes
  40. Contradictory Advice from Kenkō about Studying after Mid-life
  41. Deceit for my Mother’s Sake
  42. New York State’s Law on Intercoms
  43. Our Relationship with Unwelcome Callers
  44. Reasons to Keep a Landline Phone
  45. Chinese (Pinyin) Tone Marks on Macintosh
  46. Suicide by Holding the Breath in the Greek Classics
  47. Transcribing a Solo Voice Recording to Western Musical Notation
  48. Surprise Text Message Sent by Google Voice
  49. Trimming a Git Repo before Moving It to GitHub
  50. The Sage Chilōn on Gesticulation
  51. Examining the Identity of a “Whole-Sliced” Python Sequence
  52. Pagerank after Completing the Move of My Blog
  53. Haydn on Originality
  54. Stages of Life
  55. Linguistic Naturalism in Behavior-Driven Development
  56. Some Advice on Interviewing in China
  57. The AARP on Ageism
  58. The Cash Value of a Lost Moment
  59. How Did 釁 Get Into My Computer? A Talk at CSTUY
  60. I Knock My Head on the Ground: Review of Richter, Letters and Epistolary Culture in Early Medieval China
  61. Two Pair of Suspenders Back to Amazon
  62. Knuth on the Direction of the Tree in Computer Science
  63. Py3K Versions of Networking Programs for the Rhodes and Goerzen Book
  64. A Fake Monk in Times Square
  65. Werner Herzog on the jungle’s “articulate obscenity”, “misery”, and “sort of harmony of collective murder”
  66. Hacker School and How we Learn
  67. Hacker School Sees “The Internet’s Own Boy”
  68. Two Chinese manifestations of black cardamom
  69. A natural-language URL shortener
  70. Recovering Web and Search visibility after Leaving WordPress
  71. Greedy evaluation in Python's default dictionary
  72. Trying to Change Google Pagerank after Moving my Blog
  73. Ensuring my blog is indexed by Google, using Webmaster Tools
  74. 'Dependency' in programming means the opposite of its traditional meaning
  75. Experimenting with a Site-Analytics Tracker
  76. Unexpected Behavior from the Python 3 Built-In Hash Function
  77. Rote learning and programming
  78. r0ml on the workspace-based, image-oriented programming paradigm
  79. In technology, knowing your vulnerabilities is a desirable strength
  80. The Lingering Puzzle of yán 焉
  81. My grandmother’s diaries
  82. Scholarly Presentation: Arousing something other than polite interest
  83. Friedrich Gulda's Beethoven
  84. Reaction to Jaron Lanier Talk at Cooper Union
  85. Yuen Ren Chao on Chanting Chinese Poetry
  86. The legal requirement of having a camera inside a NYC taxicab
  87. This blog has moved
  88. "Web of Trust" in Chinese and Japanese
  89. Taking the larger view of frustrations with technology
  90. Reflecting on Bernard Baruch, on the need for character and thinking
  91. Dinner with a Bletchley Park cryptographer
  92. Karl Popper on conflict between your basic assumptions and those of your interlocutor (1965)
  93. My Hacker School Pairing Interview
  94. Thirty political parties fielding candidates in New York City this election
  95. The world's only speaker of standard Mandarin in 1923
  96. Data within literal curly brackets using Python format()
  97. The Imperative Style in Commits and Docstrings
  98. Git overwrites file metadata including creation and modification date
  99. Two complaints and one word of praise about GitHub Flavored Markdown
  100. Lǐ Bái on time (8th century)
  101. Two bits of trivia from the Institute for Advanced Study
  102. Karl Popper against foundations of knowledge (1965)
  103. George Orwell on falsification of fact (1946)
  104. Loss of innocence for "ggg"
  105. George Orwell against uniformity of political principles (1946)
  106. Library technology at the Institute for Advanced Study
  107. Richard Feynman on scientific integrity (1974)
  108. Richard Feynman on ignorance of science (1964)
  109. Tense in Git Commit Messages
  110. A better plan is needed for transporting equipment in the subway
  111. "Premature optimization" as phrased by Musashi
  112. Finding and returning zero or one of a marked sub-expression in Python regex
  113. A faster Python sort
  114. A question about time complexity when testing membership in a Python nested sequence
  115. Rendering a matrix as a linear array
  116. Attempting a generic SQL INSERT statement in Python
  117. Welsh bwg 'bogey': an alternate proposal about the origin of "computer bug"
  118. Using python str.format(*args) when the cardinality of *args is unknown
  119. Compelled by forces I can no longer resist…
  120. Highlights of the July, 2013, NY Tech Meetup
  121. Review of Zádrapa posted
  122. Now filtering (> /dev/null) some spam before it reaches the Gmail Spam folder
  123. Isaac Newton, creationist
  124. Freeman-Halton 3x3 exact test
  125. Conjure me: reentering the zone of proximal development
  126. Python extend() without a list comprehension
  127. The name "Hacker School"
  128. The benefits of Hacker School
  129. Another two subway rules of thumb illustrated
  130. Short-circuiting and (and ==) instead of if in Python
  131. Quintilian on time and study
  132. Kenkō on time and study
  133. George Orwell on keeping a diary to cultivate dispassionate thinking
  134. A bon mot of Quintilian on theory
  135. Growth of outlook at Hacker School
  136. Nakamoto Satoshi, the name of Bitcoin's inventor
  137. The psychology of pairing and code review at Hacker School
  138. Computer science and rugelach
  139. Is Hacker School like graduate school?
  140. Why do I work so hard at Hacker School?
  141. Hacker School compared with studying computer science at City College
  142. Differences between code and natural language
  143. Hacker School after six weeks
  144. Pairing at Hacker School
  145. The Norman Manchu dictionary has reached Seattle
  146. Jerry Norman's Manchu dictionary has appeared
  147. Two things I am thinking about as Hacker School begins
  148. The white powder on the pages of library books
  149. Non-math uses of LaTeX
  150. Hacker School
  151. Hacker School (dojo/recruiter for programmers) begins in four days
  152. Dependencies for scipy and matplotlib not handled by pip
  153. The National Do Not Call Registry no longer works well
  154. Early evidence of a dislike of Christmas music?
  155. Plinyesque Christmas wishes to all
  156. Getting the Android GridView sample code to work
  157. A small triumph of explicitly readable code
  158. Godfrey Reggio on technology in life (2002)
  159. Max Weber: "science is the affair of an intellectual aristocracy" (1918)
  160. First day of Android coding: two problems solved
  161. Black optimism explained
  162. Talking across the pre- and post-computer border
  163. Getting used to the disappearance of old institutional models
  164. Anything less than perfect is a failing grade
  165. Recovering from hurricane Sandy
  166. Max Weber on meritocracy in academia (1918)
  167. Our state of things in New York right now (after hurricane Sandy)
  168. Max Weber on the "strange intoxication" of a passionate vocational devotion (1918)
  169. LaTeX's extract package, used for isolating the contents of environments and commands
  170. Fellini movie "Broadway Bomb" being filmed in my neighborhood
  171. Does Apple view an "iPhone" phone number as something different from a "mobile" phone number?
  172. Columbia University Libraries finally removing the card catalog
  173. One more rule of thumb for the New York subway
  174. Two further rules of thumb for the New York subway
  175. Two inches taller in two years
  176. Alternate ways to say "pop" and "push" in computer science
  177. Poulenc's Dialogues des Carmélites at the Dell' Arte Opera Ensemble
  178. Andrew Nathan on Doh Chull Shin on Confucianism and Democratization (2012)
  179. Proofreading poorly OCRed material
  180. New York State redistricting maps on line at CUNY's Center for Urban Research
  181. Karl Berry on free software (2005)
  182. The SEC on the utility of Python as a secure and accessible tool for generating official reports (2010)
  183. Hill Country
  184. Yogurt whey-starter pickled (soured) mackerel
  185. Images (figures) on facing pages in a LaTeX document
  186. Just what is being centrally limited in the "Central Limit Theorem"?
  187. Reloading modified code when using the Ipython interactive shell
  188. Alistair Cooke on H. L. Mencken's typing (1956, 1977)
  189. Jerry Norman (1936–2012)
  190. Ptisan issues
  191. Elia Kazan on the need for selfishness
  192. "Neither side took prisoners" — Japanese and American atrocities in the Pacific theater of World War II
  193. Surprise! You have a different Congressman now but no one thought you needed to know.
  194. Another notice of the bureaucratization of academia
  195. Bogusław Jackowski on "worldwide licensing madness" (2008)
  196. Accommodating the Chinese hunger for official seals on official documents.
  197. Bond Street and a story about a smartphone
  198. Another bond to Apple is lost as MobileMe Sync is discontinued
  199. Charles Ives (1874–1954) on his life in business (1933)
  200. "Taikonaut" and the new Cold War
  201. James Lang on improving understanding and retention by increasing "cognitive disfluency" (2012)
  202. Lǔ Xùn 魯迅 (1881–1936) on the truth behind Confucian morality (1918)
  203. Ray Bradbury (1920–2012) on cars (1963)
  204. Ray Bradbury (1920–2012) on success in the arts (1963)
  205. Chinatown breakfast offerings
  206. Zed Shaw on why to use C (2011)
  207. A step in my Chinese education
  208. Age and the MBA
  209. Useful Python time formats for dealing with HTTP headers
  210. An encounter with Google's security rules
  211. HTML headers for keeping track of updated webpages
  212. William Hung 洪業 (1893–1980) on Confucianism (1980)
  213. David Daniels on one's "other voice" (1998)
  214. Elia Kazan and questions of betrayal
  215. Advice on preparing herring
  216. Two limitations of call-forwarding on Google Voice
  217. Student protests in Montréal and thoughts about tuition
  218. Call-screening in Google Voice has a problem
  219. Cortlandt Alley's Chinese name
  220. Chinatown shorthand
  221. "Download statusbar" add-on for Firefox
  222. The ceremonial gateways of Montréal's Chinatown
  223. Nailset = chasse-clou
  224. Restaurant Mai Xiang Yuan [Màixiāngyuán cānguǎn 麥香園餐館] in Montréal
  225. A bon mot of Peter Carey about reviews of one's work (2012)
  226. A bon mot of Peter Carey about New York (2012)
  227. Identifying the active bridge adapter for use with a headless virtual machine on VirtualBox
  228. Doubts about l'affaire Chén Guāngchéng 陳光誠
  229. Military officers who cannot count
  230. Parallel text and vocabulary in LaTeX
  231. A stricture on Google Voice
  232. Resolving VirtualBox error VERR_INTNET_FLT_IF_NOT_FOUND
  233. Ubuntu 12.04LTS (Precise Pangolin) on VirtualBox
  234. Recordings for Classical Chinese
  235. Arthur Luehrmann on "computer literacy" (1972)
  236. The origin of the symbol Θ (big theta) in asymptotic notation
  237. Being censored in China
  238. The experience of learning vim commands
  239. How should I rate this movie on Netflix?
  240. Netflix miscalculation — Hugo
  241. Curious vim behavior: treats date range as subtraction
  242. Alexandra Lord on the myth of the academic career (2012)
  243. Elia Kazan on getting along in society (1974)
  244. ssh unavailable over Amtrak's wifi network
  245. Tricked again by Python's mutable objects
  246. Is blocking ads theft of service?
  247. A poor analogy on intellectual property rights
  248. A mutton chop at Keen's Steakhouse
  249. An anecdote about William Hung (Hóng Yè 洪業, 1893-1980)
  250. Sorting a list of Unicode strings in Python, case-insensitively and ignoring diacritics
  251. Avoid deleting the contents of a file in Python through sloppy use of "write" mode
  252. Reloading a Python module after modifying it
  253. Frank Mittelbach on documentation (2006)
  254. Frank Mittelbach on collaboration (2006)
  255. Frank Mittelbach's "moral obligation" license for the LaTeX multicol package
  256. Keith Whalen records scales and patterns from the Slonimsky Thesaurus
  257. Calligraphy in Chinatown
  258. Manchu dictionary done
  259. Bernard Shaw (1856–1950) on the damage done by immaturity in politics
  260. Gotham breakneck to Chinatown
  261. Calculus III progresses
  262. Some Western recipe-names as transformed by the Taiwanese linguistic experience
  263. Class war against the banking and financial industry
  264. Avoiding the Emailyama
  265. Adblock Plus is the most useful piece of shareware I've ever had
  266. A less painful way to install Adblock Plus filter-subscriptions in Firefox
  267. Tales from Calculus III
  268. Jack Cheng on "the technology I grew up with" (2012)
  269. Distribution of fonts: competing models are coexisting
  270. MoinMoin for notebook-wiki (and WordPress, you are trying the patience of my affections)
  271. generate native MATLAB code from finished figures, for study
  272. Quintilian on laziness and difficulty in one's studies
  273. Guide to Gwoyeu Romatzyh 國語羅馬字 (tonal spelling for Mandarin)
  274. Guide to the radicals of the traditional Chinese dictionary
  275. Origins of the Mandarin Phonetic Symbols (注音符號/ㄅㄆㄇㄈ)
  276. Installing UCC certificate for multiple domain names hosted virtually on a single server
  277. QuickTime Pro easily concatenates .m4v video files
  278. Columbia to Chinatown walk, 20120122
  279. A local custom without the corresponding exotic saying in rural Taiwan
  280. HTTPS being rejected at Yahoo hosting
  281. Classical Chinese syllabus posted; using Landslide for markdown-to-HTML5
  282. Phonosymbolism, etymology, and the nebulous Chinese word family
  283. Simple meal at Shui Mei Café (嘎嘎叫, 67A East Broadway, NYC), formerly So Go Café)
  284. Are cell phones and bananas radioactive?
  285. LaTeX and electronic documents
  286. New definition of “algorithm”
  287. Materials used in paper bank statements
  288. Finally making progress with Vim
  289. Kenneth S. Wherry on American influence in China (1940)
  290. Propagation of a meme and a metameme
  291. Against the single time zone
  292. Hamish Milne on transcriptions of Bach (2005)
  293. Choosing a suitable site for fieldwork, and working with illiterate informants in China
  294. Yuen Ren Chao (1892–1982) urging Americans to resist Chinese telephantasmia (1921)
  295. The brown German flour of Przasnysz
  296. Recollection of the traditional bagel in central Poland before World War I
  297. Vaclav Havel (1936–2011) on doing good work (1978)
  298. Vaclav Havel (1936–2011) on the "dictatorship of technology" (1978)
  299. Vaclav Havel (1936–2011) on ideological enslavement (1978)
  300. Vaclav Havel (1936–2011) on law (1978)
  301. Vaclav Havel (1936–2011) on responsibility and a "post-democratic" system (1978)
  302. Vaclav Havel (1936–2011) on "opposition" and "dissident" (1978)
  303. Vaclav Havel (1936–2011) on ideology (1978)
  304. 'Factorial' in Chinese (jiēchéng 階乘/阶乘)
  305. Leibniz’s theodicy, dynamic programming, and strategies for learning
  306. Emanuel Derman and Paul Wilmott on mathematical models and self-delusion (2009)
  307. Y. R. Chao and Henry Sheffer added to the Mathematics Genealogy Project
  308. Two more rules of thumb for the New York subway
  309. Math in the Movies
  310. Jim Coplien on reflection and problem-solving (2011)
  311. Richard Feynman on practical applications of the theory of gravitation (1964)
  312. Karl Popper on understanding a problem (1963)
  313. Galileo on "reason conquering sense" (1632)
  314. Apparent error in Python's priority queue and heapq
  315. Literacy book finally out
  316. Y. R. Chao on his dissertation (1974)
  317. Doctoral pedigrees
  318. Lack of stable sort in Python's priority queue
  319. Suitable pots for making turmeric tea
  320. Neuro-plasticity and strategies for improving cognitive functioning: "The Brain Fitness Program" (2007)
  321. Code-switching between comfortable cognitive aptitudes and the main aptitudes used in math and coding
  322. Wishes for the Orthodox Nativity Season (began 15 November this year)
  323. Two rules of thumb about transportation in New York
  324. Pípá yā 琵琶鴨 (Frisbee Duck)
  325. Testing the reliability of the Python priority queue
  326. Edsger Dijkstra on programming as an intellectual discipline (2001)
  327. Edsger Dijkstra on the name of the field Computer Science (2001)
  328. Edsger Dijkstra on anthropomorphizing computers (2001)
  329. Edsger Dijkstra on mastery of one's native tongue as a vital programming skill (2001)
  330. Edsger Dijkstra on the origin of his shortest path algorithm (2001)
  331. Efrem Podgaits's New York Mass (2001)
  332. Anecdotal report on experimenting with creatine as a study aid
  333. "Suppose" for math proofs, in LaTeX
  334. A rule of thumb in teaching
  335. Graphing flowcharts and automata in LaTeX
  336. Perception of time and suspension of finality (studying math)
  337. Suddenly perceiving the cantus firmus in a Bach chorus
  338. Two of Elvira's arias from Don Giovanni
  339. Identifying robots among human beings
  340. Apparent misspelling in LaTeX command set: \guillemotleft and \guillemotright
  341. Table of contents in a LaTeX book: make the TOC entry different from the actual chapter headings in the text
  342. Competition and sharing in academia
  343. Kuhn and Popper
  344. Herb Gross's calculus lectures
  345. The abbreviation UTC as an acronym
  346. Clyde Haberman on validating one's authenticity as a New Yorker (2011)
  347. The era of lost words
  348. Never odd or even
  349. William Deresiewicz on multitasking and solitude (2009)
  350. Bjarne Stroustrup's advice to up-and-coming programmers (2008)
  351. Chet Ramey's advice to up-and-coming programmers (2008)
  352. Bjarne Stroustrup on the name C++ and common criticisms of the language
  353. Steve Bourne, advice to up-and-coming programmers (2009)
  354. Alfred Aho on the origins of awk (2008)
  355. Leslie Lamport on thinking first and on commenting code (2007)
  356. Pens of choice for linguistic fieldwork
  357. How I learned LaTeX
  358. Some bons mots from Edsger Dijkstra (1984)
  359. Non-paean to Steve Jobs
  360. Annotations of Cormen et al.'s algorithm for a Red-Black Tree (delete and delete-fixup functions only)
  361. John McCarthy on "Generality in Artificial Intelligence" (1987)
  362. Brian Kernighan's summary thoughts on scripting languages
  363. Changes to the inventory of IPython magic commands (v. 0.10 to 0.11)
  364. One man's calm reflection on Java-think in Python
  365. mdfind as a substitute for locate on Mac OS X
  366. Reconsider P. T. Barnum's reputation
  367. LaTeX macro for circling answers on math problem sets
  368. View of the Mariana Trench
  369. Simulating private variables in Python
  370. Choice of formats for basic code documentation
  371. Dennis Ritchie on Computer Science and Commerce (1984)
  372. Inconsistent results of the same seed in random.seed() on different Python installations
  373. An opinion on vi configuration
  374. The virtue of Vim (or: why I do not remap copy and paste)
  375. Shark fin and the economics of Chinese "face"
  376. Two funerary practices and the end of a good story
  377. An important skill for instructors
  378. p::c
  379. Twice-a-day mail delivery
  380. Portmanteau characters in Chinese (abstract)
  381. A math professor I enjoyed
  382. The state of my Netflix patronage
  383. Longevity vs. versatility of code
  384. A new kind of noise in the subway
  385. Router VI is dead
  386. Tinker Tailor remake
  387. Automated upward pricing spiral
  388. Break-in?
  389. Telephantasmia, one of the great gifts of Chinese culture
  390. September 11th sensations
  391. Whether to take a small loss or consent to the devaluation of the US dollar
  392. City checkpoint chaos
  393. Continuing opportunity for techno-elitism
  394. A worry of Donald Knuth's
  395. An opinion of TeX
  396. Advice on teaching English in China if you lack a TEFL degree
  397. "The Highline" Park
  398. Plutarch on the sensitivity and versatility of the human mind
  399. Plutarch's praise of the "fox" temperament
  400. Unagi hitsumabushi 鰻櫃まぶし
  401. My mother and me, at work on the Early China index, 20110526
  402. juémíngzǐ 決明子 tisane
  403. Brillat-Savarin on the pleasures of the fast
  404. University of Maryland, (College Park) general education rated D in a national survey
  405. The EMACS meta key and the standing desk
  406. A rule of thumb in choosing one's tools
  407. Dr. Johnson on the "fox" temperament
  408. Carl Elliott reviews Ginsberg, Fall of the Faculty (WSJ)
  409. Hard copy vs. electronic copy
  410. Deborah Ball's article on the opposition to standardizing the Romansh language (WSJ)
  411. Boris Veytsman's review of Kottwitz, LaTeX Beginner's Guide
  412. Why even 212 phone numbers calling in-area have to dial 212 first
  413. Dr. Johnson on keeping a diary
  414. Against object-oriented design (except in scripting languages)
  415. Worrying about inadequate memory to hold program and debugger (1973)
  416. Consequences of a compiler defect
  417. The Internet and scripting languages
  418. Newton's own suffering at math
  419. Fresh turmeric-root tea
  420. Appreciation of awk
  421. "Computer Science, Modern Languages Most Gender-Polarized Majors"
  422. Food issues during the Siege of Leningrad
  423. Starting a blog