What I’ve Learned in 45 Years in the Software Industry (2021)
bti360.com
bti360.com
When there's an error or exception, read the error and the stack trace thoroughly and figure out what it means even if it means googling. Lately I've noticed that younger generation doesn't really understand error messages even in the simplest cases and people end up in wild goose chases when the real reason was incorrect permissions or something really mundane.
In 2012 I had a stack trace that I could read and eventually figure out what happened.
Nowadays it's async framework method calls upon async framework method calls and that is an improvement in the tooling, because it can now glue them together.
Next-gen frameworks are undoing that mess, but god help you if you use some third party library for e.g. state management.
It was ever thus. I suspect what’s happened is that lately you’ve become the older generation.
Other times, perhaps frequently, the error message is actually telling you something important.
Many people get stuck in the second case thinking it's the first case.
> When there's an error or exception, read the error and the stack trace thoroughly and figure out what it means even if it means googling.
The infuriating part is when there is no attempt to parse the error and just fire off a screenshot in chat and expect someone to do the first part too...
* A colleague once said to me, a few years back, "become an expert in one thing", even if it's a small thing.
* "My superpower is reading the manual"
I've written a post around this topic because you can do this in a systematic way to learn pretty much anything https://nickjanetakis.com/blog/how-i-quickly-find-answers-to....
When I'm introduced to a codebase I'll be doing significant work on, I'll often spend hours at a time just reading the code. Start at main() and skim until you get a feel for the overall architecture, then go figure out whatever subsystems seem mysterious to you. Rinse and repeat. Makes a huge difference when making changes, because that requires reading code anyway, and you'll have a much better idea of what code to read/change.
My experience is that it basically comes down to developer discipline. A disciplined developer will update the docs regardless of whether the docs are part of repo or external and vice versa.
Maybe its just me but plain text does nothing for me so i convert it into visual elements.
Man I wish that worked for Java ;-)
How small is small? Some small fields are quite big when you factor in all global experts.
But I think people should choose topic carefully it should be fundamental, maybe it's soon unfortunately gone if you choose a trendy and short-lived tech.
That's worked out.
What I really want to do is be locked in a room with a niche project I can look after until I'm dead a this point. But that ain't gonna pay the mortgage off...
My best guess is the ascendence of Kubernetes has made reading Go rather instrumental; and as a by-product, writing Go seems much more approachable.
It is like the Python of statically compiled languages to me, but with way more safety rails and things you need as your code base grows.
There is just demand for it in general from what I see.
What it does is allow me to circumvent demotivating and productivity draining pain which is seen elsewhere which is pretty much summed up as: shitty build tools, runtime environments, libraries, containerisation, IDEs, concurrency approaches, test frameworks.
Really it's a tool that allows me to actually get stuff done.
It's pretty much what I've wanted for years: a memory safe, GC'ed C with a stdlib that wasn't conceived in the 70s.
* Identify your superpower
What special mojo do you bring to a problem that no one else on your team can? Recognizing and leveraging your superpower can make running w/ a team of true overachievers a lot more pleasant.
Early in my career, my manager gave me the feedback that sometimes my eagerness to participate outsized my ability to understand. I never meant to suck the air out of the room, I was just so excited to build cool stuff! He recommended reading up on Stephen Covey and suggested that when collaborating on designs/debugging/etc. as a team, to practice being the last to speak. Life-changing advice.
I'm unfortunately in the extreme end of that advice. I listen to my teammates but I rarely contribute anything worthwhile, not because I don't want to but because I've nothing to contribute. In two recent sessions about database design for one project and integrating SSO into another, I literally had nothing to say.
What I’ve Learned in 45 Years in the Software Industry – https://news.ycombinator.com/item?id=25658216 - Jan 2021 (345 comments)
Yes, this. If there's one issue I've seen again and again limiting engineers it's them fixing some part of a system without understanding the system as a whole, while assuming that someone (the code reviewer say) does understand it. It's a machine for manufacturing bugs and technical debt, and it keeps the engineer in a junior mindset.
"Bad programmers worry about the code. Good programmers worry about data structures and their relationships."
-- Linus Torvalds
I'm sick of working with juniors who don't know how to find the simplest approach to problems without pulling in yet another 3rd party dependency ... or more likely want to write obtuse code because it makes them feel flashy. Just makes me want to shoot myself in the head.
"It's like playing a game where the rules change without you knowing and people cheat"
A perfect example is scope creep, which happens with all sorts of clients. And, as much as we all hate it as devs it's just the way the world works - stuff changes. Some clients will work with you to update the spec and make sure you're compensated for extra time, where others will just expect you to "roll with the punches" effectively working for free.
A personal anecdote of this was when a medium-size company switched payment processors half way through our contract. I was building a custom subscription experience over a 3-month timeline. I had already finished the specified payment parts when they came to me wanting to switch it out for another provider... When explaining that change would effect timeline, and that I would need to be paid for the extra labor they got very combative. I pushed back on them and they threatened to pull the entire contract, sue for the 50% up-front (if not reimbursed), and even heavily alluded to slandering me among other customers of mine in their niche industry. They strong-armed me into doing the work because it was either losing two weeks redoing payment processor integrations, or losing over two months of work and potentially taking a huge reputation hit.
Over the years they would reach out for new work, but I never contracted for that client ever again. Gotta pick 'em carefully and I don't tolerate abuse.
On a contrasting positive note... Other clients understand scope creep involves extra work, and even proactively offer to pay for the labor/update timelines. For these folks I will bend over backwards because of the respect.
---
So back to the "rules change" and "people cheat" - 100% accurate. Not all clients are like this - but, you have to learn to gracefully handle and eventually cull the ones who are.
This resonates. But I find it hard to tell to a bright person that their code or solutions are too complex.
It’s an art to produce something that lasts long but doesn’t take years to build. Tech evolves rapidly.
(If you got Firefox click the reader mode in the right of the URL bar).
The photographs? Photographs are almost always junk in an article, and this article was no exception, except it had the saving grace that this was his swan’s song,so why not (and there were merely three).
But it was a simple text layout for a short article. Personally I can’t complain. Hence I ask what I’m missing.
> But it was a simple text layout for a short article. Personally I can’t complain. Hence I ask what I’m missing.
Just wanted to repeat this as I entirely agree. Sure, it’s bland, but like it’s extremely readable and of all the sites to rant about UX on, this wouldn’t even make my top 1M.
<link media="all" href="https://3skoz1yr97849dum72v8p1rj-wpengine.netdna-ssl.com/wp-..." rel="stylesheet" />
The `href` leads to a 404, hence the "refreshing" look...
That being said I think this blog post actually is spot on and really does capture what it takes to do good software engineering.