To whatever companies will be top of the pile in a decade or two, after Google and Amazon have gone the way of IBM. Some of those will be founded by engineers who left the current FAANG setup and managed to not copy the insane parts of their previous org.
Depends how badly you want the "big bucks". Non-FAANG software jobs still pay good money. Maybe not "I own a yacht" money, but definitely "I own two new cars and a 5 bedroom house" money.
Hard to say without a lot more detail on location and specialization. All I know is software engineering in DC metro pays well enough to live comfortably. If you’re working a .gov contract on a TS/poly, even better.
There are plenty of high paying companies that aren't FAANG and aren't in the bay area. I work at one. A small software company owned by a huge non-tech megacorp. Zero people have left my dev team in the past 4 years.
Fast Matrix Multiplication is also useful for physics and other simulations, so I'm sure someone will make some SDKs or something for such AI hardware beyond just the scope of AI.
This was a lot of fun. Reminded me of one of the earliest C programs I wrote when I was learning to code on Win98, before I really knew how computers worked. I was curious: "What does the rest of RAM look like?"
#include <stdio.h>
int main() {
for (int x = 0;;x++) {
putc(*(char*)x);
}
return 0;
}
I was mezmerized by the strings from the uncompressed BIOS ROM being dumped back at me, "American Megatrends".. etc. Eventually this process crashes of course, when it runs past the end of mapped memory locations.
It was great when virtually everything was mapped 1:1 into "real" memory, even video memory. In those days, everything was a memory address, just like "everything is a file".
Then came the realization you could alter any memory location, and further, you could write a tiny TSR to do things...
As far as games and music are concerned, my needs are fulfilled by Steam and Spotify. I have basically just stopped consuming TV-style content because I just don't care enough about it to pay the price or pirate.
I think your definition of a project is too prescriptive, and is derived from the business world. A project need not be defined by a clear scope or deadlines, it is simply an extended effort to achieve a goal. Often times, the first step of a project is to figure out the scope, or for creative endeavors the scope is often intentionally left undefined.
I like sharing ideas with someone while we're both coding together. I think "pair programming" works a lot better when two people sit down and work together on different parts of the same problem.
Example: Alice is building the front-end for a product search page. Bob is building the product search APIs on the back-end. Alice and Bob working together can share immediate feedback on each other's designs and implementations, and work out any tiny ambiguities that weren't covered by whatever specification they previously agreed on.
I think some of the best software dev experiences in my career have come from this style of collaboration.
I wouldn't touch software development with a ten foot pole if it wasn't fun. It's fine to enforce a code style in your own projects, but proselytizing them truth from on high is a bit presumptuous.