“What do you think of Java?”:
I spent several months programming in Java. Contrary to its authors prediction, it did not grow on me. I did not find any new insights – for the first time in my life programming in a new language did not bring me new insights. It keeps all the stuff that I never use in C++ – inheritance, virtuals – OO gook – and removes the stuff that I find useful. It might be successful – after all, MS DOS was – and it might be a profitable thing for all your readers to learn Java, but it has no intellectual value whatsoever. Look at their implementation of hash tables. Look at the sorting routines that come with their “cool” sorting applet. Try to use AWT. The best way to judge a language is to look at the code written by its proponents. “Radix enim omnium malorum est cupiditas” – and Java is clearly an example of a money oriented programming (MOP). As the chief proponent of Java at SGI told me: “Alex, you have to go where the money is.” But I do not particularly want to go where the money is – it usually does not smell nice there."

What a sense of humor Stepanov has! MOP: Money-Oriented Programming. Ha
When I finished at the university in 2002, already "a 35-year old," I went on a handful of job interviews, travelling even into Manhattan to Bloomberg - what a nightmare! After working in a park for 10 years, how could I bring myself to take a bus into the city and wear clothes that made me feel awkward and servile? It was during this job-hunting process after doing well academically that I became severely depressed, and by 2003 or so I was experiencing severe anxiety, hostility, and eventual chronic depression. Forget about that for now, it surely did not smell nice where the money was. The city stinks, the buses stink, the interviews stink.
So now, well over 10 years later ... just by not handing "security deposit" over to yet another slum lord, giving up rental assistance, and purchasing a refurbished computer from Tiger Direct after deciding to join forces with my ageing mother, I quickly became interested in things I had been interested in before and while going to university. It must have been a combination of exploring Number Theory and Abstract Algebra which led me to the accidental discovery of Sage ... which got me very interested in Python ... with NumPy and then SymPy ... . I've been in the process of reconstituting.
How did I stumble upon Stepanov?
There were a series of textbook writers who I was studying when I was enthusiastic about Python (which was written in C/C++ I believe), including Hans Petter Langtangen and, of course, William Stein and others. I did an exhaustive search on related material. Then I even
**** open an "ancient" copy of Knuth's FUNDAMENTAL ALGORITHMS from 1973, a book I had managed to hold onto throughout the chaotic journey from 1998 to the present. Everywhere I turned I saw Euclid's Greatest Common Divisor algorithm ... Modular Arithmetic and the Chinese Remainder Theorem.
I have to trace through my notes to find out what succession of events brought my conscious mind to this state of attentiveness, to see just when I became determined to return to exploring C/C++ with a beginner's mind. C++ has transformed somewhat during my 11 year cycle of self-destructive anguish. By the end of September I was starting to do some of the exercises in Knuth's Fundamental Algorithms ... the simpler ones ... and I was only interested in Mathematical Preliminaries. I was repulsed at the thought of putting any effort into learning MIX, Knuth's imaginary (theoretical assembly language).
Stepanov is first mentioned in my notes on October 7th. All my "tinkering" with number theory, abstract algebra, and the algorithms behind the kind of Python code I was studying seemed to lead directly to Stepanov. I became curious about generic programming, and, after so many years of no interest whatsoever, I suddenly felt compelled to pursue some kind of understanding of it. Prior to this sudden "spark," I did not really want to know certain things ... I sensed it could be overwhelming. I started off by acquiring a copy of Elements of Programming (Stepanov/McJones). When it arrived, I felt like I had a holy text of some obscure math cult.
I had been learning about Python for only a couple of months, and I was amazed with the mathematical nature of some of the "scientific packages" ... Now I realize that those couple months of undisturbed leisure was a great experience : valuing the efficiency of IDLE debugger after experimenting with alternative IDEs. I noticed how similar the interface of Sage was to the interface of IPython, IPython Notebook, SymPy, NumPy, z3Py, and even gap. In a very spontaneous manner I was exploring the components of Sage.
And then another spark: I found (freely available on the Internet, of course) the gdb-dashboard, a front-end for the GNU debugger ... it was then I started "tinkering" with C++ again. I was hesitant. I decided to invest in some hard copy books, to make some kind of commitment to focusing on "programming as a mathematical discipline".
Now I am at an age that I don't care about the politics of the question, "Is Computer Science a branch of Mathematics?" I accept that what I studied in the university was "computer science" and not "programming." Learning to write a minimal amount of code was part of some of the courses, but all along this has been somewhat separate. Since reading Stepanov, I can clearly state, I want to relearn how to program, not so much as "computer science" but as a mathematical discipline. I want to study the abstract level of C++ STL, while at the same time, doing something I would have done years ago if not for the sense of the pointlessness of it. I also want to study some Assembly Language. I want some kind of harmony between the higher and lower levels of computing.
Both levels are difficult in different ways. This must be what I wish to explore for my remaining years or days left as an embodied mind: Learning about Generic Programming with C++ STL, along with Assembly Language and, yes, a certain branch of mathematics. When I am studying one of these areas of knowledge, I am enhancing my understanding of the other areas. And why not? Would society (or the representative of the corporate state) prefer I took up arms to attack the enemies of the state and consumerist society? I'm just trying to understand things that have been on my mind for a long time. Fortunately I am well past the age of being turned into an obedient soldier who does the bidding of something as abstract as "the State".
Social revolution? Maybe just by pursuing deeper understanding and not caring about "where the money is" IS my own little social revolution. These interests - mathematics and programming - while there may be plenty of in-fighting between the money-oriented programmers and the deeper-understanding-oriented programmers, are international. While one might be viewed as a "loser" in one's own consumerist society, one may still be a part of this international intellectual community simply by being receptive of their ideas!
Before the end of October I had also gotten my paws on From Mathematics to Generic Programming, "the other" Stepanov book (with Rose), as well as Euclid's Elements. I confess that I only use it as a reference. As for FMGP, I read it once through and will have to read it several more times. I have yet to get through Elements of Programming. It is quite terse. I will chew on small parts very slowly. By November 10th I realized I would want a tutorial/reference to supplement my explorations, hence,
the Josuttis text ...
Do you see what is going on here?
I had used the Internet as a resource when tinkering with math and python, and then I gradually became willing and ready for some kind of personal commitment. I want to catch this wave of interest and enthusiasm while it lasts. For a long time I was not interested in anything ... except, well, nihilistic and defeatist philosophy, like Benatar's Better Never To Have Been Born.
So, the question I have to ask is, would Stepanov find it worthwhile to study Assembly Language along with C++ STL and generic programming? I mean, like looking at the assembly code of little programs using the C++ STL ...
It is good for a programmer to understand the architecture of modern processors, it is important to understand how the cache hierarchy affects the performance, and it is imperative to know that virtual memory does not really help: if your working set does not fit into your physical memory you are in big trouble. It is very sad that many young programmers never had a chance to program in assembly language. I would make it a requirement for any undergraduate who majors in computer science. But even experienced programmers need the periodic refresher in computer architectures. Every decade or so the hardware changes enough to make most of our intuition about the underlying hardware totally obsolete. Data structures that used to works so well on PDP-20 might be totally inappropriate on a modern processor with a multi-layer caches. Starting at the bottom, even at the level of individual instructions, is important.
It is, however, equally important not to stay at the bottom but always to proceed upwards through a process of abstraction. I believe that every interesting piece of code is a good starting point for abstraction. Every so-called “hack,” if it is a useful hack, could serve as a base for an interesting abstraction. It is equally important for programmers to know.
And so ... there is a tempting book called
Introduction to 64 Bit Assembly Programming for Linux and OS X: Third Edition by Ray Seyfarth.
What is tempting about this book is that the author has created
ebe to help his students learn ... It's an Integrated Development Environment.
Why the name ebe?
Ebe is an integrated development designed to support Assembly Language. After teaching assembly language one semester where the students and I depended on using gdb for debugging, I wanted a better solution. I tried ddd and a few IDEs, but they all suffered from the fact that yasm doesn't provide data type information to gdb. I started trying to write a debugger in python and decided dbe was a nice name for a debugger. Since dbe had a source code window which supported nearly all that was needed in an editor, it became apparent that dbe was almost a development environment. So I decided to expand it to be an IDE and I had to pick a name for a development environment. The name ebe was too hard resist since it already means extraterrestrial biological entity. But just to satisfy my sense of fairness, I can claim that is stands for easy beginner environment. This also explains the alien icon.
So ... along with C++ For Mathematics, it appears that I have revolted against my plan to restrict myself to reading pdf and epub files on the computer. Realizing that there were some books that I really wanted to focus on ... and now, seeing that I will be carrying my studies into a "day jail" dystopian "treatment center", I justify this investment as a strategy for not only keeping my spirit from being broken by systematic stupidity, but to actually bring excitement into this intellectual adventure.
Rather than trying to focus on one book at a time, I figured it is best to let chaos and confusion gel together, destroying the dichotomy between "low-level" (assembly) and "high-level" STL/generic, and in the process maybe blurring the demarcation between mathematics and programming ... between freedom and the illusion of freedom ... between money-motivated learning and understanding-motivated learning.
Now I can try to sleep so as to be prepared for the morning. I just wanted to clarify a couple things to myself so that I could acknowledge that this learning project with these books is fairly significant to me. Regardless of what society pushes, such as "any job is better than no job" or "money talks, bull**** walks" ... I feel I am making some personal breakthroughs. It is as though I want to study as much as possible before my life falls into severe chaos.
What do I call this Learning Project I am investing time and funds into?
"Programming as a Mathematical Discipline"