Basically the Nesdev Wiki got me started. This tutorial, which was also referred there, is a -really- good start to 6502 programming, I think. Very beginner friendly, with a helpful "emulator" included for testing out and playing with instructions of your own:
https://skilldrick.github.io/easy6502/Once you've completed it, read up on the NES registers, which is everything that makes this system unique, especially the
PPU, which essentially is what you're using to communicate with "the outside world"

I spent probably a few days casually reading about the various aspects of the NES hardware before I even started writing my first line of code. On the other hand I never followed any kind of "make your first game" tutorial step by step, I just jumped right out into it.
There are some other really good links on this page:
https://wiki.nesdev.com/w/index.php/Programming_guideCompared to stuff like C# and Java, Assembly languages are obviously the complete opposite camp, and you'll quickly find out why C/C++ is also considered high level in comparison. But that doesn't mean it's any more difficult - in fact, with assembly you're working with a lot fewer restrictions, and the ability to build up your code any way you like. There are fewer things you -can- do, meaning it's a lot quicker to learn. The only drawback is that getting anything done usually takes hell of a lot more legwork. For your first test project you may want to work with existing CHR data (the graphics ROM) stolen from someone else, so you know that part works as it should.
With knowledge from C#, etc. there is not much you can re-use in assembly, but experience with logic based programming in general is universal, and should help give you a quicker start. I'd guess most people here came from a more high-level background before picking up 6502.