In my green days I've studied the assembly lang because of my job as a industrial programming, but I've never written malware.
I prefer to dissect a malcode to understand how it works and how skilled was the person who wrote it.
Well, even if today we use high-level languages that simplify the work, the assembly is always useful, as it is a low-level language. The low-level is sometimes necessary when we are planning particular software, as drivers that need to work directly with the hardware, and only the assembly is able to do it correctly and accurately.
In addition, the assembly is used for reversing and much more: debugging of applications, analysis of program's behavior, control of the correct operation of the software, editing software, study, etc
The debuggers, the disassembler, the memory-scanner, etc., "speak" assembly and it is useful and right to study it (a programmer should know it).
For example, a debugger is a software used to examine the execution of another program, in order to find errors and programming problems. Compared to the disassembler, which offer a snapshot of the software and may not provide information on the execution of the various functions, a debugger provides a dynamic view of the program, going to do step-by-step instructions.
Almost all programmers will be familiar with the debugging of the source code of a software. This type of debugging at source level, is much more simple and less complex than debugging at the assembly level. The latter, instead of operating on the source code (which we don't have), operates at a low level, then in the assembly.