And The Winner Is…

I am a C/C++ developer who turned as a Java developer by faith. Those languages are my computer mother tongue. I write in imperative languages since the dawn of time (and before that it was assembly.) While in college, I encountered Lisp on one of these unfamous Symbolics machines. It was at the time when the first Macintosh came out, back in 1984. The choice of languages to make my living at that time was simple. I had to program on the Mac because I felt in love with the little bugger and I couldn’t afford a 10 of thousands dollars Lisp machine. I started my company creating software for the Mac. From that time, I realized that I would always use 2 computer languages at once, one for building and shipping products at work, the other for learning new things and experimenting at home. Over the years, some of those experiments landed with their adoption in the workplace (Java), some never left the playground (Smalltalk.) I still consider that it is a necessity to do my homework and the benefit has always been a result in improving my programming and debugging skills.

Now, 25 years later or so, I decided to re-evaluate what I’ve been learning and using to program so far. Java is the predominant language that I currently use at work. I decided to make the shift a long time ago, because I was just fed up with all these C++ annoyances. I paid the toll of being an early adopter but looking back, the investment was worth it. I’ve also used Perl (and hope to have never to do that again) and now use Python for scripting shell tasks, which syntax I find appealing and libraries amazingly complete and simple to use. But I got buried into that mode for a while now, and it’s easy to keep doing the same thing over and over and not pay attention to what’s happening out there. So I kicked myself in the arse and did some probing around.

What pushed me toward this rebirth in language knowledge is due by both curiosity and a bit of luck. Last year, I moved offices at work and bumped into an old copy of Common Lisp that someone had left behind on the shelf. By then, I started looking at what the functional landscape would look like for a Java developer like myself with a predisposition for new stuff. I was fairly happy to see that languages like Scala and Clojure had gained popularity and started evaluating them with small projects.

As a pragmatic developer, I’ve always tried to keep an eye on what’s coming up and I took the guided tour with few languages. I evaluated Erlang in my previous job but didn’t care so much about its ugly syntax. I’ve pushed back a couple of times on using Haskell for doing serious work. These languages have great and compelling features. But at one point or another, I run into some limitations. I’d go and burry myself a few days in the syntax trying to solve puzzle games and writing basic algorithms. I understand that getting to know a language will make you like it more because efficiency is an advantage. It’s pretty much the case for all languages, including human ones. But I also believe that love at first sight should be part of the sticky factor. From all the languages, I’ve tried and used, at some point, I run into this little detail that will make me wonder: “Why did they have to do it that way? It’s stupid!”. It happened to me way too much with Haskell and Erlang. From then on, it’s easy to lose faith in the language, because you are doing this for fun and not for money.

In order to evaluate languages, I’ve built a classic set a good set of problems from algorithm and data structures classics. The 3 books you’ll find on my desk are “Structure and Interpretation of Computer Programs” (SICP) by Sussman, “The Art of Computer Programming” (TAOCP) by Knuth and “Algorithm Design” by Skiena. Other less frequently used books are “Compilers” (the dragon book), “Introduction to Algorithm”, “Concrete Mathematics” and a bunch of books on algorithms, data structures and transaction processing. A while ago, I realized that anything else I can either google it up or just read some wiki about it. That includes but is not limited to design patterns, web architecture (caching), graphics and cryptography.

Until now, I kept coming back to Haskell just for the kick of it (like a hard drug), hoping to finally adopt the most original language I’ve ever used. Haskell has plenty of good and innovative ideas inside of it. But I can’t seem to get along with the syntax very well. I spent many hours in the libraries source code trying to make sense of some grammar, but my mind just won’t click on certain things. It’s not that it’s too complicate for me because I’ve learned other functional languages but I realized that all the sugary syntax won’t cover the lack of foundations that I come across at one point or another. I didn’t care about the popularity of the language. I wanted to believe. But I couldn’t “fall in love” with it. Same deal with Erlang. To some, Erlang is like a tank, ugly but efficient. To me, it’s feels more like the ugly little duck that didn’t grow up yet.

After all these months of looking around and trying new languages, I’ve recently installed a Scheme compiler on my laptop. It’s name is SISC standing for Second Interpreter of Scheme Code (I am not sure what happened to the first one…) I’ve also picked up a usde copy of “The Little Schemer” by Friedman and Felleisen (the cartoons are very cute) to refresh my LISP memories. So far so good. I haven’t forgotten so much after all. The syntax is a bit different but nothing really crazy. I realized that life is a vicious circle. LISP showed up its face again after more than two decades. I can’t ignore the signal.

What’s interesting about SISC is that it’s built on JVM. And because I’m an Android developer, I’d love to contribute and be able to use it on the platform (someone has done a successful test already.) Why not Kawa? I looked at it and found out that Google is using it as a runtime for App Creator, but SISC seems to be a better candidate for dynamic coding (ala JRuby.)

My goal is to go thru the SICP book once more and solve problems with the SISC REPL. I hope to start sharing the results of this endeavor pretty soon. I’ll then tackle the Skiena book and maybe Sedgenwick if I have the energy and the time. My long term goal, God willing, is to re-read TAOP, and do the same for problems marked <= 25 (at first…) I’ve never digged M/MIX anyway 🙂

Till next time, have fun!

3 thoughts on “And The Winner Is…

  1. Hi! I could habe sworn I’ve been to this bog before but after checking though some of the post I realized it’s new to
    me. Anyhow, I’m definitely happy I found itt and I’ll be bookmarking
    and checking back frequently!

Leave a comment