> The most underrated skill to learn as an engineer is how to document. Fuck, someone please teach me how to write good documentation. Seriously, if there’s any recommendations, I’d seriously pay for a course (like probably a lot of money, maybe 1k for a course if it guaranteed that I could write good docs.)
Good docs are docs that make it easy to implement the next feature.
From an AI perspective, it's my observation that LLMs often write code with lower quantity / quality docs. At the same time, they are reasonably good at synthesizing / inferring meaning from code that lacks good docs. They often do so internally by forming a chain of thought / reasoning around how the code works. The docs that should be written as part of the code are probably the same things that an LLM would reasonably come to by spending tokens when modifying that code. I believe that this should be trained into model so that future LLM work starts with not having to build up context.
In the absence of that being built in, something I've been experimenting a little with is tuning what I want to see in docs that actually help source control / development. Currently that's at https://github.com/joshka/skills/tree/main/doc-steward - still needs a bunch of work, but it's generally better than nothing. YMMV
> Algorithms and data strictures are important — to a point. I don’t see pharmacist interviews test trivia about organic chemistry. There’s something fucked with our industry’s interview process.
Pharmacists have to get a special degree before they can even get an interview, and I've heard that the education is heavy on organic chemistry. Then you get a job as a cashier selling pills.
> Hacker news and r/programming is only good to get general ideas and keep up-to-date. The comments are almost worthless.
You got me.
> Once, someone asked me who I looked up to and I said Conan O’Brien [...]
He wrote for SNL and studied literature at Harvard, so there's probably plenty going on up there.
> on his last show on the Tonight Show, he told his audience to be kind and work hard
Conan really handled that disaster with tremendous grace and it paid immediate dividends. I can’t really think of a similar situation in popular culture. It is a good reminder of how to handle oneself especially during turmoil.
If there's any 20-somethings here that make 6 figures, listen carefully:
1. Max out your 401k, and invest all of it in a target date retirement fund. (Some companies are douches and will assign you mostly their own stock, which when it tanks, there goes your retirement... so check your allocation)
2. Get an HSA and max that out. Invest it all in a target date retirement fund. Do not use any of it, pay for medical expenses with cash and save your receipts. Get reimbursed for the receipts when you retire.
3. Contribute to an IRA and max it out (or backdoor roth when you make enough that that's necessary). Invest it all in a target date retirement fund.
4. Keep 6-12 months of living expenses in a high yield savings account.
If you start when you're 23, and you make $100k/yr, you can retire at 45. That may sound very old right now, and you might think, I'll just save later. But consider that when you turn 45, you may realize you have 20 more years of this shit job before you can retire.
Good advice on saving HSA reimbursements until later. Also, after 65 there's no penalty for withdrawing from your HSA; its just taxed at regular income at that point.
Even with this strategy, you're not retiring at 45 unless you are frugal, have cheap hobbies, and never have kids or a non-working spouse. Also take care that you don't have any parents, siblings, or extended family that come to rely on you. Also don't forget expect to live anywhere even remotely expensive, unless you like camping.
"If you’re not sure what you want to do, just do Java. It’s a shitty programming language that’s good at almost everything."
- I agree, 100%.
And here's a take that a lot of the folks will disagree, and categorically state that these both belong to two entirely different domains: "Rust, is the evolution of Java. Not Kotlin, not Scala, not clojure, but, Rust".
The context dependency injection is so so so good. Once we switched over to json & Jax-rs, it made such a great simple direct backend. Good throughput. Just, a bit high memory.
This genuinely looks like that I wrote it...until I saw that LISP line, definitely not me. But do agree with a lot of items in the list, and I happen to be a DE, too.
I am a big fan of learning LISP, at least once. Going through SICP after more than a decade of writing code for a living was probably the single best thing I did to deepen my understanding of a lot of compsci concepts, data structures, and how to think about software. For me, at least, it was very much a seeing the matrix for the first time kind of moment. My LISP use has quickly declined, but I've dabbled in dozens of programming languages since then, and I do attribute not feeling lost to that experience.
Lost me at dynamic languages. Don't build anything of any significance in dynamic languages! ;)
Some good points. Laughed at TDD is a cult. I mean a lot of software orgs/cultures are cultish (Agile, Scrum, whatnot). At work I often feel I'm part of a cult.
On the contrary, I find "The older I get, the more I appreciate dynamic languages. Fuck, I said it. Fight me." is exactly my sentiment too, with a caveat. I really like gradual typing, like python has. And not like ruby has (where it's either RBS files and it's tucked away, or it's sorbet and it's weird).
The worst code base I had to work in by far was a Python code base. Extremely difficult to refactor. Many bugs that were completely avoidable with static typing. I think maybe more modern Python is a little bit better but wouldn't be my choice for large projects. It's not just about correctness. It's also about performance. That code was so slow and that impacted our business.
One rebuttal to that is that with the benefit of hindsight, to a first approximation zero percent of the code I've written in my career turned out to be "of any significance" really.
Same. That line about "your legacy is your family and friends" hit hard.
I've been coding professionally for >30 years. I don't think any of my code has survived 5 years in production.
I don't think code quality affected that at all - I know the really, really, shitty code I wrote when learning OOP in the 90's survived for a looong time, while the amazing code I wrote for a startup 2018-2021 died with it.
I haven't doing this forever (only 10+ years) but surprisingly I think a majority of what I've written is still running. Probably a fair bit will continue to run for a while yet too I think (again, surprising from CRUD web apps).
I'd guess, on average, code I've written has a half-life of maybe 3 or 4 years. There's pretty much none of my code (with a few surprising exceptions) that's still been running or in production anywhere for more than 8 or 10 years.
At the time, a lot of it felt "important" and "significant". And some of it probably was at the time, to the businesses I wrote it for. But whether I sweated blood and tears to craft the most elegant and efficient software I was capable of, or I phoned it in and just copy/pasted Stack Overflow answers together until I met some interpretations of a requirement to be able to leave the office on time - really made no difference.
I've been pondering lately, thinking about GenAI and vibe coding, with the very real risk of creating completely unmaintainable codebases - whether that matters, if the code is likely to be retired or rewritten in 3-4 years anyway? My current gig is on to the 4th rewrite of it's web/mobile app backend platform in 15 years, which started out as a Groovy on Grails app, which got rewritten in Java, then rewritten again in Java, and now it's being rewritten in Python. Each rewrite had fairly good reasons at the time, but a huge amount of code here gets thrown away every 4 years or so - which looking back makes me seriously question whether any of it was "of any significance". To be honest, the 2026 Python code really isn't doing anything notably different or more complex than the Perl and JavaScript code I was writing in 1996 - web work is CRUD apps all the way down.
TDD is a cult. But knowing your pre-conditions an post-conditions for your isolated parts of your code is important. I think all your AI codegen will work better with this.
The entire AI ball of wax is built on python (dynamically typed) - or at least a large part of it. It probably needs to move to rust to save on power and compute cost.
> But knowing your pre-conditions an post-conditions for your isolated parts of your code is important.
Design-by-Contract[0] is a formalization of this concept and well worth considering when working in code using mutable types. In addition to pre/post conditions, DbC also reifies class invariants (which transcend method definitions).
A lot of startups are cults. Tesla maybe the final form of a culted startup where the stock owners don't care about anything anymore.
That said, the people who change companies aren't the ones that believe that management ever had the best ideas, or are able to push back on the cult thinking with clarity. Unfortunately, though, it's not necessarily evidence that wins arguments, it's charisma, which is how the cult is started in the first place.
"HR" does not set your professional obligations. If you need to be drunk to talk this honestly, you are not a "senior" nor a mentor, but an incipient alcoholic and a coward.
Then again, this person is obviously also lying to claim the engineer title - sit down, "data science!" You're only even here because Product prefers being lied to - so that really sets an ironically honest baseline on how seriously anyone should be taking any of this farrago.
Good docs are docs that make it easy to implement the next feature.
From an AI perspective, it's my observation that LLMs often write code with lower quantity / quality docs. At the same time, they are reasonably good at synthesizing / inferring meaning from code that lacks good docs. They often do so internally by forming a chain of thought / reasoning around how the code works. The docs that should be written as part of the code are probably the same things that an LLM would reasonably come to by spending tokens when modifying that code. I believe that this should be trained into model so that future LLM work starts with not having to build up context.
In the absence of that being built in, something I've been experimenting a little with is tuning what I want to see in docs that actually help source control / development. Currently that's at https://github.com/joshka/skills/tree/main/doc-steward - still needs a bunch of work, but it's generally better than nothing. YMMV
Drunk Post: Things I've Learned as a Sr Engineer - https://news.ycombinator.com/item?id=27333260 - May 2021 (494 comments)
https://www.reddit.com/r/ExperiencedDevs/comments/nmodyl/dru...
> He fire me? I'll just pick up a new job in 2 weeks.
And... yeah... the reddit post is from 5 years ago when the job market was very, very different.
Pharmacists have to get a special degree before they can even get an interview, and I've heard that the education is heavy on organic chemistry. Then you get a job as a cashier selling pills.
> Hacker news and r/programming is only good to get general ideas and keep up-to-date. The comments are almost worthless.
You got me.
> Once, someone asked me who I looked up to and I said Conan O’Brien [...]
He wrote for SNL and studied literature at Harvard, so there's probably plenty going on up there.
Conan really handled that disaster with tremendous grace and it paid immediate dividends. I can’t really think of a similar situation in popular culture. It is a good reminder of how to handle oneself especially during turmoil.
If there's any 20-somethings here that make 6 figures, listen carefully:
If you start when you're 23, and you make $100k/yr, you can retire at 45. That may sound very old right now, and you might think, I'll just save later. But consider that when you turn 45, you may realize you have 20 more years of this shit job before you can retire.Holy crap, you can do this? I always assumed for some reason you had to pay for expenses with an HSA in the year they were incurred.
- I agree, 100%.
And here's a take that a lot of the folks will disagree, and categorically state that these both belong to two entirely different domains: "Rust, is the evolution of Java. Not Kotlin, not Scala, not clojure, but, Rust".
Rust has a similar role to C++ but reads more like Python and Elixir's lovechild.
Some good points. Laughed at TDD is a cult. I mean a lot of software orgs/cultures are cultish (Agile, Scrum, whatnot). At work I often feel I'm part of a cult.
I've interop'd with JS from Haskell and you can just go full dynamic property access. And gradually add phantom typed APIs around it.
I've been coding professionally for >30 years. I don't think any of my code has survived 5 years in production.
I don't think code quality affected that at all - I know the really, really, shitty code I wrote when learning OOP in the 90's survived for a looong time, while the amazing code I wrote for a startup 2018-2021 died with it.
At the time, a lot of it felt "important" and "significant". And some of it probably was at the time, to the businesses I wrote it for. But whether I sweated blood and tears to craft the most elegant and efficient software I was capable of, or I phoned it in and just copy/pasted Stack Overflow answers together until I met some interpretations of a requirement to be able to leave the office on time - really made no difference.
I've been pondering lately, thinking about GenAI and vibe coding, with the very real risk of creating completely unmaintainable codebases - whether that matters, if the code is likely to be retired or rewritten in 3-4 years anyway? My current gig is on to the 4th rewrite of it's web/mobile app backend platform in 15 years, which started out as a Groovy on Grails app, which got rewritten in Java, then rewritten again in Java, and now it's being rewritten in Python. Each rewrite had fairly good reasons at the time, but a huge amount of code here gets thrown away every 4 years or so - which looking back makes me seriously question whether any of it was "of any significance". To be honest, the 2026 Python code really isn't doing anything notably different or more complex than the Perl and JavaScript code I was writing in 1996 - web work is CRUD apps all the way down.
The entire AI ball of wax is built on python (dynamically typed) - or at least a large part of it. It probably needs to move to rust to save on power and compute cost.
Design-by-Contract[0] is a formalization of this concept and well worth considering when working in code using mutable types. In addition to pre/post conditions, DbC also reifies class invariants (which transcend method definitions).
0 - https://en.wikipedia.org/wiki/Design_by_contract
That said, the people who change companies aren't the ones that believe that management ever had the best ideas, or are able to push back on the cult thinking with clarity. Unfortunately, though, it's not necessarily evidence that wins arguments, it's charisma, which is how the cult is started in the first place.
Then again, this person is obviously also lying to claim the engineer title - sit down, "data science!" You're only even here because Product prefers being lied to - so that really sets an ironically honest baseline on how seriously anyone should be taking any of this farrago.