Hacker News new | ask | show | jobs
by msoad 1173 days ago
Much like the evolving layers of abstraction in technology, the necessity for individuals to master the intricate, underlying layers wanes as time progresses. The article brings to mind the analogy of Assembly programming; while there are undoubtedly experts in this domain whose contributions are indispensable, the majority of programmers can comfortably rely on higher-level abstractions without delving into the complexities of Assembly. As AI continues to advance, general-purpose programming appears to be following a similar trajectory. Individuals have the choice to either become one of the few specialists at that level or to embrace and harness the emerging abstractions, thereby unlocking greater efficiency and innovation in their endeavors. It is crucial to strike a balance, recognizing the importance of both mastery and leveraging AI to optimize our creative potential.
4 comments

> while there are undoubtedly experts in this domain whose contributions are indispensable, the majority of programmers can comfortably rely on higher-level abstractions without delving into the complexities of Assembly.

True. You don't need to be an assembly expert to be a great programmer, but I do think you need to have a solid understanding of how computers work all the way down to the CPU level in order to be a great programmer. And once you have that knowledge, assembly isn't a big hurdle anyway.

I don't think any individual needs to be an assembly expert, but as a community developers still need some people to be assembly experts.

Our systems will rot without people to maintain them, the AI aren't infallable yet.

The greater worry isn't that the general user will let mostly defunct skills rot, it's that we need a path to raise the next generation of experts in these niche skills.

Oh, do not you worry, that path is called SNES emulators and teen crackers reverse engineering new releases' product activation loops. Curious teens are a staple of civilization.
I don’t know anything about assembly and I can’t say I’ve ever thought about it.
You’ve never learned about it in university? It’s still a semi important concept to learn how a compiler is kind of rewriting your code and optimizing things. In rare occasions it can mess things up when you use optimization options. Even in rare iOS and Android development cases and LLVM. Not exactly assembly but similar logic. I think that goes to the original point, if you are just trying to make something? Sure JavaScript is enough, but I don’t think that’s a good mindset to have if you are trying to be an expert in computing/computer science.
I’m a programmer. I’m not a computer scientist. I didn’t study computer science. I agree it’s probably important to computer science.
Sorry I didn’t mean it that way. What I mean to say is that even in cases of iOS and Android, there are edge cases where assembly knowledge does help. While LLVM isn’t exactly assembly it’s similar in logic. It’s not to say “computer science” more so, than it is to say it’s still a decently good topic to at least know and be familiar with when you get the build button on a native app even. Granted these are rare edge cases. It was similar to someone in this thread mentioned street navigation and how we don’t care about it anymore. I do… there will be a time and place in my life that a GPS will not be in my pocket, so it’s still important to familiarize how to physically navigate the world. As we abstract more and more away from our workflows, it’s still a good mentality to familiarize your self with the old tools. It’s why math is still important for programmers ti know! You won’t need a matrix multiplication anytime soon, but it helps if you are suddenly doing graphics and you want to know how something is working (or AI…)
So I’m not trying to be difficult, but can you give an example of how it could help with some sort of iOS task? Because I really don’t know and I’m curious.
Yeah, and you can thank those abstractions that today, we have Microsoft bragging that they got the Teams chat client down to only 9 seconds loading time on a machine with several multi-GHz cores and gigabytes of RAM. But that's all fine I guess, because it's good enough.

Good enough for what? Good enough that people will grudgingly use it because instantly quitting their job over it would be overblown. Their life will only become a little bit worse through it.

I'm frankly scared how AI-created "good enough" software will look.

Teams is probably written in C# right? Are we really sure C# isn’t performant enough for desktop apps? Seems like a rather hot take.

Otherwise what is the non performant abstraction? I think the reality is just that teams is poorly done.

that's the thing: it's not C#, it's chromium+react.

They can't be bothered to write a truly native app for their own platform. Heck, they can't even be bothered to dogfood their in-house react alternatives.

All of that for an app that's used by hundreds of millions of people every day. It's those things that make me think Casey Muratori really is onto something.

Thank you for clarifying, and I recognize that React does lots of extra work because “it’s good enough” but is that really the limiting factor of teams? Slack is built on electron which we can chide for being resource inefficient as well.
I don’t think so. I’m fairly certain it’s edge webview2. A lot of MS tools these days are web related. Which is why they run so poorly.
I think about it in the same terms. We make better and better abstractions which makes it easier and easier to code. Usually with some performance loss that better hardware can cover.

The implication of that is this will have a similar impact as previous abstractions.

But two questions:

1. Does this scale?

2. Is the type of difference between Python and Assembly the same as between Python and AI Codegen?

just makes me want to combine compilers with understanding of LLMs and how chatGPT does what it does to make real next-generation (but really next level) programing languages.

LLMs will make distinctions like functional, dynamic, procedural, ... become obsolete just like all assembly languages are now just assembly, but in fact used to vary by architecture (and even by each architecture's generation/version)

assembly -> C -> something made with a compiler which embeds chatGTP