Curious on opinions for sustaining a long-term technical career in tech. Not interested in management and looking to stay technical.
I see the market shifting, but obviously that doesn’t mean core CS knowledge disappears. I’m moreso looking to stay ahead of the curve, but what does that mean? Master stats and ML? Master the fundamentals because those never change?
Would be nice to hear a perspective from the older generation who have weathered so many storms.
Learning is a painful process. It is natural to feel stupid when learning so it's important to prevent your ego from trying to "protect" you from the early follies of learning. In time, this process will humble you and make you a better person. You may even come to like it.
Follow your passions. More often than not, you'll learn and "stay ahead of the curve" just by learning adjacent subjects to what you care about. Don't learn anything you are not passionate about (within reason).
Look after your health, nothing else matters more, that includes mental health as well.
The truth about remaining an individual contributor and staying out of management is just to flatly turn down any offers of management positions. You'll likely make less money because of this. Management will tell you this isn't the case, but in most orgs, power is centered around management. As an example, people with fifteen years at Google were laid off by a management team with less tenure. Maybe they're next, but you'll be first.
The longest I have ever stayed at a job is about seven years and that was several years too long. If you've been at a company more than a few years, your salary is stagnating.
Don't do free labor. That includes an expectation for regular work beyond 40 hours. Learn on the job. Not just by doing new things. Read books, blogs, practice coding during work hours. This is how all other professions operate. I have no side-hustle. I'm a professional programmer.
No one knows what the future will bring. I've professionally written code in a dozen languages and as many platforms. Stay intellectually curious and learn how businesses operate.
- you become really good working for really good top-notch companies. This is the hard path, not because becoming really good is hard, but because working for top-notch companies and becoming good requires putting a lot of hours. One could become really good in say, 10 years... but on top-notch companies if you don't make it in a couple of years you re not anymore "ahead of the curve"
- you fake it. If you have already enough experience in the field, chances are there are companies out there in need for "principal engineers" or vps or whatever term they use nowadays to designate "top level tech guys". You can convince them you know your shit, and they may believe you. One you get your first job in such a role, everything is just gonna get better (e.g., more money, more free time because all you need to do is "to give advice", more knowledge because you can learn tons of stuff using that free time). This is easier than the path above in the sense that you don't need to put extra hours besides the regular 10-5. It could be difficult if you don't have enough confidence in yourself yet to sell yourself as the best tech guy out there
I’ve been doing this thing for over 20 years. I’m a voracious reader and always trying to stay just beyond the edge of the industry, as far as knowledge goes. As a programmer, I’m probably somewhere smack in the middle of the bell curve. I’m nothing special, except that I can do it FAST. I don’t just mean the programming part, but the figuring out some new problem is some subset or superset of problems I’ve solved before and applying those to the new problem.
I have a couple secrets that I don’t tell people and it has nothing to do with writing code.
1. Learn how to sell crap and take business 101
Seriously, you learn how to sell and what a business needs to survive. Don’t stop learning, this is just the beginning. It gets you in the doors that friends will open for you, it gets people on board for projects you pitch. It gets you paid more.
This will probably work for as long as other engineers aren’t doing this.
2. Train your memory
I don’t have a photographic memory anymore. I hit my head too many times. You can train your memory though, to that point. Especially when you are young. My memory is still sharper than my peers, I still only need to glance at a file path once to remember it. Usually.
Seriously, go learn how to train your memory. Research it like you’re trying to decide on a new framework. Use what works best for you.
3. Don’t work on bad days
When you have a bad day/morning, call in sick. Take time for you because no one else is going to give you that time. If you aren’t working on bad days, people only see you at your best and you’re more likely to get promoted or a raise.
If you have a lot of bad days, get some therapy and work with them to get to the root of the problem.
I got into programming because I was an engineer, and I used finite element modelling, but nobody would adequately explain time sharing. Then SGI loaned my group a Unix workstation.
I've quit several jobs because the company decided to go all Microsoft all the time. Those companies aren't around, but I'm still writing programs for Linux. Mastery of CS fundamentals is key, but you have to learn to apply them, not just grind leetcode with them.
My lesson is that if you learn and do commodity things, Java, Windows, XML, you'll have a commodity resume and you'll get commodity jobs that you have to fight a plethora of other commodity developers for. Do different things. Learn and master something unusual. Teach yourself new things as often as you can.
- look out the window every few minutes to keep your eyes healthy
- stretch every day to keep your hamstrings from shortening and your pelvis from tilting
- if you are feeling stuck or stressed get out and take a walk or go for a run, otherwise the bad mojo will build up in your system
Do that for sure if you're doing web app development. The core fundamentals have not changed much in 20 years. Its HTML, CSS, JS and an HTTP server and likely a database. All the frameworks, packaging of client side code, code transpilers, etc. have to do the core stuff and once you understand what/how they do their thing it should be relatively easy to pick up another "new" tech that does these same things.
Get good at maintaining, refactoring and extending existing applications. Understand the business value of doing these things vs. a common crutch engineers go to of "that code is crap, we have to rewrite". Being helpful and flexible with solutions to business problems is going to be better than an engineer that wants to rewrite everything, has an ego about their code, says no a lot, etc.
These are jumping pads that allow you to learn most new shiny things.
As for career longevity, there are a million opportunities out there for millions of types of engineers. My step dad is very reliable old school .net programmer, he has a boring very-stable gig that pays well. I stay nimble with the newest JavaScript technologies and have been able to job hop my way up the ladder.
What's important is finding a niche that works for the lifestyle you want to have. And being able to roll with the changes if shit hits the fan
You also learn an industry other than "tech". You gain the T-shaped skill set that makes careers grow - deep in tech, broad in business, and able to jump from ship to ship to seek those raises and promotions.
Now I fully admit, this path is not exciting. It does not maximize income. It does not have opportunity for stock options or "exits". But it absolutely can bring sustainability and stability to your career if those are your goals.
Identify the core skills that cut across technology choices. SQL, etc.
Always try new languages.
Never be loyal to any vendor or platform.
Be willing to work for small companies doing big things. You often have opportunities to "craft the menu" and can grow and learn in ways that you can't in a large company that paints you into a specialized (and often well paid) corner.
Freelance on the side - it's not about the money.
Understand the businesses that you build solutions for.
Lemme break it to you, there's only one Hemmingway and he died.
For example, you can try studying Blockchain, I'll share this article if you want to start: https://www.ratherlabs.com/post/the-roadmap-to-become-a-bloc...
And this article to stay ahead of the curve: https://bootcamp.berkeley.edu/blog/most-in-demand-programmin...
Good luck!