Well, after finding this forum again in my insanely-long list of dusty bookmarks it's about damn time I made at least one post. However I dislike reviving dead topics...yet this was the only one on assembly I could find.
I'm personally learning Assemblers language (also known as Assembly) as a first language. Specifically x86-32 or AMD-32.
Other types of programming languages (and tutorials) tend to utterly and incomprehensibly fail at telling you, or explaining to you, what goes on behind the scenes. I normally see tutorials go to the effect of "Here are 15 commands, I wont tell you what they do behind the scenes, but here they are anyway".
It's one of those weird fallacies where in programming they say "start out with something easy to know the basics". Erm, no. You start out by reading as much as you can so you get the basics hammerd into your skull, then learn assembly, then a high-level language. That way you know how it works, what it's doing, etc. It actually makes the end result a lot easier than doing it in reverse.
I also believe it makes for better programmers.
Sufficed to say, when you know what's going on behind the scenes, you know how to program better. There is a main reason programmers managed to develop software so well in the days of assembly...they were better programmers.
Now days you have high level languages such as C++ that serves as nothing more than a bloatware-infested programming language. There is, in fact, a saying about C/C++ that has been circulating.
"Real programmers use C. People that like to call themselves real programmers use C++"
As an example of bloatware, lets compare C to assembly. In C, "hello world" is about 15kb. In assembly? That same message is 2kb. Now imagine what 1MB of assembly programming would be (granted, depends on what you're doing) in C or C++ (which is even more bloated than C).
However, lets look at a very-main advantage of C. C is a Medium Level language, as it allows for code optimization and the person can actually APPLY their knowledge of assembly to it. Whereas in high-level languages, you cannot use assembly or much to the effect of code optimization. At least so I've read/been told.
And as for difficulty, assemblers language is fairly easy to learn if you actually somehow manage to find a tutorial and assembler (by some miracle) that doesn't seriously need rewriting.