“How” ages faster than “why”
hackernoon.com
hackernoon.com
Other core technologies (in my opinion): cookies, http, TCP/IP, caching.
Seriously, though, I would not say there are any core technologies; but rather core programming concepts.
Variable memory management is one example. Knowing the difference between passing parameters by value, or by reference, when writing Lotus Notes applications actually helped me understand the difference between a variable assignment and creating a deep copy in JavaScript.
Less specific; If I had to guess--in 20 years; I'll still be working in technology that supports things like MVC(S), Dependency Injection, Singletons, Factories, etc....
Learning basic encapsulation techniques, and design patterns, is knowledge that will apply to lots of programming languages.
It always makes me chuckle when I see a job posting that clearly states it's JS front-end only: some old dogs know the trick ;-).
Pro-tip: re-write one of less significant systems in Node.js as a decoy!
- It doesn't explore any of the reasons why the APIs -- the "how" -- age in a backwards-incompatible way. Not all cases are equal: a clean break is the surest way of dooming the old and ushering in the new, but this rarely means that old code was broken beyond all belief: even if the underlying framework made some simplified assumptions, the code probably worked okay most of the time, especially if we assume intelligent, competent developers familiar with with the underlying patterns, using a framework for its merits. A good hypothesis is that frameworks aren't solely there to help you solve problems with less code, but also to help others' understanding of the same codebase.
- Yet even the article insinuates that we can't assume the previous all the time, because many developers understand design patterns by first coding themselves into a situation where they would be sorely needed -- this happened to me, for example. The same way the article's hypothetical developers acquire enduring knowledge, I didn't understand why I'd need dependency injection until I experienced firsthand the frustrations of handling dependent objects the naive way, and found myself re-invening it independently. This leads to the possibility that not all frameworks are picked solely for their design choices, but instead popularity, code availability, ecosystem health, press, advertising, or word-of-mouth may be factors.
- If so, this still doesn't account for why new frameworks rise and all the time, which would logically begin disadvantaged by having smaller ecosystems, less popularity, less name recognition. What is there to gain by starting a new one? This is really a variation of point #1: there's a lot of subject matter to be explored here, and yet it's left unsaid.
- Picking frameworks is a bit like picking presidential candidates, the whole game is rigged from the start. Once upon a time software was about solving problems, about working creatively based on your own experience. We can still learn from each other, and share code; but I feel the push towards standardizing on over engineered, general purpose code is misguided; like we're staring at fingers pointing at the moon, arguing which finger is the perfect one.
- New frameworks arise because needs aren't being met by the current status quo, hence we need innovation to get out of here. Where did this obsessive focus on popularity come from, anyway? I couldn't care less who did what, as long as we keep moving forward.
That person would have to be (and remain so for 20) spectacularly, blissfully, implausibly obtuse ... given the minimal cognitive capacity needed to hop from each of the 20 upcoming Angular/React equivalents to the next every year will likely both suffice and entice to "osmotically absorb" said "fundamentals" behind them all over time, even when never spelled out.
I think quite a few of us grasp the principles of this or that tech first informally by trial/error and experimentation, later when reading "the spec" or the "fundamentals book" or whatever always flip-flopping between "I know, I figured it out the hard way, smart me hehe" and "I know, I know, tell me what else is new!!"
Sadly, the next horrible insight a lot of people reach in the context of programming specifically is that while experienced, skillful developers can do everything the newbies can and more, for a great many commercial applications the newbie who has only the specific skills useful for a few months will cost far less than the expert but still produce acceptably good results. This explains a great many things, from the ageism and burn-out that are unfortunately all too common in our industry to the generally poor quality and often short lifetimes of a lot of software that gets shipped.
I'm hoping the next insight after that is how you fix those problems and achieve a step-change in the benefits our whole society derives from software by being able to use the extra skill and experience of the better developers in a viable way, but sadly I have yet to reach that level of enlightenment myself.
Numpy for Python, Building from source:
https://docs.scipy.org/doc/numpy-1.10.0/user/install.html
"Various NumPy modules use FORTRAN 77 libraries, so you’ll also need a FORTRAN 77 compiler installed."
It also nicely demonstrates how with the new levels of abstractions we preserve the "hows" but hide them from a lot of the users.
However "why" can be very wide ranging. Sometimes it can be theoretical, sometimes it's simply due to emergent phenomena that is unescapable for various reasons
Sometimes "why" is because of anothers "how". A good example of this is how the "why" of many things can be explained by "how" C does it.