I've found a bit less fun, but similar, way to present for the CLI. `curl -L tinthe.dev` is HTML, don't see why to mess with the default.
But, I did put in `<link rel="alternate" type="text/markdown" href="/home.md" title="...">` as a hint for using `Accept: text/markdown` on the same URL. Or going to .md versions of pages. Did it in a "sprint" of optimizing for other devices, screen readers, and LLMs. It is supported on the full page, posts included. Same point as the draft preview, less color.
Gets you 95% of the way there. The agents can take the .md and skip the layout. And I think `curl -LH "Accept: text/markdown" tinthe.dev` is pretty readable, too.
Yeah, I love this. We can't manage what we don't measure, and adjusting the mesurement to be on the abstract syntax level removes an entire layer of "mess" that comes from comments and formatting.
I'll bookmark it and probably adjust the measurement methods for future review purposes. I've often found my LLM workflows to produce inane and overly complex code, and allowing me to see a single figure will allow me to more easily eval generated code.
I'd love to hear people's lived experience, though. I think heuristics in this space still allow for a lot of optimizations of code generation and pipelining.
Software Engineering is in this weird limbo where a whole subsection of the industry thinks it can be a blue-collar "I just code" type of contributor... those types are going to slowly be eliminated.
But for the majority of us, the job always was more involved than just code. And that's white-collar work, through and through.
Civil engineers never could scale to pouring concrete themselves, thus the blue/white collar split. Software doesn't have that problem.
> But for the majority of us, the job always was more involved than just code. And that's white-collar work, through and through.
Isn't that sentiment pretty much true for almost everything, though? If I hire someone to relocate my water heater, there's a lot more that goes into that besides laying pipes. The pipes are the easy part.
The more senior I got the more I realized how much discovery play a big role in software engineering, one has to see the whole picture, discover the why behind th e whys tasks not only the hows.
I feel a lot of these tools are barking up the wrong tree. Solving problems that are just symptoms of a deeper root cause. Index because my codebase is too big to grep. Index to paraphrase hard_decline via card retries. Reduce tool calling to save my agent YOLO search loops. etc. etc.
It feels like trying to overcome bad codebase hygiene by throwing more tools at it, and wallpapering the mold over. I've found that codebases left entirely to LLMs suffer from this gravely, but with even a bit of effort - you'll get outsized returns. Don't let the agent smosh up everything into a giant ball of code. Separate concerns, build services, do the architecture step of the software design with a bit more care than vibe coding.
A bit of a rant, yeah, but I don't see why tools like this exist (and ask you to curl a script into bash, no less). You're doing stuff a bit wrong if grepping is the bottleneck.
I don't think most people have control of the code base they're required to work in.
I too have converted a code base I made to typescript and peppered it with AI docs to make visibility easier.
I've converted i18n files to a k:v[] arrays per language because the AI is shit at working with objects. The ability now for it to just find/insert additional languages is well improved.
There definitely are shapes in code that the AI will have trouble with.
But again, I don't think most people have control over the code they maintain.
I mostly feel the same, but it'd be really interesting to measure it, I think. Like, how many tokens did it cost in a codebase of quality Q1 vs one of quality Q2 to `grep` vs some semantic search. And did you find the correct `DuplicateSymbolName` in the correct namespace?
>I feel a lot of these tools are barking up the wrong tree.
Its the right tree, but not the right branch. RAG systems are the next big thing. You can take a small model running locally, feed it a bunch of context and it will be able to generate the correct answer on par with a larger model with no context.
Context doesn't have to be documents/code either, it can be LLM generated context that guides next iterations of inference on how to do things.
I don't like AI coding, but I can't say it's not useful. Most of the arguments in this article can be disarmed by taking the abstraction "one step up". LLM generated modules and software, microservices, whatever your level of abstraction... now need to be composited together. You go and deal with higher order problems, factories, generation, etc.
Is it a way to develop critical bits of code, depths of your business logic? Absolutely not. Can it solve a lot of boilerplate and support logic? Absolutely yes.
Seeing "AI Companies as Bad Actors"... can't fully disagree there. There's far too many far too dodgy things about these businesses, and I trust them as far as I can audit them (not very far). And the missing argument's the cognitive decline of using these things to think for us. I try to keep myself sharp by still manually doing a fair amount of things in my life. I refuse to automate _everything_ - especially the stuff I do for fun. Having an LLM manage hobby-adjacent stuff is a quick trip to burnout land, especially once fixing the thing becomes "the hobby"... and it does.
> I try to keep myself sharp by still manually doing a fair amount of things in my life.
This is an absolute larp. No doubt you use a washing machine and not a washboard. Hand coding in a few years will be like using the washboard when there's a washing machine.
Like using a calculator. I use one, but I still use paper math too, and calculate manageable sums/multiplications in my head. I'd feel dull otherwise.
GPS. I use one, but I still pay attention to the route and keep a sense of direction. “Why bother knowing where you are when the machine can tell you?” isn't really an argument for outsourcing your own brain.
Or more generally: it’s perhaps not the best idea to make the entirety of your reasoning ability dependant on something external to you. Doubly so if that’s a tool with a subscription model.
The reason I do maths in my head is that the interface to anything else is still not good enough, or at least my handling of it isn't. Looking and handling a phone takes me out of the situation in a way that feels worse than doing the thing in my head.
If it didn't, if the neural computer interface was real and seamless, I would use that for sure. Come to think of it, I probably wouldn't even notice.
Washing machine suppliers don't charge per wash, per month nor are at the risk of disappearing off the planet due to trillions of dollars of fraudulent circular investment. Thus I don't think I need to worry about the washboard at the moment.
> Washing machine suppliers don't charge per wash, per month
Even ignoring the ongoing electricity and maintenance costs of using a washing machine, plenty of people around the country choose every week to use a pay per wash laundromat rather than a bucket and a washboard. Heck I used to rent a washer and dryer in an apartment, paying per month for the convenience of not using the pay per wash on site laundromat.
> This is an absolute larp. No doubt you use a washing machine and not a washboard. Hand coding in a few years will be like using the washboard when there's a washing machine.
Stop with these terrible comparisons. Code is (mostly) expected to keep working and be maintainable for lots of time following its inception. If your clothes are clean and not destroyed, the task is complete.
The man is surrounded by technologys of convenience.... Is he manually communicating or using a computer and the internet? How does he get everywhere? What about Aircon, heating? I'm guessing he has a fridge, oven, telephone, various white goods. As he doesn't live like the Amish, how does he get his gas, water, electricity... pull then from the ground himself?
So yes, he's larping if he thinks not using an llm is the humble life
I can't make any sense of what you're saying. The only parse that comes out is "if you enjoy technological conveniences in life you must be larping if you think using LLMs for a lot of things is a bad idea".
When you hand code you build an incremental understanding of how the code works. This can be very valuable in cases where precision is needed and change is costly.
The skill of using LLMs for code generation is in recognising these scenarios; knowing when to use it and when to not.
Using a washing machine and a washboard have the same end goal. "I need to wash these clothes, this is a tool that I can use to do that".
If your end goal is "get this piece of software out the door as quickly as possible" then yea - drop the ticket into Jira, that's what the business probably wants anyway.
If you want to garner a deeper understanding of a system, exercise your critical thinking / creative problem solving abilities, improve pattern recognition and memorization abilities... You probably aren't going to get that from "fix ticket-1485, no mistakes"
To me, writing code manually really digs into those "critical thinking skills" at a low level - logic bugs, tracing complex code paths, hell even troubleshooting a syntax issue exercises pattern recognition skills.
It's the same reason I don't use LLMs for communicating with other humans. I think that understanding LLM output, crafting a sentence, highlighting the critical points, and using proper terminology in my OWN writing style requires good language skills and keeps me sharp.
To each their own, but it takes 15-20 minutes a day to rock a leetcode problem and is a great way to get the brain moving.
Not sure I get the "you're a dinosaur" approach. Let people handcode if they want, if they're not performing at work they will be put on PIP or fired, or we'll all be out of a job because AI is so good.
you can practice "critical thinking" at any levels. I bet you don't practice "critical thinking" in ASM or raw binary.
So instead of asking the clanker "fix ticket 1734", you can ask it to write the function that input x and output y, in that file. You still, in some way, "practice critical thinking", while not manually writing code.
Meal? Washing machine wash clothes, dishwashers wash dishes, so something may have been lost in translation.
And even so, the energy efficiency of modern dishwashers with turbidity sensors is very good, and actually can be more efficient than hand-washing, especially if that requires multiple bowls full of water.
Obviously there are limits, but if you stack during the day and stick it on overnight, then it's pretty efficient, even for a single person.
It was, a misunderstandment on my part, however if someone needs multiple bowls full of water for a single person meal, I wonder what kind of exquisite cuisine they are doing for so many pans, plates and cutlery.
Regardless of how efficient a dishwasher might be.
Both views feel extreme to me. When I was single, sometimes I used the dishwasher, and sometimes I washed by hand. In either case I wasn't wasting water, because I didn't run the dishwasher until it was full, which was roughly biweekly.
When washing by hand, I did what you imply you do, which is use much, much less than bowlfulls of water for my meal. I get what parent is saying though, because of the numerous roommates I'd had while single, some of them would use gallons of water to wash a single meals worth of dishes, i.e. the plate, cutlery, and maybe a cup. Much more if they had cooked their meal instead of microwaved it
Modern dishwasher machines are ridiculously efficient. On a normal automatic cycle, my machine will use between 3.4-6.4 gallons of water total. An average kitchen faucet is between 1.5-1.8 gallons / minute based on some spot checking of specs online. Which means it only takes running your faucet for 2-3 minutes before you're into the low side of the washing machine and just 4.5 minutes before you're using more than a fully loaded cycle in the washing machine would use. I recently had a month where we couldn't use the dishwasher and washed by hand every night. Our water usage for the month was noticeably higher for that month than it has been in any month before or since. It's really kind of crazy how good a modern dishwasher is.
I think this can be extended. Wasting time playing music or drawing or writing by hand would also be like using the washboard when there's a washing machine.
There is so many things that AIs can do just as well and much faster. Not just coding but all other kinds of things in art and craft. Like why sculpt anything by hand when you can just get AI do model and then 3d print it.
> Like why sculpt anything by hand when you can just get AI do model and then 3d print it.
Recreation is different, you're doing it for the fun of it, to learn.
This is a common misdirection. Nobody is charting with an AI song. Nobody cares about AI pop music. People are however using ai for jingles, interstitials, elevator music etc because nobody cares if some failed musician has poured his heart and soul into a theme tune for the menu of an educational dvd, they just want the end product... Nobody cares if formulaic crap is soulless, because it already was.
Washing by hand, both dishes and clothes, as well as drying them "old school" are all skills I found very practical to keep even if rarely used (hand washing dishes is pretty common when for me though if I only have one or two items...)
Not really a good comparison, sometimes I still quickly use the washboard than load up the washing machine when all is needed is a quick rinse, or when the washing machine is running and I don't want to leave a mess.
I get what you're going for, but it's not a good comparison.
Using Jev for SRE seems like such a backwards prospect. You don't need split-second velocity, you don't need costs savings. What you DO need and Jev provides not at all - is auditability. You want to know WHY and HOW the calls were made, as with humans so with AI. Adding a black box in there seems incredibly misguided, no?
The same way I'd not trust an SRE when they've "got a feeling", I don't intend to start trusting Jev. The audit of process doesn't allow audit of reasoning.
Auditability does not come from an LLM or Jev but from the human operator themselves. Our Jev-driven diagnosis pipeline here is in the same role as all the AI SRE technologies on the market: they are tools to the human operator. If the SRE simply trusts all the AI tools, then I also wouldn't trust them just as when "they've 'got a feeling'".
I had the same feeling. it seems like jev is a classifier that's smarter than bag of words but I would not think it would do well to ask it to judge code fix effectiveness.
Wonderful article. Reminds me of my experience scuba diving in Croatia. My group and I were doing a seabed waste-collection dive, and part of it was an obligatory training on ordnance. The sea there has had a fair few wars and conflicts.
I remember being astounded by how the water "amplifies" the explosions - so while a hand grenade blast is very dangerous on the surface, under the sea it becomes far more horrific prospect, due to the water transferring the blast more efficiently. Nerve wracking stuff, when you're thinking about diving down there - imagining that a bomb dozens of meters away could pulverize you.
Still pretty rare, thankfully. I applaud the diver bomb disposal squads - some of the most dangerous work there is.
> I remember being astounded by how the water "amplifies" the explosions - so while a hand grenade blast is very dangerous on the surface, under the sea it becomes far more horrific prospect, due to the water transferring the blast more efficiently.
Curiously, it is exactly the opposite in many video games. In video games water often protects you from the explosion. I wonder, where did this trope came from...
Roughly speaking, air/liquid interfaces are excellent protection from explosions, and more are better.
The torpedo defense systems in the most advanced WWII battleships & carriers were about 5 layers thick: sea (may contain enemy mines & torpedoes) | empty compartment (air gap) | ballast/fuel tank | air gap | ballast/fuel tank | yet another air gap | important stuff (engine rooms, powder magazines, whatever)
And to be reasonably effective, each air & fluid layer needs a certain thickness - which scales roughly with the size of the explosive charge.
It is more correct to say that air because it compresses dissipates explosions. Water doesn't amplify them, but it is still going to be a lot worse than air.
My guess is water protects from nuclear radiation and they get confused. Anyone else want to guess where the trope came from?
Looks pretty cool, although I'm not sure I see the advantage over a skill using something like a private git repo / file store / server?
So far, I've used that, a UNIX-socket inspired approach to push/pull with a remote git (hosted on my server) that the branches/files can be tossed to, and pulled via other agent. Skill instructs them to make a copy-paste ready instruction for the other prompt.
Sounds like your setup achieves basically the same thing as Jotbus. If you've already got repo/server/skills wired up for this, Jotbus probably wouldn't buy you much.
I had basically 2 motivations for building it:
- I was frequently spinning up places to dump stuff for people/agents. I wanted to make it simple across environments, and have no infra or glue to manage.
- a lot of what I pass around is mid-work/transient - logs, partial implementations, screenshots, etc. Not ready for a commit, don't necessarily want it in git history. Wanted to make it easy to hand off and keep going.
So it's not exactly a novel primitive, it's just a tool to make it quicker/easier.
Software engineer / engineering lead. I've run teams (Kiwi, ~20, payments and refunds) and I've been the person who owns the hard system - NBA real-time stats on Kafka + Flink, Semgrep Series B public API auth and RBAC. Looking for freelance, contract, or a full-time seat where I can own a surface - not a backlog.
Location: Brno, EU (UTC+1)
Remote: Yes, 100%. On-site travel possible.
Willing to relocate: No
Technologies: Python, TypeScript, Go, PostgreSQL, Redis, Kafka, Flink, ClickHouse, AWS (Lambda, Cognito), Docker, CI/CD. Flexible on the rest.
Résumé/CV: https://www.tinthe.dev/
Email: tinmarkoviccs (at) gmail.com
Comfortable across backend and the data layer. Frontend when it serves the product (TypeScript / React), not as a specialty. I use LLMs. I don't outsource the thinking to them. If the product grew faster than the architecture, that's the job.
Not a cog-in-the-machine hire. Happy to start on a scoped piece of work if you'd rather test that than interview.
Software engineer / engineering lead. I've run teams (Kiwi, ~20, payments and refunds) and I've been the person who owns the hard system - NBA real-time stats on Kafka + Flink, Semgrep Series B public API auth and RBAC. Looking for freelance, contract, or a full-time seat where I can own a surface - not a backlog.
Location: Brno, EU (UTC+1)
Remote: Yes, 100%. On-site travel possible.
Willing to relocate: No
Technologies: Python, TypeScript, Go, PostgreSQL, Redis, Kafka, Flink, ClickHouse, AWS (Lambda, Cognito), Docker, CI/CD. Flexible on the rest.
Résumé/CV: https://www.tinthe.dev/
Email: tinmarkoviccs (at) gmail.com
Comfortable across backend and the data layer. Frontend when it serves the product (TypeScript / React), not as a specialty. I use LLMs. I don't outsource the thinking to them. If the product grew faster than the architecture, that's the job.
Not a cog-in-the-machine hire. Happy to start on a scoped piece of work if you'd rather test that than interview.
But, I did put in `<link rel="alternate" type="text/markdown" href="/home.md" title="...">` as a hint for using `Accept: text/markdown` on the same URL. Or going to .md versions of pages. Did it in a "sprint" of optimizing for other devices, screen readers, and LLMs. It is supported on the full page, posts included. Same point as the draft preview, less color.
Gets you 95% of the way there. The agents can take the .md and skip the layout. And I think `curl -LH "Accept: text/markdown" tinthe.dev` is pretty readable, too.