The importance of language and notation in problem solving
Posted in Computing, Science on January 5th, 2007Found this in the slides for a presentation by Jim Weirich entitled “10 things every Java programmer should know about Ruby”:
A language that doesn’t affect the way you think about programming is not worth knowing — Alan Perlis
Amen, brother!
A little searching reveals that it was included in a collection of such pearls of wisdom in an article entitled “Epigrams on programming“, published back in 1982. Some have aged poorly, and some I just disagree with, but there are some real gems and this is one of them.
There have arguably been five significant milestones for me in my development as a programmer:
- Learning to program (almost entirely self-taught, first on a TI-59 programmable calculator in Jr. High, and then on a TRS-80 Model 1, 16K, Level 2 BASIC in High School)
- Learning structured programming and memory management (PASCAL, then C, while an undergraduate)
- Learning (in graduate school) to think of programs as formal, mathematical texts, which can be reasoned about in a mathematical way. This included learning pure functional programming (Miranda) and then taking a wonderful and head bending course on the formal derivation of programs from specifications taught by Edsger Dijkstra.
- Learning object-oriented programming (C++, Eiffel, and Java) as part of my teaching here at UMM.
- Moving from a kinda-sorta waterfall model of software development to understanding and embracing agile development methods (again as part of my teaching here at UMM). There was no programming language, per se, but ideas and tools such as test-driven development, JUnit, Clover, refactoring, and Eclipse all played important roles and certainly changed the way I think about programming.
Of those, probably the hardest was probably really “getting” objects after all those years of C. It was the first major transition (since my initial forays into BASIC) that was entirely self-taught, and really changing the way I thought about the structure of software was tough. Now, on those odd (and thankfully very rare) occassions when I find myself leaving the world of objects, it’s amazing how strange and foreign the old ways seem and feel.
It’s been a while since I’ve learned a programming language that stretched my head and helped me rethink some important things. I think Ruby has the potential to open up some new doors (if small ones), and Rails is pretty darn cool, so I’m looking forward to becoming more conversant in those universes.
No tag for this post.


