Two More Eye-Opening Programming Language Experiences
Posted by Jeremy Voorhis Tue, 03 Oct 2006 23:51:00 GMT
As a followup to my last post, here are some brief musings on other recent language experiences I have had that have challenged my comprehension of programming languages. If you have any experiences to share of your own, by all means do!
Common Lisp
Lisp is among the earliest families of high-level programming languages, and it has many incarnations, from the semantically pure Scheme to the pragmatic Common Lisp. Lisp looks daunting, at first, because of its mandatory use of parenthesis for expressing nesting - if you squint, it all looks the same.
One feature that sets Lisp apart from other languages is its ability to treat code as data. Since Lisp functions and Lisp data structures are represented the same way, Lisp's macro system allows you to manipulate Lisp programs at compile time as if they were simple data structures. This allows Lispers to write custom dialects to concisely express common abstractions.
While Lisp is often written about as being esoteric and difficult to grasp for non-Lispers, Practical Common Lisp takes you through a whirlwind tour of vital Lisp techniques and makes them easy to understand; the reader should have a good grasp of macros and where they fit into the development cycle by the end of the book, as well as packaging lisp code as modules and other techniques for programming-in-the-large. Find it at your bookstore or read it online.
Text: http://www.gigamonkeys.com/book/
Language: Common Lisp - try SBCL
Important Concepts
- Code as data
- Rapid prototyping
- Meta-programming
- List processing - destructuring, et. al.
C++ Template Meta-Programming
If you're like me, you may have learned the basics of C++ at your university and left it at that. What my college didn't tell me about was how the language was re-invented within the last decade by important works such as Andrei Alexandrescu's Modern C++ Design and the Boost community.
The latest C++ techniques have led to highly flexible generic implementation of design patterns and interesting libraries for functional programming and parser generation. I was particularly surprised when I discovered relatively sane implementations for multiple dispatch over value types (think archetypal multi implementations of factorial and fibonacci functions). I implore you to go ahead and explore - you might be surprised at what you find.
Resources
Language: C++ - if you're reading my blog, it's highly likely that g++ is already installed on your system.
Important Concepts
- Generic programming
- Template meta-programming

These are great posts, I love looking into this kind of stuff at work. Do you find you still have a lot of time for this now that you’re out on your own?
@Jack
I limit it as best I can. Most of that sort of tinkering happens on the weekends, and some of the items mentioned – the C++ and Lisp bits especially – were something I meant to post long ago.
On the other hand, continuously getting better at what I do is vital. Acquiring new perspectives is vital. I don’t intend to stop learning. Ever.