My Google searches always result in the same outcome, with people so quick to bash Assembly, so I decided to ask for myself.
How do you feel about Assembly languages? Is it really not worth learning? Granted, I'm the type of person who's all for pointless skills, but it's a little disheartening when the only thing about Assembly that comes up is negative.
A lot of older engineer folk have been pretty encouraging about it, but their mindset is also different. They were there for "the dawn of technology". Though, a lot of the time I've found they don't quite grasp modern day programming. I've been told that languages like C++ are too inefficient, that assembly is the way to go. Assembly languages are very low level though, and aren't really designed to handle what we code in this day and age (or am I just being ignorant about it?)
I'm obviously pretty confused. I'd appreciate any insight you guys can offer.
Oh, and bonus question. Which Assembly language (or machine language) is the most useful to know, if it is worth learning?
(I know the answer varies a lot because it all depends on the line of work, but I'm asking in general)
C++ is very efficient as computer languages go (unintended pun lol), pretty difficult to outdo for performance unless you really know what you're doing in assembly. Also, you're not going to write modern day programs in assembler, unless you end up in a small, specific area of computing.
In summary, I do not think it's worth learning. Better to sharpen your C++ skills or learn/get experience something you're more likely to use in future (Python, JS, Java, C# etc).
Heya! Assembly is well worth your time. This is not really a "language" as such, but I prefer intel syntax to AT&T/Gas, I recommend against using HLA. If you're interested in getting started, I would actually start with the source code to pokemon blue/red, which has been very well commented (just search for pokemon blue disassembly, include iimarkus perhaps)
C++ is quite efficient- ASM is slightly harder to grasp, but honestly very fun. You can use inline Assembly with C++, it's an interesting experience.
Keep in mind one of the issues with going so low level is the differences between architectures, each CPU has different properties, and higher level languages do quite a bit to protect us from the difficulties of programming for multiple chips.
I can't stand the people that bash low level topics. They are generally poor programmers who worship cookie cutter technology and argue that there is no reason to understand what's going on under the hood, while in reality they aren't bright enough to grasp it.
Once one understands how vastly different architectures are from eachother they can realize the value in having a compiler automatically optimize higher level code for each target platform.
I'm proud of myself, I didn't directly bash any certain language in this post, although it was very tempting...
I can't stand the people that bash low level topics. They are generally poor programmers who worship cookie cutter technology and argue that there is no reason to understand what's going on under the hood, while in reality they aren't bright enough to grasp it.
Very well said. I agree: knowing how somthing works can allow you to use that particular thing better (or even find new and interesting ways to use it). I've found many Java devs (and other programmers who write strictly in high-level languages) think this way: they think that it doesn't matter how somthing works, just that it does work.
Intel is easier to learn IMO but GAS/ATT has pretty good gnu ref and is better overall... I see gas as better due to gnu tool (like gcc) compatibility. If you plan on mixing c and gas learn ld as well.
Hey, thanks for all the great responses. It's really great to see new ideas and opinions.
Mats wrote:
Also, you're not going to write modern day programs in assembler, unless you end up in a small, specific area of computing.
I mean, you've got a point there, but that can be said about most things.
ultifinitus wrote:
I would actually start with the source code to pokemon blue/red, which has been very well commented (just search for pokemon blue disassembly, include iimarkus perhaps)
I looked it up, and found it on Git. Thank you, that's a really great start!
ultifinitus wrote:
You can use inline Assembly with C++, it's an interesting experience.
That sounds really cool. Definitely something I want to look into. Is there any specific way to do it? How is inline Assembly imported into the C++ code? With a header?
Luke Leber wrote:
...They are generally poor programmers who worship cookie cutter technology and argue that there is no reason to understand what's going on under the hood,
IWishIKnew wrote:
...they think that it doesn't matter how somthing works, just that it does work.
Sounds a lot like most of the people on the forums/blog posts I saw. They're very quick to bash without any explanation, rhyme, or reason.