My Assembly Programming Language teacher, Belal Hashmi Sahib said in the first lecture of the course, “Assembly is extremely simple. It is so simple that students don’t expect such simplicity and hence it starts appearing complex to them”. Then he wrote MOV AX, BX on the board, explained it and asked if everyone understood it. Everybody nodded. He asked again to make sure there was not even a slightest bit of confusion. It seemed very simple and trivial to everyone. He proceeded by saying “This is the end of the assembly language programming course. The rest of the course is just the revision of MOV AX,BX”. Everybody thought it was a joke but later it turned out that assembly indeed ended at MOV AX, BX. The rest of the course was about learning other concepts to fully utilize the potential of MOV AX, BX.
Last year I learned Lisp on my own and then TAed a course on Lisp at
LUMS with Dr. Umar Saif. In the first lecture the first thing Dr. Umar
(lambda (x) (+ x x)). At this moment I realized
that just like Assembly, Lisp had finished! Because if students had
understood it, there was nothing much about the language left. All they
needed now was to understand some important concepts such as recursion,
closures etc. to use Lisp.
What is common between Assembly and Lisp? Both of these two languages are very simple to learn as they have little syntax or fancy language features. However the process of learning them compels one to grasp some important concepts. For instance by learning assembly you are bound to understand some flavor of computer architecture, interrupts, timers and other hardware related stuff. Similarly by learning Lisp you automatically get to know functional programming, interpretation, recursion, closures etc.
A programmer familiar with assembly can easily understand the use of
unions, options such as
__decl and other such features of C because he
knows the underlying magic. Similarly if one wants to understand the
recommend learning Lisp.