blog: Why is no one writing OO
This commit is contained in:
parent
609a64e528
commit
b42b2629f8
7 changed files with 73 additions and 16 deletions
|
|
@ -14,6 +14,7 @@
|
||||||
flex-flow: row;
|
flex-flow: row;
|
||||||
max-width: 100vw;
|
max-width: 100vw;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
min-height: var(--navbar-height);
|
||||||
}
|
}
|
||||||
|
|
||||||
.left {
|
.left {
|
||||||
|
|
@ -46,7 +47,12 @@
|
||||||
padding: var(--spacing-base);
|
padding: var(--spacing-base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.blog {
|
||||||
|
font-size: 1.4rem;
|
||||||
|
padding: 0;
|
||||||
|
color: var(--gray-1000);
|
||||||
|
}
|
||||||
.blog:visited {
|
.blog:visited {
|
||||||
color: var(--brand-blue);
|
color: var(--gray-1000);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
10
src/content/blog/2022-08-17-back-in-office.md
Normal file
10
src/content/blog/2022-08-17-back-in-office.md
Normal 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.
|
||||||
42
src/content/blog/2022-08-18-why-no-oo.md
Normal file
42
src/content/blog/2022-08-18-why-no-oo.md
Normal 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
|
|
@ -34,19 +34,18 @@
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<!-- Primary Meta Tags -->
|
<!-- Primary Meta Tags -->
|
||||||
<title>{post.title} | thomaswilson.xyz</title>
|
<title>{post.title} | thomaswilson.xyz</title>
|
||||||
<meta name="title" content="Blog | thomaswilson.xyz">
|
<meta name="title" content="Blog | thomaswilson.xyz" />
|
||||||
<meta name="description" content={post.preview}>
|
<meta name="description" content={post.preview} />
|
||||||
|
|
||||||
<!-- Open Graph / Facebook -->
|
<!-- Open Graph / Facebook -->
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:url" content={`https://www.thomaswilson.xyz/blog/${post.slug}`}>
|
<meta property="og:url" content={`https://www.thomaswilson.xyz/blog/${post.slug}`} />
|
||||||
<meta property="og:title" content={post.title}>
|
<meta property="og:title" content={post.title} />
|
||||||
<meta property="og:description" content={post.preview}>
|
<meta property="og:description" content={post.preview} />
|
||||||
|
|
||||||
<!-- Twitter -->
|
<!-- Twitter -->
|
||||||
<meta property="twitter:title" content={post.title}>
|
<meta property="twitter:title" content={post.title} />
|
||||||
<meta property="twitter:description" content={post.preview}>
|
<meta property="twitter:description" content={post.preview} />
|
||||||
|
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<Navbar />
|
<Navbar />
|
||||||
|
|
@ -59,6 +58,7 @@
|
||||||
|
|
||||||
<article>
|
<article>
|
||||||
{@html post.content}
|
{@html post.content}
|
||||||
|
<a href="/blog">See other articles</a>
|
||||||
</article>
|
</article>
|
||||||
</main>
|
</main>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import Navbar from '../components/Navbar.svelte';
|
import Navbar from '../components/Navbar.svelte';
|
||||||
import OutOfOffice from '../components/SummerOutOfOffice.svelte';
|
|
||||||
|
|
||||||
let isWorkExpanded = false;
|
let isWorkExpanded = false;
|
||||||
let isPersonalExpanded = false;
|
let isPersonalExpanded = false;
|
||||||
|
|
@ -18,8 +17,6 @@
|
||||||
<Navbar />
|
<Navbar />
|
||||||
|
|
||||||
<main class="thomaswilson-container">
|
<main class="thomaswilson-container">
|
||||||
<OutOfOffice />
|
|
||||||
|
|
||||||
<section class="section thomaswilson-strapline">
|
<section class="section thomaswilson-strapline">
|
||||||
<h1 class="title">Thomas Wilson</h1>
|
<h1 class="title">Thomas Wilson</h1>
|
||||||
<p>
|
<p>
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@
|
||||||
--spacing-md: 0.5rem;
|
--spacing-md: 0.5rem;
|
||||||
--spacing-lg: 1rem;
|
--spacing-lg: 1rem;
|
||||||
--spacing-xl: 1.5rem;
|
--spacing-xl: 1.5rem;
|
||||||
|
--navbar-height: 75px;
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
|
|
@ -40,13 +41,14 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
.thomaswilson-container {
|
.thomaswilson-container {
|
||||||
|
--container-padding: 24px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
min-height: 100vh;
|
min-height: calc(100vh - var(--navbar-height) - calc(2 * var(--container-padding)));
|
||||||
background-color: var(--gray-100);
|
background-color: var(--gray-100);
|
||||||
padding: 24px;
|
padding: var(--container-padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
.thomaswilson-container .section {
|
.thomaswilson-container .section {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue