Saturday, August 18, 2018

Check-In Day

Jane started a new job at a new company in a new town.

She knew things would be very different from the way she had already done things. That was, in fact, why the new company hired her; they wanted her to teach them how she works.

Friday, August 17, 2018

Object-Oriented Performance

Long ago, in a land now distant to me, I worked for a very successful company.

They were the kind of company that wasn't successful because they were good at software development. They were good at something else and they had to do some software development to make that offering in the modern era.

I was brought into one team by a friend of mine in order to change their thinking. Years later, I heard they still reference me as the reason why they write tests first.

Thursday, August 16, 2018

My Take on Code Qualities

You probably have some set of properties in your head that you consider to be important about code.

Mine are as follows:

  • Cohesion - how strongly-related are the parts of any given whole?
  • Coupling - how proper are the relationships between structures?
  • Encapsulation - how difficult is it to create inappropriate coupling?
  • Redundancy - how many places do you need to make the same change for the same reason?
  • Focus - how easy is it for you to find where a change needs to be made?
  • Readability - how easy is it for an equivalently-skilled developer to understand?
  • Testability - how easy is it to verify that the system does what it should?
I don't know how far back these ideas go. I just know I didn't codify them. Someone else came up with this way of analyzing code quality and it resonated with me.

These terms represent my language of design-health. By attending to these things, I can keep a design on track. Ignoring them all but guarantees it will go off the rails.

Wednesday, August 15, 2018

All Software Work is Really Design Work

I think that finding abstractions is one of the most important parts of software development. Not only does it make your code work better. It makes it easier for you to work with your code.

If you accept this as true, there is a conclusion you can easily draw: all software development is actually a form of design.

Tuesday, August 14, 2018

Layers of Abstractions

Code often compiles to an intermediate language. Intermediate languages are generally compiled into machine-language. Machine-language is really just bits. Bits are really just groups of electric, magnetic, reflective, mechanical, or similar potentials.

An integer isn't really an integer except in our heads. It's just some electrical potentials marching around through microscopic semiconductors.

We imagine that a certain combination of voltages spread across some data lines mean "seven" and that the absence of those voltages plus some voltage on an adjacent line means "eight". More precisely, we assign those meanings.

Monday, August 13, 2018

The Destructive Power of Conflation

Let's play a game.

Imagine you have two changes that need to be reviewed by another person before they can be integrated into your main code line. These code reviews are done without any context and only against the diff of the proposed change.

Don't worry about whether or not you think this is a good idea. Just set your beliefs on that subject aside and play the game.