would the experienced people here suggest learning AVR assembler first before C, or after, or learning both simultaneously, or not ever learning assembler at all?
The problem is that if you want to program beyond (below?) the primitives that the Arduino libraries provide, you must also learn something about the Architecture of the AVR. What a register IS, who changes it, and how, how that interacts with other bits of hardware on the chip, how it all ties together to talk with your software. High level languages insulate you from that (some more than others.) Technically, I believe that you can learn the necessary architecture details without actually learning "AVR Assembler" per se. But you would have to have a background in a similar assembler on a different architecture to build on, or a book that explained the architecture at the C level (some ARM books do this.) (these things would usually be explained as part of an assembler course.)
I guess they key useful thing to take away is what registers you have to access, what's the difference between a register and a RAM location, what's the difference between those and flash locations and EEPROM, and what operations can you expect to be efficient between what sort of operands. You probably don't need to know the exact instruction to use or which instructions can't use which registers, or about the T bit, unless you plan to actually write assembler code. But you will need to know a lot about clearing, setting, testing, inidividual bits in specific registers; not you "usual" C programming.