C# in Depth
Today we are going to talk about the best book for people who study C#, we are going to review its pros and cons and with this you will be able to know if this book is for you.
C# in Depth is the most recommended book for people looking to learn C#, it is written by Jon Skeet, who for several years has been the Stack Overflow user with the highest score due to his answers to questions related to C#, .Net, .Net core and similar technologies.
I had tried to read it other times but couldn’t finish it, this last time I decided to read it in its entirety, and after the first chapters I realized what the tone of the book was.
As the name implies, it is an in-depth exploration of the C# language, the name can be a little confusing, the book is not about learning C# from start to finish, it is more of a historical explanation from C# 1.0 to making certain bets on What will be the new features of C# 8.
It should be noted that I still think the book is quite good, but I decided to do this review as a reference to other people about whether it is a suitable book for you.
The target audience for this book are people who already have knowledge about the development of C# and who have participated in several projects with this language. However, they are not content with knowing how to handle the implementation of the language and seek to know what the compiler does behind the scenes and how it interacts with the platform at a low level.
It will also help the reader to put the new features of the language in each installment into context and will explain what problems they solve at the language level. It is worth clarifying that not many specific examples will be given of where to implement them, it is more an explanation of what the need of the language at that point in history was and what problem adding a particular feature solves.
The book has 470 pages and an appendix in which it specifies which features appear in which version. It touches on several topics in depth about why it was decided to integrate such a function into the language, but from a point of view that is too academic in my opinion. There are times when you can see the author talking about the low-level implementation in great detail, only to comment at the end of the chapter that they will probably never have to use something like this, or that in general implementations of this type are not used in code of production.
Personally, although I thought that the book had good points, and it clarified some doubts about some concepts that I had read in code or in the C# documentation at some point but that were not completely clear to me and therefore I didn’t use them so much, those concepts helped me lose my fear of them and try to implement them in my own code when necessary.
On the other hand, I do not consider myself an academic programmer, and although I like the C# language, knowing how it works at a low level has never been of my interest, since at the moment I do not feel at a professional level in the that I could contribute to the language repository to extend it, and I am more interested in the implementation and what problems it solves under what circumstances, I am more interested in knowing the context of a feature and how it is applied and why it is applied in this or that way.
C# in depth takes a different approach, it will present you with a feature, give you the context of what problem it solves at the code level without a real example, and then explain how memory is managed at a low level with translated examples on how does the compter interprets the C# implementation. I think that my personal impression is not the fault of the book, I feel that the material on which it works is good and the explanations given are quite clear, sometimes overwhelming due to the level of detail it handles, but in general I feel that C# in depth is not a book for me or for the way I am used to work.
I was interested in delving into the C# language since I want to professionalize my career and one of the main recommendations for C# books was always C# in depth by Jon Skeet, now, once I have read it I can say that it is not a book for me, I will follow it fondly and will probably review it as a reference, but for implementation issues I think that the official Microsoft documentation is still the most practical way to explore any C# topic.
But if you are not like me, if you are a person who works in academia, if you are interested in compilers or you are creating your own compiler, this book is definitely for you, it is fresh, the way it is written is very casual in the explanations and deep into the context of the decisions and gives you advice and a unique view on what to expect at the machine level about the code that is being executed.
Points in its favor:
These topics are very well explained: Generics, Delegates, Anonymous Types, Lambda expressions, Extension Methods, Asynchronous code (Async/Await), Tuples.
If you have any questions about how to implement any of these topics, I recommend this book, Jon Skeet gives an excellent explanation of them.
Topics I hoped would be better explained: LINQ
There is an entire chapter dedicated to LINQ, and I was waiting to read it because I have seen it in several of my projects that I collaborate on and in general as an answer to various StackOverflow issues. I have worked with LINQ but I always felt that I didn’t really understand what was happening in very long queries or perhaps I was implementing them inappropriately, so, upon picking up a book called “C# in depth” with an entire chapter dedicated to LINQ, I thought it was a great opportunity to master the subject.
However, the way the topic is approached is to talk about each part that uses LINQ separately (Implicit typing, Object and collection Initializers, Anonymous types, Lambda expressions, Extension methods, Query expressions) and then a brief explanation of how each component is related in the LINQ implementation.
I would have liked to see more exploration of LINQ implementations and a better explanation of the different combinations of queries that can be used, but they are only superficially reviewed.
Then the book moves on to the next topics and leaves LINQ aside, and I would like to emphasize that it is not the book’s fault, it is my fault for expecting something from a book that I didn’t know if it was going to be focused on my needs, so I blame myself.
Would I recommend it?
In conclusion, this book is focused on a very particular type of programmers, but I am not a part of that type of programmers.
If you really like to delve into the implementations of programming languages, if you have thought about making your own programming language or you like to create your own compilers, yes. Totally recommended.
If you are a programmer looking for solutions to real problems and are looking to deepen your knowledge… I would also recommend it, just give yourself some time to read it between chapters, or use it as guide material for an interview, or reference material on specific topics, You definitely won’t find the entire book useful, but there are some excellent gems and explanations within the book that are highly recommended.
I would like to clarify that it is not my intention to be harsh with the book, nor do I want to imply that programmers who focus on results are superficial, in the world of software development there are many ways to solve the same problem and we all learn differently. different, don’t get discouraged and keep learning.
C# in depth by Jon Skeet, is a great book, if you are using C# in your work or projects you will most likely learn several things from it.