Ask HN: What will stay the same in the next 50 years?
From browsing internet forums and listening to friends it seems that a popular approach to bettering oneself as a software engineer is to "learn the latest technologies". However, with so many new technologies to choose from, how will I know which ones will benefit me long term? This reminds me of the Red Queen hypothesis [0], learning new stuff just to keep up.
I suppose the stereotypical example is the web development space with its many frameworks (Reactjs, Nextjs, Svelte, Remix). I notice this as well with programming languages such as Go, Rust, Julia, Dart, and Kotlin.
On the flip side, I wonder if mastering the fundamentals and the things that will not change in the next 50 years is a wiser approach. This is inspired by the ideas of Jeff Bezos and Warren Buffett [1, 2]. If this is true in technology, then I wonder what are those things that will not change in the next 50 years?
I also wonder how the Lindy Effect [3] applies to technology. Would it be more worthwhile to strive for a high level of proficiency in decades-old languages such as Java and C++, or focus instead on promising languages such as Go and Rust? Reading Dan McKinley's article on Choose Boring Technology [4] nudges me in the direction of focusing on more mature technologies.
[0] https://en.wikipedia.org/wiki/Red_Queen_hypothesis
[1] https://www.goodreads.com/quotes/966699-i-very-frequently-get-the-question-what-s-going-to-change
[2] https://fs.blog/staying-the-same/
[3] https://en.wikipedia.org/wiki/Lindy_effect
[4] https://mcfunley.com/choose-boring-technology
71 comments
[ 3.5 ms ] story [ 141 ms ] threadLearn how to explain and document why you chose an architecture for a problem. It's a habit that'll set you apart from your peers.
This will make you stand out from your peers and ensure a good career path for years to come.
And that's before we get into navigating the political situation of getting ideas listened to. Knowing who to explain ideas to, and understanding how to learn their motivations are both important skills to navigating a social space like any company and team. And they are skills not usually taught during typical education in my experience.
In short, an idea is only as useful as the people who you can explain it to.
There's no conflict between learning new things and "fundamentals" (however we define them). It's useful to know both. You start with the more general stuff that applies everywhere (this is a lot of what you study at university - how a computer works, how code executes, how to design a program, data structures and algorithms etc.) and then over time you pick up details like language details, specific APIs, frameworks etc.
Languages don't matter that much. Learn a few, be aware of what's out there and get comfortable with picking up new ones as you need them. It's really not a big deal.
Sorry that wasn’t my intention. I was thinking more along the lines of compounding my knowledge for something by studying it consistently over a long period of time.
Thank you for your advice.
Unless functional programming takes over the world, then a lot of us are screwed.
The OP asked about the next 50 years ago. If I look back 50 years I was mostly coding in FORTRAN using punched cards. What hasn’t changed is that so much of programming is still persistence in getting things to work. But of course, our tools now are so much better than 50 years ago.
If I only go back 40 years, then I was programming on my own Xerox 1108 Lisp Machine, and loving it.
We’ll do less with more, and then have meetings about it.
If you’re able to do things end to end and actually understand how things work people will think you’re a witch.
Of course, mathematics will continue to develop in unimaginable directions, but the “base” notions in math will stay the same. I am talking here about notions of relation, function, group, vector space, tensor, category, measure, integral... Even if some of those are known for a long time, formal definitions that we use today are pretty new. And it seems to me that those will stay fundamental for a long time.
(Seems to me that other sciences (like physics and biology) don’t have that “stability”. In those fields, it wouldn't be too surprising if we discovered some fact that changes a lot we know about it)
Also, as these core notions of math will stay the same, math notation will stay the same also. And that is a good sign that we will continue to use TeX for a loooong time
Any recommendations for me to properly re-learn this stuff without going to a community college?
For high school math specifically, I have a shorter book that covers only high school topics, with exercises, and applications (and a SymPy tutorial). See book preview here https://minireference.com/static/excerpts/noBSmath_v5_previe... and website is https://nobsmath.com
Here are the concept maps to give you an idea of the concepts (round boxes) and topics (rect. boxes) covered in the books: https://minireference.com/static/conceptmaps/math_and_physic... https://minireference.com/static/conceptmaps/linear_algebra_...
If you're interested in computational or cookbook type math, then it's best to find some textbooks with lots of exercises and student solution manuals available. You can grab lots of homework problems, solutions, and lecture notes from undergrad material posted freely on the internet. I would also recommend learning about how to use some numerical packages or computer algebra systems, so you can check your work.
If you're interested in proof based math, then it's probably best to find a grad student at a local school that you can pay to review your proofs and provide feedback. You might be able to use some online communities to do this as well.
There are often books that are aimed at a very basic level and others that are aimed at a more rigorous approach for the same material. It can help to review the more basic or less rigorous books to help get some intuition when you're stuck or need an alternate explanation.
There are several online math communities where questions about undergrad math have been asked and answered. A couple of examples for math and stats are: https://math.stackexchange.com/ and https://stats.stackexchange.com/
If you decide to follow an undergrad sequence of problems, you can look at starting with the highest level course you want and determining if there is any discussion on prereqs. You can trace the prereqs (which will typically be a subset of the previous course material) back to the beginning and find the minimal amount of material that you would need to get through.
I don’t foresee AI becoming advanced enough to be able to plan out and build most residential homes in the next 30 or so years. Maybe after that it’ll be good enough to design basic / common homes. Same goes for the hardware and control systems needed for fine motor control for those jobs.
I also don’t see AI replacing most software engineers or STEM based jobs until general AI becomes a thing either. I can see testing probably being the first thing to go.
Fundamental physics will always be fundamental ;) and you can build up to most things from first principles.
If they are generally following an upward trajectory, they seem worthwhile to track and follow, or even contribute.
If it is all just fashion, what is to be gained by being a “dedicated follower of fashion”? Might as well buy a lottery ticket.
New technology often replaces old technology, but new theory (in math/CS) generally extends older theory, and problem-solving techniques are often timeless. So if you're looking to learn things that will be relevant in the long-term, your answer is likely algorithms, data structures, and the like. They're not going to be rendered irrelevant by the passage of time; they're going to become more fundamental as we build more advanced theories on top of them.
If the kind of stuff you're into is more like Rust, React, or whatever, then the stuff useful 50+ years from now probably won't be those particular technologies, but the ideas behind them. So instead of learning Rust, you'd need to learn about topics like abstract interpretation and formal verification. (Or to put it another way: try to figure out how to make a Rust compiler, vs. learning how to use it.) If you're into event-based technologies or like parallel programming, go learn about the various models of computation (there are lots) and their strengths and weaknesses. There's a lot of prior literature and research in areas you might not expect, and you'll be surprised how often research from half a century ago suddenly becomes relevant again (like it did with parallel computing). If you like PyTorch, go learn about optimization and machine learning (and I'm not referring to neural network architectures here). There are grad courses on all of this stuff if you go searching around. You'll probably have to put in more effort into them than you'd need to put into learning React or Go, but that's life.
I was trying to get at both. On the technology side, I was wondering if it is wise to focus on a particular technology/language consistently over a long period of time to compound my knowledge, or learn a new and promising framework/language every so often. For example, I assume Java and C++ will have a high likelihood of being relevant my entire career and so it could be valuable to become an “expert” in the language. However, Go and Rust seem promising going forward and could introduce me to new ways of programming. As I write this I get the feeling the answer is not so black and white as I make it out to be. Some combination of both seems like the right approach.
On the knowledge side, I was mainly wondering what are specific concepts that would be relevant years down the road. I was thinking if I could grasp these fundamental concepts well, then it could provide a solid foundation for any type of field I would like to work in. I realize it is was a very vague question and probably should have been more specific (I’m mainly interested in backend development). Nonetheless I found your answer very insightful, thanks.
Technology-wise, I think the real answer to your question is to narrow the scope of the question down to the next 5-15 years rather than the next 50, in which case I doubt you'll see things like Rust/Python/Linux/etc. becoming irrelevant in that timeframe. There's also GPU and FPGA programming which would probably also stay relevant for quite a while, though it won't necessarily ever have as huge of a job market as something like React. It's important to care about the next 5-15 years though after all—that's part of your life too.
1942 - First mass-produced fully-electric analog computer
1951 - First mass-produced commercial computer (using vacuum tubes)
1963 - First mass-produced integrated circuit mainframe computer
1974 - First mass-produced personal computer
1984 - First GUI operating system with widespread adoption
1995 - AOL, CompuServe, and Prodigy bring the internet to the masses
2007 - First smartphone with widespread adoption
~2017 - I'm actually having trouble coming up with something. Maybe cryptocurrency (specifically Ethereum) gaining widespread adoption, but it's too early to judge its significance. Same with VR.
The job market and what it meant to be a programmer changed so much between these intervals.
You might not even be in tech anymore in 11 years. Maybe you'll be retired after a lucky windfall. Or dead.
- Humans oscillating between greed and fear. Has happened for the last few millennia :-)
- Showing up on time , being reliable and doing your best leading to good outcomes
I usually base my decisions around these 3..
Example: being overweight increases risk of heart disease.
Alternate Possibility: being inactive/not exercising increases risk of heart disease and being overweight tends to co-occur with not exercising.
In the above example it’s possible that an inactive person who is not overweight has similar liklihood of heart disease.
I'll readily grant that the motion of the jaws is unlikely to change though, at least until Zuck figures out a way to sell virtual gum in the Metaverse.
I coach all my gen Z hires that the skill is not in coding but communication. For example, the act of coding is a dual communication. Once to the computer, where "skill" means transmitting the message simply, unambiguously and without repetition. once again, repeatedly, to the community of readers and maintainers who look at your code (where the skill here is to communicate clearly and without misunderstanding, without needing a shared cultural, organizational or temporal context). Being able to think deeply about what it means to communicate is a true long term life skill.
Learn how to reason about problems from first principles. Understand how back planning works and how to apply it to a project. Cultivate your communication skills and build a habit of constant learning.
Learn about critical thinking and logical fallacies. Build heuristics you can use to evaluate ideas with incomplete information.
These skills will serve you well long after any technical knowledge you have expires.
[1] https://m.imdb.com/title/tt5463162/quotes/
COBOL: No matter what where how, the airlines and banks will still be running on COBOL.
Stepping back, there may be some merit to going directly at the assembly. It would not surprise me if computer architects and programmers of the future could align to basically eliminate the concepts of compiler, optimizer, superscalar pipeline, re-order buffer etc. Its really getting ridiculous.
At my day job I work as a Java+Angular developer on an enterprise software, but if there's a chance to do a small freelance gig on the side, or my personal projects, I'd take it as an opportunity to try out the "hip" stuff just to learn what's good about it and if I like it or not (most recently Nuxt.js).
Also the older, more stable tech are still getting cool updates too but at a much more slower rate, and very often adopted from the newer languages/frameworks. So if I've played with the newer stuff too, I would know what the update is about and have a much easier time getting used to it.