Last week, Facebook employee Qin Chen jumped from the 4th floor of a Facebook building in Menlo Park leaving behind a wife and young daughter. Facebook, Google and other Silicon Valley companies are full of horrible, inexperienced managers and incompetent, uncaring HR staff that are ruining people's lives. It's time for Silicon Valley to clean up their act. Below is a screenshot with my blood pressure from a year ago while working at Facebook and today, one month after leaving Facebook.
Yeah.
I just moved to Silicon Valley (and the US) this year to work for a startup. It's growing so quickly that inevitably some things are not as well coordinated would be ideal, and customers are constantly wanting things that are on the roadmap for 2020 or 2021 *tomorrow*, as well as asking for more documentation, more example code etc etc.
This is of course much better than no one noticing or caring about what you are doing.
Fortunately there are plenty of customers happy enough with what we *do* have now that design-wins and revenue are snowballing.
There is pressure to get things done but, unlike some of the companies you mention (and Apple and Amazon, by reputation), I don't see any expectation for people to work crazy hours and burn themselves out. I don't know whether this has something to do with our high proportion of seasoned veterans in their 40s, 50s, and even 60s who have seen it all and won't take the same crap that new grads will take.
As for the original question of this thread, which language(s) to learn, I have suggest two:
1) to learn about simple programming using libraries, and algorithms, you want a language like Scheme (especially the Racket system) or another similar language such as Lisp or Python or Ruby. For the more rigorous mathematically minded maybe go for Haskell or OCaml instead. Rust, Go, and D can also fit this bill.
2) to learn about how computers actually work, and best understand both their limitations and how to take maximum advantage of them you should simultaneously and incrementally learn C, a reasonably sane assembly language you have a C compiler for (RISC-V is ideal, MIPS, PowerPC, or one of the ARM variants are the next best thing, and AVR is not bad too), the CPU programmer's model (registers etc). how instructions are encoded in binary.
Write some code in C. Compile it and read the assembly language. Single step in both C and assembly language. Write some assembly language functions and call them from C. Call C library functions from assembly language.
Pay particular attention to pointers, arrays, globals vs stack vs heap. You're never going to be a good programmer, in ANY language, without a good mental model of how those work. And you're very unlikely to come up with the right mental model without looking at the assembly language.
For really advanced understand of algorithms and data structures and how they perform you need to know about caches, TLBs, branch prediction and things like that.