RSSAmplifier

Blog

The Angry Dev

Recent content on The Angry Dev

darrenhorrocks.co.ukRSS feed ↗123 posts

Latest posts

Vibe Coding vs Coding with AI

I think there’s a huge difference between “vibe coding” and “coding with AI”, and that difference comes down to one thing: you still need to know what you’re doing. Vibe coders are often people who are new to programming. They don’t yet understand software architecture, how systems fit together, or how to translate requirements into a working solution. To…

Why I Built My Own Solar Forecasting Tool (To Destroy My Energy Bills)

If you’ve spent any time optimizing a home solar and battery setup, you quickly realize that the hardware is only half the battle. The real challenge is managing it intelligently. To make smart decisions about when to charge your batteries from the grid on cheap night rates, when to hold off, and when to let them drain, you need an accurate solar forecast. There are plenty of black-box solar…

Amazon Q is Indescribably Bad

And even though I just said it was indescribable, I’m going to try anyway. Last night, I was having a problem trying to set something up on CloudFront in my personal AWS account. I looked at the sidebar and thought, why not ask Amazon’s “built-in integrated AWS AI”? Logically, you’d think it would know which services I had running, which services Amazon offers, what…

Windows 10 Is Dying, but Gaming (and working) on Linux Is Easy

Microsoft is officially ending support for Windows 10 in October 2025, and for millions of PC users, that sounds like bad news, because you may not have the right hardware for Windows 11, or you may not want all of your personal data vacuumed up by Microsoft. But here’s the twist: you don’t have to buy new hardware or upgrade to Windows 11 just to keep playing your favorite games.…

Why Event Driven Systems Are Not That Hard

Having recently read the article “ Why are Event Driven Systems Hard? ”, and having worked on several event driven systems myself, I began to wonder why people so often frame these systems as inherently difficult. It’s true that event driven and distributed systems can be hard to work with… especially if approached without the right mindset or tooling, but that doesn’t mean they…

How to Upgrade Windows 10 to Windows 11 on Unsupported Hardware (Step-by-Step with Rufus)

If your computer doesn’t meet Microsoft’s system requirements for Windows 11, you may have seen the dreaded message: “This PC can’t run Windows 11.” The usual culprits are missing TPM 2.0 , no Secure Boot , or an older CPU. But here’s the good news: you can still upgrade Windows 10 to Windows 11 on unsupported hardware using a free tool called Rufus . This method avoids complicated registry edits…

Why UUIDs Beat Integers as Primary Keys (And Why Performance Isn’t the Issue)

One of the first schema decisions you face when designing a database table is: Should I use an INT or a UUID as the primary key? Most developers default to an auto-incrementing integer. It’s simple, compact, and familiar. But UUIDs (a.k.a. GUIDs) are increasingly popular — and many of the old performance objections don’t hold up with modern hardware. Let’s break this down like developers, not DB…

The Lie You Are Being Told About AI and Junior Developers

Let’s get one thing straight. If you’ve been listening to the so-called “tech futurists” and clueless CEOs, you’ve probably been fed the same line: AI is going to replace every entry-level developer. It’s a hot take for a podcast, a great headline for a tech bro’s newsletter, and an even better way to get a company’s stock price to jump. But…

The C# Mistake You're Probably Making with Memory

C#’s Garbage Collector is a powerful tool for automatic memory management, but it doesn’t solve every resource management problem. While it efficiently cleans up unreferenced managed objects, there are specific resources that require a more deterministic approach to ensure they are released promptly. This is where the using statement comes in. The Role of the Garbage Collector The…

Don't Buffer, Stream! How IAsyncEnumerable<T> Solves API Performance Issues

Building APIs that handle large datasets can be a challenge. A common approach is to collect all the data into a list, convert it to JSON, and then send it all at once. But what happens when that dataset is massive? Your API might freeze up while it&rsquo;s building the response, and you could end up with a huge memory footprint. Fortunately, ASP.NET Core provides a great solution for this…

Most Unit Tests Are a Waste of Time, but You Need to Write Them Anyway

Yes, I&rsquo;m saying it, most unit tests feel like a waste of time . You write loads of them. They break when you refactor. They rarely catch real bugs. When you change implementations, you delete the tests. And when your build fails, it’s usually because a mocked method didn’t behave as expected — not because your code actually broke. So why do we keep writing them? Because while most unit tests…

Snap Unsnapped: Why Ubuntu's Packaging Isn't the Universal Dream You Were Promised

Ubuntu&rsquo;s Snap packaging system was introduced with the promise of universal Linux applications, easy updates, and robust security through confinement. While these goals are admirable, the reality of Snap for many desktop users has been a source of frustration, leading to a growing sentiment that &ldquo;Ubuntu Snap sucks.&rdquo; This isn&rsquo;t just a matter of preference; it&rsquo;s rooted…

Why Leetcode Style Interview Tests Are Bullshit

Everybody has heard of the leetcode style interview tests, and given their prominence in the tech news recently, you won&rsquo;t be surprised to find out that this is another story highlighting their inherent flaws. Recently, after a remote interview on teams, I was given a set of 3 different leetcode style interview test questions. I was told to take &ldquo;no more than 3 hours total&rdquo; and…

The Darker Side of Tech Layoffs (it's darker than it seems)

The headlines have been stark: tech giant after tech giant announcing significant layoffs. While the immediate impact on those made redundant is undeniable and deeply upsetting, the fallout from these decisions extends far beyond those who receive the dreaded news. The industry wide repercussions are creating a climate of increased pressure, stifled career movement, and potentially lower earning…

AI is Making Developers Lazy: RIP Core Coding Skills

The hum of the AI co-pilot has become a familiar soundtrack in the world of software development. These intelligent tools, promising increased efficiency and code generation prowess, have been embraced with open arms by many. But what happens when this reliance morphs into over-dependence? What are the potential pitfalls of blindly trusting algorithms we don&rsquo;t fully comprehend, especially…

The Optimisation Lie: Why Your 'Optimised' Code Might Still Be Slow

We&rsquo;ve all been there. You&rsquo;ve tweaked a loop, maybe used a more efficient LINQ method, and patted yourself on the back for &ldquo;optimising&rdquo; your C# code. The profiler might even show a slight improvement. But then, the application still feels… sluggish. That&rsquo;s because the initial steps in optimisation can be deceptively easy, leading to what we&rsquo;ll call The…

The Dirty Secret of Clean Code: When Breaking Programming Principles Makes You a Better Developer

If you&rsquo;ve been in software development for more than five minutes, you&rsquo;ve probably had these acronyms beaten into your head: SOLID: that five-headed monster of principles that&rsquo;s supposed to make your code amazing. DRY: because apparently typing the same logic twice will summon demons or something. Don&rsquo;t get me wrong, these principles exist for good reasons! They&rsquo;ve…

AI Is Smart Because You Are Stupid

Artificial Intelligence is often perceived as a technological marvel, a near-mystical force that can predict, automate, and generate at an astonishing rate. However, this perception isn&rsquo;t necessarily because AI is truly “intelligent” in the way humans are. Rather, AI appears good because humans, by comparison, are inconsistent, distracted, and prone to errors. The brilliance of AI is not in…

.NET Aspire - Microsoft's Attempt at Infrastructure as Code

.NET Aspire is a new set of tools, templates, and packages from Microsoft designed to make building cloud-native applications with .NET easier and more efficient. It helps developers create applications that are resilient, observable, and ready for production. What is .NET Aspire? Traditionally, developers wrote code while operations teams managed the infrastructure it ran on. This separation…

Understanding Garbage Collection - How the dotnet Garbage Collector Works

Garbage collection (GC) is a fundamental component of the .NET runtime, responsible for managing memory automatically and ensuring efficient use of resources. With .NET 8, Microsoft has continued refining the garbage collector, improving performance, reducing latency, and enhancing overall efficiency. This article dives into how the .NET 8 GC works, its key improvements, and how developers can…

Why C# Developers Should Also Learn Rust, and What It Can Teach Them

As a C# developer, you might wonder why you should invest time learning Rust, a systems programming language. After all, C# is a powerful, versatile, and high-level language with a vast ecosystem and a wide range of applications. However, learning Rust can expand your programming horizons and provide unique insights that will make you a better developer, regardless of your primary language.…

Why Frontend Software Development Is Needlessly Complex, When It Does Not Need to Be

Frontend software development has evolved drastically over the last decade, transforming from simple static HTML pages to dynamic, interactive web applications. While the growth of the field has unlocked new possibilities, it has also introduced layers of complexity that, arguably, aren&rsquo;t always necessary. The question worth asking is: why has frontend development become so convoluted, and…

Linux Is NOT the Developers Paradise You Have Been Told It Is

Linux is often heralded as the holy grail for developers - a flexible, open-source playground free of corporate shackles. It&rsquo;s the darling of the tech-savvy, the underdog in the OS wars, and the supposed utopia for programmers everywhere. But let&rsquo;s take a step back from the hype. While Linux has its merits, it&rsquo;s not the flawless paradise that some people claim. Here&rsquo;s why.…

Why Do Open Source Applications Often Have Less Polished UIs Than Commercial Software

Open-source applications play a critical role in technology, offering powerful tools, innovation, and community-driven development. However, many users have noticed that the user interfaces (UIs) of open-source software often lack the polish and finesse of their commercial, closed-source counterparts. This perceived gap isn’t due to a lack of talent but arises from unique challenges and priorities…

My Top 6 Productivity Tools as C# Developer

As a C# developer, I have a wealth of tools at my disposal, each designed to make coding, debugging, and deployment easier, or more efficient. Whether you’re new to the language, or programming in general, or even an experienced developer, leveraging these tools can significantly enhance your productivity. So these are my six essential tools every C# programmer should use: Visual Studio The…

Why C# Should Be Your First Language and is the Best Programming Language for Beginners

When choosing your first programming language, the decision can feel overwhelming. With so many languages available, each with unique strengths, you might wonder, Where should I start? Enter C# —a powerful, versatile, and beginner-friendly language. In this article, we&rsquo;ll explore why C# stands out as the best choice for beginners, backed by its features, community, and versatility. C# is a…

How To: Create a Basic GraphQL API with dotnet in C#

GraphQL is better than OData, and REST&hellip; So this guide will show you how to create a GraphQL API allows you to offer a flexible data querying interface where clients can request exactly the data they need. Here, we’ll create a simple GraphQL API in C# that returns data about music artists and their albums. Prerequisites To follow along, you need to make sure that you have: .NET SDK (version…

SOLID Design Principles Rust (with examples)

When it comes to designing software, the SOLID principles are the gold standard for object-oriented programming. While Rust isn’t an object-oriented language in the strictest sense, it offers plenty of tools to apply SOLID principles effectively. With enums, traits, and strict type safety, Rust provides a solid foundation for building flexible, maintainable, and robust applications that adhere to…

Why Rust and Its Memory Safety Lulls Developers Into a False Sense of Security, Leading to More Serious Bugs

Rust has garnered significant attention in the programming world for its focus on memory safety without the need for a garbage collector, making it an appealing option for systems programming, where safety and performance are both critical. By preventing entire categories of bugs like data races, buffer overflows, and null pointer dereferencing at compile time, Rust has earned a reputation as a…

Stop Designing Your Web Application for Millions of Users When You Don’t Even Have 100

It’s easy to get carried away when you’re building a new web app. You’ve got big ideas, you picture millions of users flocking to your platform, and you start imagining the kind of infrastructure needed to handle all that traffic. So, you build for scale from day one—optimising databases, setting up powerful servers, and ensuring everything is robust enough for massive growth. But hold on a…

Why Copilot is Making Programmers Worse at Programming

Over the past few years, the evolution of AI-driven tools like GitHub&rsquo;s Copilot and other large language models (LLMs) has promised to revolutionise programming. By leveraging deep learning, these tools can generate code, suggest solutions, and even troubleshoot issues in real-time, saving developers hours of work. While these tools have obvious benefits in terms of productivity,…

Five Reasons Visual Studio is Better than Rider

JetBrains Rider has garnered attention as a modern, cross-platform IDE, especially for .NET developers. However, Visual Studio remains the reigning heavyweight in the development world, thanks to years of evolution and refinement. While Rider offers impressive features, there are still several areas where Visual Studio shines brighter. Here are five reasons why Visual Studio is better than Rider.…

Five Reasons Rider is Better than Visual Studio

When it comes to .NET development, Visual Studio has long been the go-to integrated development environment (IDE). However, JetBrains&rsquo; Rider has emerged as a serious competitor, offering a fresh alternative with features that many developers now prefer. While both are powerful tools, here are five reasons why Rider is considered better than Visual Studio for many developers. Cross-Platform…

The Single Best and Worst Things About Popular Programming Languages

I use a lot of programming languages, I use them in different ways for different things because they are tools to do a job, just like a hammer is a tool to hammer in nails and a screwdriver (shockingly) drives screws&hellip; And while you can hammer in nails with a screwdriver, and you can drive screws with a hammer&hellip; They are not the best tools for those jobs. So lets have a look at what…

HTTP Server Tutorial in Rust

In the modern web landscape, understanding how HTTP servers work under the hood can be incredibly empowering. While there are many frameworks and libraries available that abstract away the complexities of building an HTTP server, sometimes it&rsquo;s valuable to get back to basics and see how things work from the ground up. In this tutorial, we will guide you through building a simple HTTP server…

Why GraphQL is Better Than Basic REST and SOAP APIs

SOAP and REST have been the dominant protocols for years. However, GraphQL has emerged in the last few years as a powerful alternative, offering numerous advantages over its predecessors. In this article, we&rsquo;ll explore why GraphQL is often considered better than basic REST and SOAP APIs, and why you might want to consider it for your next project. Understanding the Basics SOAP SOAP (Simple…

Save KSP2 - An Open Letter to Take-Two and CEO Strauss Zelnick

Dear Mr. Zelnick, I hope this letter finds you well. I am writing to you as a dedicated member of the Kerbal Space Program (KSP) community, a group that shares an unparalleled passion for space exploration and engineering, and whose enthusiasm for the franchise has only grown since the original game’s release. I am deeply concerned about the recent decision to cancel Kerbal Space Program 2 (KSP2),…

Why is AI Such a Polarising Subject? Does it Change Everything? Or Nothing?

AI seems to be a very polarising subject. On the whole, most people seem to be in one of two camps: &ldquo;AI IS THE FUTURE OF EVERYTHING!&rdquo; or &ldquo;AI IS TERRIBLE AT EVERYTHING! IT&rsquo;S NOT INTELLIGENT AT ALL&rdquo; (caps intended). The polarisation around AI stems from multiple factors, including misunderstandings, exaggerated expectations, fear of the unknown, and legitimate concerns…

PirateSoftware is a Hypocrite - Helldivers 2 and Security

PirateSoftware on Twitch took a stand against kernel-level anti-cheat in Helldivers 2 but found a workaround by buying a multi-thousand dollar second PC and plays it on there as a way of pretending they have “worked around” the kernel-level anti-cheat requirement. They are now pretending that the PSN account requirement for Helldivers, which was a requirement from the start (but not enforced), is…

Stop Using string.ToLowerInvariant() to Compare Strings. InvariantCulture Comparisons are Slow

A lot of people use ToLower() or ToLowerInvariant() to normalise their strings before comparing them with == , STOP IT. This is very slow, and while that may not matter for 1 or 2 string comparasons, it mounts up in large projects. While there is a very small use case for using Invariant Culture, unless you are absolutely certain that you need it, and why you need it, then you do not need it.…

Respecting the Clock: Unveiling the Time-Wasting Pitfalls in Professional Software Development

In software development, where time is very expensive and efficiency is paramount, it&rsquo;s crucial to recognize and address common practices that can lead to unnecessary time wastage. This article aims to shed light on the professional nature of software developers, emphasizing the need for respectful and time-efficient communication within established software companies. Professionals, Not…

Why are Women so Underrepresented in Software Development?

I have to preface this with &ldquo;I am a man, not a woman, this is an opinion based on what I have seen in 20+ years of working as a software developer in many different companies&rdquo;. With that, software development has a noticeable gender gap, with women underrepresented in comparison to their male counterparts. This disparity is a multifaceted issue with roots in societal, educational, and…

Whats New in ML.NET 3.0

ML.NET is an open-source, cross-platform machine learning framework for .NET developers, offering exciting capabilities in deep learning, data processing, and more. Given that Microsoft recently announced ML.NET 3.0 , let&rsquo;s take a closer look at what ML.NET 3.0 has in store. Deep Learning Takes Center Stage In ML.NET 3.0, deep learning scenarios have been significantly expanded. The…

Mastering Backend Development in C#: 5 Essential Skills

Backend development in C# involves more than just writing code. To become a proficient backend developer, one must master a combination of programming language fundamentals and specific tools and frameworks. In this article, we&rsquo;ll explore five essential skills that every backend C# developer should have, and we&rsquo;ll delve into why each skill is crucial for success. 1. C# Language…

.NET Chiseled Containers: A Revolution in Deployment Efficiency

In a groundbreaking announcement, Canonical and Microsoft have declared the general availability of &ldquo;.NET Chiseled Ubuntu container images&rdquo; for production use with .NET 6, 7, and 8. This release is the culmination of a year-long partnership and design collaboration between the two tech giants, aimed at optimizing containerized applications for size, security, and efficiency. What are…

Asynchronous Programming in C#: A Practical Guide

As applications grow in complexity, the need for responsive and efficient code becomes paramount. Asynchronous programming in C# offers a powerful solution to handling time-consuming operations without blocking the main thread. This practical guide aims to demystify asynchronous programming in C#, providing a comprehensive overview and practical examples to help you harness the benefits of…

C# Design Patterns: A Practical Guide

Design patterns offer reusable solutions to common problems in software design, providing a framework for creating flexible and maintainable code. In C#, understanding and implementing design patterns can significantly enhance the structure and efficiency of your applications. This practical guide will explore key design patterns in C#, providing real-world examples to illustrate their…

Exploring What's New in C# 12

C# 12 has arrived, bringing a plethora of features aimed at enhancing developer productivity, simplifying code, and boosting application performance. Let&rsquo;s delve into the key improvements introduced in this latest version. Getting Started with C# 12 To leverage the new features of C# 12, developers are encouraged to download .NET 8, the latest Visual Studio, or Visual Studio Code&rsquo;s C#…

Optimizing SQL Queries in Entity Framework Core

Entity Framework Core (EF Core) is a powerful and widely used Object-Relational Mapping (ORM) framework for .NET applications. While EF Core simplifies database interactions, it&rsquo;s essential to optimize SQL queries generated by EF Core to ensure efficient database performance. In this article, we&rsquo;ll explore various strategies and techniques for optimizing SQL queries in Entity Framework…

The Dual Nature of Artificial Intelligence: Strengths and Limitations

In the current landscape of technology, Artificial Intelligence stands out as the transformative force with the potential to reshape industries and redefine how we interact with the world. While the capabilities of AI are undoubtedly impressive, a comprehensive understanding of its strengths and limitations is essential for harnessing its potential responsibly. Strengths of AI Data Processing and…