blog: Why is no one writing OO

This commit is contained in:
Thomas 2022-08-18 22:10:02 +01:00
parent 609a64e528
commit b42b2629f8
7 changed files with 73 additions and 16 deletions

View file

@ -14,6 +14,7 @@
flex-flow: row;
max-width: 100vw;
overflow: hidden;
min-height: var(--navbar-height);
}
.left {
@ -46,7 +47,12 @@
padding: var(--spacing-base);
}
.blog {
font-size: 1.4rem;
padding: 0;
color: var(--gray-1000);
}
.blog:visited {
color: var(--brand-blue);
color: var(--gray-1000);
}
</style>

View file

@ -0,0 +1,10 @@
---
title: "Back in office Summer 2022"
author: Thomas Wilson
date: 2022-08-17T08:00:00Z
slug: 2022-08-17-back-in-office
draft: false
---
Summer 2022 isn't over (take if from my red, sunburned hands) but I'm back from not thinking about writing. Everything in seasons, and taking active rest has been great.

View file

@ -0,0 +1,42 @@
---
title: "'Why is no one writing Object Oriented?'"
author: Thomas Wilson
date: 2022-08-18T21:00:00Z
slug: 2022-08-18-why-no-oo
draft: false
---
I am leading hiring efforts for my small engineering team. We're looking for our third senior engineer (maybe five years of experience shipping code, and a little bit of time leading some technical or pastoral efforts).
Our technical interview process runs some one-to-two hours and starts with a problem. Something invented but plausible for a small, operations-software hybrid company. We introduce the problem in fuzzy human-friendly words, and then spend the rest of the interview turning it into well-defined terms. We codify it. And then we code (some of) it.
I'm looking for for if this person has built quality software collaboratively with others: have they made sure they understood all of the messy meatspace malaise, and they can devise some precise presentable platonic solution. Did they use good people and then computer words to describe it.
Because we give such a tangible problem, we really encourage our candidates towards using classes. Classes also happen to be really good at organising code together, so we also encourage them everyday in the engineering team.
This is Object Oriented Programming (OOP), and it's an old term. You're going to come across OOP in theory, if not practice.
Yet having candidates arrive at "this could be a class", and not "this would be good as a set of pure isolated functions procedurally chained together in this file" has been hard. Bewilderingly hard.
Experience writing and managing software can give you a good box of tools, if you're actively looking around you. I'm interviewing experienced software engineers and asking them to model some entities and their behaviour, and they're not reaching for classes.
"Yeah, I guess we can try to use a class" feels weirdly unsatisfying.
In my darker moments I despair - why is no one doing OO?
Why have a quasi-random web software professionals repeatedly resisted one of the oldest, most common enterprise application patterns? I don't know. But I could make some cynical guess at notions of:
* "my code should be able to handle any data, its the users job to do the sensible thing"
* "I don't want to couple my code too closely to the real world"
* "React uses functional programming"
* "OO is old and no one writes 'enterprise software' anymore"
* "it doesn't matter what I call things in my code, or where I put them"
* "it's not cool enough?"
Frameworks (Rails, Spring Boot), architecture patterns (MVC, MVVM), Books (Domain Driven Design, Clean Code/Architecture) all put Objects, entities, or models right there.
They're there because they add value. Not to fill pages or as homage to bygone software practices. It's a competitive ecosystem, and evolution would select against them.
How is the industry producing young, competent, practicing professionals who can't model real world problems? Why is no one doing OO?

File diff suppressed because one or more lines are too long

View file

@ -34,19 +34,18 @@
<svelte:head>
<!-- Primary Meta Tags -->
<title>{post.title} | thomaswilson.xyz</title>
<meta name="title" content="Blog | thomaswilson.xyz">
<meta name="description" content={post.preview}>
<meta name="title" content="Blog | thomaswilson.xyz" />
<meta name="description" content={post.preview} />
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website">
<meta property="og:url" content={`https://www.thomaswilson.xyz/blog/${post.slug}`}>
<meta property="og:title" content={post.title}>
<meta property="og:description" content={post.preview}>
<meta property="og:type" content="website" />
<meta property="og:url" content={`https://www.thomaswilson.xyz/blog/${post.slug}`} />
<meta property="og:title" content={post.title} />
<meta property="og:description" content={post.preview} />
<!-- Twitter -->
<meta property="twitter:title" content={post.title}>
<meta property="twitter:description" content={post.preview}>
<meta property="twitter:title" content={post.title} />
<meta property="twitter:description" content={post.preview} />
</svelte:head>
<Navbar />
@ -59,6 +58,7 @@
<article>
{@html post.content}
<a href="/blog">See other articles</a>
</article>
</main>

View file

@ -5,7 +5,6 @@
<script lang="ts">
import { slide } from 'svelte/transition';
import Navbar from '../components/Navbar.svelte';
import OutOfOffice from '../components/SummerOutOfOffice.svelte';
let isWorkExpanded = false;
let isPersonalExpanded = false;
@ -18,8 +17,6 @@
<Navbar />
<main class="thomaswilson-container">
<OutOfOffice />
<section class="section thomaswilson-strapline">
<h1 class="title">Thomas Wilson</h1>
<p>

View file

@ -31,6 +31,7 @@
--spacing-md: 0.5rem;
--spacing-lg: 1rem;
--spacing-xl: 1.5rem;
--navbar-height: 75px;
}
body {
@ -40,13 +41,14 @@ body {
}
.thomaswilson-container {
--container-padding: 24px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
min-height: calc(100vh - var(--navbar-height) - calc(2 * var(--container-padding)));
background-color: var(--gray-100);
padding: 24px;
padding: var(--container-padding);
}
.thomaswilson-container .section {