I read Learning C# in the spring of 2012 and it effectively introduced me to the language of C#. Programming C# 5.0 is a more technical introduction to the language, showcasing not only deeper technical explanations of language features but also some explanation of preferred approaches to using these features.
The acceleration through the topics felt good, with the first ten chapters reviewing what I would consider essential features of C# (my favourites being the chapters on LINQ and delegates) and the next nine chapters reviewing more advanced features such as asynchronous features and reflection. The remaining two chapters, ASP.NET and interoperability, felt awkward but essential.
What I appreciate most about this book is the perspective it gives you for C# and as part of the .NET Framework. Whereas the tools I use when writing an application in C# make recommendations or show connections to relevant options, this book describe the technical underpinnings of the code. It helped in understanding where to use the features instead of how. Some of the topics weren’t applicable to the kinds of applications I’m writing now, such as the chapters on Reactive Extensions or multithreading, but I can easily go back to read about these features or to reintroduce myself to more complex areas. The book also does a really decent job of cross-referencing material, directing the reader to different sections of chapters that are also relevant.
I would recommend this book to programmers who have become familiar with C# but want to grow, for experienced programmers who want more than an introduction to the language or for those who are familiar with C# but want to understand more about how the language is implemented in the .NET Framework.
Programming C# 5.0 is available on the O’Reilly site at http://shop.oreilly.com/product/0636920024064.do.
When I was on vacation towards the end of last year, I wanted to read a book that would help me along the path to become a better software tester. With that in mind, I chose How Google Tests Software and learned how a giant search company keeps software testing in-line with development practices.
For content, the book is divided into five sections: Introduction to Google Software Testing, The Software Engineer in Test, The Test Engineer, The Test Manager and Improving How Google Tests Software. This book serves two audiences: Those looking to learn from the test processes that define how Google tests its software, and to Nooglers (new Google employees) who need a launch point for learning about testing activities. Although the first four chapters serve both groups, the last section is more angled at the Nooglers. There are appendices at the back that show sample documentation for the described test processes.
This book approaches the major themes and concepts of testing activities at Google, and occasionally dips into more detailed information, such as tools that were developed or specifics of a task, like a brief glimpse into repo branching or the workflow of a Software Engineer in Test. What I learned from it is
- The value of manual testers to solve specific problems
- How prevalent coding is in all testing roles
- Where automated tests can validate different parts of a system
- Where a tester can develop tools and frameworks that help developers in their testing activities
- How no one has it right and we all struggle with different problems
I’d recommend that testers read this book to get a look at how another company tests software. I learned things from it that I want to incorporate in my work and chances are others will too.
Version Control with Git is a collection of experiences and wisdom about using Git in a variety of situations. It reads as somewhere between technical manual pages and friendly parlance, which I think for many developers will be what they need. Because Git is open source and there is an active community around using it this book won’t be the resource everyone will turn to, but it does have its place among those resources and I’ll be referring back to it in the future.
It starts off with the shared knowledge you need to understand Git and what how it works. It doesn’t compare itself to other Version Control Systems and doesn’t get into apologetics about any systematic behaviour, it simply states what it does. It walks through how it handles the working directory, the local repository and common commands like commit, log and diff. What I think of as the introductory chapters end with a walkthrough of branching and merging, and their applications to the local repository.
At this point the book begins to get more technical, delving into more complex and theoretical areas like rebasing (altering the repository to a known point), remote repositories (a significant part of what makes Git a distributed VCS) and the reflog (what tracks the different endpoints, such as branches, of the repository). These were harder for me to grasp, and although I appreciated that they were better than reading man pages or searching for discussions around these topics, often times I felt the authors neglected dicussing practical application of these concepts for providing more information about these concepts. Given the constraints of the size of the book, I think they made the right choice. Now that I’m aware of these topics, I’ll be going back as I get into using Git more and have to overcome some of its inherent limitations using the methods described.
If you are someone who wants to know more about the tools you use, or enjoy learning a system like how a VCS works such as I do, this is a book worth picking up. The expertise of the authors and the depth to which they go into a variety of topics, should satisfy a reader’s curiosity about this interesting tool.
As a disclaimer, I received this book as part of O’Reilly’s Blogger Review Program.
Agile Testing introduces a software tester to working in an agile environment through introductory and intermediate topics, continuously explaining how they can work as a member of an agile team. It shifted my understanding of what testers are and how the reader can contribute to software development projects.
The book provides exposure to a variety of topics, from culture to project management to coding. Some of these sections are covered more in depth, such as the Agile Testing Quadrants. The explanation of this concept and how it can help to define the testing that would provide value to the technical (team) and business (user) stakeholders was very valuable, and led me to share this information with our team during an informal lunch and learn presentation. Other areas that helped me to think of my job in a different way were the chapters on agile teams and the relationship between coding and testing.
Other sections felt less useful, such as the sections on automation and culture. These topics seemed to provide apparent information and didn’t go into the depth other areas did. From this I have selected other books that tackle these topics specifically, so that I can go into greater depth on these topics.
A feature of this book worth noting is the the extensive examples, either from their own experiences or others also practicing agile testing methods. As I read this book, I came to increasingly appreciate these examples. They either provided affirmation when I already knew the concepts I was reading or showed an implementation when I needed to improve my understanding of a topic. I never missed an example, they were that valuable to me.
I would recommend this book to any person looking to understand how testing provides value on an agile team and need examples of what that can include. It is at the least an introduction to this type of role, but in my experience it went beyond and changed how I approach testing.
Dear friends of the Internet, I have a problem. This problem is that I do not have enough time to read books. As Exhibit A, here is my current backlog of work books:
Sadly this stack does not even begin to address the overflowing 65L+ Rubbermaid container of fiction books next to my bookshelf.
The Pomodoro Technique is a book that describes a time management method based on using a tomato kitchen timer to set aside time to focus on current tasks.* It asks the reader to estimate how much of their time can be set aside in 30-minute increments and to describe what task will be worked on. Although estimating is important, it also gives many sections to the importance of focusing and removing distractions. Once you are comfortable with these concepts, it provides ways to handle exceptions to the technique and ways to extend the rules.
The most important takeaway for me was a method for setting aside time and focusing on set tasks for a set time. With the variety of tasks I’m asked to work on in a day, knowing that I can get to and make progress on important tasks is valuable to me. It has also partially helped me with the tricky skill of time estimation, with knowing how many of these pomodoros I can complete in a day and how much I can accomplish in a set amount of time.
The concepts it presents and the way it asks the reader to think about how they react to distractions is simple and applicable, which is why I think that the proposed tracking sheets and more complex rules detract from the technique. Creating and editing spreadsheets or paperwork, and then taking the time to track the number of interruptions or pomodoros completed, detracts from the ease and clarity of the key concepts. I wonder if others find these additional rules and documents help them with time management, or if they could be extraneous to what the Pomodoro Technique does best: A way to promote discipline to focus on a task for a set time.
This is a way of looking at time management that, like all good tools, has its place and can be used alongside other time management tools. The Pomodoro Technique is available as a free PDF from the author’s site at www.pomodorotechnique.com/book.html.
* “Pomodoro” is Italian for “tomato”, and this book also uses this term to refer to a set amount of time.