I didn't like most of the Sudoku apps I found, so I decided to write one as a fun little evening and weekend project. It lets you edit and share games.
Imagine you live in a house where none of the taps have handles. The way you turn on the water is by reaching underneath the sink and turning the shutoff valve to control the flow of the water to the sink. Imagine further that this is the only kind of house you've ever lived in, so you've never known anything different.
I was a shy kid who wasn't the type to attract attention to myself. When it came to girls, I might as well have been invisible. Then, one day, I brought my guitar to school.
When I was job hunting, one of the most common questions I would get from recruiters was, "How many years of experience do you have with XYZ technology?" I thought of an analogy to explain why it's so difficult for technology professionals to answer accurately, especially at the senior level.
During one of my many trips to England, I was at a train station late one night, trying to get back to my hotel after visiting with a good friend and colleague. I was still new to the train system, and I wasn't sure if the next train approaching went to Bracknell, where I was staying.
I'm getting back into the retail point-of-sale space, and I needed a way to brush up on my skills at identifying barcode symbologies on sight, so I cooked up
a little web app that generates barcode flash cards.
My first trip to England was in the summer of 2013. I spent all of June and July there, embedded with a team at Fujitsu in Bracknell, Berkshire, designing an NCR self-service checkout system for the UK Post Office. I stayed at a hotel in Bracknell and walked to the Fujitsu office each morning. It was nice to be outside of London and all of its hustle and bustle. Other than the fact that I was l...
There was once a software project that was run by an American company for a client in the UK. One of the project documents mentioned a deliverable with the date 10-05-2013. The client was, of course, expecting this deliverable to be completed on the tenth of May, but the team in the US was delighted to find that it wasn't due until October 5th. Fortunately, the American team lead (who also happ...
Over my life as a software developer, I've collected several rules of thumb that guide me in my work, but these two "laws" have been remarkably useful. Like a lot of so-called laws in software development, they're just heuristics, but they have held up so many times that I assume they're true until proven otherwise.
It seems everyone's talking about "vibe coding" and how anyone can write Space Invaders in an afternoon. That's great, if you want Space Invaders, but what if you want to create something that's never been done, at least not in the way you envision it? No AI agent is going to write that for you, precisely because it's never been done.
Once, when working for a professional-services organisation, I managed a team of business analysts and another
team of
software engineers. As professional-services employees, they were assigned to customer projects, sometimes more
than one project at a time. Our organisation had KPIs for employee utilisation, so making sure employees were
assigned to enough proje...
If you've been around software product management long enough, you've encountered the concept of "personas," which are
fictional characters that represent types of system users. I've used those from time to time to distill user requirements
and to keep myself, and my team, focused on our users.
I'm in the process of porting my site to ASP.NET Razor Pages using .NET 7.0, hosted on Azure. I'm still very
early in the
process, so it's quite rough around the edges, but it's already much easier to use that my old host on
WordPress.
This is part 2 of a three-part series on implementing a set-associative cache in C#. In part 1, we looked at how set-associative caches work and sketched out the basic design.
In this part, we’ll expand on the design a bit more and define a code interface for the cache. In part 3, we’ll
turn the design into working code.
A couple of weeks ago, I had never heard of a set-associative cache. Then, I was assigned an interview exercise
on HackerRank entitled “Set-Associative Cache
Optimization”.
(I won’t give away the company or any details about the exercise, since that wouldn’t be fair.)
Since I hadn’t heard of such a cache, I decided to learn about it and implement one in C# before...
As I begin to write this article, it’s 8:30 on the Saturday morning of Memorial Day weekend, the de facto
start of the summer season in the United States. In most parts of the country, and especially in the South where
I live, that means it’s also barbecue season.
Late last year, I published an article entitled “How I Plan Every Minute of My Day to Stay Productive,” where I described my
personal daily workflow of planning the tasks that I need to accomplish and then adjusting that plan as
necessary throughout the day. I have a new job now, so I want to post an update on how well the approach is
working in a new environment with ne...
I realized one day that I had never implemented Conway’s Game of Life, which is something of a rite of passage for young computer-science students. As I opted for a more non-traditional path to the software profession, I somehow missed that fun, even though I’ve made a point of implementing other computer-sciency things like it.
Over the years, I have progressed from being a software developer who focuses on code all day, to a designer who
designs and codes, to a technical lead who communicates a design and technical strategy to a team of developers,
to a technical and project lead who leads developers in the implementation of a project while communicating with
customers and other stakeholders. ...
The pbrain programming language is an extension I made to the Brainf**k programming language that adds the ability to define and call procedures. If you’re wondering about the asterisks in the name of the programming language, it’s because the name is rather rude. That’s why I decided to use a name for my extension that a good bit tamer. After all, my Mom and my kids still read my site from tim...
In response to a comment regarding the console-based version of the drag sensitivity
utility, I’ve created a new version of the utility that includes a graphical interface and a means
of testing the drag settings in the interface.
Inspired by an article by Raymond Chen about how to
correctly change the Windows mouse drag sensitivity, I wrote a simple utility called dragsens. It's a small
command-line utility that will allow you to change the number of pixels the mouse has to travel before a drag operation is
initiated. Just download and unzip the utility, then run it at the command line.
I found Eric Raymond’s Unix Koans of Master
Foo several years ago and simply loved them. Like the Zen koans they are taken from, they are a succinct way to
communicate concepts of software development, specifically as they relate to the Unix development subculture.
I spend a lot of time and effort trying to get better at the craft of software development. My goal every day is to fall asleep as a better programmer than the one that awoke that morning. While this involves a lot of reading and practice within the field, I usually learn more by studying older disciplines since software development is still such a young craft.
I love the Internet! I just found an archive of
COMPUTE! magazine, which is the magazine that taught me how to program in the 1980's. Just
recently I was lamenting not keeping every single issue I ever had (which was most of them), but now I can flip
back through them any time. Looking through the site really brought back some memories of when I first started
...