Rafi Khan

Senior Software Engineer | Ottawa, Canada

Supporting society through innovation

A journey through the the jungle of programming languages and technologies

Today I’ll kick off the first micro post with something I have learned recently.

Sometimes the right tool for the job is the not the perfect, most flexible or even pleasurable to use. I have spent years searching for good programming languages which are powerful, expressive and a joy to develop in, while also being productive in a business context where shipping is key. To this end I have dabbled in more languages than I can list off. To give you an idea I’ve used C#, C, C++, Rust, Lua, various Lisps, various smalltalks, Python, Javascript and much much more. Looking at this list, it might look like I was looking to try as many languages as possible rather than searching for a good one. And you wouldn’t be wholely wrong. I try to commit to exposing myself to new ideas and ways of thinking, which means using as many different languages as tools as I can to learn from their different philosophies.

At the end of this exploration I have enriched myself with several new ideas. Some of the ideas include: first class functions, OOP in the smalltalk way, metaprogramming with macros in lisp, ducktyping, runtime polymorphism, DSLs. I also have 10-30 prototypes built in all of these systems. They’re mostly throw away code, but the experience in writing the code and learning how to solve the same problems in different ways has left me with a lot of solid fundamental programming knowledge.

For now, I’m going to take a break from exploring new languages, and spend some time building my ideas in Javascript. I’m definitely not the first person to pick Javascript for a project. However, putting on my thinking cap and looking at the timelines and business needs I can’t deny that you can accomplish a lot by leveraging the Javascript community.

To give you an idea of what I am working on, I want to build a powerful personal knowledge management tool that has a dead simple user interface and fun user experience. I think that learning is a lot of fun, and there is a lot we can do to enrich the experience through technology.