“I write Assembly.”
When I say that, people usually think: “Hey, you are a pro programmer!” Yes, I am not kidding; I have too many people saying that to me, and it is completely opposite of what I am.
I am a beginner programmer in everything. Yes, I have 8 years of experience, but that doesn’t really make me a good programmer, isn’t it? I don’t have enough experience working in teams for large projects, working under pressure, and such. And knowledge will only get me so far.
Okay, to be honest, I am not really writing Assembly nor am I an assembly programmer, because I don’t know how to write a .asm file. But that doesn’t really matter – I have always been using the intrinsics function, but more on that later. [Edit: 26/6/2014: I know how to now]
Some of you might wonder why there is still a need for low-level or assembly programming any more. Generally, I agree, as the processing power of all relevant microprocessors combined with optimizing compilers nowadays is already abundant. The performance is already enough for most applications – except for a very few use cases where processing powers are never enough. Unfortunately, I happen to fall in such case, which is video processing.
Note that by low-level here I didn’t mean x86 (IA-32) assembly, as those should only be written by system programmers. I am talking about SIMD instructions, more commonly known as MMX/SSE instructions or vector instructions.
All my low-level programming work up to this date is with the Avisynth+ project (fork of Avisynth, a script-based video engine), which I begin contributing only mere 4 months ago. All my low-level knowledge began at that time (except for the pointer, which I am already quite fluent). The project decision is to use intrinsics function instead of external assembly file, because it’s easier and most compiler nowadays (especially Intel C++ Compiler) can generate better assembly than most of us.
Right now, I can use intrinsics functions and can guess the result assembly generated by compiler quite accurately. I can read most .asm file and understand what is happening. But I still can’t write a .asm file because I still don’t fully understand memory addressing model accurately enough to write one. (I can read because Intel assembly syntax makes this very obvious to understand what is going on) And I still can’t find source of some unexpected slowdowns in various piece of code I wrote. I wouldn’t call myself a good/experienced low-level/assembly programmer just yet.
And to be honest, in my humble opinion, I don’t find assembly hard at all if you can write C (not C++!) well. I wouldn’t call myself special for being able to do low-level programming either.