Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

As it were, I do enjoy programming in assembly. I know that as a rule, assembly is platform specific so 'x' assembly will not help me if I had to work with 'y' machines. That said, how common are (at least competent) assembly programmers and how in demand are they?

share|improve this question

closed as off-topic by MichaelT, gnat, GlenH7, Dan Pichelman, Ozz Sep 25 '13 at 12:54

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions seeking career or education advice are off topic on Programmers. They are only meaningful to the asker and do not generate lasting value for the broader programming community. Furthermore, in most cases, any answer is going to be a subjective opinion that may not take into account all the nuances of a (your) particular circumstance." – MichaelT, gnat, GlenH7, Dan Pichelman, Ozz
If this question can be reworded to fit the rules in the help center, please edit the question.

6  
Good thing you're 17: "He who hasn't hacked assembly language as a youth has no heart. He who does as an adult has no brain." -- John Morre ;) –  delnan Dec 25 '10 at 22:52
    
@delnan Just curious, but who is John Morre? I can't find anything on him. –  Glenn Nelson Dec 25 '10 at 23:19
    
That ought to be John Moore (stupid stupid typo). But I don't know anything about him anyway, I just stumbled over the quote (e.g. at wikiquote.org/programming) and remembered it when I read this. –  delnan Dec 25 '10 at 23:26
add comment

7 Answers

up vote 6 down vote accepted

Assembly seems like an awesome skill to have but a rare skill to use. While it certainly proves that you've got something going (knowing how software really works is good value in my opinion), I doubt many companies still use it on a regular basis.

Once you feel you have a good grasp of assembly, move on to another language, such as C, C++, C# or maybe Java (what to choose is a whole new topic). This will help you get a much broader spectrum of skills that are more likely to be in demand rather than just assembly.

share|improve this answer
    
I get what you are saying, and I do in fact have a few languages under my belt aside from assembly. What I'm really trying to ask here is not what should I do to be 'in demand' but if assembly and those who program it are. –  Glenn Nelson Dec 25 '10 at 23:29
    
As I stated in my first paragraph, I find that companies that use assembly on a regular basis are rare, but existant. That's my opinion though, not a fact by any means. –  andre Dec 25 '10 at 23:35
1  
Image and video codec developers typically need to deal with dis -assembly on a regular basis as part of optimization. They do not program in assembly, however: they program in C/C++ (and other languages) and then check the compiler-generated machine instructions to make sure they are not sub-optimal. –  rwong Dec 26 '10 at 1:10
add comment

Assembly by itself probably won't get you a job. If you're a C or C++ programmer, it can be majorly helpful to know it because you can examine the disassembly of a function and see how it's really working. If you work in a higher-level language, it falls more under the "nice to know, but not directly useful" category. This is because the way that higher-level programs get turned into machine instructions becomes much more complex.

share|improve this answer
add comment

A programmer can produce about the same number of lines of debugged production code per day regardless of the language. It takes more lines of code to do the same thing in assembly than in most other languages, so you are per definition less productive in assembly than in most other languages.

This means that there must be additional requirements that offset this, where I've heard of the following:

  • Embedded systems with very little memory, where the human can make better code allowing it to do things that might not otherwise be possible.
  • Graphics card drivers, where you need extremely optimized code to get the best performance out of the card.
  • Chrome V8 - http://www.google.dk/intl/en/jobs/software-engineer-aarhus/index.html
  • Java HotSpot JVM. You need to know the code generated (and any other compiler job).

You may want to consider looking at contributing work for some of the new cpu's coming up to a compiler, like gcc.

share|improve this answer
    
I beg to differ about the productivity. Assembler tends to be very brittle code, -especially assembler thats written with the intent to maximize performance. Usually all the registers have been used up, and spilling/restoring registers to shoehorn in something you discover missing costs so much performance that the whole performance advantage from using assembler can be lost. That, and debugging assembler isn't easy either, you can't just throw in a print statement like you can for a higher level language. –  Omega Centauri Dec 26 '10 at 2:21
    
@Omega, based on your other answers you appear to be very experienced in assembly programming, and at this extreme end of the language abstraction Gauss curve you might very well be right about the productivity. Do you have battle stories to share? –  user1249 Dec 26 '10 at 23:50
    
Thorbjorn: Maybe the worst battle storey. I was going to write a lot of math software for the companies new machine, only the simulator was too flaky and I was still waiting to get it to run. Got laid off as a result, and haven't read or written a line of assembler since (over 9 years). –  Omega Centauri Jan 15 '11 at 22:07
add comment

It gives you a deep understanding, how the low level system working, basically, the language may differ to platform to platform, but, you easily adopt to another language, because, you have the deep understanding in low level programming.

share|improve this answer
add comment

I doubt you will find that many pure 'assembly' programmers these days but for malware analysis/vulnerability research knowledge of assembly is very much required.

share|improve this answer
add comment

I think one should know assembly for the system you normally work on but it's very rare to actually write in it. Mostly it's something you need to be able to read to understand what's going on at times.

share|improve this answer
add comment

As some others have said, assembly language is a good way to learn the architecture of various processors, and get an idea of what is easy for a CPU to do and what is more difficult.

Older complex instruction set computer (CISC) architectures tend to be more amenable to be programmed by hand in assembly, where as newer reduced instruction set computer (RISC) architectures more are geared toward compiler generated code. Once you have learned a CISC instruction set, or a RISC one, you will find others of the same type are pretty similar and are easy to pick up.

Twenty-five years ago, when good compilers were less common, most microcontrollers were programmed in assembly code. Nowadays, it is much more common for them to be programmed in C. But it is sometimes still useful to be able to debug at the assembly level, stepping through the individual instructions. Also, it is sometimes still necessary to program in assembly when writing software such as a task-switcher for a real-time operating system (RTOS) where one has to manipulate the stack directly.

So having programmed in assembly is a good thing to know, particularly if you have any interest in getting into embedded systems programming, but don't expect to be doing a lot of it

share|improve this answer
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.