Fans pick 28 books like Structure and Interpretation of Computer Programs

By Harold Abelson, Gerald Jay Sussman, Julie Sussman

Here are 28 books that Structure and Interpretation of Computer Programs fans have personally recommended if you like Structure and Interpretation of Computer Programs. Shepherd is a community of 12,000+ authors and super readers sharing their favorite books with the world.

When you buy books, we may earn a commission that helps keep our lights on (or join the rebellion as a member).

Book cover of Naming and Necessity

Yehonathan Sharvit Author Of Data-Oriented Programming

From my list on become a great developer.

Why am I passionate about this?

I boast a two-decade-long career in the software industry. Over the years, I have diligently honed my programming skills across a multitude of languages, including JavaScript, C++, Java, Ruby, and Clojure. Throughout my career, I have taken on various management roles, from Team Leader to VP of Engineering. No matter the role, the thing I have enjoyed the most is to make complex topics easy to understand.

Yehonathan's book list on become a great developer

Yehonathan Sharvit Why did Yehonathan love this book?

Naming and Necessity had a profound impact on my understanding of the importance of using proper names in programming (for functions, variables, etc.). I was fascinated by Kripke’s exploration of the usage of names in our day-to-day language. His arguments challenged my thinking and introduced me to new ways of considering reference and meaning.

The clarity and rigor of his analysis pushed me to refine my reasoning skills. Despite being a challenging read, I found it incredibly rewarding.

By Saul A Kripke,

Why should I read it?

4 authors picked Naming and Necessity as one of their favorite books, and they share why you should read it.

What is this book about?

'Naming and Necessity' has had a great and increasing influence. It redirected philosophical attention to neglected questions of natural and metaphysical necessity and to the connections between these and theories of naming, and of identity. This seminal work, to which today's thriving essentialist metaphysics largely owes its impetus, is here reissued in a newly corrected form with a new preface by the author. If there is such a thing as essential reading in metaphysics, or in philosophy of language, this is it.


Book cover of Gödel, Escher, Bach: An Eternal Golden Braid

Yehonathan Sharvit Author Of Data-Oriented Programming

From my list on become a great developer.

Why am I passionate about this?

I boast a two-decade-long career in the software industry. Over the years, I have diligently honed my programming skills across a multitude of languages, including JavaScript, C++, Java, Ruby, and Clojure. Throughout my career, I have taken on various management roles, from Team Leader to VP of Engineering. No matter the role, the thing I have enjoyed the most is to make complex topics easy to understand.

Yehonathan's book list on become a great developer

Yehonathan Sharvit Why did Yehonathan love this book?

This book profoundly influenced my thinking process, combining the worlds of mathematics, art, and music. I was captivated by how the book explores the deep connections between Gödel’s incompleteness theorems, Escher’s art, and Bach’s art of counterpoint.

The book’s puzzles and thought experiments pushed me to think more abstractly and critically. Despite being dense, I found it incredibly rewarding and eye-opening. I recommend this book to anyone interested in logic, creativity, and the nature of human thought. It’s a masterpiece!

By Douglas R. Hofstadter,

Why should I read it?

14 authors picked Gödel, Escher, Bach as one of their favorite books, and they share why you should read it.

What is this book about?

Douglas Hofstadter's book is concerned directly with the nature of maps" or links between formal systems. However, according to Hofstadter, the formal system that underlies all mental activity transcends the system that supports it. If life can grow out of the formal chemical substrate of the cell, if consciousness can emerge out of a formal system of firing neurons, then so too will computers attain human intelligence. Goedel, Escher, Bach is a wonderful exploration of fascinating ideas at the heart of cognitive science: meaning, reduction, recursion, and much more.


Book cover of The Goal: A Process of Ongoing Improvement

Yehonathan Sharvit Author Of Data-Oriented Programming

From my list on become a great developer.

Why am I passionate about this?

I boast a two-decade-long career in the software industry. Over the years, I have diligently honed my programming skills across a multitude of languages, including JavaScript, C++, Java, Ruby, and Clojure. Throughout my career, I have taken on various management roles, from Team Leader to VP of Engineering. No matter the role, the thing I have enjoyed the most is to make complex topics easy to understand.

Yehonathan's book list on become a great developer

Yehonathan Sharvit Why did Yehonathan love this book?

This book fundamentally changed how I think about business processes and problem-solving. I was drawn into the story of a plant manager struggling to save his factory and found Goldratt’s Theory of Constraints incredibly insightful for me as a programmer inside a development team.

The narrative format made complex concepts easy to understand and apply. I learned to identify and address bottlenecks in any system, which has been invaluable in both professional and personal contexts. Despite being a business book, I found it engaging and applicable to my day-to-day challenges as a programmer. 

By Eliyahu M. Goldratt, Jeffrey Cox,

Why should I read it?

5 authors picked The Goal as one of their favorite books, and they share why you should read it.

What is this book about?

*A Graphic Novel version of this title is now available: "The Goal: A Business Graphic Novel"

30th Anniversary Edition. Written in a fast-paced thriller style, The Goal, a gripping novel, is transforming management thinking throughout the world. It is a book to recommend to your friends in industry - even to your bosses - but not to your competitors. Alex Rogo is a harried plant manager working ever more desperately to try improve performance. His factory is rapidly heading for disaster. So is his marriage. He has ninety days to save his plant - or it will be closed by…


Book cover of Beautiful Code

Christian Clausen Author Of Five Lines of Code

From my list on reads with your hands on the keyboard.

Why am I passionate about this?

My life has been about programming for as long as I can remember. Learning to code was a way to connect with my dad and express my creativity at a young age. Since I grew up with code, it became the way I understood the world; often I could look at a process or program and immediately see its source code in my mind. I developed a very strong sense of aesthetics searching for “perfect code,” which for me was code that was not only error-free but resistant to errors. My studies, research, and career is about moving myself and all programmers closer to that goal: Software that never fails.

Christian's book list on reads with your hands on the keyboard

Christian Clausen Why did Christian love this book?

Continuing down the engineering part of this mini-curriculum, we have a collection of interesting ideas, each written by a different author, all of them inspiring.

Some of the chapters in this book I have reread more times than I can count, because the ideas are so original and intriguing that my fingers start to tingle.

By Andy Oram, Greg Wilson,

Why should I read it?

1 author picked Beautiful Code as one of their favorite books, and they share why you should read it.

What is this book about?

How do the experts solve difficult problems in software development? In this unique and insightful book, leading computer scientists offer case studies that reveal how they found unusual, carefully designed solutions to high-profile projects. You will be able to look over the shoulder of major coding and design experts to see problems through their eyes. This is not simply another design patterns book, or another software engineering treatise on the right and wrong way to do things. The authors think aloud as they work through their project's architecture, the tradeoffs made in its construction, and when it was important to…


Book cover of Types and Programming Languages

Christian Clausen Author Of Five Lines of Code

From my list on reads with your hands on the keyboard.

Why am I passionate about this?

My life has been about programming for as long as I can remember. Learning to code was a way to connect with my dad and express my creativity at a young age. Since I grew up with code, it became the way I understood the world; often I could look at a process or program and immediately see its source code in my mind. I developed a very strong sense of aesthetics searching for “perfect code,” which for me was code that was not only error-free but resistant to errors. My studies, research, and career is about moving myself and all programmers closer to that goal: Software that never fails.

Christian's book list on reads with your hands on the keyboard

Christian Clausen Why did Christian love this book?

Having worked with an untyped functional language the next logical step is to add types on top, and how to get a better understanding than by implementing the type system yourself.

This book takes you through all the interesting kinds and variations of type systems, and you get to implement them yourself using one of my absolute favorite languages (OCaml).

By Benjamin C. Pierce,

Why should I read it?

1 author picked Types and Programming Languages as one of their favorite books, and they share why you should read it.

What is this book about?

A comprehensive introduction to type systems and programming languages.

A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of type systems—and of programming languages from a type-theoretic perspective—has important applications in software engineering, language design, high-performance compilers, and security.

This text provides a comprehensive introduction both to type systems in computer science and to the basic theory of programming languages. The approach is pragmatic and operational; each new concept is motivated by programming examples and the more theoretical sections…


Book cover of Distributed Algorithms An Intuitive Approach

Christian Clausen Author Of Five Lines of Code

From my list on reads with your hands on the keyboard.

Why am I passionate about this?

My life has been about programming for as long as I can remember. Learning to code was a way to connect with my dad and express my creativity at a young age. Since I grew up with code, it became the way I understood the world; often I could look at a process or program and immediately see its source code in my mind. I developed a very strong sense of aesthetics searching for “perfect code,” which for me was code that was not only error-free but resistant to errors. My studies, research, and career is about moving myself and all programmers closer to that goal: Software that never fails.

Christian's book list on reads with your hands on the keyboard

Christian Clausen Why did Christian love this book?

The building blocks of software are algorithms, so here our journey continues after you have established a deep understanding of programming languages.

Modern software is predominantly distributed, and since this book doesn't assume much it is the perfect introduction to algorithm analysis, concurrency, and distributed systems. And the best part is that you can just jump in and build these algorithms yourself.

By Fokkink,

Why should I read it?

1 author picked Distributed Algorithms An Intuitive Approach as one of their favorite books, and they share why you should read it.

What is this book about?

The new edition of a guide to distributed algorithms that emphasizes examples and exercises rather than the intricacies of mathematical models.

This book offers students and researchers a guide to distributed algorithms that emphasizes examples and exercises rather than the intricacies of mathematical models. It avoids mathematical argumentation, often a stumbling block for students, teaching algorithmic thought rather than proofs and logic. This approach allows the student to learn a large number of algorithms within a relatively short span of time. Algorithms are explained through brief, informal descriptions, illuminating examples, and practical exercises. The examples and exercises allow readers to…


Book cover of Java Puzzlers: Traps, Pitfalls, and Corner Cases

Christian Clausen Author Of Five Lines of Code

From my list on reads with your hands on the keyboard.

Why am I passionate about this?

My life has been about programming for as long as I can remember. Learning to code was a way to connect with my dad and express my creativity at a young age. Since I grew up with code, it became the way I understood the world; often I could look at a process or program and immediately see its source code in my mind. I developed a very strong sense of aesthetics searching for “perfect code,” which for me was code that was not only error-free but resistant to errors. My studies, research, and career is about moving myself and all programmers closer to that goal: Software that never fails.

Christian's book list on reads with your hands on the keyboard

Christian Clausen Why did Christian love this book?

This tour of programming is a humorous reminder that we should always question our assumptions.

This book presents example after example of very simple Java programs all of which behave differently than you expect. It's both humbling and so provocative that you have to go into an editor and see if their claims are true.

By Joshua Bloch, Neal Gafter,

Why should I read it?

1 author picked Java Puzzlers as one of their favorite books, and they share why you should read it.

What is this book about?

"Every programming language has its quirks. This lively book reveals oddities of the Java programming language through entertaining and thought-provoking programming puzzles."

--Guy Steele, Sun Fellow and coauthor of The Java (TM) Language Specification

"I laughed, I cried, I threw up (my hands in admiration)."

--Tim Peierls, president, Prior Artisans LLC, and member of the JSR 166 Expert Group

How well do you really know Java? Are you a code sleuth? Have you ever spent days chasing a bug caused by a trap or pitfall in Java or its libraries? Do you like brainteasers? Then this is the book for…


Book cover of Grokking Simplicity: Taming complex software with functional thinking

Yehonathan Sharvit Author Of Data-Oriented Programming

From my list on become a great developer.

Why am I passionate about this?

I boast a two-decade-long career in the software industry. Over the years, I have diligently honed my programming skills across a multitude of languages, including JavaScript, C++, Java, Ruby, and Clojure. Throughout my career, I have taken on various management roles, from Team Leader to VP of Engineering. No matter the role, the thing I have enjoyed the most is to make complex topics easy to understand.

Yehonathan's book list on become a great developer

Yehonathan Sharvit Why did Yehonathan love this book?

I found Normand’s focus on functional programming techniques incredibly practical and enlightening. Despite its technical content, I found the book accessible and engaging.

I believe this book is essential for anyone looking to tame complexity in their code. It’s a book I revisit when I need to explain the power of functional programming to my colleagues.

By Eric Normand,

Why should I read it?

1 author picked Grokking Simplicity as one of their favorite books, and they share why you should read it.

What is this book about?

Distributed across servers, difficult to test, and resistant to modification-modern software is complex. Grokking Simplicity is a friendly, practical guide that will change the way you approach software design and development. It introduces a unique approach to functional programming that explains why certain features of software are prone to complexity, and teaches you the functional techniques you can use to simplify these systems so that they're easier to test and debug.

Available in PDF (ePub, kindle, and liveBook formats coming soon). about the technologyEven experienced developers struggle with software systems that sprawl across distributed servers and APIs, are filled with…


Book cover of Type-Driven Development with Idris

Enrico Buonanno Author Of Functional Programming in C#

From my list on to learn to think like a functional programmer.

Why am I passionate about this?

I'm a programmer with a desire to constantly learn and improve. I have many years of experience in writing mission-critical software in highly event-driven areas such as FinTech and online auctions. Through interesting and challenging projects, I've always been fascinated by trying to generalize and abstract what it is that makes good code; so things like design patterns and best practices were just up my street. As I expanded this personal research, I found that functional programming provided many interesting techniques, but that many professionals in the industry were unaware of them. This is why I decided to show these techniques and their benefits to a wider audience through my book Functional Programming in C#.

Enrico's book list on to learn to think like a functional programmer

Enrico Buonanno Why did Enrico love this book?

For many years I did not question the validity of the language I was using, focussing instead on becoming good at getting it to do what was needed. It never occurred to me that, say, the type system could be flawed, causing extra work and allowing unnecessary bugs to seep in.

But what if, instead of writing validation code, you could define your types in a way that makes it impossible to create an invalid instance? What if you could define state transitions in such a way that a state machine cannot transition into an invalid state? These are indeed some of the things the Idris language allows.

In his book Type-Driven Development with Idris, Edwin Brady takes you through both the ideas of type-driven development, and how they're enabled in Iris. Iris looks a lot like Haskell, but better. It even has a unique solution for the complex issue…

By Edwin Brady,

Why should I read it?

1 author picked Type-Driven Development with Idris as one of their favorite books, and they share why you should read it.

What is this book about?

DESCRIPTION

Types are often seen as a tool for checking errors, with the

programmer writing a complete program first and using the type

checker to detect errors. And while tests are used to show presence of

errors, they can only find errors that you explicitly test for. In typedriven

development, types become your tools for constructing

programs and, used appropriately, can show the absence of errors. And

you can express precise relationships between data, your assumptions

are explicit and checkable, and you can precisely state and verify

properties. Type-driven development lets users write extensible code,

create simple specifications very early…


Book cover of Clojure Applied: From Practice to Practitioner

Dmitri Sotnikov Author Of Web Development with Clojure: Build Large, Maintainable Web Applications Interactively

From my list on essential Clojure resources.

Why am I passionate about this?

With over a decade of experience in web development using Clojure and active involvement in the Clojure open source community, I have gathered invaluable insights into effective use of the language. I am eager to share some of the experience and knowledge I have acquired with those new to the language.

Dmitri's book list on essential Clojure resources

Dmitri Sotnikov Why did Dmitri love this book?

The Clojure ecosystem presents a multifaceted landscape that can pose a significant challenge for novices, thereby rendering the language itself daunting to approach. However, this comprehensive book aims to alleviate these complexities by providing a guided pathway for readers to construct practical web applications using Clojure.

By following the structured framework within these pages, readers will not only gain a deeper understanding of the language's nuances but also acquire essential proficiency in employing it efficiently. Furthermore, this authoritative resource elucidates numerous best practices, empowering readers to cultivate a skillset that maximizes their effectiveness in utilizing Clojure to its fullest potential.

This book is a great choice for Clojure beginners because it takes the reader through pragmatic examples of using the language, and applying its features effective to solve real-world problems.

By Ben Vandgrift, Alex Miller,

Why should I read it?

1 author picked Clojure Applied as one of their favorite books, and they share why you should read it.

What is this book about?

Think in the Clojure way! Once you're familiar with Clojure, take the next step with extended lessons on the best practices and most critical decisions you'll need to make while developing. Learn how to model your domain with data, transform it with pure functions, manage state, spread your work across cores, and structure apps with components. Discover how to use Clojure in the real world, and unlock the speed and power of this beautiful language on the Java Virtual Machine. Clojure Applied gives you the practical, realistic advice and depth of field that's been missing from your development practice. You…


Book cover of Naming and Necessity
Book cover of Gödel, Escher, Bach: An Eternal Golden Braid
Book cover of The Goal: A Process of Ongoing Improvement

Share your top 3 reads of 2024!

And get a beautiful page showing off your 3 favorite reads.

1,593

readers submitted
so far, will you?

5 book lists we think you will like!

Interested in object-oriented programming, computer programming, and software engineering?