{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Blog — George Mishurovsky: posts tagged book review",
    "_rss_description": "A blog by George Mishurovsky — a senior software engineer with a medical degree. Drawing from both engineering and scientific thinking, he explores software, architecture, design, psychology, and product thinking.",
    "_rss_language": "en",
    "_itunes_email": "george@mishurovsky.com",
    "_itunes_categories_xml": "",
    "_itunes_image": "https:\/\/mishurovsky.com\/blog\/pictures\/userpic\/userpic-square@2x.jpg?1753619610",
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/mishurovsky.com\/blog\/?go=tags\/book-review\/",
    "feed_url": "https:\/\/mishurovsky.com\/blog\/?go=tags%2Fbook-review%2Fjson%2F",
    "icon": "https:\/\/mishurovsky.com\/blog\/pictures\/userpic\/userpic@2x.jpg?1753619610",
    "authors": [
        {
            "name": "George Mishurovsky",
            "url": "https:\/\/mishurovsky.com\/blog\/",
            "avatar": "https:\/\/mishurovsky.com\/blog\/pictures\/userpic\/userpic@2x.jpg?1753619610"
        }
    ],
    "items": [
        {
            "id": "54",
            "url": "https:\/\/mishurovsky.com\/blog\/?go=all\/bookshelf-update-september-2026\/",
            "title": "Bookshelf update — September 2026",
            "content_html": "<p>I haven’t updated my book list for half a year. So, here is what I’ve read recently and can recommend — there are some gems in the list.<\/p>\n<h3>1. Unit Testing Principles, Practices, and Patterns — V. Khorikov<\/h3>\n<p>Of all the titles in the list, this impresses me the most. Despite the name, it covers all types of automated behavioural tests: unit, integration, and end-to-end. It changed my approach to code organization and my view of which tests deserve a place in a codebase. The book is also helpful in today’s drift towards agentic coding, guided by spec-driven development and TDD.<br \/>\n<a href=\"https:\/\/www.oreilly.com\/library\/view\/unit-testing-principles\/9781617296277\/\">Link to the book<\/a><\/p>\n<h3>2. Fundamentals of Software Architecture — N. Ford<\/h3>\n<p>Software engineering is often described as a craft. One reason is the many decisions developers make based on what they once saw, heard, or practiced. I believe that proficiency comes with awareness of all possible tools. Awareness turns choices into deliberate informed decisions. This book explains software architecture methodology and provides the starting set of tools for architects.<br \/>\n<a href=\"https:\/\/www.oreilly.com\/library\/view\/fundamentals-of-software\/9781492043447\/\">Link to the book<\/a><\/p>\n<h3>3. C# 12 in a Nutshell — J. Albahari<\/h3>\n<p>A great source for exhaustive knowledge of C#. It reads better than I could expect from a book focused on details of a complex language. Still took me more than a month to complete. Again, awareness of internal functioning and available options leads to elegant solutions, efficient and maintainable code. Definitely a must read for senior-level C# developers. I also tried ‘Pro C#’ by A. W. Troelsen, but its 1600 pages found my head to be too small for comfortable living.<br \/>\n<a href=\"https:\/\/www.oreilly.com\/library\/view\/c-12-in\/9781098147433\/\">Link to the book<\/a><\/p>\n<h3>4. ASP.NET Core in Action — A. Lock<\/h3>\n<p>This book is much harder to read than the previous one. It is not supposed to be read from start to end — and I had to shortcut my reading process and skip some sections. For those starting with ASP.NET, selective reading provides a good explanation of how things work and many code snippets ready for use as starting points.<br \/>\n<a href=\"https:\/\/www.manning.com\/books\/asp-net-core-in-action-third-edition\/\">Link to the book<\/a><\/p>\n<h3>5. Accelerate — N. Forsgren<\/h3>\n<p>My science-inclined heart fills with joy when I see a properly designed longitudinal study with a powerful sample size in the tech industry. The study is a solid justification of DevOps practices in software development. A logical relation is the one between software delivery performance and performance-focused organizational culture. The interesting part is that implementation of DevOps is highly likely to transform the culture as well, despite the latter is a much broader concept.<br \/>\n<a href=\"https:\/\/www.oreilly.com\/library\/view\/accelerate\/9781457191435\/\">Link to the book<\/a><\/p>\n<h3>6. On Writing Well — W. Zinsser<\/h3>\n<p>Clarity of writing means clarity of thought. This book does not provide exact writing instructions, but enables freedom and desire for writing — in any style, about any subject. It is a relaxing, slow, and amusing read, breaking the line of a tech reading list. Although it put my vocabulary to work: many words come from non-fiction world of American literature, which I rarely encounter in technical media.<br \/>\n<a href=\"https:\/\/www.goodreads.com\/book\/show\/53343.On_Writing_Well\">Link to the book<\/a><\/p>\n",
            "date_published": "2026-09-10T14:10:52+02:00",
            "date_modified": "2026-09-11T09:59:43+02:00",
            "tags": [
                "book review",
                "bookshelf",
                "C#",
                "devops",
                "testing"
            ],
            "image": "https:\/\/mishurovsky.com\/blog\/pictures\/bookshelf-update-sep-26@2x.jpg",
            "_date_published_rfc2822": "Thu, 10 Sep 2026 14:10:52 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "54",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mishurovsky.com\/blog\/pictures\/bookshelf-update-sep-26@2x.jpg"
                ]
            }
        },
        {
            "id": "35",
            "url": "https:\/\/mishurovsky.com\/blog\/?go=all\/book-review-data-pipelines-pocket-reference-james-densmore\/",
            "title": "Book review: “Data Pipelines Pocket Reference”, James Densmore",
            "content_html": "<div class=\"e2-text-picture\">\n<a href=\"https:\/\/www.oreilly.com\/library\/view\/data-pipelines-pocket\/9781492087823\/\" class=\"e2-text-picture-link\">\n<img src=\"https:\/\/mishurovsky.com\/blog\/pictures\/data-pipelines-pocket-reference@2x.png\" width=\"542\" height=\"891\" alt=\"\" \/>\n<\/a><\/div>\n<p>Software engineering is all about manipulating data. A big portion of software engineer’s attention is drawn to collection data from users and presenting it back to them in a useful form. However, there is another side of data — the kind that is not produced by software users but only consumed by them. Here, we aim for the goals of achieving a single source of truth, data validity and availability, and enabling performant processing (for analysis or presentation).<\/p>\n<p>To get a better grasp of the tooling for working with such data, this week I read <i>Data Pipelines Pocket Reference<\/i> by James Densmore. The book focuses on the modern ELT (Extract-Load-Transform) approach, as well as EtLT (with ‘t’ for generic non-business-related data transformation).<\/p>\n<p>It turned out to be a very practical pocket guide indeed. Each section of the book dedicated to data extraction, loading, and transformation is supplied with clear code snippets in Python.  The snippets demonstrate means to connect to essential services, such as databases, AWS S3, Amazon Redshift, Snowflake, Apache Airflow, as well as basics of data manipulation.<\/p>\n<p>I liked two things. First, these snippets feel production-ready. Surely, they feature no robust logic, but they are sufficient to start moving data around, running validations and applying transformations. Second, the author not only focuses on interaction with services, but<br \/>\nalso provides some tricks of data processing and validation. In particular, there is a neat data testing framework based on separate Python scripts for each check, which can be integrated into Airflow workflows. The approach, while being quite lean, requires a certain mindset to arrive at, so this bit of knowledge was one of the things that saves time and builds a scalable data processing foundation.<\/p>\n<p>That said, I think this book lacks example that are closer to real practice. It would benefit from a companion GitHub repository with a substantial dataset to run ELT against, in addition to the primitive data samples from the book which take no more than 10 rows and 5 columns in a single SQL table. The book also misses any in-depth discussions, making it a pocket reference, indeed.<\/p>\n<p><b>What it covers:<\/b><\/p>\n<ul>\n<li>Data roles: data engineering, data analytics, and data science<\/li>\n<li>Types of pipelines: ETL vs. ELT vs. EtLT<\/li>\n<li>Overview of tools for each ELT step and their orchestration<\/li>\n<li>Minimal instructions for setting up data ingestion and transformation<\/li>\n<li>Approaches to pipeline orchestration<\/li>\n<li>A framework for data validation<\/li>\n<li>Building pipelines with monitoring and maintenance in mind<\/li>\n<\/ul>\n<p><b>Verdict: 4 \/ 5 — a good reference to start building simple ELT pipelines in a day, which is likely exactly what a general software engineer would want if data engineering is not their primary area of specialization<\/b><\/p>\n",
            "date_published": "2026-01-28T12:21:58+02:00",
            "date_modified": "2026-01-28T12:15:38+02:00",
            "tags": [
                "book review",
                "bookshelf",
                "data engineering",
                "ELT",
                "pipelines",
                "Python",
                "SQL"
            ],
            "image": "https:\/\/mishurovsky.com\/blog\/pictures\/data-pipelines-pocket-reference@2x.png",
            "_date_published_rfc2822": "Wed, 28 Jan 2026 12:21:58 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "35",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mishurovsky.com\/blog\/pictures\/data-pipelines-pocket-reference@2x.png"
                ]
            }
        },
        {
            "id": "32",
            "url": "https:\/\/mishurovsky.com\/blog\/?go=all\/book-review-web-scraping-with-python-ryan-mitchell\/",
            "title": "Book review: “Web Scraping with Python”, Ryan Mitchell",
            "content_html": "<div class=\"e2-text-picture\">\n<a href=\"https:\/\/www.oreilly.com\/library\/view\/web-scraping-with\/9781098145347\/\" class=\"e2-text-picture-link\">\n<img src=\"https:\/\/mishurovsky.com\/blog\/pictures\/web-scraping-with-python@2x.jpg\" width=\"381\" height=\"500\" alt=\"\" \/>\n<\/a><\/div>\n<p>Recently I faced a challenge of designing a web crawling and scraping system. To build context, I started my work by reading <i>Web Scraping with Python: Data Extraction for the Modern Web<\/i> by Ryan Mitchell (3rd edition, revised in 2024).<\/p>\n<p>The book turned out to be a very pleasant read. The author’s approach is well structured with chapters going from simple practical tasks and legal overview to advanced considerations such as Natural Language Processing and race conditions in distributed scraping systems. Code snippets are concise and useful — I can imagine them being used in a small scale production system. In two days, I managed to build a solid understanding of common approaches, architectures, problems, and solutions in this field.<\/p>\n<p>That said, the content is not without its flaws. The section on JavaScript and SSR section is so outdated it is almost hilarious. Mentions of Dynamic HTML, jQuery and AJAX calls are appropriate for a book written around 2010, but not for a revised version from 2024. Nonetheless, even this section is useful at a conceptual level: modern SPAs achieve the same goals as early 2000s web applications that generated dynamic HTML server-side and sent it to browsers.<\/p>\n<p>The ease with which I read this book was strongly influenced by my existing knowledge of the web. Over the years, I have built a solid foundation in HTML and CSS, JavaScript and Python, APIs, application architecture, and networking — all of which helped me clearly see the connections between the author’s ideas. However, the book should still be accessible to any technical reader, thanks to its clear explanations and practical code examples.<\/p>\n<p><b>What it covers:<\/b><\/p>\n<ul>\n<li>Principles of web technologies<\/li>\n<li>Legal and ethical considerations<\/li>\n<li>Common scraping use cases<\/li>\n<li>Building web crawlers and scrapers<\/li>\n<li>Crawling strategies<\/li>\n<li>Transformation and validation of collected data<\/li>\n<li>Parsing text and image documents<\/li>\n<li>Scraping traps<\/li>\n<li>Distributed scraping systems<\/li>\n<\/ul>\n<p><b>Verdict: 4.5 \/ 5 — a go-to practical guide for those planning to build their own scraping system.<\/b><\/p>\n",
            "date_published": "2026-01-22T16:56:17+02:00",
            "date_modified": "2026-01-22T16:51:02+02:00",
            "tags": [
                "book review",
                "bookshelf",
                "Python",
                "scraping"
            ],
            "image": "https:\/\/mishurovsky.com\/blog\/pictures\/web-scraping-with-python@2x.jpg",
            "_date_published_rfc2822": "Thu, 22 Jan 2026 16:56:17 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "32",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mishurovsky.com\/blog\/pictures\/web-scraping-with-python@2x.jpg"
                ]
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134e)"
}