vKevin’s Programming Reading List
Updated 2015-02-21
My goal with this document is to compile the best things I have read or plan to read. On this list, I prefer resources that are broadly applicable over ones that are highly specific, which means that I am heavy on things that teach you ideas and concepts over technologies. Technologies are transitory, while concepts will be with you forever.
Kevin Albrecht
http://www.kevinalbrecht.com
Table of Contents
Meta Lists
Reviewed Content
(Grading Key)
Programming
Concurrent Programming
Functional Programming
Distributed Systems
Software Engineering
Design
General
Scrum
Technologies
Clojure
Git
To Read (again or for first time)
General
Logic/Combinatorics
Concurrent Programming
Functional Programming
Monads
Other
Scrum
Software Engineering
Compiler Design and Implementation
Distributed Systems
Technologies
Clojure
Erlang
Git
Other
Reading
All
Meta Lists
- List of legal and free programming books
- Repository of academic computer science papers and a community who loves reading them
- The greatest videos from Rich Hickey, creator or Clojure and all-around programmer-philosopher
- A curated list of the best JS videos over the years
Reviewed Content
(Grading Key)
5 - Every developer should see it
4 - Every developer interested in the technology should see it
3 - Good for developers interested in the area
2 - Useful, but not a must see
1 - Eh
0 - Don’t see it
Programming as a Career
- Essay on why all programmers should learn to touch type.
Concurrent Programming
- Philosophical discussion of identity/state/time, and a practical discussion on MVCC and STM.
- Composing channels and goroutines to model difficult problems. Very practical.
Functional Programming
- Clarifies difference between incidental and essential complexity and provides a model for minimizing complexity using a combination of functional and relational programming.
- Recommended by Rich Hickey
- Describes problem of equality of mutable objects and solutions in Common Lisp.
- Entertaining explanation of Monads as a take on Alice in Wonderland
- Philosophical discussion on place/space/value, where he argues that Place-Oriented Programming is dying and should.
Distributed Systems
- Paper that Riak, Cassandra, and other DBs were based on.
Software Engineering
Design
- Clarifies “simple” versus “easy” and argues how to avoid complexity.
General
- Evidence-based software engineering
- “Code Complete, Second Edition” by Steve McConnell (Book) -- 5/5
- The best book on software engineering
Scrum
Technologies
Clojure
- Pros and cons of locking versus non-locking concurrency.
Git
To Read (again or for first time)
General
- Something on first-order logic (AKA first-order predicate calculus)
- http://existentialtype.wordpress.com/2011/03/15/boolean-blindness/
Logic/Combinatorics
- “How to Mock a Mockingbird”
Concurrent Programming
Functional Programming
Monads
- “Comprehending Monads” by Phillip Wadler
- “Monads for Functional Programming” by Phillip Wadler
Other
- Graphical take on Lambda calculus
- Implementation of Lisps in Lisp and how to translate them to other languages.
- Recommended as a similar take to “Out of the Tar Pit”
Scrum
Software Engineering
- Recommended on StackOverflow as being great simple guide
- As a suggestion, skip the intro and hop to:
- 23:25 Pushing new code at simplegeo
- 30:51 Upgrading cassandra - parallel adoption
- 46:52 Penelope - DHT Secondary indexes
- 53:31 Good software architecture (summary)
- "If you think giving all your developers sudo privilege is a problem, then you have a bigger problem."
Compiler Design and Implementation
Distributed Systems
- An approach for resolving eventual consistency.
- Recommended by Rich Hickey in “Are We There Yet?”
Technologies
Clojure
- Resolution of conflicts for eventually consistent DBs.
Erlang
Git
Other
Reading
All
- “Process and Reality” by Alfred North Whitehead
- Recommended by Rich Hickey
- “Structure and Interpretation of Computer Programs” (Book and Lectures)