Today I was asked what I would to do change Smalltalk. I have to admit I was not prepared for that question. However, I have a deeper question I’m attempting to answer: Is this a good time to get back into Smalltalk development? To which I’m answering: Yes.
I believe Smalltalk is starting to enjoy a rediscovery due to Seaside and, indirectly, Ruby on Rails. It seems to me that Dynamic Languages in general are enjoying a bit of the limelight; Groovy on the JVM. I have to ask myself why. I believe I already know the answer since I have a well-known affinity for Smalltalk and dynamic languages in general: development can be and often is more productive.
I’m not going to argue specifics; these are my observations and experiences. However, for me, when using a dynamic language to develop a particular solution it seemed I spent more time solving the problem then trying to fake-out a compiler. I also wrote less code. Imagine that: less code to solve a given problem. Simple is always easier to debug then Complex.
Plus I tend to follow the thinking: Make it work, Make it right, Make it fast (attributed to Kent Beck). Which means, to me, solve the problem first, in the simplest manner that will work. After I get the solution working and tested I then spend time refactoring and ensuring the overall design of the solution remains coherent. To me this flies in the face of current J2EE development which seems built on the mantra: Write a Million classes that apparently do nothing. This is completely unnatural to me.
When I started this career, some 14 years ago, I was fortunate enough to start in a Smalltalk development shop. I got OO. My former manager called me a ‘natural’ programmer; I finally appreciate what that means. Everything came so easy to me. I seen the objects in the application. I seen them working together to accomplish their goals. I instinctively understood anthropomorphism before I learned the term. “The Contact does what?” “How is the Account and Contact related?” Whiteboards and Booch diagrams were my friends. It was my former manager that gave me a copy of Design Patterns; telling me, “this is going to be important.”
I was/am used to objects knowing how to do things. I mean when my wife asks me to take the garbage out I don’t ask my father for instructions - I do it. With Java, most of the community I interacted with was afraid of this kind of pattern. “What do you mean the object will know how to save itself? That’s what the DAO’s are for.” I rolled my eyes. Great! More code to write, maintain and debug. Clueless
Then comes along Ruby on Rails. I had heard about Ruby around the same time I heard about Java. Unfortunately I was not on the right path at the time and dismissed Ruby out of hand. However by the time I was exposed to Rails I was ready for a change. Actually truth be told I was ready to leave Java to moment I started developing in it - there just weren’t any Smalltalk jobs where I lived. I digress.
Since Ruby, at least to me, appears heavily influenced by Smalltalk I was immediately comfortable with Ruby’s syntax. I understood the concept of Blocks. I understood the idea of “everything is an object.” As with anything new, there was a learning curve when it came to Rails, the web application framework built on top of Ruby. But it was exhilarating and liberating to develop applications using Rails. This was 2 years ago. It was then I was able to use my Smalltalk experience. Finally! It was then I made the decision to seek out Ruby on Rails gigs. Still working on it. It was then I made the decision to forego statically typed languages in favor of dynamically typed languages.
The journey began 2 years ago and continues today and tomorrow. Today found me in the unique position of talking to several Smalltalk experts, displaying the experiences I’ve gathered over my 14+ years doing software development. Today, no matter the outcome, got me one step closer to my goal for 2008: a paying gig developing Smalltalk or Ruby on Rails applications.
P.S. Today’s experience also has me thinking I should be spending more time looking at Seaside.