Martin Glauber

Over the past few years, I've read quite a few books on computers that I felt would be worth mentioning on my site in case anyone out there was interested in reading anything on these topics.


Logic for Computer Science - Foundations of Automatic Theorem Proving

Jean H. Gallier

link

(I'm still working on this one)



Parsing Techniques - A Practical Guide

Dick Grune | Ceriel J.H. Jacobs

link



Computer Architecture - A Quantitative Approach, 6th Edition

John Hennessy | David Patterson

link

The history of this book and of the material that it covers is amazing.

This book covers processor features including: Instruction set architectures, caches, pipelining, out of order execution, branch prediction, memory consistency models, networking, vector processors and multi-media extensions, general-purpose gpus, warehouse-scale computers, and newer dedicated computational devices like Tensor Processing Units.



Types and Programming Languages

Benjamin Pierce

link

The focus of the book is type systems, but it has a very patient introduction to the models used to study them. If you've always wanted to learn what lambda calculus is, this is probably the best place to start.

This book starts with a model language for simple arithmetic and boolean expressions, goes through the untyped lambda calculus, typed lambda calculus and System F, and then builds up a purely functional model of object oriented programming.



Compilers: Principles, Techniques, and Tools

Aho | Sethi | Ullman

link

This book is a classic. Even though it was written quite a few years ago, it is still a great first book to read if you are interested in learning about compilers.

It covers all of the major topics of compiler construction: lexical analysis/parsing, type systems, intermediate code, optimization, and target code generation.



The Linux Programming Interface

Michael Kerrisk

link

Covers the operating system features from the userspace perspective, focusing on: files, processes, signals, inter-process communication, threads, sockets, etc..

The title of this book only mentions "Linux", but where this book really shines is with its advice for writing portable code. The author was very rigorous in finding and pointing out the differences between what is specified in SUS(v3/4) and what is unique to certain *nix operating systems.

The book also does a good job at making it clear which standard C99 funtions make use of which system calls.



CJKV Information Processing, 2nd Edition

Ken Lunde

link

If you want to take this book on, it helps to have familiarity with at least one of the languages in question.



Effective Javascript

David Herman

link

Highly-distilled information on the javascript programming language.



Mastering Regular Expressions, 3rd Edition

Jeffrey E. F. Friedl

link

Covers the use of Regular Expressions for practical text processing tasks.



The Salesforce.com documentation

link

I actually did print out all of the technical documentation when I first started working with Salesforce.com, and it takes up a good amount of space on my bookshelf. While I wouldn't go through so much paper nowadays when going through technical documentation, I did read them all, and I have good memories of having them all spread out on my office desk as I was working and first learning the platform.



Data Structures and Algorithm Analysis in C, Second Edition

Mark Allen Weiss

link

I actually studied Mathematics in university rather than Computer Science, so this was one of the first books here that I read.



Building Microservices

Sam Newman

link

This book is a quick read, and has a lot of good advice. It doesn't overly push any particular design decisions, but rather points out a lot of things to look for in how to get multiple systems interacting well.



The Art of SQL

Stephane Faroult | Peter Robson

link

A good introduction to working with relational databases.