{"id":65,"date":"2008-04-30T20:40:05","date_gmt":"2008-05-01T00:40:05","guid":{"rendered":"http:\/\/steve.vinoski.net\/blog\/?p=65"},"modified":"2008-05-02T18:33:20","modified_gmt":"2008-05-02T22:33:20","slug":"multilingual-programming","status":"publish","type":"post","link":"https:\/\/steve.vinoski.net\/blog\/2008\/04\/30\/multilingual-programming\/","title":{"rendered":"Multilingual Programming"},"content":{"rendered":"<p>Multilingual programming is one of my all-time favorite topics, and I feel very strongly that software developers should be adept at multiple programming languages. Developers need to be able to apply whatever language in their arsenal best suits the problem at hand, and perhaps even quickly learn a new language if what they already know doesn&#8217;t fit.<\/p>\n<p>Too many developers seem to think that familiarity with one general-purpose language is good enough, but it isn&#8217;t. Knowing one language forces you to try to bend or change problems to fit whatever that language happens to be. That&#8217;s like trying to solve a problem by choosing a data structure or algorithm to use without ever considering the nature or details of the problem.<\/p>\n<p>One of my favorite quotes on this topic is from <a href=\"http:\/\/steve-yegge.blogspot.com\/2007\/12\/codes-worst-enemy.html\">Steve Yegge<\/a>:<\/p>\n<blockquote><p><em>&#8230;an &#8220;X programmer&#8221;, for any value of X, is a weak player. You have to cross-train to be a decent athlete these days. Programmers need to be fluent in multiple languages with fundamentally different &#8220;character&#8221; before they can make truly informed design decisions.<\/em><\/p><\/blockquote>\n<p>Yes indeed.<\/p>\n<p>Too many developers also come up with weak excuses for not learning new programming languages, most of them being just different ways of saying, &#8220;But it&#8217;s different from the language I already know!&#8221; Don&#8217;t whine about the differences &mdash; instead, learn to appreciate them and take advantage of them.<\/p>\n<p>I&#8217;ve hinted at the fact that I like this topic in previous issues of my <a href=\"\/blog\/internet-computing-columns\/\">Internet Computing column<\/a> when I covered the usefulness and applicability of languages such as <a href=\"http:\/\/dsonline.computer.org\/portal\/pages\/dsonline\/2006\/06\/w3tow.html\">JavaScript and E4X<\/a>, <a href=\"http:\/\/dsonline.computer.org\/portal\/pages\/dsonline\/2006\/08\/w4tow.html\">Ruby<\/a> (<a href=\"http:\/\/dsonline.computer.org\/portal\/pages\/dsonline\/2006\/10\/w5tow.html\">twice<\/a>), and <a href=\"http:\/\/dsonline.computer.org\/portal\/pages\/dsonline\/2007\/10\/w5tow.html\">Erlang<\/a> (also <a href=\"http:\/\/dsonline.computer.org\/portal\/pages\/dsonline\/2007\/12\/w6tow.html\">twice<\/a>) for middleware and integration projects. My latest column, entitled <a href=\"http:\/\/steve.vinoski.net\/pdf\/IEEE-Multilingual_Programming.pdf\">&#8220;Multilingual Programming&#8221;<\/a> (PDF), attempts to provide a few reasons why knowing and being able to apply multiple languages can be highly beneficial. As always, I welcome comments and feedback.<\/p>\n<p><em>[Update: if you prefer not to read PDF, this column is now also <a href=\"http:\/\/computer.org\/portal\/pages\/dsonline\/2008\/06\/w3tow.xml\">available online<\/a> in HTML.]<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Multilingual programming is one of my all-time favorite topics, and I feel very strongly that software developers should be adept at multiple programming languages. Developers need to be able to apply whatever language in their arsenal best suits the problem at hand, and perhaps even quickly learn a new language if what they already know [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[58,14,13,9,93,29],"tags":[149,177,94,158,95],"class_list":["post-65","post","type-post","status-publish","format-standard","hentry","category-code","category-column","category-dynamic-languages","category-integration","category-languages","category-productivity","tag-column","tag-languages","tag-multilingual","tag-productivity","tag-programming"],"_links":{"self":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts\/65","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":0,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/posts\/65\/revisions"}],"wp:attachment":[{"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/media?parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/categories?post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/steve.vinoski.net\/blog\/wp-json\/wp\/v2\/tags?post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}