When comparing Assembly vs Common Lisp, the Slant community recommends Common Lisp for most people. In the question“What is the best programming language to learn first?” Common Lisp is ranked 19th while Assembly is ranked 49th. The most important reason people chose Common Lisp is:
Almost all aspects of the language are designed with interactive/repl use in mind.
Ranked in these QuestionsQuestion Ranking
Pros
Pro Low Level - it's how the computer works
One of the best ways to learn how a computer actually works is to work your way up from lower level abstractions. Assembly, being only a level above machine code, is low enough level to make it clear how the computer is actually performing a computation, including code flow and loops, but high enough level to not be excessively tedious for the type of small projects that a student would do at the beginning of their first programming class. Use of an assembler with macros can stretch this even a bit further.
Pro Naturally creates fast and small programs
Because of its natural syntax and low-level nature, assembly language programs are typically really small and fast.
Unlike other programming languages, in assembly language it is really hard to create a slow and over-bloated program.
Pro You must look into it if you really want to understand what computers do
There is no other way to understand a processor, so dig in.
Pro Useful for embedded systems
A curriculum that involves an embedded component, such as an Arduino or a Raspberry Pi, can encourage students by allowing them to immediately connect their work with 'real systems'. Assembly is the ideal language for getting started with and understanding these devices, and since Assembly can be called from C, the code will still be useful if students move on to C later in the program.
Pro Uniform syntax
Assembly language syntax is relatively uniform, and so there's less room for a student to get confused by obscure characters, or miss some meaning implied by structure, such as with scoping rules, or call-by-name/value/reference semantics. While there may be a lot of mnemonics to look up, most work involves only a very small subset of them.
Pro Carefully designed for interactive use
Almost all aspects of the language are designed with interactive/repl use in mind.
Pro Very Powerful REPL with SLIME
SLIME (Superior Lisp Interaction Mode for Emacs).
Pro Condition/restart system
It is easy to recover from errors. Error resolution can be determined by the user at the REPL.
Pro Image based runtime
The state of the program may be saved and reloaded as an image, supporting safer modification of the running program. New code may be compiled into the image as the program runs, while late binding ensures that symbol redefinitions take effect throughout the program.
Pro Almost as fast as, or faster than, C
Some compilers such as SBCL can be faster than C or other low-level languages, and most compilers can generate fast native code.
Cons
Con Difficult learning curve
Starting off as a beginner with assembly language could prove very daunting. I suggest learning a high level language first (e.g. C) to get a good grasp of programming - especially dealing with bits, bytes, numbers, accessing memory with pointers (which is why I suggest C).
Then once that person is comfortable writing C (or whatever high level language) programs, they would find moving to assembler a little less of a "What the hell?!!!" experience.
Con Rarely a requirement or used in professional employment
(except for experts, which will outperform you in assembly language and execution speed on any day of the week, simply because they have full control of the processor.)
Con Not very portable
The instruction set may change depending on what CPU architecture is being used. Also, there will be some differences in implementations due to different assemblers being used, such as with changes in OS.
Con Language for those sadists that like pain
Not recommended as a first language. However, in small doses to show how higher level code is executed, can be of some value. Is also a language that will take a longer time to learn or finish projects with, so usually not for those who are in a hurry to get anything in particular done.