Hacker News new | ask | show | jobs
by caspper69 2272 days ago
My first actual programming class was on an Intel 8085 kit, and I have to say that hand-assembling on pre-printed carbon sheets was pretty cool. It has served me well in my career to have started at that level.
1 comments

It would serve everyone well to start at that level. I write enterprise CRUD webapps, and learning these things helped me tremendously.

Unfortunately we now have a culture that views this type of knowledge acquisition as "gatekeeping"

Most universities and technical schools of enough quality do have Assembly programming classes, even if it is a kind of light introduction to the subject.
How so? Why would that be gatekeeping?
Not OP but I can venture a suggestion. There are a lot of people who believe that programming computers is fundamentally simple, and that programmers really only need to know about 10% or so of the things that programmers are traditionally taught. These are the people who will insist that things like algorithms and data structures are meaningless for most programming tasks: as long as you remember all of the Javascript keywords, you've got as much education as you need. So if you or I come along and say "you'll be a better programmer in any language if you understand assembler", somebody else will invariably accuse you of perpetuating an elitist system that prioritizes meaningless theory over actual practice (i.e. "gatekeeping").
My former business partner is in the boat you describe. He learns the bare minimum needed to do the task at hand and seems pleased with that. He still has the joy of discovery, but it's more about what he can do with the tech than any appreciation of the formalism. He's happily working as an indie game coder, and while he doesn't exactly have FU money, he's for the most part cleared the first milestone of making rent for the past few years.

I'm in the opposite boat. I've learned so much about the theory of computing that I almost can't program anymore because most of what we do today feels like a waste of time to me. It's all convention and application now, with so many barriers to entry that I feel like 95% of what I do on any given day is setup. The dreams I had for how computing might evolve and lead us to the endgame of AGI feel more distant to me now than ever before. It will likely happen through the biggest players, using whatever proprietary tech they come up with, and leave garage hackers in the dust. I don't have a good feeling about whatever artificial agents arise from that.

So there is a lot of survivor bias in programming today. I feel like Obi-Wan Kenobi, beat down by the industry, marooned on some distant planet. Meanwhile the youth subscribe to empire quickly, because all they see is glorious rewards. Seeing haggard old graybeards like me fall from such early potential makes them rightfully skeptical of the gatekeeping you describe, the adherence to the old religion of computer science.

Or I'm just full of it. I don't even know anymore. I wish I was part of something bigger again.

Its a strange field that doesn't have clear boundaries and constantly changes.

I keep getting back in my thoughts to an old carpenter who was making a truly wonderful kitchen in a strange corner of an old building. Non of the walls, ceiling or floor around it were straight and it had tons of weird niches. I ask him how he could attack such a problem with such confidence. I would have to spend days pulling my hairs just making a drawing. He said, carpentry is roughly 300 methods of which you only need 120 to 140 to do any job. The rest is just tricks that you don't really need but they are impressive to those who know the problem.

I keep thinking of that in programing context for some reason. Nowadays you just order a plug and play kitchen that fits exactly, a novice can ikea it into place, everything works and it looks fantastic. Programming will get there one day. Until it does it will just look really weird to the old carpenter. So you grind the wood down to Particle board, you glue plastic on it that looks like wood then it gets moist and you replace the entire kitchen? .....!

Yup. I feels you.

A few years into my dev career, I adapted to make maintainable stuff. Because I learned that in 6 months I'd have to fix my own bugs.

Now it seems most code is throwaway, one-off, write only.

I haven't been able to "let it go". I still obsess over making my code correct. No one else seems to care. They get rewarded for fixing their own bugs ("velocity!") which I mostly avoid. So my KPIs look terrible by comparison.

Things get better. Or, they did for me when I retired earlier this year :-)
I think it's largely people talking past each other. One group claims that deeper understanding is useful and the other group says "no way, you don't need deeper understanding to get into (e.g., web) dev!". Being useful doesn't mean "necessary for an entry level position in the highest-level subdomains of computing".
> necessary for an entry level position

I still can't figure out how programming computers (the most complex task a human can undertake) managed to become singled out as the only profession in the history of humanity that is simultaneously assumed by so many to be something you need only a cursory understanding of to be proficient at.

Yeah the claim that it is "the most complex task a human can undertake" is a little.... iffy. I mean, most of the times its really not. Most of programming is exactly as complex as most of civil engineering or most of plumbing. Most of a sufficiently mature field is usually not that complex at all because the most complex stuff is abstracted out. My civil engineering friends don't design bridges from scratch and my plumber doesn't threads the pipes themselves. They rely on industry standards which give them enough abstraction to be productive.

Now this is not to say on the frontiers of it its not very complicated. But so is every other field. Ever thought about plumbing a space station? Or designing a rapid deploy bridge? You can't compare frontiers of one field with the middle of the other.

You don't need to be proficient for an entry level position by definition. Further, proficiency at programming is only tenuously related to an immersive knowledge of computer science topics. Further still, proficiency at software engineering is more about soft skills like writing readable code, managing projects, and collaborating with teams to ship large units of software. Having lots of knowledge of low level components or math is icing on the cake for the overwhelming majority of applications (much to my chagrin--I really like the lower levels and the technical nitty-gritty).
the only profession in the history of humanity that is simultaneously assumed by so many to be something you need only a cursory understanding of to be proficient at.

This can be traced to the 1970s.

Computer Science is only half of a field. Semi-arbitrarily splitting it off from EE harmed both fields. Instead of one complex field, there are two very shallow fields.

I still can't figure out how programming computers (the most complex task a human can undertake)

Neuroscience, making pizza (or most cooking, really), marketing, high-speed motorsport, psychology, most weapons development (outside of guns, which are fundamentally simple), writing mass-market books and drug development all seem to have programming beat in terms of complexity for what ninety-nine percent of professional programmers do.

Jobs worded it well in an interview at one point. Something along the lines of, "I knew there was a market for people who would never be able to design hardware or put a kit together but who still would love to write their own software," in the context of why the Apple II was successful. It works just as well to show why the field is the way it is.

Most computer programmers don't have a clue how the hardware works. That used to be an essential part of it. It's not any longer. The bar has gotten lower and lower, and that's not necessarily a bad thing. Python can be learned in an hour, so why not? They can still make useful things, so there's no problem with it.

Just like in any other field, the bar for "proficient" is low compared to average, but the bar for "exceptional" is high.

It's entirely in the phrasing. "It would be beneficial to learn how the machine actually works" versus "you're not a real programmer unless ..."

Bootcamps demonstrate that not knowing assembly is not a barrier to earning a decent software engineer salary.

Maybe that is so, because teaching people assembly allows them to pull magic tricks on companies. An example I can think is Apple banning all dynamic code generation and execution on ios apps.
Search on twitter for "computer science" and "gatekeeping" and ask all those people, I dunno. I gave up trying to reason with unreasonable people a long time ago.