Skip to main content

My Bookshelf

Here is a list of some notable books I have read, currently reading or have on my to-read list in my library. Read books are marked with a read πŸ“š badge, a rating and my thoughts on it. Books I’m currently reading with reading πŸ“– . Books on my to-read list are left unmarked.
All books are broadly categorized by genre with a short description of the book and authors.

Table of Contents


Computer Science
#

Algorithms
#

cover
Introduction to Algorithms
by Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein

A comprehensive introduction to the principles of algorithms and data structures. The book covers a wide range of topics such as sorting, searching, and graph algorithms. It is a must-read for anyone interested in algorithms and problem-solving.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
Algorithms
by Robert Sedgewick and Kevin Wayne

A comprehensive guide to the design and analysis of algorithms. The book covers a wide range of topics such as sorting, searching, and graph algorithms. It is suitable for students and professionals looking to deepen their understanding of algorithms.


β˜…β˜…β˜…β˜…β˜† read πŸ“š

Computational Theory
#

cover
Lambda Calculus, Combinators and Functional Programming
by G. E. Revesz

An introduction to the lambda calculus and combinatory logic, with a focus on functional programming. The book covers topics such as lambda calculus, combinators, and the Curry-Howard isomorphism. It is a valuable resource for students and researchers interested in the foundations of computer science.

cover
Introduction to Automata Theory, Languages, and Computation
by John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman

A classic book on automata theory, formal languages, and computability, covering topics such as finite automata, context-free grammars, and Turing machines. The book is suitable for students and professionals looking to deepen their understanding of computational theory.

Type Theory
#

cover
Types and Programming Languages
by Benjamin C. Pierce

A comprehensive introduction to the theory of programming languages. The book covers a wide range of topics including type systems, operational semantics, and lambda calculus. It is a must-read for anyone interested in programming language theory.

cover
Advanced Topics in Types and Programming Languages
by Benjamin C. Pierce

A follow-up to the author's previous book, this volume covers more advanced topics in programming language theory. It includes chapters on substructural type systems, dependent types, and gradual typing. The book is a valuable resource for researchers and practitioners alike.

cover
The Little Typer
by Daniel P. Friedman and David Thrane Christiansen

An introduction to dependent types and type theory using the language of the Little Prover. The book covers topics such as propositions as types, proofs as programs, and the Curry-Howard isomorphism. It is a fun and accessible way to learn about type theory.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
Type Theory and Formal Proof
by Rob Nederpelt and Herman Geuvers

An introduction to type theory and formal proof systems, covering topics such as lambda calculus, natural deduction, and the Curry-Howard correspondence. The book is suitable for students and researchers interested in the foundations of computer science.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
Homotopy Type Theory
by Univalent Foundations Program

An introduction to homotopy type theory, a new branch of mathematics that combines aspects of type theory and homotopy theory. The book covers topics such as the univalence axiom, higher inductive types, and the correspondence between types and spaces. It is a valuable resource for researchers interested in the foundations of mathematics.

cover
Lambda Calculus with Types
by Henk Barendregt

An introduction to the lambda calculus and type theory, with a focus on the Curry-Howard isomorphism. The book covers topics such as simply typed lambda calculus, polymorphism, and type inference. It is a valuable resource for students and researchers interested in the foundations of computer science.

Formal verification and Proof Theory
#

cover
The Little Prover
by Daniel P. Friedman and Carl Eastlund

An introduction to formal verification using the language of the Little Prover. The book covers topics such as logical connectives, induction, and proof by contradiction. It is a fun and accessible way to learn about formal verification.

cover
Certified Programming with Dependent Types
by Adam Chlipala

A Pragmatic Introduction to the Coq Proof Assistant using dependent types for formal verification of software. The book covers topics such as type theory, theorem proving, and program extraction. It is a valuable resource for developers looking to build reliable and correct software.

cover
PROGRAM = PROOF
by Ana Bove and Peter Dybjer

An introduction to the theory of programming and formal verification using the language of constructive type theory. The book covers topics such as lambda calculus, natural deduction, and the Curry-Howard correspondence between programs and proofs. It is a valuable resource for students and researchers interested in the foundations of computer science.

cover
Proofs: A Long-Form Mathematics Textbook
by Daniel J. Velleman

This book covers intuitive proofs, direct proofs, sets, induction, logic, the contrapositive, contradiction, functions and relations. The text aims to make the ideas visible, and contains over 200 illustrations. Furthermore, introductions to area of math include Ramsey theory, number theory, topology, sequences, real analysis, big data, game theory, cardinality and group theory.

Formal and Operational Semantics
#

cover
Practical Foundations for Programming Languages
by Robert Harper

A comprehensive guide to the theory and practice of programming languages. The book covers topics such as type systems, operational semantics, and formal verification. It is suitable for students and professionals looking to deepen their understanding of programming languages.

cover
The Formal Semantics of Programming Languages
by Glynn Winskel

A comprehensive introduction to the formal semantics of programming languages. The book covers topics such as denotational semantics, operational semantics, and axiomatic semantics. It is a valuable resource for students and researchers interested in the foundations of computer science.

cover
Semantics of Programming Languages
by Carl A. Gunter

Semantics of Programming Languages exposes the basic motivations and philosophy underlying the applications of semantic techniques in computer science. It introduces the mathematical theory of programming languages with an emphasis on higher-order functions and type systems.

cover
Programming Languages and Operational Semantics
by Nielson, H. R. and Nielson, F. and Hankin, C.

This book provides an introduction to the essential concepts in programming languages, using operational semantics techniques. It presents alternative programming language paradigms and gives an in-depth analysis of the most significant constructs in modern imperative, functional and logic programming languages.

Compilers
#

cover
Compilers: Principles, Techniques, and Tools
by Alfred V. Aho, Monica S. Lam, Ravi Sethi, and Jeffrey D. Ullman

A classic book on compiler construction, covering topics such as lexical analysis, parsing, and code generation. The book is suitable for students and professionals looking to build compilers and interpreters.


β˜…β˜…β˜…β˜†β˜† read πŸ“š
cover
Engineering a Compiler
by Keith D. Cooper and Linda Torczon

A comprehensive guide to the theory and practice of compiler construction. The book covers topics such as lexical analysis, parsing, and code generation. It is suitable for students and professionals looking to build compilers and interpreters.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
Writing Compilers and Interpreters
by Ronald Mak

A practical guide to building compilers and interpreters using a software engineering approach. The book covers topics such as lexical analysis, parsing, and code generation. It is a valuable resource for developers looking to learn about compiler construction.

cover
Modern Compiler Implementation in C
by Andrew W. Appel

A practical guide to building compilers and interpreters using the C programming language. The book covers topics such as lexical analysis, parsing, and code generation. It is a valuable resource for students and professionals looking to learn about compiler construction.

cover
Modern Compiler Implementation in ML
by Andrew W. Appel

A practical guide to building compilers and interpreters using the ML programming language. The book covers topics such as lexical analysis, parsing, and code generation. It is a valuable resource for students and professionals looking to learn about compiler construction.

cover
Modern Compiler Implementation in Java
by Andrew W. Appel and Jens Palsberg

A practical guide to building compilers and interpreters using the Java programming language. The book covers topics such as lexical analysis, parsing, and code generation. It is a valuable resource for students and professionals looking to learn about compiler construction.

cover
Modern Compiler Design
by Dick Grune, Kees van Reeuwijk, Henri E. Bal, Ceriel J.H. Jacobs, and Koen G. Langendoen

This book make the topic of compiler design more accessible by focusing on principles and techniques of wide application. By carefully distinguishing between the essential (material that has a high chance of being useful) and the incidental (material that will be of benefit only in exceptional cases) much useful information was packed in this comprehensive volume.

cover
Crafting Interpreters
by Robert Nystrom

A practical guide to building interpreters for programming languages. The book covers topics such as scanning, parsing, and interpreting. It is a valuable resource for developers looking to build their own programming languages.


β˜…β˜…β˜…β˜…β˜… read πŸ“š
cover
Writing a C Compiler
by Nora Sandler

A step-by-step guide to building a C compiler from scratch. The book covers topics such as lexical analysis, parsing, and code generation. It is a valuable resource for developers looking to learn about compiler construction.

cover
Writing an Interpreter in Go
by Thorsten Ball

A practical guide to building interpreters for programming languages using the Go programming language. The book covers topics such as lexical analysis, parsing, and interpreting. It is a valuable resource for developers looking to build their own interpreters.


β˜…β˜…β˜…β˜†β˜† read πŸ“š
cover
Writing a Compiler in Go
by Thorsten Ball

A practical guide to building compilers for programming languages using the Go programming language. The book covers topics such as lexical analysis, parsing, and code generation. It is a valuable resource for developers looking to build their own compilers.


β˜…β˜…β˜…β˜†β˜† read πŸ“š
cover
Programming Language Pragmatics
by Michael L. Scott

A comprehensive guide to the design and implementation of programming languages. The book covers topics such as syntax, semantics, and pragmatics. It is suitable for students and professionals looking to deepen their understanding of programming languages.

cover
The Compiler Design Handbook
by Y.N. Srikant and Priti Shankar

A comprehensive guide to the design and implementation of compilers. The book covers topics such as lexical analysis, parsing, and code generation. It is suitable for students and professionals looking to build compilers and interpreters.

cover
Building an Optimizing Compiler
by Bob Morgan

A practical guide to building optimizing compilers. The book covers topics such as data flow analysis, loop optimization, and register allocation. It is a valuable resource for developers looking to build high-performance compilers.

cover
Compiling with Continuations
by Andrew W. Appel

A comprehensive guide to compiling with continuations. The book covers topics such as continuation-passing style, closure conversion, and stackless transformations. It is a valuable resource for developers looking to build compilers with advanced optimization techniques.

Operating Systems
#

cover
Operating Systems: Three Easy Pieces
by Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau

A comprehensive introduction to the principles of operating systems. The book covers topics such as processes, memory management, and file systems. It is suitable for both students and professionals looking to deepen their understanding of operating systems.


β˜…β˜…β˜…β˜…β˜† read πŸ“š

Software Development
#

Engineering Practices
#

cover
Hacker's Delight
by Henry S. Warren Jr.

an irresistible collection of programming hacks: timesaving techniques, algorithms, and tricks that help programmers build more elegant and efficient software, while also gaining deeper insights into their craft. Warren's hacks are eminently practical, but they're also intrinsically interesting, and sometimes unexpected, much like the solution to a great puzzle.

cover
Software Foundations
by Benjamin C. Pierce et al.

A series of textbooks on the mathematical underpinnings of reliable software. The books cover topics such as logic, programming languages, and formal verification. They are suitable for students and researchers interested in the foundations of computer science.
Read for free online

cover
Structure and Interpretation of Computer Programs
by Harold Abelson, Gerald Jay Sussman, and Julie Sussman

A classic book on computer science and programming, known for its emphasis on the fundamentals of programming and problem-solving. The book covers a wide range of topics such as abstraction, recursion, and interpreters. It is a must-read for anyone interested in programming.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
Software Design for Flexibility
by Chris Hanson

A practical guide to designing software systems that are flexible and adaptable to change. The book covers a wide range of topics such as modularity, abstraction, and design patterns. It is a valuable resource for developers looking to build maintainable software.

cover
The Pragmatic Programmer
by Andrew Hunt and David Thomas

A classic book on software development, offering practical advice on a wide range of topics such as code formatting, debugging, and testing. The book is full of useful tips and techniques that can help developers improve their craft.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
The Art of Clean Code
by Christian Mayer

Most software developers waste thousands of hours working with overly complex code. The eight core principles in The Art of Clean Coding will teach you how to write clear, maintainable code without compromising functionality. The book covers topics such as naming conventions, code structure, and refactoring.

cover
Clean Code
by Robert C. Martin

A guide to writing clean, maintainable code. The book covers topics such as naming conventions, code structure, and refactoring. It is a valuable resource for developers looking to improve the quality of their code.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
Clean Architecture
by Robert C. Martin

A guide to designing software systems with clean and maintainable architecture. The book covers topics such as the SOLID principles, component-based architecture, and the Clean Architecture pattern. It is a valuable resource for developers looking to build scalable and maintainable systems.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
Software Architecture: The Hard Parts
by Mark Richards

A practical guide to software architecture, focusing on the key concepts and principles that underpin modern software systems. The book covers topics such as microservices, event-driven architecture, and domain-driven design. It is a valuable resource for architects and developers looking to design scalable and resilient systems.

cover
Refactoring
by Martin Fowler

A guide to improving the design of existing code through refactoring. The book covers a wide range of refactoring techniques, as well as the principles and patterns behind them. It is a valuable resource for developers looking to maintain and evolve their codebase.

cover
Head First - Design Patterns
by Eric Freeman, and Elisabeth Robson

A classic book on software design patterns, covering a wide range of patterns such as creational, structural, and behavioral patterns. The book provides a common language for developers to discuss and share design solutions.


β˜…β˜…β˜…β˜†β˜† read πŸ“š
cover
Hypermedia Systems
by Carson Gross, Adam Stepinski and Deniz Akşimşek

Learn how hypermedia, the revolutionary idea that created The Web, can be used today to build modern, sophisticated web applications, often at a fraction of the complexity of popular JavaScript frameworks. Explore a simpler approach to building applications on the Web and beyond with htmx and Hyperview.

cover
Designing Secure Software
by Loren Kohnfelder

Beginning with a discussion of core concepts like trust, threats, mitigation, secure design patterns, and cryptography. The second part, perhaps this book’s most unique and important contribution to the field, covers the process of designing and reviewing a software design with security considerations in mind.

Write Great Code
#

cover
Understanding The Machine
by Randall Hyde

Dive into machine organization without the extra overhead of learning assembly language programming. Written for high-level language programmers, Understanding the Machine fills in the low-level details of machine organization that are often left out of computer science and engineering courses.

cover
Thinking Low-Level, Writing High-Level
by Randall Hyde

A practical guide to understanding low-level programming concepts and writing high-level code. The book covers topics such as memory management, assembly language, and system programming. It is a valuable resource for developers looking to write efficient and performant code.

cover
Engineering Software
by Randall Hyde

A practical guide to writing efficient and maintainable software. The book covers topics such as code optimization, debugging, and testing. In-depth coverage of everything from development methodologies and strategic productivity to object-oriented design requirements and system documentation.

Programming Languages
#

cover
The C Programming Language
by Brian W. Kernighan and Dennis M. Ritchie

A classic book on the C programming language, written by the creators of the language. The book covers the basics of C programming, as well as more advanced topics such as pointers, arrays, and structures. It is a must-read for anyone interested in learning C.


β˜…β˜…β˜…β˜†β˜† read πŸ“š
cover
The C++ Programming Language
by Bjarne Stroustrup

A comprehensive guide to the C++ programming language, written by the creator of the language. The book covers the basics of C++, as well as more advanced topics such as templates, exceptions, and the Standard Library. It is a valuable resource for both beginners and experienced C++ developers.


β˜…β˜…β˜†β˜†β˜† read πŸ“š
cover
C# 7.0 in a Nutshell
by Joseph Albahari and Ben Albahari

A comprehensive guide to the C# programming language, covering the latest features of C# 7.0. The book covers topics such as LINQ, async programming, and the .NET Core framework. It is a valuable resource for developers looking to master C#.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
The Rust Programming Language
by Steve Klabnik and Carol Nichols

A comprehensive guide to the Rust programming language. The book covers the basics of the language, as well as more advanced topics such as ownership, lifetimes, and concurrency.


β˜…β˜…β˜…β˜†β˜† read πŸ“š
cover
Rust For Rustaceans
by Jon Gjengset

A deep dive into the Rust programming language, covering advanced topics such as macros, unsafe code, and concurrency. The book is aimed at experienced Rust developers looking to deepen their understanding of the language.


β˜…β˜…β˜…β˜…β˜† reading πŸ“–
cover
Get Programming with F#
by Isaac Abraham

An introduction to the F# programming language, covering the basics of functional programming and the F# language features. The book is suitable for beginners looking to learn F# and functional programming concepts.


β˜…β˜…β˜…β˜…β˜† read πŸ“š
cover
Get Programming with Haskell
by Will Kurt

An introduction to the Haskell programming language, covering the basics of functional programming and the Haskell language features. The book is suitable for beginners looking to learn Haskell and functional programming concepts.


β˜…β˜…β˜…β˜†β˜† read πŸ“š
cover
OCaml from the Very Beginning
by John Whitington

An introduction to the OCaml programming language, covering the basics of functional programming and the OCaml language features. The book is suitable for beginners looking to learn OCaml and functional programming concepts.

cover
Introducing Elixir
by Simon St. Laurent and J. David Eisenberg

A comprehensive guide to the Elixir programming language, covering topics such as functional programming, concurrency, and fault tolerance. The book is suitable for both beginners and experienced developers looking to learn Elixir.

cover
Kotlin in Action
by Dmitry Jemerov and Svetlana Isakova

A comprehensive guide to the Kotlin programming language, covering topics such as syntax, idioms, and best practices. The book is suitable for both beginners and experienced developers looking to learn Kotlin.

cover
Elm in Action
by Richard Feldman

A comprehensive guide to the Elm programming language, covering topics such as functional programming, web development, and architecture. The book is suitable for both beginners and experienced developers looking to learn Elm.

cover
The Art of WebAssembly
by Rick Battagline

WebAssembly is the fast, compact, portable technology that optimizes the performance of resource-intensive web applications and programs. The book is designed to give web developers a solid understanding of how it works, when to use it (and when not to), and how to develop and deploy WebAssembly apps.

Functional Programming
#

cover
The Art of Functional Programming
by Simon Thompson

Functional programming allows for highly concise solutions with increased safety. This has led to rising demand for software engineers with functional programming skills. This book will help you move your programming skills to the next level.

cover
Purely Functional Data Structures
by Chris Okasaki

A classic book on functional data structures, covering topics such as persistent data structures, amortized analysis, and lazy evaluation. The book is a valuable resource for developers looking to learn about functional programming and data structures.

cover
Pearls of Functional Algorithm Design
by Richard Bird

A collection of algorithm design techniques in functional programming, covering topics such as recursion, memoization, and higher-order functions. The book is a valuable resource for developers looking to improve their algorithmic problem-solving skills.

Mathematics
#

Category Theory
#

cover
Category Theory for Programmers
by Bartosz Milewski

A comprehensive guide to category theory for programmers, covering topics such as functors, monads, and natural transformations. The book is a valuable resource for developers looking to deepen their understanding of functional programming and abstract mathematics.

cover
Category Theory in Context
by Emily Riehl

A comprehensive introduction to category theory, covering topics such as categories, functors, and natural transformations. The book is suitable for students and researchers interested in the foundations of mathematics and computer science.

cover
Applied Category Theory
by Brendan Fong and David I. Spivak

A practical guide to applied category theory, covering topics such as compositionality, duality, and universal properties. The book is a valuable resource for researchers and practitioners looking to apply category theory to real-world problems.

cover
The Joy of Abstraction
by Eugenia Cheng

This joyful journey through the world of abstract mathematics into category theory will demystify mathematical thought processes and help you develop your own thinking, with no formal mathematical background needed. A comprehensive guide to abstract mathematics, covering topics such as sets, functions, and relations.

Computational Logic
#

cover
Term Rewriting and All That
by Franz Baader and Tobias Nipkow

A unified, self-contained introduction to the field of term rewriting. Covering basic material--abstract reduction systems, termination, confluence, completion, and combination problems--but also some important and closely connected subjects: universal algebra, unification theory, GrΓΆbner bases, and Buchberger's algorithm.

Cryptography
#

cover
The Mathematics of Secrets
by Joshua Holden

Taking readers on a fascinating tour of the mathematics behind cryptography―the science of sending secret messages. Most books about cryptography are organized historically, or around how codes and ciphers have been used, such as in government and military intelligence or bank transactions.

cover
Serious Cryptography
by Jean-Philippe Aumasson

A practical guide to the principles and techniques of modern cryptography. The book covers topics such as symmetric cryptography, public-key cryptography, and cryptographic protocols. It is a valuable resource for developers looking to build secure systems.

Ethical Hacking
#

Penetration Testing
#

cover
Ethical Hacking and Penetration Testing Guide
by Rafay Baloch

A complete introduction to the steps required to complete a penetration test, or ethical hack, from beginning to end. You will learn how to properly utilize and interpret the results of modern-day hacking tools, which are required to complete a penetration test.

cover
The Hacker Playbook 3
by Peter Kim

Take your offensive game to the pro tier. With a combination of new strategies, attacks, exploits, tips and tricks, you will be able to put yourself in the center of the action toward victory. A practical guide to penetration testing and red teaming. The book covers topics such as reconnaissance, scanning, and exploitation.

Network Security
#

cover
The Web Application Hacker's Handbook
by Dafydd Stuttard and Marcus Pinto

The latest step-by-step techniques for attacking and defending the range of ever-evolving web applications. A comprehensive guide to web application security, covering topics such as hacking methodologies, attack techniques, and defense strategies. The book is a valuable resource for security professionals and developers looking to secure their web applications.

Reverse Engineering
#

cover
Reversing: Secrets of Reverse Engineering
by Eldad Eilam

A basic primer on reverse engineering-including computer internals, operating systems, and assembly language-and then discussing the various applications of reverse engineering, this book provides readers with practical, in-depth techniques for software reverse engineering

Game Hacking
#

cover
Game Hacking
by Nick Cano

An introduction to game hacking, covering topics such as memory hacking, code injection, and reverse engineering. Become a true game hacker. Learn the basics, like reverse engineering, assembly code analysis, programmatic memory manipulation, and code injection, and hone your new skills with hands-on example code and practice binaries.

Fiction
#

Autobiography
#

cover
The Cuckoo's Egg
by Clifford Stoll

A fascinating true story of a young astronomer who turned detective to track down a computer intruder who stole information from his lab. Clifford Stoll's pursuit of a hacker led to the discovery of one of the first known computer viruses.

cover
Cult of the Dead Cow
by Joseph Menn

A tale of the oldest, most respected, and most famous American hacking group of all time. Though until now it has remained mostly anonymous, its members invented the concept of hacktivism, released the top tool for testing password security, and created what was for years the best technique for controlling computers from afar, forcing giant companies to work harder to protect customers.

cover
Sandworm
by Andy Greenberg

A true story of the cyber war that is being waged by Russia, Iran, and other countries against the West. The most dangerous team of cyberwarriors in history: a group known as Sandworm. Working in the service of Russia's military intelligence agency, they represent a persistent, highly skilled force, one whose talents are matched by their willingness to launch broad, unrestrained attacks on the most critical infrastructure of their adversaries. They target government and private sector, military and civilians alike.

cover
Countdown to Zero Day
by Kim Zetter

The virus now known as Stuxnet was unlike any other piece of malware built before: Rather than simply hijacking targeted computers or stealing information from them, it proved that a piece of code could escape the digital realm and wreak actual, physical destructionβ€”in this case, on an Iranian nuclear facility.

Science Fiction
#

cover
The Hitchhiker's Guide to the Galaxy
by Douglas Adams

A classic science fiction comedy that follows the misadventures of Arthur Dent, an ordinary human who is rescued by Ford Prefect, an alien researcher for the titular guidebook. Together they embark on a journey through space and time, meeting a host of eccentric characters along the way.


β˜…β˜…β˜…β˜…β˜… read πŸ“š
My first introduction to the series was through the movie adaptation, which I found hilarious. The book is even better, with its witty humor and absurdity. I enjoyed the book immensely and would recommend it to anyone looking for a light-hearted read.

That’s about all my books I have read so far. I will keep updating this list as I read more books. I hope you found inspiration for your next read!

Writing a C Compiler

There are no articles to list here yet.