Hacker News new | ask | show | jobs
by yulker 18 days ago
How do you justify it against all the other abstractions you've accepted and no longer know how to do (or never learned in the first place). Why are the current set of manual steps the right level to be permanently aware of?
8 comments

IMO, you are a better engineer if you understand how the abstraction works, at any layer of abstraction. You need to pick the point of diminishing returns for yourself, but I think it's pretty uncontroversial to say a developer that understands how a compiler works, and will dig around in a hex editor from time to time will be more knowledgeable and more likely to notice issues sooner than a developer that assumes the compiler is a magic hole in which to throw source code into and perfect executables pop out every time.

"But what about what runs the compiler! What about what runs the OS! What about the physics involved in electron transfer!" Diminishing returns I guess? No one's ever said you needed to understand everything, but understanding or at least being aware of a few layers under you seems to have been common sense forever. Taking one abstraction layer step up doesn't really change that.

Yea you're completely correct, any computer science degree worth it's salt will cover computer architecture, networks, basic maths, etc. Do I remember every little detail about how transistors,the memory bus, or every network topology works? nah of course not, but does having a reasonable overview of how it all works under hood help inform system design when you're tackling the hard problems, performance, reliability, security,etc? Knowledge is power, so more knowledge can never be a bad thing.
AI prompts aren't a new abstraction layer, it's automating the same abstraction layer, only with less understanding

It would be like saying being an engineering manager is a different abstraction layer. It's not. It's an entirely different domain, managing people and resources instead of programming machines directly

A farmer producing meat is a better farmer than me even if I hire my own farmer.

If we invent a meta-farmer profession (for those who hired a farmer) I will be great meta-farmer, but still suck as a farmer

But I don't want farmers, I want meat
I don't think that's the point. The point is that if you outsource thinking to a machine, you will lose your ability to think and reason on your own, and overtime become a worse engineer. Maybe the software ai writes will be fine, idk... But eventually, you will be an objectively worse engineer than someone that doesn't need a machine to think and write for them.
Sure you don’t need a farmer factory ?
Well clearly not, but you might need an AbstractBeanFarmerFactoryAbstractFactory.
Heard a quote I liked today.

“In order to be effective working at any layer of abstraction you must have in-depth knowledge of the layer below where you’re at”.

To be the most effective at AI assisted engineering (if treated as an abstraction layer) you need to understand how code works, behaves, architectures etc. and what well performing, well built things look like. Doesn’t necessarily mean you have to know everything like you would pre-AI, but enough to be effective.

Exactly, automation of manual tasks, doesn't mean it will wipe your knowledge or your ability to keep reviewing commits, writing comments on PRs, etc.
Super useful succinct crystallization!
Because the abstractions of old still required you to read man pages and learn stuff.

And manual steps are good. At least you know what is happening.

The old Unix philosophy. Simple tools that combined become powerful.

If you use _anything_ in production, you better make sure you understand the stack.

The best engineers hand-edit .git

Edit: But actually, one of my favorite Git explainers is https://wildlyinaccurate.com/a-hackers-guide-to-git/

I write all my code in assembly on paper then manually translate into opcodes
> I write all my code in assembly on paper then manually translate into opcodes

LOL! There was actually a time (way back when dinosaurs still roamed the Earth) when that was actually how it was done. ;)

(I remember as a kid having to look-up hexadecimal 6502 CPU opcodes on a chart then type in a huge list of hex into the computer to write "machine code" if you wanted anything faster and more powerful than BASIC.)

That's exactly what I did when I was writing code in a paper notebook around 1995. Mainly because I didn't have a computer at home, and I wanted to program more than anything else in the world.
My dad worked with punched cards.
Abstractions are convenience. They’re not free, there is a cost to any work you ask the computer to do. Just staying at the surface level and never understanding what’s under the top level is why software is slow and bloated today. You’re supposed to move beyond the abstraction, understand what you need underneath and use what you really want to do the task.

No wonder we boot up entire browser engines to write simple text editors. But hey, we gotta be first to market to get that VC money, right?

I disagree.

Abstractions are not a convenience, they're a cognitive necessity, compressing large aspects of the problem space into easy to not think about blocks, allowing humans, with their limited working memory, to reason about larger problems. The only reason a seasoned developer can think at a high/system level is because of the abstractions/compressions they've formed in their heads.

Technology exists to make it so we don't have to think about/put time into low level things, so we can do more interesting things instead. Not thinking about banal things is the foundation of progress.

AI seems to be the give us an abstraction I've been waiting for: a method to write code at the level of libraries , with libraries working with/adapting to other libraries.

There are plenty of people who understand the stack and ship actually fast software. This might be a skill issue that you’re choosing to frame as a “best practice”, because you do not want to put in the work.

Our end users are who should benefit. You’re the pilot in the seat who doesn’t know what the throttle is and you’re telling the passenger it’s the plane’s fault it’s slow.

> that you’re choosing to frame as a “best practice”,

I don't follow.

> because you do not want to put in the work.

Yes, just as nobody wants to type opcodes, or write their own http clients, or etc. It's why most of us use higher level languages. Leave the solved things solved, and work on actually interesting/new things! That doesn't mean not understanding, it just means not wasting time on the same boilerplate/code duplicated by millions of developers.

If you think software performance is a solved problem today, there is nothing more I have to say.

Consumer software is slower than ever. And only getting worse.

Please reread this comment thread. I never spoke to software performance being solved.
I think it's a good idea to learn how to work through those levels of abstraction, even if only academically, since it yields a lot of insight into why our current abstraction level is the way it is. I don't personally use git CLI on a day to day basis (I use a gasp GUI) but I know what a rebase is and how to recover from a variety of bad states using CLI alone during an emergency. Being aware of how commits actually works lets me know when I can rebase, squash and manipulate history in a safe manner and when such manipulations are likely to cause headaches to those around me.

The window of what steps technical people should understand in our stack of abstraction is always changing - there is no permanent window we should hold as sacred (outside of a cursory knowledge of the lowest of low levels - being passingly familiar with how machine code works is valuable to everyone) but the levels we should be aware of should exceed the levels that we casually interact with - we should at least be rather comfortable with the level one deeper than the one we often interact with.

Manual knowledge of git to get out of tricky situations will be as passe as using log book for multiplication. It's just not required anymore.
Who will get you out of such a tricky situation?
Any model, including inexpensive ones. It's not a hard problem.