(assuming your CTO is reasonable)

As part of the Software Craftsmanship North America 2012 conference, Uncle Bob gave a relatively short talk (~30 minutes) entitled “The Reasonable Expectations of Your CTO”.

I agree with the points that he makes, most of which can be summed up by saying “Your CTO expects you to be a software professional”. You can also read about some of these points as well as some additional ones in his book, The Clean Coder.

In spite of my agreement with the spirit of what Uncle Bob says, there are some caveats and some potential downsides to behaving “as a professional” that…

Building positive customer relationships with Extreme Programming

There are plenty of points of view when it comes to Extreme Programming (XP) — anything that can be (mis)interpreted as dogma is bound to elicit a wide range of responses.

I want to look at XP as providing a framework for excellent customer service and explore why I think it can be a useful part of the software development process.

I believe that everyone should have to have a customer service job at some point in their life, if for no other reason than to appreciate the customer service people with whom we interact on a daily basis. …

Lessons learned from building on top of my own software

Over the past few months I’ve worked on creating a console-based tic tac toe game (written in Clojure) and a simple web server (written in Java). It was my first time building anything in either of those languages, and although there were certainly frustrating moments it was absolutely a great learning experience. Not only did I have the chance to learn about and work in new languages, I had the time and space to concentrate on trying to adhere to best practices for building extensible software — I even wrote a bit about some of that previously:

One of the things that I am enjoying most about my apprenticeship at 8th Light so far is having the opportunity to read a lot of books. Now that I’m taking public transit to/from work, I have a lot more “semi-idle” time that’s perfect for reading. I mean, what else am I going to do on the train?

Although the 8th Light LA undoubtedly has a smaller collection of resources than Chicago, there is a nice little library of books to peruse. …

A Mini-Saga of Failure, Frustration, and Eventual Growth

When trying to deploy my tic tac toe program in Clojure to Clojars, a public repository of open source Clojure libraries, I ran into the following error:

Could not transfer artifact clojure-ttt:clojure-ttt:jar:0.1.0–20160803.181040–15 from/to clojars (https://clojars.org/repo/): Access denied to: https://clojars.org/repo/clojure-ttt/clojure-ttt/0.1.0-SNAPSHOT/clojure-ttt-0.1.0-20160803.181040-15.jar, ReasonPhrase: Forbidden — You don’t have access to the ‘clojure-ttt’ group.

I spent quite a bit of time (too much time) googling and reading Stack Overflow posts looking for clues as to what was going on. Was it a credentials issue? I did just create an account on Clojars so maybe it doesn’t know who I am yet? Or maybe the…

The last spec from cob spec that I got to pass is named TimeToComplete and is located within a separate sub-suite of tests called SimultaneousTestSuite.

It sends thousands of get requests to the server being tested and verifies that every response is a 200. It’s designed to break a single-threaded server (there’s even a note that says this), so the solution is obviously to make the server multi-threaded.

Multithreading allows you to split part of the execution of an application into smaller parts that can be run on separate threads at the same time*.

It may or may not actually…

The beginning of figuring out how to organize a Java project

After working on my Java server project for about two weeks, I feel like I’d made reasonable progress on it. It did a lot of the things that I would expect a server to do, which is good, but all of the source code was located in the same directory, on the same level.

Why? Because I hadn’t taken the time to consider how the code ought to be organized and just let IntelliJ put each newly created file where it wanted to.

Honestly, that would probably be fine if there were only a few classes (although it makes sense…

As I’ve been working on implementing an HTTP server in Java (or at least one that passes the acceptance criteria I was given), I’ve noticed that the idea of Input/Output (IO) is all over the place.

On one hand, IO is pretty simple to understand. You have input which is stuff that goes into something, and output which comes out of something. Is there more to it than that?

The fact that this concept is seemingly so straightforward is a big part of why I’ve never really paused to think about it all that much. Even when I’ve done things…

This post details some of my thoughts and experiences during an initial attempt to make my unbeatable tic tac toe program run more quickly.

As a baseline, for the original working program a computer player takes approximately 36 seconds to make the first move on a 3x3 board.


I got some feedback on my tic tac toe program, and fortunately there weren’t any expletives uttered about what I’ve managed to do so far. Working as an apprentice, I’ve noticed that it’s easy to lose perspective on what it is that I’m doing and whether I’m making any progress. …

The SOLID Principles represent five fundamental design goals for Objected Oriented (OO) software. Although they were initially conceived with respect to OO, they are still a useful tool for designing and organizing code within the functional programming paradigm as well.

This post is an exploration of the SOLID principles as they are applied (or not) in my unbeatable Tic Tac Toe program in Clojure. You can (hopefully) find the code in its state as of the time of this writing here.

Single Responsibility Principle

A class or module should have only one reason to change.*

In trying to apply this to a functional…

Matt Higgins

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store