I am currently having a lot of free time and I am considering learning Assembly language. Do you think I will come out with a better understanding of how computers work and how programming languages work?
Have you learned Assembly? How did it change your perspective?
Devon from Devon Crawford channel has a very nice video about it. youtu.be/ReVeUvwTGdU
He talks about C and Assembly languages there as well. He talks about the benefits of knowing those languages.
It is an exciting video I might add.
Not a good idea. There are several abstractions between assembly language and modern programming languages. May not be worth learning it.
If you have lot of free time, I will recommend reading a book -- Inner engineering by Sadhguru. It talks about a lot of things and gives a perspective of who we are. I read it a month back. And love some of what is there in that book.
If you like to stick with science, there is another book, one of my favorite reads: QED - The strange theory of light and matter by Richard Feynman.
If you like videos, there is The Secret Life of Chaos presented by Jim Al-khalili
And if you still have free time, there is plenty of things to do. But learning assembly, hmmm, not good use of time.
I found this (blog.jessfraz.com/post/digging-into-risc-v-and-ho…) to be interesting, If I were I would have spent some time on this. I suggest you take a look at it and see if you feel the same.
I've learned basics in college. But the new languages gives a lot of abstraction. You don't have to understand everything at the root level.
It also depends on what you want to achieve. If you're into hardware coding, or much more system level programming, learning assembly will be good. If you're into web development, I find it useless
I was educated in a world that assumed IT ("Business Information Systems" in those days) people needed Assembly Language (and COBOL and FORTRAN). I entered a professional IT world chock full of Assembly programmers. For the decades I lived in that world, there were bunches of full-time, captive employees, writing Assembly Language. My main programming language was as far away from the assembler as it could be and stay on the same machine.
I have personally never NEEDED to code to the assembler, but I recognize cases when that need might exist. There are mathematically intensive sets of instructions that are best delivered in Assembly Language for the value of performance. Many (most?) high-level languages offer some keyword, e.g., ASM, by which to invoke the assembler. If you want to program games or high-performance video transformations, the assembler might be your friend.
I explored Intel x86 Assembly Language for a little while back in my C days. I wrote a program to read/write sectors at the level of the hard drive (ANY sector ANYWHERE on the hard drive) without mediation by a sane interface...scared my pants off to have that level of power.
So, yeah, I think coding to the assembler still has and likely always will have a place, a very specialized place but not one I care to inhabit and not one I would recommend to other programmers in general.
There's almost certainly more productive ways to spend your time while you're young.
I can't speak much for assembly but I do recall my peers talking about this years ago, to be honest I had to Google it as never done it and from a programming point of view I doubt that you would learn much, however saying that if you want to pursue programming I would suggest python or c# c++ / java , these are higher languages but these are the closest ones you'll get to the assembly part and I think that would be a much higher return on investment because you would learn a lot more and it would be a hell lot easier too 😊
I did. I had to reverse engineer a couple of things a long time ago.
To understand how your computer you can write a toy OS (there's a lot of resources to help you). Here's mine: Toy Realmode OS
IMHO, assembly is just a piece of the puzzle, you gotta understand how things work together. Some questions I had out of sheer curiosity in the past:
.elf or .exe file?for loop is implemented in the binary file, what sort of op codes the compiler use, how will it optmize the code? (Programs written in C)If you want to take a look how everything fits together I recommend this book, it will teach you lots of interesting stuff.
I started off my IT life in the late 70’s programming in Assembler and Machine code in engineering applications initially and then business focussed (specifically ERP software).
My 1st “high level” language was the original “C” loaded by magtape onto a Digital Equipment Corporation (DEC) computer.
This led to really wanting to understand how computers worked resulting in building a Z80 based computer from a kit so I could study how the “chips” and the software interacted. Was thousands of solder connections and lots of digital debugging with a probe and oscilloscope (because it didn’t work at first) so took some time :-)
There were a lot of great books for Z80 machine code and assembler plus the full reference manuals were available for the Z80 chip (plus the supporting chips) so was the ideal relatively low cost way for a digital hobbyist at the time (unfortunately never had the brains or maths to be an electronics engineer).
While none of this is necessary today it did lead to my life long passion in all things IT related and started me off on the journey of a 40+ year continuous professional career in IT from working for multi-nationals to co-founding my own successful software company.
A big part of this journey was combining the business and sales side of IT with my “nerd” interests fairly early on in my career.
I’ve only recently retired and planning on starting my blog on HashNode where I will share some of my experiences that are hopefully both entertaining and helpful to others.
I can't speak for assembly. I did learn some WebAssembly, and I found it quite interesting to think in a very low-level way and in a quite different style of programming.
I haven't really used the knowledge directly in my working life, just for my toy programming language. But I work in Java - maybe if you do low-level performance stuff it'll be more directly applicable. (Your profile says front-end, but you also asked about C, so maybe?).
However, new ways of thinking can be at least as useful as lines of code you can use directly. If you have the time and interest, I'd say doing something totally new like assembly would be great.
It is my understanding that 'normal' assemblies are fairly different from webassembly (correct me if I'm wrong), but I would expect it'll teach similar lessons. Or since you're a front-end dev, maybe WebAssembly is even more interesting?
Assembly is besides nand or nor gates the closest you get to the machine usually.
To me it depends on what you want to do.
it's a load of mnemonics that are CPU architecture specific that can give you a lot of information.
If you got time and you want to understand it a bit more it can be usefull but if you got time I would rather recommend nand2tetris.org/course
because they take you through everything :) in a strucutred way. including assembly but the approach is wholeistic :)
Todd
Software Security TechLead
Learning assembly is extremely valuable, depending on what you are going for. Are you trying to only stick with web development? If so, then maybe it's not that useful. However, even then, how will you even know if you want to stick with web dev if you don't first try other types of programming?
I can tell you that I wouldn't be where I am if I didn't learn assembly. Having assembly language as a skill on your resume and being able to answer assembler questions in technical interviews is a HUGE advantage for many jobs which involve low-level programming, reverse engineering, optimization, security, etc... I am a team lead and I can tell you that if I see assembly on someone's resume or portfolio, I am much more likely to interview them for a software security engineer position than those without it.
Even if the job doesn't require assembly, the chances that someone will be fluent with assembly and understand such low-level programming, but struggle with javascript or python is very slim. However, there are plenty of folks who can do a .contains() or .map() but have no clue what the hell is going on under the hood.