Should I learn Assembly?

No experience beyond some basic scripting when it comes to writing code.

But I want to write a simple device driver for a keypad.

Is there much of a career in learning assembly?

No, and most drivers are made in C. And there are almost no jobs for assembly

Assembly is only useful as a learning tool nowadays, it helps to understand how processors access memory and execute instructions.

In the real world, c compilers are so advanced that you wouldn't be able to beat the assembly generated by them.

It's really niche now. The reason people used to use Assembly was because CPUs were slow so machine code had to be as efficient as possible. Compilers used to be pretty shitty, so a talented assembly programmer could make more efficient code.

Today compilers can make highly optimised code just like humans writing in assembly, and fast CPUs are so cheap there's less emphasis on making ultra efficient code.

just throwing this out

if you want to learn reverse engineering, you have to know the targets ASM lagnuage

If you're interested in how the computer works, sure, there's a lot of value in that even when you're writing high-level code later on.
Understand that there's not one assembly language, it differs greatly across various CPU architectures. X86 is quite painful, so I suggest learning with ARM, MIPS or even something like the Motorola 6800 if you want a more constrained environment.

This is a bit of a misconception; while it's true that an implementation of a problem in C may beat the same code naively ported by hand to assembly, there is still a lot of room for optimisations if you really know what you're doing.

The level of knowledge of assembly you need to beat something like GCC is super deep. Totally possible, but at that point why not just learn C?

Hey I want a cheerleader

It depends on the target platform; for x86 there's almost no value in writing assembly, but for a more obscure microprocessor on embedded devices it might be the case that the user knows the hardware intimately while GCC can not optimise to the same degree.

short answer: yes.
long answer: yes, you should.

See you all in China

Thanks for the amazing answers.

Android programming cheerleaders when?

>Should I learn Assembly?
Yes, definitely.

>Should I learn Assembly first, when I have no other experience in programming?
Hahahah!

>America
>>GET MORE WOMEN IN TECH, DIVERSITY QUOTAS NOW
>China
>>GET MORE WOMEN IN TECH, THESE MEN NEED A MORALE BOOST
Is China doing for for Women in Tech than America can ever hope to? We have dumb faggot shit like Koding with Klassy and screenshots of syntax errors everywhere because the dumb cunt doesn't know how to fucking use the command line and they have cute mascots everywhere.

How does one start learning reverse engineering? I know quite a lot of programming, including asm, and a reasonable amount about how computers work fundamentally. Is it just a matter of experience? I.e. working with tools like IDA and just trying to understand what an executable is doing or would it be more effective to find a textbook on the topic and work from there? If so, do you have any recommendations?

assembly is only used in AAA console game development when developers need to render particles and shit

also lunar rovers

Yes

computer science students do, so yeah, learn a mips implementation with an emulator or something

Start at babby level. Try looking at a few simple programs you've made in IDA / BinaryNinja and try to follow what's happening. Since you said you already know asm you should already know what's going on.
A disassembler isn't your only tool. For example, you can use strace to monitor syscalls a program is doing.

>programming cheerleaders
Huh. Maybe I should move to China. Could you imagine the shit a US company would get in if they pulled something like that?

Anyways OP, assembly will really open your eyes to how computers really process information. I'm not sure learning it without any other programming knowledge would be a good idea. Learn a decent amount of C first, and then you'll be able to appreciate the assembly better.

There is no career in assembly. However, assembly knowledge is an important part of many careers that will likely not be replaced, but it is only an appendage to, usually, a strong C skill set. It's basically why engineers still learn calculus/differential equations when we have software that can do it. When you're actually working with the stuff it's helpful to know what's going on even though a computer program will typically do the work for you. It's only relevant if you want to work close to the hardware, though.

Dump the assembly, step through it in a debugger, and track data through it's execution until you can piece together what and how the program is doing.

>There is no career in assembly
That's not to say you won't ever use that knowledge. It will be useful for RE and making mods for vidya for years to come. I would've added some particular use cases with microcontrollers but those few cases will soon be irrelevant.

There's plenty of work with ASM.

Yeah, I mentioned that. Microcontrollers are done for with these cheap microprocessors that can run a full Linux distro on$35 of hardware. Even if we always have microcontrollers, even now you don't need to bit fuck in assembly to work with them. I think assembly will always be relevant, though. Someone has to maintain the foundation of our entire computing world. But as far as a career in strict assembly; that doesn't exist. Any application where you deal with asm these days it'll almost always involve C.