My collection of scientific and technical books
This article can also be read in Catalan
What technical books would you buy if you had $1000 to spend? This is the question I asked myself when I learned that my Ph.D. scholarship included some money destined to buy material that I had not spent. After a few days of research, I selected a list of more than 30 books.
It's been a few months now, and I've had time to read some of the books and leaf through the rest. Here you have my selection, with a brief comment on each book.
A wonderful book, which has just come out in its third edition. It explains in a didactic and entertaining way the fundamental algorithms of different bioinformatics fields. The book, available at my university's library, helped me in preparing the Bioinformatics contest 2018, and was an indispensable acquisition.
Physics for Scientists and Engineers
The classic book of physics, with chapters devoted to mechanics, thermodynamics, electromagnetism, relativity... I have always liked physics, and in high school I tried to learn as much as I could. This book will help me refresh and come back, from time to time, to whatever matters I may be interested on.
I have often commented with some friends from university that we should have paid more attention to the courses’ bibliography in college. Studying based on books would have allowed us to return years later to those same books, which will always be better than the notes we might have taken. This book is the first step to correct that mistake.
Introduction to algorithms
The bible of algorithmics. A book that I consulted extensively to prepare programming competitions during my university years, which is much more than an introduction to algorithms and data structures.
Understanding machine learning
This book is an introduction to the theoretical foundations of machine learning. A very well explained book that has been useful to me to understand some methods I have used in my thesis.
Molecular Biology of the Cell
Although I am almost a doctor in biomedicine (bioinformatics more specifically), my knowledge on biology some years ago was rather limited. For me, the first chapters of this book were very useful to get in touch with the matter, and I have used it as a reference book for years.
Principles of biochemistry
The bible of biochemistry, a book that has everything I will never need to know about this matter.
Lewin's genes XII
A book on genetics that I did not know before doing this search. It has good reviews and is a good complement to the previous books on biology and biochemistry.
The C Programming Language
C is probably the most influential programming language in history. This book, one of whose authors is the creator of C, is the classic manual of this language.
Expert C Programming
Although the previous book is the basic reference of C, a lot more is needed to write good C. This book contains dozens of tricks, good practices, etc. that help us do it better.
CODE: The Hidden Language of Computer Hardware and Software
Interesting and entertaining book that summarizes the history of computer science, of all the advances that have converged in the creation of computers.
Programming Collective Intelligence
How does Google choose relevant web pages for a given search query? How does Netflix know what movies we might like? How does Facebook know which friends to suggest? This book, which has a peculiar title, deals with the algorithms that have taken great relevance since the rise of the web.
Competitive Programming 3
A real gem, how useful it would have been when I was a student! The authors, true masters of programming contests, condense in this book years and years of training, practice and study. In it they deal with all the issues related to programming competitions: algorithms, data structures, implementation tricks, relevant theorems and mathematical properties, and much more.
The bible of computer networks. The truth is that I did not know this book, but my colleague Pau recommended it to me; he always remembers a lesson from this book: we can not underestimate the bandwidth of a van full of hard drives.
Deep learning with Python
Deep learning, that is, machine learning based on neural networks of many layers, has been a revolution in recent years in the world of artificial intelligence. The advances have been so fast, that today it is feasible to use Python to train your models, and you can even do it at home if you buy a good GPU. This book, written by the author of Keras, one of the most popular deep learning frameworks, introduces us to this world, beginning with the theoretical foundation and soon getting hands on practice. It should also be noted that the book is very well written.
A book that I have consulted many times in PDF and that I wanted to have. With this book, thousands of programmers have improved their knowledge of C++.
Effective Modern C++
The necessary complement to the previous book. C++ has introduced major changes in recent years, and Scott Meyers summarizes the best of these new features. Especially interesting are the chapters discussing concurrent programming.
The Go Programming Language
Go is a very interesting programming language, which shines in terms of simplicity and concurrence. It is specially designed for projects on which several people work, long codes where conventions need to be followed, and efficiency is important. This book is a complete introduction to the language.
RTFM: Red Team Field Manual
RTFM (usually Read The Fucking Manual) is what my friend Alberto used to say when I asked him for the nth time about some option of the
grep command. This book contains a catalog of hundreds of commands from a variety of themes: Windows, *nix, networks, web, tricks... Most of the commands are unknown to me, which makes this very a interesting source of information.
Command Line Kung Fu
A book which is less advanced than the previous one, but gives us a good base to start working effectively on the command line.
The Hitchhiker's Guide to Python
This guide to Python, written by the author of requests and other popular packages, rather than a guide on Python, is a guide on good practices in terms of project management, how to organize the code, manage dependencies, etc. This book may become obsolete in a few years, but it is relevant at the moment.
JavasScript: The Good Parts
During the last years, however, new standards of the language have been released, and it would be great if the author published a new and updated edition of the book.
Working Effectively with Legacy Code
How should we handle old code bases? Fortunately, many people have encountered this situation previously and their experience helps the rest of us to face these challenges. This is one of the most relevant books regarding this topic.
Refactoring: Improving the Design of Existing Code
Refactoring is changing a code for another that does the same, but which is better in some way. This book explores this concept, and offers us dozens of examples and patterns to detect candidate codes to be refactored.
The book was published almost 20 years ago, and is specially focused on Java and the paradigm of object-oriented programming, however, it has timeless lessons that can be applied to all scenarios. Interestingly, a new edition has just been published that changes this approach.
Mastering Regular Expressions
Regular expressions are a whole world, and this is the book recommended by everyone to learn how to master them. I remember my friend Rafa who wrote infernal lines of Chinese, as he called it, which were able to detect complicated patterns. Obviously they weren’t Chinese, but regular expressions; I hope this book helps me improve in this skill.
For some years now, myself, and practically all programmers, use Git daily to manage the versions of our programs and projects. Git was revolutionary: a distributed version control system, with cryptographic guarantees, very fast... and free as in freedom. This book takes us beyond pull, add, commit, push, and unveils the great potential behind this tool.
This book, a couple of chapters of which I had already read from a PDF a few years ago, contains authentic programming pearls. The author explains stories and some challenges, and we join him in the exploration of various solutions that show us the beauty that simple problems can hide.
The Rust Programming Language
Rust is one of the most interesting programming languages released in recent years. It is revolutionary in the management of memory, making memory security a priority but without losing efficiency at runtime. This is the second edition of the official introduction to the language book. Although it is available online, for me it has always been easier to read a book such as this in paper.
The Contest Problem Book VII, VIII, IX
As the promoter of the Contrarellotge matemàtica (in Catalan), an online math contests site, I'm always looking for problems. These three books compile hundreds of math problems that have appeared in the American Mathematics Competitions.
A book with an atrocious cover which contains interesting recommendations and reflections regarding research and its communication. It discusses crucial matters such as data collection, statistical analysis, writing style, tables, figures... together with clear examples and providing historical context. A book that I recommend to anyone who is getting started in research.
The Elements of Style
A classic guide for writing English. First published more than 100 years ago, it compiles lots of recommendations on writing that are still fully relevant. The book has been recommended by hundreds of journalists, writers, editors… it’s an ideal complement to On Writing Well, which I read a few months ago, and will be great help for writing my thesis.