Category: Programming
General thoughts and stories about programming and life as a programmer.
Declarative Programming in Depth
Most people that start programming learn to program in an imperative way. Shortly after, they will probably learn a declarative language too. Many developers go a long way without knowing...
Software Architecture: The 5 Patterns You Need to Know
When I was attending night school to become a programmer, I learned several design patterns: singleton, repository, factory, builder, decorator, etc. Design patterns give us a proven solution to existing...
Continuing Our Clean Architecture Example in C#
After a somewhat long delay, it’s time to finally continue our series on clean architecture. This is the second post in the inner series in which we show you a...
Use NDepend to Measure How SOLID Your Code Is
Not that long ago, we published a post defending the SOLID principles of object-oriented design. In today’s post, we take it a step further: we’re going to present NDepend’s rules that will...
Imperative Programming in Depth
Programming languages come in all shapes and sizes: interpreted vs. compiled, weak vs. strong typing, low-level vs. high-level, terse vs. expressive… There are many buckets you can put a programming...
Separation of Concerns, Explained
Software development is a very young field, particularly when you compare it to, say, medicine or law. Despite this, there’s no shortage of wisdom pearls, which accumulated in the decades...
What Makes a Codebase Acquirable?
What makes a codebase acquirable? This is the rare question that affects software developers, managers, and executives in a surprisingly similar way. And that’s saying something since, by and large,...
A Look at .NET Core 2.1
The .NET Framework has certainly been through many changes since it was introduced by Microsoft in 2002. Arguably, .NET Core is the biggest change. First, .NET Core is open source....
Null Is Evil. What’s the Best Alternative? Null.
“Null is evil.” If you’ve been a software developer for any reasonable length of time, I bet you’ve come across that statement several times. I’d say it’s also very likely...
C# 8.0 Features: A Final Glimpse Of The Future
It was not that long ago when we published our first post about the future of C# 8.0 and the probable features it’s getting. On the first post, we covered...
C# Immutable Types: Understanding the Attraction
As I’m sure you’re aware, the word immutable means “unchanging.” So, C# immutable types obviously refers to a C# type that can’t change. What would be the attraction of such...
CQRS: Understanding From First Principles
There seems to be no end to the choices you have for architecture when building an application. You don’t want to fall victim to cargo cult programming, so you need to...
C# 8.0 Features: Another Glimpse of the Future
About two months ago, we talked about some of the (probable) features we’ll be getting with C# 8.0. The post was well received and generated some buzz, which encouraged me...
Value Objects: A Tool for Self-Documented Code and Fewer Errors
Have you ever heard of value objects? I bet you have. Even though they’re talked about a lot less than I’d like, they’re still talked about enough that many developers have...
Cargo Cult Programming Is the Art of Programming by Coincidence
I first learned about cargo cult programming a few years ago. I remember thinking back then, “What a strange name for a programming-related concept.” If you share my past self’s...
C# 8.0 Features: A Glimpse of the Future
It’s been almost 20 years since Microsoft released the first version of the C# language. From its inception—when some unjustly deemed it a mere Java copycat—until now with the upcoming...
Code Reuse is Not a Good Goal
Wait, wait, wait. Put down the pitchforks and listen for a minute. You’re probably thinking that I’m about to tout the “virtues” of copy/paste programming or something. But I assure...
C# Tools to Help with Your Code Quality
Over the years, one of the things I’ve come to love about the .NET ecosystem is the absolute abundance of tools to help you. It’s an embarrassment of riches. I...
Marker Interface Isn’t a Pattern or a Good Idea
Today, I have the unique opportunity to show you the shortest, easiest code sample of all time. I’m talking about the so-called marker interface. Want to see it? Here you...
Using NDepend To Get Going Quickly on C# Projects
Assuming you’ve had at least one job working on one or more C# projects, let me paint a familiar picture for you. I’m talking about your onboarding time with a...
What the Singleton Pattern Costs You
Do you use the singleton pattern? If not, I’m assuming that you either don’t know what it is or that you deliberately avoid it. If you do use it, you’re...
Our experience with using third-party libraries
NDepend is a tool that helps .NET developers write beautiful code. The project was started in April 2004. It is now used by more than 6 000 companies worldwide. In...
C# Version History: Examining the Language Past and Present
I still remember my first look at C# in the early 2000s. Microsoft had released the first major version of the language. I recall thinking that it was Java, except...
In Defense of Using Your Users as Software Testers
In most shops of any size, you’ll find a person that’s just a little too cynical. I’m a little cynical myself, and we programmers tend to skew that way. But this...
Fixing Your Tangled Dependency Graph
I’ve written before about making use of NDepend’s dependency graph. Well, indirectly, anyway. In that post, I talked about the phenomenon of actual software architecture not matching the pretty diagrams people...
Is There a Correct Way to Comment Your Code?
Given that I both consult and do a number of public things (like blogging), I field a lot of questions. As a result, the subject of code comments comes up...
Things Everyone Forgets Before Committing Code
Committing code involves, in a dramatic sense, two universes colliding. Firstly, you have the universe of your own work and metaphorical workbench. You’ve worked for some amount of time on...
What DevOps Means for Static Analysis
For most of my career, software development has, in a very specific way, resembled mailing a letter. You write the thing, and then you go through the standard mail piece...
Why Expert Developers Still Make Mistakes
When pressed, I bet you can think of an interesting dichotomy in the software world. On the one hand, we programmers seem an extraordinarily helpful bunch. You can generally picture...
Exploring the Technical Debt In Your Codebase
Recently, I posted about how the new version of NDepend lets you compute tech debt. In that post, I learned that I had earned a “B” out of the box....