If Apple has it’s way, programming for the iPod, iPhone, and iPad (iKnow, right? It’s getting pppretty old.) will only be possible using objective-c. This is not necessarily a bad thing for compatibility and stability, but it closes off a lot of developers. Fine, so you focus exclusively on App Store applications. Except the App Store is as closed to outside devices, as Apple’s devices are closed to everything outside the Store. Again, not necessarily bad for the consumer who desires a walled-garden, or so-called “curated computing” model. Android too, as an embedded platform, is pretty much Java or bust (though much easier to bring in native code with Android and Java NDK) For me, this is the opposite of what I want in a computer, and even more it’s what I hate as a programmer.
Sure, I can spend an entire day, or a week, writing in a single language. You’re not going to get good at something by avoiding it. However, I absolutely love working with other languages. Fortunately, programming usually requires you to choose the best language for your application. I’m currently working on some language processing, which works great in Python, a desktop application, for which Java provides a great cross-platform gui and libraries, and some web stuff in php. I don’t necessarily like bouncing back and forth every 10 minutes, but it’s great to be able to do different things all day. And then of course there are all the collateral shell scripts, SQL queries, regular expressions (eww), and other little things that go along with working hard.
And I love all of it. That is why I abhor iPhone, and enjoy my Android development with a grain of salt. I could Android 4, maybe 5 days a week, but the weekend is either pure Java or something else. Sites like stackoverflow show big spikes in languages like Python on the weekends, as many programmers enjoy working with it though their jobs don’t use it. Plus, there are so many languages! The best part of them for me is learning them. The first few months where everything is a mess and only starting to ‘click’. Actually, that’s my preferred method of learning: dive in. For some reason, I tend to learn best by failing hundreds of times up front. The real mechanism boils down to problem solving. When you’re writing code, every task is a problem that you must solve within the framework of the language. When you don’t know the language, everything is a problem. As you learn it, small things become easy (“operations” perhaps?), while more complicated features are still a challenge.
Though I strongly dislike learning from the ground up. I work from the middle out. I decide what I want or need to do, find out what I need to do that, repeat until I know something, and then implement. This tree-based model of starting with a problem and working down to leaves of known sub-problem solutions is wonderful for me, but of course much more time-consuming. Although it’s quite fun! The problem with the basics is that it’s boring down there. Take the French language (not programming) for example. Basic sentences are boring. I learned a great deal by writing a sentence I wanted to translate in English, and breaking it down into concepts that I could learn in French. Sure, you end up learning demonstrative adjectives before ordinals, but who cares? As long as you create enough of these top-down examples, you’ll cover everything from the bottom on up.
Some people ask me why I don’t construct my own language, but quite frankly I don’t have any idea what the world really needs that it doesn’t have already. I have basic needs. When I write a desktop application, I expect simple, cross-platform GUI. I have very little desire to work on 3 separate versions for linux, mac, and windows. Java is great for that. When I work with primarily text parsing then Python, with its glorious list comprehension, is the ideal choice. I keep a little wishlist of language features for my “ideal” language, should I ever set out to craft it. Most of them are simply syntactical, but some features like closure are important to me. C#, as it turns out, has become one of my favorite languages to work with. However, cross-platform portability isn’t totally present there. The projects are mostly third party (Mono), but I think if Microsoft improved the efficiency of .NET and gave life to cross-platform gui toolkits there would be something grand. In a way, their recent announcement of Visual Studio 2010 supporting iPhone, iPad, and MacOS builds is an indication that they might be looking at Windows as more of a product they offer than a way of life.
So that’s my now excessively rambling story about why I love working with different languages. My main goals this summer were to improve my skills in languages I already mostly know, as I could be doing code tests at interviews soon. As I apply for jobs however, I hope as well as expect to be asked to learn new languages later on. In fact, this is why computer technology is such a wonderful field to be in. I see it not so much as you have to always be learning new things, but that you have the opportunity and are expected to, and are often even provided time to, learn new things. And that, is awesome.