My slow meandering back into web development
Exactly one year ago I started a Web Development Intensive course at (the now defunct, R.I.P.) New York Code and Design Academy. One thing I really enjoyed doing during those months was writing about my journey through the course, and my experience as a “career changer”. Since getting a job in July 2017, though, I’ve been spending most of my time getting familiar with troubleshooting Linux related issues. I haven’t mastered it by any means, but I do feel comfortable enough that I now have extra BPU (Brain Processing Unit) to start studying programming again.
I may have jumped back in sooner had I known where to start. Programming is endlessly diverse, and there are so many voices out there telling me what to learn, or what the highest paid programming language is. It became difficult to discern what I wanted — or even needed — to learn. Because I also felt a significant lack of understanding when it came to computer science as a whole, and I’m the kind of person that has a hard time ignoring said lack of understanding in myself.
So on recommendation I recently started reading a book which I hope will help fill this void. It’s titled Structure and Interpretation of Computer Programs.
Conjuring the spirits of the computer.
We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells. (From Chapter 1)
SICP uses a programming language I’ve never heard of: Lisp (an acronym for LISt Processing). The authors make a good case for its use, though:
If Lisp is not a mainstream language, why are we using it as the framework for our discussion of programming? Because the language possesses unique features that make it an excellent medium for studying important programming constructs and data structures and for relating them to the linguistic features that support them.
If I needed more compelling, they write:
We never formally teach [Lisp to our students], because we don’t have to. We just use it, and students pick it up in a few days. This is one great advantage of Lisp-like languages: They have very few ways of forming compound expressions, and almost no syntactic structure. All of the formal properties can be covered in an hour, like the rules of chess. After a short time we forget about syntactic details of the language (because there are none) and get on with the real issues — figuring out what we want to compute, how we will decompose problems into manageable parts, and how we will work on the parts.
Sounds like my kind of learning. Though if I still wasn’t convinced:
Above and beyond these considerations, programming in Lisp is great fun.
A revolution in the way we think.
Even with all that said, it’s not really about what language we’re using at all. They write:
Underlying our approach to this subject is our conviction that “computer science’’ is not a science and that its significance has little to do with computers. The computer revolution is a revolution in the way we think and in the way we express what we think. The essence of this change is the emergence of what might best be called procedural epistemology — the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classical mathematical subjects. Mathematics provides a framework for dealing precisely with notions of “what is.’’ Computation provides a framework for dealing precisely with notions of “how to.’’
It is this “how to” that I have been more interested in — and concerned with — lately. I could endlessly watch tutorials, for example, on how to build this-or-that app using the latest stack. This would be fine. And I’d probably learn a lot in the process.
In many ways such an approach would be more rewarding in the short term. For example, the immediate satisfaction of manipulate the DOM, and having a finished, polished product to show for myself. But I think I equally enjoy the slow growth of going deep into a subject that is endlessly fascinating to me, and building a strong foundation for programing as a whole.
So here’s tobrew install clisp.