If I had known this I would not have gone through university at all. I would have attempted my own business from the start and learned on my own.
Instead the entire school system seemed to be about learning technical knowledge, from math and physics in high school, to computer science in university. Then you go to interviews and you get technical tests, followed by some technical focus at the beginning of your career... but then after a few years once senior level expectations start to kick in... the expectation shifts and it's about learning how the business works, and how to make profit with software.
It was confusing why this shift happens in software. It might make sense in other industries where younger people need to replace older people (i.e. something with physical labor). So I'm now reevaluating how to look for a company that will leverage all of my existing technical knowledge or I will need to reconsider what to do because my career expectations don't align with the average software company's engineer expectations.
I couldn't give you a complete list of those things off the cuff, so I'll just pick one that is sort of "top of mind". I haven't thought this out in detail, so consider this me basically "thinking out loud".
So... to put it in very loose terms, I'd say I wish I'd learned to really appreciate the importance of focusing on human to human interactions and how people communicate, interact, evaluate, and understand each other. Of course that's tritely obvious on one level, but to really really internalize those lessons is a different thing.
And while it might seem silly, I'll say that one thing that helped me learn a lot was watching the TV show "Billions". Very early on in that show I kept noticing certain behaviors by the various characters that led them to bad (or sub-optimal) situations, or behaviors they used to improve their standing, etc. And I'm NOT saying that any of those characters should be seen as role models mind you. Just that watching the show kinda "smacked me in the face" in a very visceral way with regards to appreciating some things I had not really fully appreciated before.
To illustrate (spoiler warning if you haven't seen the show)... in Season 1 there's a tense meeting with the two main characters - Chuck Rhoades and Bobby Axelrod, to sign a settlement that had already been agreed to. Note, they had an agreement that made everybody happy. This should have been a simple "show up, sign the papers, call it done" deal. But Axelrod let his ego cause him to start mouthing off at Rhoades, who in turn let his ego be offended and then he ratcheted up his demands for the settlement, which eventually led to Axelrod tearing up his settlement payment check, and walking out without signing the deal. This led to all sorts of bad shit and was a suboptimal outcome for everybody involved.
The lesson (as I took it)? Detach your ego from things. Focus on the outcome you want, not how things make you feel in the moment. Don't let a brief moment of anger derail something you've been working on for months (or years, etc).
And there are very many similar lessons embedded in that show. I do recommend it to basically everybody, FWIW.
Anyway, getting back on point. I guess I'd add that I now realize that I was probably too focused on technology qua technology earlier in my career. And again, I knew that this wasn't optimal on some level. But it takes a while sometimes to go from a surface / superficial understanding of something, to a really deeply internalized understanding. Now, I get more the importance of the "human element", understanding how the business works, understanding the interpersonal dynamics of a company, etc.
Edit: let me add one more thing.
Don't whine, or complain, or sulk at work. Ever. Just don't. it might feel good, but there is basically zero chance that doing so will help your situation at all, and a very high chance that it will hurt your standing in the org and compromise you at some point. If you have a legitimate grief, sure, talk to your manager in a strictly business-like, professional manager. Eg, "Look boss, you have me doing X, and I'll do it as long as you want me to, but I'd really prefer to be doing Y. Do you think we could find a way to shift my role more to Y" or something along those lines. But sulking, acting pissed off, bitching around the water cooler, etc. are no behaviors that will help you. Trust me on this. And don't ask me how I know. :-)
HTH.
- I was a Flash developer and Steve Jobs killed Flash with the iPhone. In all fairness, for its security problems.
- So I went to infrastructure and then Bezos released AWS.
- So back to UI development, and Dan Amabrov and a few others made my React project a legacy one.
- Now I'm waiting for Sam to deprecate my frontend dev job with AI.
I wouldn't say I learned this too late, but ashamedly, I didn't learn this truth until after ShellCheck was released. I have thousands of hours of experience writing Python, Ruby, and Perl, but I no longer have any use for them.
Save as much money as you can and buy land.
For savings it will soon fail. Urban land value rises with a growing working-population. What are the demographics in your area? In New Zealand we have immigration pressuring land value, however if our economy tanks then urban land values will dive.
For prepper? Good luck keeping your land against your violent neighbours when anarchy hits!
Rich enclaves might grow in value, but you need to already be rich to buy in.
AI?
How many hours do you spend programming? There's a lot of work that AI won't replace: like understanding client needs. Maybe you haven't been through a few past hype cycles? Predictions of needing less developers have been made before.
E.g. working the website of a forefront AI lab doesn't feel meaningful. More like you're the idiot for having spent your life on web dev, while some are fixing humanity's last problem.
You have to aim high from the get-go.
Second lesson then was that engineering as a career is for chumps; young ones: start your own business.
1. Don't get tunnel visioned into the problem you're solving. Prioritize maintaining your professional relationships, especially with your manager, over all else. Prioritize what your manager cares about over whatever you think is more important.
2. Async-communication does not replace real-time communication. People cannot help but reveal more when you're communicating in real-time. This is crucial because of the next point.
3. Do NOT assume good intentions. Sadly, the tech industry is full of backstabbers across organizations of all size. If people have an issue with how you're doing something, no matter how small, no matter how trivial, expect that it'll go directly to your manager and be kept hidden from you.
As a programmer your skills are very replaceable. Your domain knowledge less so, and your knowledge of the code base even less so.
If you intend to stay at this level then its worth highlighting this value regularly to management. Because they are for sure being reminded daily that there's a fresh-grad waiting to elite code for little money.
But ultimately yes, coders can be replaced. Ots not terribly hard, crumbs even an AI can do it.
Understanding the business though is next level. By understanding the short, medium and long term needs of both the business and the customers you are well positioned to target "doing the right work" rather than just the "fun work".
As a part-coder part-manager you are slso more able to bridge the knowledge gap between upper management (who are exclusively business) and the coders (who are exclusively technical. )
Focusing on clear communication in terms that suit the audience really assists job security. For example selling the eradication of some technical debt, as a business advantage, yo upper management is more likely to suceed if it aligns with business goals than just "the techs want to pretty up the code."
But of course then you really need to do the business first, and right, and the coding comes second.
If you plan to go down this route I recommend exposure to accounting either at school or college (or via external self study.) I did it at school, and while I'm not involved much in accounts these days, being able to read them, and understand them, is really useful and important.
My experience though is different to yours. I joined a bootstraped company in 1992 as emp number 1. Basically me and the founder. We were both in our 20s.
In those years everyone in computers was young. We had no "adults in the room". We did a lot right, and a bunch wrong. I grew a beard to look older. When we had programmer user-group meetups everyone was our age.
That hasn't really changed, except now we are the grey beards :)
Unfortunately technical knowledge is all the school system and the cottage industry of interview prep companies focus on. If you can't get an MBA later, 4 courses I would recommend every CS undergrad take are, accounting, corporate finance, economics and maybe theatre.
Everyone is replaceable. I’ve never heard of any company of more than 5 people who didn’t survive after someone left.
If you hit hit by a bus tomorrow, your company would send your next of kin flowers and “thoughts and prayers” and forget you exist within a month
Surely you are not suggesting someone work full time and then spend their time off working on side projects? This is the most toxic traits of our industry.
Getting a new job in a new org is always difficult. New people, new process, new everything, and you don't have your past reputation to gloss over mistakes -- which you're more likely to make in a new org than an old.
But ultimately, sticking around because things are comfortable might sound good, but you'll look back after 10 years and wonder just what you did.