Technical books I've read - notes and some review

Programming

Some recommendations on technical books. I tried to organize them in categories, but most of them spanned others, so I just added them sorted by the authors name.

Advanced Programming in the Unix Environment. Richard Stevens, Stephen Rago. 2nd edition

APUE Website

APUE is a famous book for everyone that wants to do serious programming on Unix systems. The first edition was done by famous Richard Stevens, in 1992, and aimed popular free and proprietary Unix systems at the time (Linux was not covered). He wrote other very important and famous books about Unix programming, like TCP/IP Illustrated.

Richard Stevens

It have all important information about Unix system calls and how to deal with them, and also has details on doing with virtually all important stuff under Unix like Interprocess Communication (IPC), threads and so on. Strongly recommended.

P.S.: I have read the 2nd edition, when I read the 3rd one I intend to write a new entry to this page and also do all exercises.

C Programming Language, The. Dennis Ritchie, Brian W. Kernighan. 1st edition

When learning some C (many years ago) I was looking for a good book about the language. Unfortunately, there is tons of bad material about C, with wrong information like type errors, non-portable code and so on. Somebody finally recommended the famous book by the C creator: Dennis Ritchie and it was the best book I could read about the language. It begins with basics and goes to advanced techniques. Also, it has nice exercises with text processing that are perfect for a Unix environment where you must do with pipes and text coming in and out everywhere. Strongly recommended.

P.S.: It is time to read it again. When I do, I intend to make all exercises and rewrite this review section.

P.P.S: The first edition is freely available on the web!

The C Programming Language First Edition

Code Reading. The Open Source Perspective. Diomidis Spinelli

Code Reading is one the best books I've read. The author has a point: you will spend most of your time not writing code, but reading code: yours and others' code. Because of that, improving your code reading abilities is important.

Code Reading book Wikipedia entry

The book shows many techniques (most of them I've already known by experience, like the use of grep and find in source code trees) and show important details and also overall vision of possible software architectures.

Although it uses different software written in different languages, most of the examples are taken from the NetBSD operating system, written in the C programming language.

NetBSD website

I strongly recommend that!

Design Patterns: Elements of Reusable Object-Oriented Software. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides

This is a classic. I have heard a lot about this book and eventually glanced over its pages but recently (2017) I've finallly read it all. It was essential for me. I have worked with object oriented languages and projects for a while but I pictured some patterns wrongly. Others I've never heard about before reading the book.

The book is structured so you can you it as a reference manual, but you can also read it from cover to cover.

Some patterns that drawed my attention are Composite, Command, Chain of Responsability, Observer and Iterator.

Composite

Command

Chain of Responsability

Observer

Iterator

After reading it I feel more capable of building big object-oriented systems in which these patterns can perfectly match.

Erlang Programming. Francesco Cesarini, Simon Thompson. 1st edition

I liked this book a lot. I learnt a lot about Erlang (the simplicity of Erlang helps) and how to write real world programs with Erlang. Authors are very experienced people and also wrote about pitfalls when building Erlang applications. It also presents advanced concepts like OTP, behaviours and applications. I got a bit confused with advanced concepts but it was my fault: I should have made the exercises!

Although I've started to read it, besides of learning Erlang, to also learn some functional programming, my knowledge on functional programming (which was initial at the time I started reading it) haven't change too much so, if you are willing to learn functional programming, I recommend another book. changed

Anyway, for building concurrent applications with Erlang, I recommend it.

Scala for the Impatient. Cay S. Horstmann. 1st edition

I was looking for a book about the Scala Programming Language written for those who already knew how to program. I got surprised on how direct this book is and how good it can still be. It is a quick and very good introduction in less than 300 pages (which is really small for such a complex language). Strong recommend if you already know how to program (specially if you already know Java).

Scala Programming Language website

Structure and Interpretation of Computer Programs. Harold Abelson and Gerald Jay Sussman with Julie Sussman. 2nd edition

As known as the Wizard Book. This is a classic I should have read long ago. More than a book that teaches you Scheme (actually, it doesn't) or functional programming, it teaches you how to build systems from small parts with functional programming techniques. By using powerful functional and meta programming, it allows one to specify higher level languages built on the top of Scheme, that can be used to solve problems. A roundup of nice examples: a simulator for digital circuits, a system that propagates constraints, a Scheme interpreter, a Scheme interpreter with lazy evaluation and finally, a register machine that can execute the Scheme interpreter and a compiler that can compile an Scheme program to be executed in the register machine!

This is that kind of deep book that should be read many times and that has much to teach. This is required reading for any people that call herself a "programmer". Amazing book!

To make things even better, this book is available for free on the following link

Structure and Interpretation of Computer Programs

Operating Systems

Design and Implementation of FreeBSD Operating System, The. McKusick et all. 2nd edition

This is a very good (and **advanced**!) book. It is an update of the *The Design and Implementation of the FreeBSD Operating System* which is an update of *The Design and Implementation of the 4.4BSD Operating System*.

It is, though, a **very advanced** book and the reader is required to have previous knowledge of operating systems theory. It doesn't explain most of the concepts of operating systems, but rather tries to explain how things are implemented in FreeBSD. It is a good book for those who want to understand BSD way of resolving operating system problems.

Most chapters lack a detailed explanation and try to show the reader advanced stuff with few text. But could it be different? It has almost 900 pages and intends to cover the whole kernel. Although it doesn't show much code, good diagrams help to understand how FreeBSD works.

I was amazed on how FreeBSD tries to solve important problems in the operating system world. Specially on network stuff, which takes an important part of the book.

Networking and network security

Basic Internet Security

TODO

P2P Networking and Applications. John Buford, Heather Yu, Eng Lua. 1st edition

It is a good introductory book about Peer-to-peer networks, though out to date in some aspects. But, as I said: it is introductory and don't dive into with important problems for P2P. For instance: it introduces the bootstrap problem but don't give any tip on how protocols solve this important problem. It also kind of superficial for specific protocol stuff. I think such a simple book could be small (it has almost 400 pages!).

But it is good for introducing the great number of different types of P2P networks.