Of logger and DB, certainly. The coupling introduced via locks is harder to detect. But most importantly, circular dependency between components might be OK in a path-dependent way - that's what I meant by fully resolving it.
Just analyzing the dependency graph of injected components is indeed just a topological sort.
You can't actually solve a lot of problems by throwing money at them. Ensuring that scaling your core application to arbitrary traffic sizes is in the class of money-solvable problems isn't trivial and should guide your architectural decisions from day 1.
Yes, you'll probably end up doing significant rewrites if you do actually win the lottery and get big, but it's nice to know that you're not going to top out at some arbitrary size and have to start turning customers away while you do those rewrites.
I never wanted to learn the details of how a computer really work as, but I spend a single week learning C, just to learn the basic concepts like pointers. It really helped me understand better other languages. Besides, It would take you many years for you to master it, and the kind of jobs you would get with it would f* damn boring. Don't waste more than a week on it :)
I'm learning Rust at the moment, I feel I can express my ideas better with it versus go. But as a hobby. for fun.
I've being coding exclusively in JS for 3 years. And just now I feel comfortable with it.
There is so much going on with it. I bet you heard about OOP, but what about functional programing. And functional reactive programing ?
There are so many libraries and framework in JS. It just crazy.
There is angular vs ember. And what about react or famo.us ?
And there is nodejs, and things like npm, gulp, browserify.
To learn javascript, the language is one thing. But all its tools is another.
The reality is this, the more languages you learn, the easier it is to learn a next one. Today I know over 10 languages, but I master only one. And that is what matters, the one you master.
But what I things is super important for a programmer this days is a basic knowledge of shell and git. IMO