Skip to content

Books on Programming

Max Dörner edited this page Jul 24, 2017 · 8 revisions

This page contains a list of books that might be useful when working on Rubberduck. This reaches from books on general programming over books on C# to books on language processing with Antlr.

General Programming

Clean Code

Clean Code by Robert C. Martins aka Uncle Bob is a must read for every programmer. Its overaching topic is how to write code someone else (or oneself after a few months) can comprehend. The more specific topics cover naming of variables and functions, formatting, breaking down long functions, comments, exception handling and more.

The book is primarily aimed at programmers in an object oriented language, but most of the book is applicable to any kind of programming. The examples are in Java, not in C#. However, that should not be much of a problem as these two languages look quite similar, anyway.

Principles, Patterns, and Practices

Agile Sofware Development - Principles, Patterns, and Practices by Robert C. Martins provides a good introduction to the SOLID principles and the major patterns used to write code that adheres to these principles. This book also covers some principles of agile development. Still, the main benefit is probably in the principles and patterns. The examples are in Java. However, knowing C#, that should be intuitive to read.

Adaptive Code via C#

Adaptive Code via C# by Gary McLean Hall is an introduction to SOLID principles in C#. Apart from some considerations regarding assembly architecture, this book does not contain a lot new over PPP by Robert Martins. However, the examples are in C# and they are presented in the context of the commonly encountered frameworks like ASP.NET. So, if you want something closer to C#, this book might be for you.

Dependency Injection in .NET

Dependency Injection in .NET by Mark Seeman is the book you want to read if you are interested in understand dependency injection. It is in C#, but in half of the book that does not really matter. After reading this book, you probably know enough to implement your own IoC Container, not that you should do that. (There are plenty already.)

The first 9 chapters deal with the why and how of dependency injection. Here chapter 7 has the very .Net specific position to show how to implement DI in the various frameworks like ASP.Net MVC, WPF and PowerShell. The rest of the book showcases a number of IoC Containers available for .Net. (This does not include Ninject, which is used in Rubberduck.)

The Art of Unit Testing

The Art of Unit Testing by Roy Osherove is a very good introduction to unit testing. It shows how to write good tests, how to use stubs and mocks and also how to write your code so that it is testable. As an added benefit, its examples are in C#.

Books on C#

C# in Depth

C# in Depth by Jon Skeet is the best reference to learn about C# language features from C#2 onwards. However, be advised that this book is not an introduction to C# and also really focuses on C# opposed to the .Net framework. You should be comfortable to read C# before starting to read this book. Then, it provides a very good background to all the never features of C#. The first chapters can be a bit boring if you are already comfortable with newer C# versions, but they still provide a good foundation and explain some oddities you might encounter.

C# in a Nutshell

C# *.0 in a Nutshell by Joseph Albahari and Ben Albahari (insert the current version) is a comprehensive reference about C# and the entire core .Net framework. The coverage includes things like LINQ, threading and networking, but excludes frameworks like WPF of ASP.Net MVC. So, if you want to know how something general works in .Net, this book will probably cover it. Just do not be disappointed that this books can be somewhat dry: it is a reference.

Language Processing

The Definitive Antlr4 Reference

If you really want to understand Antlr4, there is not much way around The Definitive Antlr4 Reference by Terence Parr, the creator of Antlr. It covers basically every part of the general workflow of Antlr. What you cannot find here, you probably cannot find anywhere else either. (Unfortunately, there are some abilities of Antlr4 which are not covered in this book.)

Language Implementation Patterns

Language Implementation Paterns by Terence Parr presents general patterns used in language implementation. Step by step it increases the abilities through a series of solutions for language problems of increasing difficulty. It all begins with validating very simple syntax and ends with interpreting and translating code.

Unfortunately, this book makes extensive usage of Antlr3 in its examples, which looks quite different than Antlr4, at least after parsing is done. Still, the general principles can be very educational.

Clone this wiki locally