Bookmarks
As promised, here’s some stuff that has interested, educated and/or amused me over the years. At least those which are still around for me to link to :)
Tags
architecture blockchain book business compiler complexity computing concept concurrency condition contract cryptocurrency cybernetics data dependencies design distributed documentation dynamic economics ecs eda erlang error event exception experience expertise favorite fiction functional game go goto grammar handling history humor language lecture lisp lua magic management matching metaprogramming mirror object-oriented package paper parallel pattern peg platform poetry politics presentation programming rationality reactive real-time reflection rest rpg science security simple smart social structured systems tdd ux voting wisdom writing
- A Curriculum for Cybernetics and Systems Theory, by Alan B. Scrivener
A list with reviews of suggested books, periodicals, television shows and computer programs for a classroom curriculum or individual study in cybernetics and systems theory.
- A Journey into Reactive Streams, by Kevin Webber
An introduction to Reactive Systems and associated concepts.
- ★ A Modular Verifiable Exception-Handling Mechanism, by Shaula Yemini, Daniel M. Berry
Describes several known exception handling mechanisms, and provides a new model which supports them all.
- A Text Pattern-Matching Tool based on Parsing Expression Grammars, by Roberto Ierusalimschy
A proposal to use Parsing Expression Grammars as a basis for pattern matching in programming languages, presenting LPeg as a working implementation.
- Anatomy of a knockout, by Chris Granger
A brief description of the Entity-Component-System (ECS) architecture pattern, common in games and simulations.
- Architectural Styles and the Design of Network-based Software Architectures, by Roy Fielding
The author’s PhD dissertation describing the REST architectural style.
- ★ Are We There Yet?, by Rich Hickey
In his keynote at JVM Languages Summit 2009, Rich Hickey advocated for the reexamination of basic principles like state, identity, value, time, types, genericity, complexity, as they are used by OOP today, to be able to create the new constructs and languages to deal with the massive parallelism and concurrency of the future.
- Asset voting – an interesting and very simple multiwinner voting system, by Warren D. Smith
Asset voting is an “unconventional” voting system in which both the voters and the candidates participate. It’s designed for situations where several (not just one) “winner” is to be selected from a field of candidates.
- ★ Beyond Exception Handling: Conditions and Restarts, by Peter Seibel
Common Lisp’s conditions are more general than exceptions, for more than error handling.
- Bitcoin: A Peer-to-Peer Electronic Cash System, by Satoshi Nakamoto
The paper that first introduced Bitcoin.
- Breaking Out of Scientific Magic Systems, by John H. Kim
Some interesting RPG mechanics to give magic a distinct flavor.
- CORE Economics
A complete introduction to economics and the economy that has been successfully taught both to economics undergraduates and in masters courses in public policy.
- Camels and Rubber Duckies, by Joel Spolsky
How to price your software.
- Declarative is greater than imperative, by Eric S. Raymond
A lesson learned/reinforced while writing a replacement for sloccount: “Simple code plus smart data is better than enough smart code to do the same job.”
- ★ Definitional Interpreters for Higher-Order Programming Languages, by John C. Reynolds
Classifies several varieties of interpreters, showing how they may be derived from one another, and how the choice of implementing language may affect the resulting implemented language.
- ★ Design Patterns in Dynamic Programming, by Peter Norvig
The title is pretty self-explaining :)
- Documentation as knowledge capture, by Eric S. Raymond
Writing documentation should not be seen as a chore, but as an integral part of software design, yielding, among other things, better code more easily shared with less effort.
- Energy Systems Language
A graphic language developed by Howard Odum used to compose energy flow diagrams in the field of systems ecology.
- Entity Systems Wiki
A site collecting information about the Entity-Component-System architecture pattern, with several approaches, tutorials and links.
- Epigrams on Programming, by Alan J. Perlis
A series of short, programming-language-neutral, widely-quoted humorous statements about computers and programming.
- Evolve Your Hierarchy, by Mick West
One of the earliest and most popular descriptions of ECS.
- Explorable Explanations, by Bret Victor
An essay about the author’s effort to enable and encourage active reading, presenting the notions of reactive documents, explorable examples and contextual information.
- Formalizing and Securing Relationships on Public Networks, by Nick Szabo
The original smart contract proposal.
- Fundamental design principles for non-designers, by Anna Mészáros
Some basic tips for non-designers to make a simple web design that doesn’t utterly suck.
- Game Programming Patterns, by Robert Nystrom
A collection of design patterns found in games.
- Go to considered harmful, by Edsger W. Dijkstra
The classic paper which brought the downfall of
goto
as a high-level control flow construct.- Ground-truth documents, by Eric S. Raymond
Documentation which describes not intent or promises, but simply what is, warts and all, can be valuable when interfacing with other software and hardware, and may evolve to become matter-of-fact specs.
- ★ Growing a language, by Guy L. Steele Jr.
“A good programmer does not just write programs. A good programmer builds a working vocabulary. A good programmer does language design, though not from scratch, but building on the frame of a base language.” One can watch the keynote here.
- Hackers and Painters, by Paul Graham
Why hackers are makers, not scientists, and therefore should look at painters more than mathematicians to improve on their craft.
- ★ How Complex Systems Fail, by Richard I. Cook
A series of bullet points on the nature of failure and how failure is and should be evaluated.
- How To Become a Hacker, by Eric S. Raymond
The (old school) hacker mindset and how to adopt it, building on the Jargon File.
- How To Write A Dissertation, or Bedtime Reading For People Who Do Not Have Time To Sleep
Tips and directions on how to write a formal scientific document.
- How not to design a wire protocol, by Eric S. Raymond
How poor intuition for costs makes people optimize for the wrong things.
- How to Build a Universe That Doesn’t Fall Apart Two Days Later, by Philip K. Dick
One of several texts about the author’s religious experiences, and his worries about the nature of reality.
- How to write narrative documentation, by Eric S. Raymond
How and why write good documentation for your code.
- In the Beginning was the Command Line, by Neal Stephenson
An essay about the history and evolution of OSes and user interfaces, written in 1999.
- Inventing on Principle, by Bret Victor
A transcript of the author’s famous speech at CUSEC 2012.
- Invisible asymptotes, by Eugene Wei
Strategic planning and growth at large scale technology companies.
- Jeff Bezos, Jack Ma, and the Quest to Kill eBay, by Steve Yegge
The right - and wrong - way to compete with a locked market.
- Laws of Tech: Commoditize Your Complement, by Gwern Branwen
Expanding on Joel Spolsky’s ‘Strategy Letter V’.
- Learnable Programming, by Bret Victor
The author’s answer to the question “How do we get people to understand programming?”
- Lewis Carroll Invented Retroactive Public Goods Funding In 1894, by Scott Alexander
An oft-reinvented idea to fund public goods.
- Links - Raph's Website, by Raph Koster
A collection of links about MUDs and game design in general.
- Making reliable distributed systems in the presence of software errors, by Joe Armstrong
The author’s PhD dissertation on how to make reliable systems from faulty components, focusing on the essential characteristics the programming language (here, Erlang) and the standard library should have.
- Mu’s Unbelievably Long and Disjointed Ramblings About RPG Design
Several links and ramblings about game design in general, and many times fantasy MMORPG in particular.
- NetPositive error messages
A collection of humorous haiku error messages originally from NetPositive, a web browser for BeOS. I’ll probably steal some of these…
- ★ No Silver Bullet – Essence and Accident in Software Engineering, by Frederick P. Brooks
“There is no single development, in either technology or management technique, which by itself promises even one order of magnitude [tenfold] improvement within a decade in productivity, in reliability, in simplicity.”
- Notes on Structured Programming, by Edsger W. Dijkstra
One of the first papers introducing the (now commonplace) notion of structured programming.
- On the cruelty of really teaching computing science, by Edsger W. Dijkstra
An attempt to put computer science into a wider perspective within science, an argument that computer programming should be understood as a branch of mathematics, and that the formal provability of a program is a major criterion for correctness.
- Our Software Dependency Problem, by Russ Cox
A critical examination on dependency management practices.
- Out of the Tar Pit, by Ben Moseley, Peter Marks
Accidental vs essential complexity, common causes of complexity, and how functional programming and Codd’s relational model may help.
- Parsing Expression Grammars: A Recognition-Based Syntactic Foundation, by Bryan Ford
An alternative to context-free grammars and regular expressions for parsing machine-oriented languages.
- Passing a Language through the Eye of a Needle, by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
How the embeddability of Lua impacted its design.
- Principles of Good Technical Writing, by Michael Wittenburg
A short and to-the-point essay about, well, good technical writing :)
- ★ Programming Without a Call Stack – Event-driven Architectures, by Gregor Hohpe
A summary of why event-driven architectures might be interesting, and some of the challenges involved (e.g. debugging).
- Query-based compiler architectures, by Olle Fredriksson
Why building a compiler around a query system (database?) instead of a pipeline may yield significant advantages for your language tooling.
- ★ Re: Theory of Everything (TOE), by Tom Davidson
An argument for the most fundamental of all logical statements that can be made about a system, even when nothing is known about the contents or processes that may be found therein.
- Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I, by John McCarthy
The landmark paper introducing Lisp, code-as-data, and how a handful of simple operators and a notation for functions is enough to build a programming language.
- Reflections on Trusting Trust, by Ken Thompson
To what extent should one trust the software one runs.
- Remove the legend to become one, by Eugene Wei
Some basic principles on how to best present data for ease of consumption.
- Resources for Amateur Compiler Writers, by Quentin Carbonneaux
A collection of relevant and practical (as deemed by the author) papers and books about compilers.
- Simple Made Easy, by Rich Hickey
A presentation emphasizing simplicity’s virtues over easiness’, showing that while many choose easiness they may end up with complexity, and the better way is to choose easiness along the simplicity path.
- ★ So you want to write a package manager, by Sam Boyer
An essay about the nasty complexities of package management in general and Go’s in particular, proposing a general set of requirements and an insightful way of framing the problem.
- Spaghetti Code
A quick introduction to the complete Pasta Theory of software.
- ★ Stevey's Google Platforms Rant, by Steve Yegge
Why Amazon does everything wrong and Google everything right, and still offers a better platform. Saved as a Gist for posterity, since Google+ no longer is a thing.
- Strategy Letter V, by Joel Spolsky
How a little microeconomics can help explain tech companies’ strategies.
- ★ Structure and Interpretation of Computer Programs, 2nd edition, by Harold Abelson, Gerald Jay Sussman, Julie Sussman
The second edition of MIT’s classic introductory programming course, when they still used Scheme instead of Python.
- Structure and Interpretation of Computer Programs: Video Lectures by Hal Abelson and Gerald Jay Sussman
The complete collection of video lectures of MIT’s famous introductory computer science course, given in 1986.
- Taste for Makers, by Paul Graham
The author’s tips and observations on characteristics of good design.
- The Cathedral and the Bazaar, by Eric S. Raymond
A classic book which helped popularize the open source movement.
- The Failure Mode of Clever, by John Scalzi
Be careful when trying to sound clever, especially with someone you don’t know well.
- ★ The Gervais Principle, Or 'The Office' According to 'The Office', by Venkatesh Rao
Seeing the TV show ‘The Office’ as a fully realized theory of management, which supercedes both the Peter Principle and the Dilbert Principle.
- The Gods of the Copybook Headings, by Rudyard Kipling
A poem counterposing fashionable ideas (the Gods of the Market Place) and the tradicional wisdom in proverbs and maxims (the Gods of the Copybook Headings).
- The IDE as a value, by Chris Granger
A description of Chris’ BOT architecture, derived from ECS to fit event-driven applications.
- The Jargon File, by Eric S. Raymond
A comprehensive compendium of hacker slang illuminating many aspects of hackish tradition, folklore, and humor.
- The Log: What every software engineer should know about real-time data's unifying abstraction, by Jay Kreps
Everything one needs to know about logs, including what is log and how to use logs for data integration, real time processing, and system building.
- ★ The Rise of "Worse is Better", by Richard Gabriel
Excerpted from “Lisp: Good News, Bad News, How to Win Big”, this essay is about how simple-first, “New Jersey-style” software has better survival characteristics than quality-first, “MIT-style” approaches.
- The Roots of Lisp, by Paul Graham
The author’s attempt to understand and distill the essence of John McCarthy’s original paper on Lisp, in an easier form for modern audiences.
- The Universal Design Pattern, by Steve Yegge
A long essay about the power and flexibility of the Properties Pattern.
- The Value of Values, by Rich Hickey
A presentation comparing value-oriented programming with place-oriented programming, concluding that the time of imperative languages has passed and it is the time of functional programming.
- Three Hundred Mechanics, by squidi
(Eventually) 300 different gameplay mechanics and concepts, created by the author and released to the public domain.
- ★ Time-traveling dimension hopping kung-fu killaz
One of the most out there RPG world concepts I’ve seen.
- To the members of the Budget Council, by Edsger W. Dijkstra
A memo where the author advocates for continuing to use Haskell for the introductory programming course in the university, and notes that “we are all shaped by the tools we train ourselves to use, and in this respect programming languages have a devious influence: they shape our thinking habits.”
- Tsuyoku Naritai! (I Want To Become Stronger), by Eliezer Yudkowsky
“Take no pride in your confession that you too are biased; do not glory in your self-awareness of your flaws. This is akin to the principle of not taking pride in confessing your ignorance; for if your ignorance is a source of pride to you, you may become loath to relinquish your ignorance when evidence comes knocking.”
- ★ Unit testing in Coders at Work, by Peter Siebel
A blog post about some known programmers’ impressions of TDD, and particularly Ron Jeffries’ (XP guy) vs Peter Norvig’s approaches for a Sudoku solver.
- Version 0.8 - status or lack thereof, by Chris Granger
A honest assessment of Light Table and the author’s BOT architecture. “BOT filled its goals of an architecture that is infinitely extensible and runtime modifiable, but that degree of power came at a cost - despite its simplicity the resulting program is very hard to follow. I’ve recently come to understand that this is because mixins are fundamentally an anti-pattern and BOT is basically dynamic mixins.”
- Wardley Maps, by Simon Wardley
The use of topographical intelligence in business strategy. Or, how and why build a map for your business.
- We already know blockchain’s killer apps, by Haseeb Qureshi
There are many exciting ideas floating around blockchains, but its killer app may already be known.
- What Money Cannot Buy, by John Wentworth
Basically, expertise.
- When Money Is Abundant, Knowledge Is The Real Wealth, by John Wentworth
“When non-experts cannot distinguish true expertise from noise, money cannot buy expertise. Knowledge cannot be outsourced; we must understand things ourselves.”
- Write Libraries, Not Frameworks, by Brandon Smith
A reasoned argument for, by and large, preferring libraries to frameworks if they aren’t called for.
- You Can't Buy Integration, by Martin Fowler
Several observations about the challenges and current practice of software integration. “Integration isn’t primarily about connecting systems; it’s about putting clean interfaces in front of digital capabilities, emphasizing capabilities over systems.”