So many opinions here ^_^
I figure I'll throw in my own opinions, as well.
First off, I would recommend a top-down approach. Essentially, doing that allows better abstractions and provides more tools for you to work with. This increases your code flexibility, reduces the number of bugs, and reduces the time to shipping. This, in turn, makes your customers happier.
The only real reason to go down deeper is when we must. Java, C#, etc are high level languages and as such you cannot control their layout in memory, for instance. This has a huge impact on cache coherency. So if you need to increase performence, you need to go deeper down. But if you don't need to optimize as much (as modern computers), then there is no reason to do it.
As such, starting off with C, assembly or some other low-level language is a horrible way to start.
Now, going deeper is fine. It's not something to be scared off. It will make you understand more of how computers work and that in turn will help you write better programs. But it comes at a cost to use those languages, and you need to be aware of that.
So I'd say start off with C#. Java is a horrible language, in my opinion, so I would avoid it.
Starting off with Javascript is also a horrible decision. That language is horrible. It completely lacks type safety, and lacks tons of modern programming idoms. Microsoft recently introduced TypeScript, which looks promising, but it will take some time to see how well it fares. The concept is good, however.
Type safety is a very good thing that helps you find bugs earlier and easier. Thus, you WANT as much type safety as you can get without it becoming too much of a headache.
Learning from others code is a horrible way of learning of how to program. Partially because there are so many coding styles out there, some of them really horrible, and most importantly because there are tons of bad practices out there. You as a newbie do not understand what is considered good and bad practice. All languages have them, and in time you will learn, and until such times, actually learning from others code is usually a bad idea. Contributing to projects is a good thing, however.
Also, it is generally better to learn several languages than to try to master some few specific languages. Programming is a science, and as such, you should broaden your horizon by looking at several languages with different paradigms to learn concepts, how to code, and tons of other stuff. The rest is typically syntactic sugar, and that is more easily learned than concepts, algorithms, etc.
So after you learn C# or some other high level language, you can go down to C++, then C and assembly, if you wish. I'm mostly experienced with C++, being my favorite language, so I can recommend the book Accelerated C++ which is a very good introduction book for C++.
I would avoid C like the pest. The reason being that C++ offers everything C does and offers tons of other advantages that C cannot. Understandably, there are certain systems and platforms where C++ cannot be used, and for such reasons, knowing C is not a bad idea. But avoid using it unless you absolutely must.
The same goes for assembly language since that is generally completely unreadable.
Don't know if I missed something, but this is my opinion, anyway.