Read "Code was never the hard part" is an insult to all programmers.
Widely shared on Hacker News and Lobsters — how much of that is fact vs. flattering to our egos as developers is hard to say. We want to feel like we're doing something difficult. Not quite rocket surgery, but by jove, not just anyone can write code!
It also happens to justify our salary.
Central thesis:
All human knowledge work isn't hard. It's just a lot of hard work (plus minimum requirements for working memory and pattern recognition).
All it takes is reading a lot of theory, then practicing it over and over and over again until you develop heuristics, taste, and the judgement to know when to trust them and when to dig deeper instead.
Same as it is for law, for finance, for medicine, and for software engineering.
Over-relying on AI weakens — and will eventually replace — your heuristics, instincts, and taste. And then you turn into a meat puppet.
See: if you're junior, or an actively bad engineer with horrid taste, using AI to replace those things doesn't hurt anyone but you — caps your growth, sure, but for anyone interacting with you, it's a net positive.[1]
If you're actually a good engineer — congratz, you've just removed your entire value proposition, which is being better than the median. The floor has been raised. Over-rely on AI and you've regressed to the median.
But there'll be a day when AI has better taste and judgement than even the best engineer. When that day comes — and it's not looking far off — knowledge work will be in real trouble. It's already starting.
Cold comfort: humans are still more adaptable to new patterns than AI — until the next paradigm shift.
A few other random notes:
If deciding what to build is the hard part, why do so many product managers seem clueless? Why aren't there rigorous 10-step interviews for them? Why aren't they getting paid more than the developers?
If deciding what to build is the hard part, why aren't market researchers, usability experts and—hell, customer success—considered rockstars in a software company? If “understanding the customer” is harder, why are business analysts looked down on as pencil pushers?
Good product managers do get paid more than the developers. When they do, they're called CEOs.
Your average product manager is to a real product manager what a codemonkey junior who does nothing but copy from StackOverflow is to a real engineer.
Also: if we could put CEOs, product managers, and other business decision-makers through rigid 10-step interview processes and get useful results, we totally would. It's just very not possible.
If implementation is easy and finding demand is harder, why are programmers upset when the salespeople promise a new feature to a customer to close the sale? They've found a genuine demand, something people will pay for!
We're not actually upset about the "finding genuine demand" part — can't speak for everyone here, but I'm generally happy when told a feature would make people happier or reach more of them. What icks me is the dishonesty, the buck-passing, the lack of accountability that comes from making promises other people have to fulfill — promises they might not be able to fulfill.
If coding is easy, why doesn't everyone just build ten variations of a thing and see which pans out?
We kinda do that on a societal level: each company builds its own variation of what other companies build, till we've got a hundred variations on a product, and then the best one wins (or rather, the one with the best marketing/legal team — looking at you, Oracle).
P.S. Nitpicks aside, the advice is generic and pretty good.
Understand there's a lot of hype and try to discriminate between hot air and what really works (and to what extent). Also be aware of ever-shifting goalposts: stand back and look at the past year, or five, and assess the velocity of change (technical, economic, societal).
Your role and your responsibilities will be changing. Be willing to invest time and energy into better understanding fields or roles adjacent to yours.
If you're a senior developer, don't just find solace in deepening your expertise. Learn about user experience, customer interviews, or business strategies for the companies in your domain. It will help you gain a better appreciation of all the work done to put a piece of software into users' hands, whether or not you'll actually ever have to do any of those other bits.
If you're just starting or are junior in your role: invest in deepening your understanding of how software works. Understanding pointers, recursion, or memory hierarchy will help you even if you're a JavaScript developer. Understanding network protocols and how HTTP works will be useful even if you're building WordPress plugins. Do leetcode and learn about algorithms and data structures even if you don't need to. Don't be afraid to ask why and how exactly.
Also, yoinking the recommended book list:
- Structure and Interpretation of Computer Programs (PDF)
- Cracking the Coding Interview
- The Mythical Man-Month
- Working Backwards
- Team Topologies
- 7 Powers
- The Soul of a New Machine
- Obviously Awesome
- The Design of Everyday Things
- Don't Make Me Think
- Continuous Discovery Habits
- The Mom Test
-
Assuming your engineering culture doesn't let you waste everyone else's time spamming unreviewed 5k-LoC pull requests. ↩