{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Bookshelf",
    "_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\/bookshelf\/",
    "feed_url": "https:\/\/mishurovsky.com\/blog\/?go=tags%2Fbookshelf%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": "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"
                ]
            }
        },
        {
            "id": "19",
            "url": "https:\/\/mishurovsky.com\/blog\/?go=all\/reading-list\/",
            "title": "📚 Bookshelf",
            "content_html": "<p>Below is a list of books I’ve finished — and those I plan to read. I will update it from time to time, as I discover new titles. Welcome!<\/p>\n<p>If you are a junior developer, consider some of the marked titles. As for senior engineers, I hope you’ll find here some interesting reads as well.<\/p>\n<p>Also welcome to the comments for this post and in linked book reviews! What do you think? Which other books are worthy of attention?<\/p>\n<p><i>Notes on marks:<\/i><br \/>\n<i>⭐️ — Brilliant, must read<\/i><br \/>\n<i>🧱 — Foundational, recommended for beginners in a particular technology or software engineering in general<\/i><\/p>\n<h2>Finished<\/h2>\n<h3>General Software Engineering<\/h3>\n<ul>\n<li>Clean Architecture — R. C. Martin 🧱<\/li>\n<li>Clean Code — R. C. Martin<\/li>\n<li>Code Complete — S. McConnell 🧱<\/li>\n<li>Design Patterns — E. Gamma 🧱<\/li>\n<li>Domain Modeling Made Functional — S. Wlaschin<\/li>\n<li>Domain-Driven Design — E. Evans ⭐️<\/li>\n<li>Patterns of Enterprise Application Architecture — M. Fowler ⭐️<\/li>\n<li>Professor Fisby’s Mostly Adequate Guide to Functional Programming — B. Lonsdorf 🧱<\/li>\n<li>Refactoring — M. Fowler ⭐️<\/li>\n<li>The Object Oriented Way — C. Okhravi 🧱 <a href=\"https:\/\/mishurovsky.com\/blog\/all\/book-review-the-object-oriented-way-christopher-okhravi\/\">(Review)<\/a><\/li>\n<\/ul>\n<h3>Working with Data<\/h3>\n<ul>\n<li>Designing Data-Intensive Applications — M. Kleppmann ⭐️<\/li>\n<li>Data Pipelines Pocket Reference — J. Densmore <a href=\"https:\/\/mishurovsky.com\/blog\/all\/book-review-data-pipelines-pocket-reference-james-densmore\/\">(Review)<\/a><\/li>\n<li>Learning SQL — A. Beaulieu 🧱<\/li>\n<\/ul>\n<h3>DevOps & Cloud Computing<\/h3>\n<ul>\n<li>AWS Certified Solutions Architect Associate (SAA-C03) Cert Guide — M. Wilkins<\/li>\n<li>Continuous Integration — P. M. Duvall 🧱<\/li>\n<\/ul>\n<h3>Design<\/h3>\n<ul>\n<li>Practical UI — A. Dannaway<\/li>\n<li>Refactoring UI — A. Wathan<\/li>\n<li>The Elements of Color — J. Itten ⭐️<\/li>\n<\/ul>\n<h3>Management & Leadership<\/h3>\n<ul>\n<li>Fundamentals of Project Management — J. Heagney<\/li>\n<li>Getting Real — D. H. Hansson ⭐️<\/li>\n<li>Start with No — J. Camp ⭐️<\/li>\n<\/ul>\n<h3>Particular Technologies<\/h3>\n<ul>\n<li>AI Engineering — C. Huyen 🧱<\/li>\n<li>Effective TypeScript — D. Vanderkam<\/li>\n<li>Node.js Design Patterns — M. Casciaro<\/li>\n<li>Web Scraping with Python — Ryan Mitchell 🧱 <a href=\"https:\/\/mishurovsky.com\/blog\/all\/book-review-web-scraping-with-python-ryan-mitchell\/\">(Review)<\/a><\/li>\n<\/ul>\n<h2>In-Progress<\/h2>\n<ul>\n<li>Continuous Delivery — D. Farley<\/li>\n<li>Continuous Deployment — V. Servile<\/li>\n<li>Introduction to Algorithms — T. Cormen<\/li>\n<li>Purely Functional Data Structures — C. Okasaki<\/li>\n<li>Stylish F# — K. Eason<\/li>\n<li>Systems Engineering Principles and Practice — A. Kossiakoff<\/li>\n<li>The Art of PostgreSQL — D. Fontaine<\/li>\n<\/ul>\n<h2>Waiting In the Shelf<\/h2>\n<ul>\n<li>Accelerate — N. Forsgren<\/li>\n<li>Building Microservices — S. Newman<\/li>\n<li>Distributed Services with Go — T. Jeffery<\/li>\n<li>Grokking Simplicity — E. Normand<\/li>\n<li>Philosophy of Software Design — J. Ousterhout<\/li>\n<li>Serverless Development on AWS — S. Brisals<\/li>\n<li>Software Architecture — N. Ford<\/li>\n<li>Structure and Interpretation of Computer Programs — H. Abelson<\/li>\n<li>Team Topologies — M. Skelton<\/li>\n<li>The Linux Command Line — W. Shotts<\/li>\n<\/ul>\n",
            "date_published": "2025-10-28T13:39:16+02:00",
            "date_modified": "2026-02-11T16:34:27+02:00",
            "tags": [
                "bookshelf"
            ],
            "_date_published_rfc2822": "Tue, 28 Oct 2025 13:39:16 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "19",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": true,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "13",
            "url": "https:\/\/mishurovsky.com\/blog\/?go=all\/book-review-the-object-oriented-way-christopher-okhravi\/",
            "title": "Book review: “The Object Oriented Way”, Christopher Okhravi",
            "content_html": "<div class=\"e2-text-picture\">\n<a href=\"https:\/\/leanpub.com\/the-object-oriented-way\/\" class=\"e2-text-picture-link\">\n<img src=\"https:\/\/mishurovsky.com\/blog\/pictures\/the-object-oriented-way@2x.png\" width=\"320\" height=\"414\" alt=\"\" \/>\n<\/a><\/div>\n<p>Last week I finished reading “The Object Oriented Way” by Christopher Okhravi. I was attracted to this book with occasional posts by the author on Youtube where he was discussing complex and interesting topics of OOP. His dives into use cases for composition vs. inheritance, composition patterns, and dependency inversion finally convinced me to buy a full copy. I was not disappointed!<\/p>\n<p>This book is like a Bible of OOP. It starts from the very foundational topics like syntax, declaration vs. assignment vs. initialization, number types, variable mutability and so on – written in a concise yet exhaustive manner.<\/p>\n<p>The story develops with detailed discussion of all the tools used in C# OOP, each chapter more advanced than the previous one. It culminates with very interesting discourse of Liskov Substitution Principle: covariance, contravariance, invariance, and the limitations C# has regarding pure logical object-oriented compatibility.<\/p>\n<p>The ending was somewhat unexpected. For me it turned a textbook into a wonderfully written story, with a narration gradually building cognitive tension towards beautiful complexity and then resolution with a new state, a level above the starting point. I will not spoil any details, though :)<\/p>\n<p><b>Whom this book is going to be useful:<\/b><\/p>\n<ul>\n<li>anybody who wants to learn C#<\/li>\n<li>junior devs to build a solid understanding of OOP toolchain<\/li>\n<li>middle-to-senior devs to fill in the gaps in OOP theory<\/li>\n<li>staff devs and above to master arguments for or against object-oriented approach in a particular module<\/li>\n<\/ul>\n<p><b>Verdict: 4.5 \/ 5 – essential.<\/b><br \/>\nConsider buying the full book. It is a worthy investment for most of OOP practitioners.<\/p>\n<p><i>I personally would love to see more detailed UML diagram section. They can be quite complex, and it would be cool to have a complete material on how to write expressive diagrams when planning OOP architecture.<\/i><\/p>\n",
            "date_published": "2025-09-22T15:53:41+02:00",
            "date_modified": "2025-09-22T15:53:09+02:00",
            "tags": [
                "bookshelf",
                "C#",
                "OOP"
            ],
            "image": "https:\/\/mishurovsky.com\/blog\/pictures\/the-object-oriented-way@2x.png",
            "_date_published_rfc2822": "Mon, 22 Sep 2025 15:53:41 +0200",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "13",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/mishurovsky.com\/blog\/pictures\/the-object-oriented-way@2x.png"
                ]
            }
        }
    ],
    "_e2_version": 4134,
    "_e2_ua_string": "Aegea 11.3 (v4134e)"
}