New dev requirements all over the place
Because of developers making more use of AI and wanting to get the most out of it, there’s new assessment criteria popping up in discussions of what technology to use.
I was recently roped into a discussion of what programming language should be used on a new backend project. There was quite the struggle there.
Some things they didn’t care about:
Experience using the language - They believed they’d pick anything up quickly enough.
Good ecosystem of libraries - As long as some basic things were there, they didn’t mind building the rest. They speculated not much would be necessary.
Learning curve - Everyone had over 5 years experience and experience in multiple paradigms.
With this stuff not being a requirement, I thought we were setup for a wide range of options. Most of the things on their wishlist also didn’t seem hard to fulfil:
Garbage collection - They didn’t want to care about memory management.
Static types with nullability included.
Quickly go from uncompiled code to up and running (fast compilation and startup)
Basic IDE support (syntax highlighting and auto complete)
Given they weren’t very demanding on the compilation speed, I thought a bunch of options were still available. But then, the more interesting requirement came in:
Unit tests in the same file as the tested code - They believe this improves using AI to code.
I can totally relate to this requirement. I’ve felt a lot of joy and been quite productive using AI to write code in my programming language, which does support tests in the same file. But my programming language is not something I can recommend yet and I was also not sure what fits the bill.
I didn’t have anything up my sleeve. After some thinking I arrived at Typescript as maybe the way to go if a new testing framework is created. My curiosity got the best of me and I had to try. They also wanted to use Effect. This is what a hello world endpoint handler file looks like:
import { Effect } from "effect"
import { test } from "../testing/testing";
const handler: () => Effect.Effect<string, Error> = () => {
return Effect.succeed("hello world");
}
test("hello world", (assert) => {
const result = Effect.runSync(handler());
assert.isEqual(result, "hello world");
});
export default handler;
And the funny thing is I didn’t even write that test. I wrote the testing framework (more of a hack than an actual framework, mind you) and AI generated the test for me. I didn’t even write a prompt. It was automatically suggested in the editor.
This was a lot of fun. I wonder what other interesting requirements people have for new projects outside of my bubble.