How important is for computer programmers to learn assembly language.I am a C# programmer and i haven't program in assembly language at all.Is it really worth learning assembly language for high level language programmers.
I am an assembly only programmer at the lowest level, not using macros or any higher level extensions specifically. As a hobbiest and a good dose of nostalgia mixed in as my first ASM attempt was in 1978, I can afford to be as unproductive as I want.
Archetecture has evolved to the point where understanding instruction sets is a study in and of itself and HLL implementors probably do a pretty good job of addressing that pardigm. In an analogy, understanding shift latency in a trasmission or dwell angles in an engine, doesn't make you a good driver.
I would suspect though, game developers would be keenly interested in someone with assembly knowledge and probably hardware developers too. That being said, MicroChip has a "C" compiler now, for thier PIC series of controllers.
As SHL said, no. In my experience, the only times you will need assembly is if you're developing and operating system, or you're developing on an architecture for which there isn't a compiler for a higher level langauge (eg C). High level languages were invented to be quicker to write, faster to learn and easier to understand than lower level languages. There's a reason that mainstream programmers focus on high level languages.
That being said, if you want to learn assembly, there's nothing stopping you.
I have written assembler code for Intel 8048 and 8086 as well as Sparc chip sets. Each target processor has its own instruction set, so assembler programmers (very low level - direct to the processor) generally focus on one processor family. Mostly today, you can write C code that will be translated to the appropriate machine language - only the compiler/assembler writers need to deal with the CPU directly. In fact, modern compilers translate source into an abstract machine language (COFF, ELF, et al), and only the linker needs to take that and turn it into the target processor code.
So, while (in the Linux environment at least) you may need some assembler for kernel development, it is rare. FWIW, my last touch of assembler was for a Sparc (Sun - now Oracle) device driver about 6 or 7 years ago, and before that device drivers for an x86 real-time operating system 20 years ago! :-)
FWIW, my Intel 8086 assembler/machine code reference manual still has a place of honor on my bookshelf...
I have to agree with the consensus that as a practical skill, assembly language is not very useful. I would, however, argue that knowing something of assembly programming in general does help you understand some of the things going on inside of a compiled program, especially if you dig into the arcana of systems programming and/or compiler design. I see it as being something that is mainly useful for the insight it gives rather than for its actual practical use. Thus, I would recommend learning assembly programming as an adjunct to some broader topic, eventually, but not to put any real priority to it.
That having been said, I will mention that one of the best introductory programming texts I know of - Assembly Programming Step by Step by Jeff Duntemann - is all about assembly programming for Linux, while the classic Knuth texts all use assembly (for a simulated processor) in their example code. You won't regret learning assembly, but unless you are writing either operating systems or compilers, chances are you'll never need to know assembly. It is purely optional with modern computers, and even embedded systems are mostly programmed in C or some other HLL these days.