ML+Python+Pytorch because it's hot right now? Java because no one wants to maintain legacy Java code but there are lots of it and the demand will be there? COBOL to take that even further? Node.js because it's popular? Swift because Apple will continue to dominate the high end? Practice and pass the tests to get into a FAANG? Go work for a high frequency trading company? Learn SAP?
Asking for a friend (TM). Seems like a particularly interesting time to ponder this question (again), with layoffs in tech all the rage and geopolitics looking a bit less 'steady as she goes' than say, 10 years ago.
I'm not saying this is what somebody should do, but if you're only indexing for income, then it's the only answer IMO.
NETWORK NETWORK NETWORK, hop jobs every one to two years and make sure each of those jobs comes with a salary increase greater than what you could get via the promotion ladder at company you are leaving. Be a good enough software developer that you can switch tech stacks at will. Learn the software engineering (design patterns, how to communicate with stakeholders, etc) and language design / compiler / networking fundamentals (so you can easily switch programming languages / stacks).
Beyond that, certain subsections of the tech industry have higher salaries so network with people in those subsections.
Also just to be clear, the point of networking is so when you hop jobs you aren't applying to random jobs, you are being referred by employees at other companies.
In my opinion this is a truly terrible path to choose, but you will earn more than anyone in tech who doesn't win the startup lottery.
The second least relevant part of this question is how geopolitics and current "layoffs" factor into this, as those are largely a product of bad management, and extremely isolated. They won't matter in 6 months, let alone 10 years.
If you are a smart and driven person, then software development is not going to be the best way to maximize your income. Get out of software and into finance, and/or get an advanced degree (MBA or law) from a prestigious university (M7 or T14). Ideally combine finance with an advanced degree, and work at an investment banking firm.
You won't be able to compete with the best individual contributors in software if you only care about cash, and in a hard(er) science field that becomes obvious relatively quickly. In finance, caring about cash is the passion, so that drive to make money will serve you better there.
It's not that it's a bad career, and frequently the places that still use COBOL are pretty stable and unlikely to do mass layoffs (governments, banks, insurance companies, etc), but it's TERRIBLE for maximizing your income, which is what your question is about.
If they don't have the money to rewrite all that old legacy code in something needlessly new and shiny, they very likely do not have the money to pay high programmer salaries, either! Well, that, or they have a finance-focused hand at the tiller, working to keep costs (and salaries) down. Neither of which is terribly conducive to you making big bucks in the short term. (And yes, ten years is "the short term". You in ten years will agree with me, even if you don't now. =) )
Tech changes fast and nobody has a crystal ball which can tell you what will be hype in 3 years. But everyone knows that having a solid professional network and proof that you are able to deliver great products will greatly benefit your career as an engineer.
That said, there are a few "meta strategies" you could consider
1) get really good at learning and hop from hot thing to hot thing
2) do the jobs that no one wants to do that also pay well (mainframe maintenance, documentation, sales?)
3) get really good at soft skills and put yourself in positions like management where a lot of your staying power (and income) comes from the relationships you build and maintain
All the best pay rises I've ever had involved finding someone willing to pay me a lot more for basically the same thing as I was already doing for someone else.
Barring winning the "pick the exact stupidly-overpaid technology of the future", banking on any particular technology would have done me far fewer favours than just finding new jobs paying more money.
- HTTP/TCP/UDP and basic networking
- Client/Server architectures
- Machine learning basics
- Cloud Computing basics
Every platform has a different flavor of these things, but if you understand the basics a lot of the knowledge carries over (or you at least can see why one framework picked a particular trade-off over another)Also, I'd learn a little bit about Product, and what Product Managers do. Lenny's Podcast is amazing for this. Thinking about Product and how it leverages Engineering is really important. Customers don't give a shit about your backend architecture, they just want a good experience. I think that helps keep you from going down too many technical rabit-holes
Since you're a junior in an Agile shop, no one will bat an eye at assigning you to solve ticket after ticket. Since it's legacy code and they're staffing juniors to it, management won't really care about your code quality. Use the LLM penetrate the dullness of the legacy codebase. Just make sure not to solve tickets faster than the average burn rate.
Spend your brainpower working on your LLM system - the model, the vector database, the git integration, etc. At the end of this process, you'll own the IP for your LLM system and will have made money from two jobs.
You can rise and repeat this by applying for more junior positions and editing your resume to remove older positions. Once you're bored, just pivot directly into consulting because what I've described is literally consulting.
braces for downvotes
That said, just pick anything and become better than average at it. What do you like? If you think statistics is boring, you’ll hate the Python/ML path. If you think CSS sucks, you’ll hate the FE path. Etc. Find something you actually like and become better than average at it, and then shop that skill around. Once you get a job, seek out the smartest people/most interesting work at that company.
Rinse. Repeat every 2-3 years (faster iteration earlier on, slower iteration after more experience).
- Industry: focusing on big tech or quant finance would be a good choice. That's where the money is IMHO.
- Expertise: if you invest on being the best, that will pay off.
- Network: you will get you best offers from friends and colleagues, not head hunters.
- Role: being an above average support engineer can very well earn you more than an above average data scientist, just because there are much fewer bright people willing to work in support positions.
- Jumps: at the beginning of your career, move often, say every 1-3 years. Calm down the frequency after that.
- Focus on organizing other people's work, leadership, empathy, cross team communication. This is the way to get promoted into managerial and director positions at healthy companies. Obviously, a junior should not try dictate others what to do (lol, but I've seen some hyper ambitious ones like this - it didn't end well), but first very quickly becoming proactive and gathering requirements by yourself, working with many people and on many projects. Trying to expand the scope of work broad, instead of deep.
Choice of either depends on your skills and personality. The latter can eventually pay more (statistically - there are more highly paid directors than world class experts), but can be also more risky (if more senior people think you want to manage them, they might get upset).
In either case it's better to start with becoming an okay expert in a single domain.
Also don't focus too much on tools or leetcode shit, tools will evolve unpredictably in 10y. And FAANG landscape/salaries too.
E.g. java, swift, nodjs, LLM is not a domain, it's a tool.
But banking transactions, realtime video processing or customer support automation — is.
On a 10yr timeframe the decisions you make will be very different than 20yrs. For 10yrs, your best bet is probably finding the highest paying Senior/Staff role you can then staying there. For 20yrs, even if it takes you 15yrs to become a Director you will probably earn more than your high paying IC role.
20yrs gives you time for things to compound (Skills, network, etc). 10yrs does not really afford you the same time. You'll probably be jumping around jobs to maximize short-term TC instead of building and compounding on long term things.
2) Considering you are talking about tech stacks, I don't think you have a good framework for thinking about this question
What dictates compensation? Generally the scope and responsibility of your role. Nothing to do with tech stacks unless you have an incredibly niche skillset.
I don't think this question is that interesting. Play long term games and build long term skills. On a long enough timescale things like tech stacks are effectively fads. Relationships with other people and skills like being able to lead people are always going to be valuable.
Key points:
1. Search for jobs with high salaries.
2. Move to Switzerland.
I haven't seen anything consistent yet when it comes to how high your salary is based on what programming language you know. What I did notice, like many people wrote already that you can hop between jobs and that way get a higher salary, I think that's not entirely true, you could probably pull it off without hoping between jobs but just look for jobs with a high salary, always higher depending on how high the salary of the job was where you were successful before in getting an offer. If needed you could probably also lie about how much you earn now just to see if anyone is willing to pay more.
Regarding the second point, I think it's incredible how high the salaries are in Switzerland same as the US but the market is not competitive at all and basically any idiot (me) can get a really good salary by just going through enough interviews. I can't even imagine how high you can go if you're actually like really good.
I personally started (only 3 years ago) with 72k a year (franks/dollars/euros it's basically all the same) then I went up to 78k and towards the end of 2022 I jumped up to 115k in less than a few months only by consistently taking interviews with higher salary expectations. A good way to get started is by sending a contact request to all the recruiters on my LinkedIn page and they will take it from there and bombard you with offers...I even tried optimizing the process by sending the recruiters this: https://chagai.website/notes/recruiters
It sounds like you are really asking if there is a "get rick quick" scheme available in tech - and the answer is no.
I can't imagine doing it just for the money. If you aren't excited about programming at the start you'll have 10 years of pure hell.
All that said, since you can "get into faang" - just pick the faang job available to you with the highest salary ¯\_(ツ)_/¯. You won't be independently wealthy after 10 years, but you'll be quite comfortable.
By 'growth' I mean increasing headcount (perhaps not the best period right now...). If you're in a company or team that has no plan to increase headcount then opportunities for meaningful promotions (expanded responsibilities and scope) and salary increases will be almost nil.
Don’t be a junior dev.
https://medium.com/zerotomastery/dont-be-a-junior-developer-...
And since you have 10 years, you might also want to invest that discretionary income. (A well-diverisified portfolio is pretty low-risk. And with interest rates as high as they are, you can also get some guaranteed/fixed-rate returns that are pretty high.)
Complain to your tech friends about tech while making new tech friends - one day they might work somewhere you want to, too.
Watch this video, which is an introduction to logistic regression for beginners - https://www.youtube.com/watch?v=hjrYrynGWGA
If you think that is lacking some preliminary explanation, this is the possibly clarifying previous video: https://www.youtube.com/watch?v=eqEc66RFY0I
The video doesn't expect you to know deep learning, but does expect you know probability/statistics, calculus and linear algebra.
If this is confusing, then things like transformers will be even more confusing.
> Java because no one wants to maintain legacy Java code but there are lots of it and the demand will be there? COBOL to take that even further?
Over a long career I have not found this to be a good strategy. Although plenty of application servers run JVM code - Java, or nowadays sometimes Kotlin (or other JVM languages). Java is OK to do, but the idea of starting with some legacy stuff does not - there are Java programmers who have experience going back to the 1990s.
> Node.js because it's popular?
Popularity has its appeals and drawbacks. More jobs for popular technology, but there is also more competition. Companies are always having trouble finding senior programmers in niche but not too niche stacks.
> Swift because Apple will continue to dominate the high end?
iOS is not going away anytime soon.
> Practice and pass the tests to get into a FAANG?
It makes sense, as other companies ape FAANGs tests as well. Being able to do Leetcode and system level design never hurts.
> Go work for a high frequency trading company?
As competitive as FAANG for successful ones.
If I were a junior dev right now, the two stacks I would look at would be React/JS and Python/pytorch. There are lots of openings for React/JS in small and big companies, so it's easier to get your foot in the door with it, which is the important thing. But if you're already a junior dev that matters less.
Then Python is good because people run it on servers, but it's also what pytorch uses, and deep learning will surely be growing in the coming years. You can get a job and hone your Python skills even if it does not involve neural nets, and then use those Python skills if you switch over into working with neural nets.
2/ interview a lot, move jobs when you see something better
3/ assume the expected return on stock options is zero
Stock in public companies (might be called RSUs) is pretty close to income. Even gets taxed like income. Stock in private companies is not like that. You can't sell it without the company agreeing, at which point the company sets the price as they see fit.
It depends what you mean by maximize. Any of your options will likely put you into one of the top percentiles of earners.
I would honestly advice them to change their mindset from trying to maximize income, to maximizing learning. So instead of finding a job that pays a lot, find a job where you learn a lot. Over the long term you will earn more if you are highly skilled.
Learn how to tell a story
Get good at interviewing and Leetcode (this just isn’t going away anytime soon)
Learn some infrastructure management and plumbing
As for languages and code, join an org that uses Java and Go, should be good with those for the next decade :P
Graduated college in 2017 and landed a job at a Real Estate company that employed 2 other developers. I was the "junior" for 1.5 years or so, but when we hired another I sort of fell into "mid-level", as I wan't the most-junior person.
In year 3, I jumped to a smaller company that was mostly engineers in ecommerce. They wanted someone to lead a consumer-facing marketplace thing that fed off a bunch of existing APIs. It was maybe a little over my head in hindsight, but they were letting me build something from scratch and hire some juniors to help so I jumped on the opportunity. Went from 60k to 100k here.
That place ended up being fairly chaotic and I didn't really believe in leadership, so after I finished the platform and had it basically in maintenance mode, I started looking for another job. I went from 100k to 120k here.
I think the last place bolstered my resume a bit, as I led building out an app from scratch. This got the attention of a f500 finance company that hired me at 155k+20k bonus as a senior. After a year that went to 165+20. I wanted more, but this was during all of the layoffs and apparently a lot of the org just got a 3-5% raise.
I definitely could have started higher, but coming from a ~3.0 GPA from a Southeastern liberal arts school I wasn't complaining and I think I've done a pretty good job so far moving up in pay. If I have any advice to give, its
1. Work hard. I generally only work 40hrs, but it's not unusual for me to do more without being asked. I care about my work, I take ownership of it, and I try to learn more outside of work.
2. Never accept the raise/bonus amount that is offered to you. Until the f500 company, I asked for a bigger raise/bonus than was offered to me and I have always gotten it. This move was probably the biggest contributor to my take-home, though I don't think it'd have worked if I didn't do [1] above. No one is going to fire you if you ask for more, the worst they will do is say no and acknowledge what you're looking for in the future. This is what happened to me at my current company at the end of the last fiscal year, and honestly I understood why they said no. The company was tighter than last year, but my boss and his boss both know what I'm after this year.
I hope this is helpful to someone. Not all of us land the cushy tech job out of college, but you can run your way up the ladder if you apply yourself.
this is an economy of owners and renters, you will be one or the other
so buy an income property to rent out, etc
otherwise, you are always just someone who works for someone else
people who try to succeed just based on their salary will be disappointed unless it is a mammoth salary (becoming more rare in sw)