<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>programming languages Archives | Programming Zen</title>
	<atom:link href="https://programmingzen.com/tag/programming-languages/feed/" rel="self" type="application/rss+xml" />
	<link>https://programmingzen.com/tag/programming-languages/</link>
	<description>Meditations on programming, startups, and technology</description>
	<lastBuildDate>Thu, 18 Aug 2016 20:32:10 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>
<site xmlns="com-wordpress:feed-additions:1">1397766</site>	<item>
		<title>So You Want Your Programming Language to Be Popular</title>
		<link>https://programmingzen.com/so-you-want-your-programming-language-to-be-popular/</link>
					<comments>https://programmingzen.com/so-you-want-your-programming-language-to-be-popular/#respond</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Thu, 18 Aug 2016 20:32:10 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[popularity]]></category>
		<category><![CDATA[programming languages]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1749</guid>

					<description><![CDATA[<p>Some programming languages become popular. Others don&#x2019;t. Why is that? Are the popular languages better than the obscure ones? It&#x2019;s more complicated than that, so let&#x2019;s grab a long stick and poke at this hornet&#x2019;s nest. Define popular To start off on the wrong foot, there isn&#x2019;t really a&#xA0;consensus on the popularity of programming languages. There are various efforts to rank them based on Google searches, StackOverflow questions, GitHub repositories, and so on. Depending on which heuristics you consider and how you weigh them in your ranking, you&#x2019;ll end up being biased in favor or against certain languages. For example, </p>
<p>The post <a href="https://programmingzen.com/so-you-want-your-programming-language-to-be-popular/">So You Want Your Programming Language to Be Popular</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Some programming languages become popular. Others don’t. Why is that? Are the popular languages better than the obscure ones?<a id="fnref:1" class="footnote" title="see footnote" href="#fn:1">[1]</a> It’s more complicated than that, so let’s grab a long stick and poke at this hornet’s nest.</p>
<h2>Define popular</h2>
<p>To start off on the wrong foot, there isn’t really a consensus on the popularity of programming languages. There are various efforts to rank them based on Google searches, StackOverflow questions, GitHub repositories, and so on.</p>
<p>Depending on which heuristics you consider and how you weigh them in your ranking, you’ll end up being biased in favor or against certain languages.</p>
<p>For example, there is an obvious correlation between the popularity of a programming language and the number of relevant questions on StackOverflow. However, all things being equal, this metric will penalize simpler and better-documented languages.</p>
<p>If you take GitHub repositories as an indicator of popularity, you’ll penalize languages for which code tends to be hosted elsewhere. The same applies for languages that are not widely used in the open source world, of course.</p>
<p>Thankfully, we don’t need exact rankings in order to have a meaningful conversation. Let’s just agree that the ballpark definition of &#8220;popular”, as far as this article goes, is making the cut in the top 20 on the <a href="https://www.tiobe.com/tiobe-index/" target="_blank">TIOBE index</a> or the <a href="https://redmonk.com/sogrady/2016/02/19/language-rankings-1-16/" target="_blank">Redmonk index</a>.<a id="fnref:2" class="footnote" title="see footnote" href="#fn:2">[2]</a></p>
<h2>Are popular programming languages better?</h2>
<p>Popular languages are not necessarily better than less popular ones.</p>
<p>I would argue that the Lisp family is, in many respects, one of the best family of languages. It is, by our definition above, marginally popular at best.</p>
<p>Without any intent of starting a flame war, I feel obliged to point out that PHP is one of the most popular programming languages in the world.</p>
<p>Technical merit alone doesn’t separate the winners from the losers. Let’s see what does.</p>
<h2>Default languages</h2>
<p>Several of the most popular languages in the list(s) are what I would define as <em>default languages</em>.</p>
<p>Default languages are the natural go-to language for a given platform.</p>
<p>For example:</p>
<ul>
<li><strong>C</strong> is the default language for Unix system programming;</li>
<li><strong>JavaScript</strong> is the default language for web browsers;</li>
<li><strong>SQL</strong> is the default query language for relational databases;</li>
<li><strong>Java</strong> is the default language for Android apps;</li>
<li><strong>Swift</strong> (and before that, Objective-C) is the default language for iOS and Mac applications.</li>
</ul>
<p>Default languages are popular because anyone who is interested in developing in a given ecosystem will simply default to them.</p>
<p>They have a massive advantage over alternative languages.</p>
<p>Using something else requires research and effort. To borrow an example from within the tech world as well, BASH is far more popular than the arguably superior ZSH and FISH shells, simply because it’s the default on so many *nix systems.</p>
<h2>Languages backed by tech giants</h2>
<p>Another category of popular languages are languages backed by tech giants.</p>
<p>Note that it is not merely sufficient to be backed by a large tech company. Think Google and Dart. No, to make it popular, the company must put their weight behind the language.</p>
<p>Microsoft pushed C# so hard that it virtually become a default language for Windows programming.</p>
<h2>Large standard libraries</h2>
<p>With the exception of select default languages that rely on their positional advantage, most popular languages have a large standard library.</p>
<p>You need to have one in order to appeal to the initial seed group of developers who will, in turn, help you grow the ecosystem of libraries.</p>
<p>Python is the perfect example of this. Its “batteries included” philosophy made it useful from a very early stage. A great seed for the vast library ecosystem that would develop.</p>
<p>Often new languages that have emerged and become popular in recent years have leveraged existing platforms as a mean to provide a large standard library and a good sized ecosystem of libraries right off the bat.</p>
<p>The most common examples are languages for the JVM, such as Scala, Clojure, and Groovy.</p>
<p>Give it a few more years and Elixir might become an example of a popular language on BEAM (the Erlang Virtual Machine).</p>
<h2>Paradigm shifts</h2>
<p>Sometimes programming languages become popular because they provided an answer to a particular paradigm shift within the industry.</p>
<p>OOP (e.g., C++, Java), the emergence of the web (e.g., JavaScript, Perl, PHP), mobile programming (e.g., Objective-C, Swift), the emergence of data science (e.g., R), come to mind.</p>
<p>Paradigm shifts don’t occur too often, but when they do, they open the door to new languages.</p>
<p>Right now, functional languages have a  shot at widespread adoption. In part, because they work so well within an increasingly concurrent and parallel world.<a id="fnref:3" class="footnote" title="see footnote" href="#fn:3">[3]</a></p>
<h2>Killer apps</h2>
<p>Which bring us to another reason why some languages succeed in terms of adoption.</p>
<p>Having an absolute killer application within a given domain.</p>
<p>Ruby is the poster child of this. Outside of Japan, it was a largely ignored language for a decade or so before it started to gain traction elsewhere.</p>
<p>Then Rails came along &#8211; and it was a very compelling proposition for web development.<a id="fnref:4" class="footnote" title="see footnote" href="#fn:4">[4]</a> People were impressed enough that they were willing to study this little-known language called Ruby, simply because of Rails.</p>
<p>And when they did, they discovered what a nice little language it was. Its technical merits were fundamental to its adoption (and the reason why DHH picked it up for Rails), but not sufficient on their own.<a id="fnref:5" class="footnote" title="see footnote" href="#fn:5">[5]</a></p>
<p>It’s not an overly common scenario, but languages which provide a better answer to a specific problem within a popular domain, can experience huge gains in popularity.</p>
<h2>What else helps? Marketing.</h2>
<p>Marketing helps. A community that doesn’t shy away from good technical marketing will undoubtedly help the language become more popular.</p>
<p>Note that marketing is a very encompassing term. Great documentation is good marketing. Not having to spend an hour installing things just to get started is arguably part of your approach to marketing.</p>
<p>Being accepting, inclusive, and welcoming to newcomers is good marketing. Blogging, organizing conferences, giving speeches at other conferences, writing great books, are all good examples of things a marketing-oriented community does.</p>
<h2>What else? Familiarity.</h2>
<p>Familiarity is very important. If your programming language is radically different from anything that the majority of developers are used to, it will struggle to become widely adopted.</p>
<p>So it has to toe the line. It has to be innovative enough to make it worthwhile, but familiar enough that it won’t immediately induce a negative gut reaction the moment a new developer approaches it.</p>
<p>This is a struggle numerous Lisp languages have had to face. Most developers are familiar with the C syntax, however, S-Expressions are somewhat scary and foreign to many.<a id="fnref:6" class="footnote" title="see footnote" href="#fn:6">[6]</a></p>
<p>Because of this, although functional languages have a shot, this time around, it won&#8217;t be an easy sale.</p>
<h2>Anything else? Time.</h2>
<p>Programming languages don’t become popular overnight. It takes years, no matter how you slice it.</p>
<p>Most languages take at least 10 years to become widely adopted. Adoption rates are getting faster in recent years, but this process still takes quite a while (several years).</p>
<p>The most obvious exception is Swift, with its meteoric rise over the course of just a couple of years. Not only Swift is backed by Apple, it was also made into a default language for one of the most popular development ecosystems in the world.</p>
<p>So if you’re a programming language developer or an early adopter of a language that you wish to see become more popular, be patient. You’re in this for the long haul.</p>
<h2>Popularity ain’t easy</h2>
<p>It’s really hard to make a programming language popular.</p>
<p>The competition is fierce, with so many valid options available to developers.</p>
<p>As we asymptomatically approach all that programming languages can be, it is even harder to create something that’s so very much better than it’s worth making the leap to.</p>
<p>Developers need compelling and convincing reasons to jump ship or even just consider investing time in your language and community.</p>
<p>Consider for a moment why a programmer would want to learn a language that is new to them:</p>
<ul>
<li>To get or keep a job.</li>
<li>To become more productive and/or write better software.</li>
<li>To develop a new category of applications.</li>
<li>To learn a new paradigm.</li>
</ul>
<p>If your language can satisfy most of those needs, it will have a chance. But this only buys you admission to the race.</p>
<h2>Conclusions</h2>
<p>In summary, I believe these are the key factors to consider:</p>
<ul>
<li>Being a default language for a popular ecosystem;</li>
<li>Being backed and promoted by a tech giant;</li>
<li>Having a large standard library and/or targeting a popular VM (e.g., JVM, unless it’s a system language);</li>
<li>Fully embodying a new paradigm shift;</li>
<li>Being very useful in a particular domain, like Ruby did through Rails back in 2005;</li>
<li>Having great documentation, guidance for newcomers, tools, editor integration, and in general removing any instrumentation obstacle that makes getting started with your language difficult;</li>
<li>Fostering a welcoming community that encourages sharing, marketing, and evangelism;<a id="fnref:7" class="footnote" title="see footnote" href="#fn:7">[7]</a></li>
<li>Having a somewhat familiar syntax that is easy to read, write, and teach;</li>
<li>Being active and developed for several years;</li>
<li>Providing technical innovations that lead to productivity and more maintainable code;</li>
<li>Luck.</li>
</ul>
<p>The first two are out of the question for most languages, and even then, few languages will meet all of the remaining requirements.</p>
<p>Even embracing just a few of these should, however, be enough to grant your language a chance at becoming mainstream.</p>
<p>Failing that, you might still be left with an active, niche language that will survive and be appreciated by many developers for decades to come.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">It’s worth noting that this same question can be posed in wildly different fields. What makes certain musicians popular? How about cars? In this article, though I will discuss my thoughts on programming languages in particular. <a class="reversefootnote" title="return to article" href="#fnref:1"> ^</a></li>
<li id="fn:2">An alternative heuristic is to consider a language as being popular if there are multiple current books on the subject published by the most prominent tech publishers such as O’Reilly, Wrox, Addison-Wesley, No Starch, Manning, etc. <a class="reversefootnote" title="return to article" href="#fnref:2"> ^</a></li>
<li id="fn:3">In part, because we have come to appreciate some of their features that were incorporated in more mainstream languages. <a class="reversefootnote" title="return to article" href="#fnref:3"> ^</a></li>
<li id="fn:4">I don’t care what you think of Rails today. It has significantly affected the world of web development for the past ten years, almost regardless of the language you develop in. <a class="reversefootnote" title="return to article" href="#fnref:4"> ^</a></li>
<li id="fn:5">I have said before elsewhere that Rails is both a blessing and a curse for Ruby. It’s a massive blessing because Ruby owes so much of its popularity to Rails. It’s a curse because such a focus on web development within its community has led to limited applicability outside of the realm of web development. Python was spared by such a fate. <a class="reversefootnote" title="return to article" href="#fnref:5"> ^</a></li>
<li id="fn:6">It’s remarkable how popular Clojure has managed to become despite its Lisp syntax. A testament to how many other things they got right. <a class="reversefootnote" title="return to article" href="#fnref:6"> ^</a></li>
<li id="fn:7">There is a fine line between being enthusiastic users and brigading other communities. Always be respectful of other communities and don’t arbitrarily spam your language around. <a class="reversefootnote" title="return to article" href="#fnref:7"> ^</a></li>
</ol>
</div>
<p>The post <a href="https://programmingzen.com/so-you-want-your-programming-language-to-be-popular/">So You Want Your Programming Language to Be Popular</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/so-you-want-your-programming-language-to-be-popular/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1749</post-id>	</item>
		<item>
		<title>A Language for the Next 10 Years</title>
		<link>https://programmingzen.com/next-programming-language/</link>
					<comments>https://programmingzen.com/next-programming-language/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Tue, 14 Jun 2016 16:30:22 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[beam]]></category>
		<category><![CDATA[clojure]]></category>
		<category><![CDATA[elixir]]></category>
		<category><![CDATA[erlang]]></category>
		<category><![CDATA[jvm]]></category>
		<category><![CDATA[language for the next decade]]></category>
		<category><![CDATA[programming languages]]></category>
		<category><![CDATA[trends]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1679</guid>

					<description><![CDATA[<p>In early 2006 I had just started my career in IBM. I was the &#x201C;Ruby Guy&#x201D; (or alternatively, the &#x201C;Rails Guy&#x201D;). During a meeting with a few high-profile engineers, I presented what Ruby brought to the table. An IBM Distinguished Engineer stopped me in my tracks and said, &#x201C;It sounds slow&#x201D;. I love Ruby as much as a programmer can possibly love a programming language, but that engineer&#x2019;s conjecture was right on the money. Ruby&#x2019;s emphasis has always been on programmer efficiency, not execution efficiency. Generally speaking, Ruby programs are significantly slower than equivalent programs in C or Java. A </p>
<p>The post <a href="https://programmingzen.com/next-programming-language/">A Language for the Next 10 Years</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In early 2006 I had just started my career in IBM. I was the “Ruby Guy”<a id="fnref:1" class="footnote" title="see footnote" href="#fn:1">[1]</a> (or alternatively, the “Rails Guy”).</p>
<p>During a meeting with a few high-profile engineers, I presented what Ruby brought to the table. An IBM Distinguished Engineer<a id="fnref:2" class="footnote" title="see footnote" href="#fn:2">[2]</a> stopped me in my tracks and said, “It sounds slow”.</p>
<p>I love Ruby as much as a programmer can possibly love a programming language, but that engineer’s conjecture was right on the money. Ruby’s emphasis has always been on programmer efficiency, not execution efficiency.</p>
<p>Generally speaking, Ruby programs are significantly slower than equivalent programs in C or Java.</p>
<p>A lot of work has been done to improve Ruby’s performance, with a good degree of success, and that’s terrific &#8211; but is it enough in today’s world?</p>
<p>In many ways, yes. You’re not going to employ Ruby to calculate 13 trillion digits of Pi, nor will you use it to power the backend of a messaging app with millions of users.</p>
<p>However, Ruby will suit most scripts just fine. Further, I would argue that Rails still gives you the best bang for your buck in terms of web frameworks, when it comes to a large subset of CRUD-based web applications.</p>
<p>Ruby is lovely and has many uses, however, what Ruby is not, is the language that will define the next ten years. As beautifully designed as it is, it simply isn’t the ideal language to tackle the challenges that an increasingly distributed world throws at us.</p>
<p>Concurrency is the name of the game, and Ruby is, for the most part, limited in its ability to cope with it (despite <a href="https://github.com/ruby-concurrency/concurrent-ruby">valuable efforts</a>). It’s not that you can’t do concurrency in Ruby, it’s that there are much better, battle-tested tools to do so.</p>
<p>If you are a fellow Ruby developer who would like to remain relevant in the next decade, I highly suggest that you start looking for something new to pair to Ruby as your main language. (Though, fair warning, you might end up replacing Ruby with it.)</p>
<p>Your main language for the next ten years will be highly dependent on the development context, of course. If you develop iOS apps, Swift is such a language. Android apps? <a href="https://kotlinlang.org/">Kotlin</a> is looking good and might have a shot at that. Data Science? <a href="https://julialang.org/">Julia</a>, if they can sort out a few performance issues, could get the edge over Python and R. System programming? <a href="https://www.rust-lang.org/">Rust</a> and Go will be worth a close look, too.<a id="fnref:3" class="footnote" title="see footnote" href="#fn:3">[3]</a></p>
<p>I’m enough of a generalist to dabble in many programming domains, but above all, I’m a web developer, so my main language for the next decade will have to excel in distributed environments where n machines make m requests, for large values of n and m (e.g., IoT alone enables this scenario).</p>
<p>So what comes after Ruby? Some people might argue that it’s Node.js. Not for me personally, though. I’m afraid Ruby has spoiled me. I find Ruby to be a joy to use. JavaScript, not so much.</p>
<p>We are looking for a high-level language that can handle concurrency like a champ, has an elegant, highly readable syntax, provides a great user experience for the developer, and… is functional. In short, fun and functional. 🙂</p>
<p>I find functional programming (with immutable data types) to be a significantly better approach to thinking about most problems, and modeling solutions for them, than Object Oriented programming.<a id="fnref:4" class="footnote" title="see footnote" href="#fn:4">[4]</a> I blame my past dabbling with Haskell and Clojure for this.</p>
<p>Speaking of Clojure, on the JVM, both Scala (w/ Akka), and Clojure (w/ STM &amp; Pulsar) are valid options.</p>
<p>Of the two, Clojure is the one that comes closer to a great fit for me. Very close. Unfortunately, I&#8217;m somewhat of an aesthete, and coming from Ruby, the Lisp syntax still feels like a downgrade.<a id="fnref:5" class="footnote" title="see footnote" href="#fn:5">[5]</a></p>
<p>Further, the JVM is great, but when it comes to dependable concurrency, you really can’t beat what the Erlang VM (i.e., BEAM) has to offer (<a href="https://www.fastcompany.com/3026758/inside-erlang-the-rare-programming-language-behind-whatsapps-success">ask the team at Whatsapp</a>).</p>
<p>The problem with Erlang is that its Prolog-like syntax feels obsolete. I have never seen an Erlang program and said to myself, “Wow, that was a joy to read”. Or refactor. It’s not the worst, but I personally find it to be a fairly uninspiring language to work with.</p>
<p><img data-recalc-dims="1" fetchpriority="high" decoding="async" style="display: block; margin-left: auto; margin-right: auto;" title="Expression terminators in Erland.jpg" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/06/Expression-terminators-in-Erland.jpg?resize=500%2C272&#038;ssl=1" alt="Expression terminators in Erlang" width="500" height="272" border="0" /></p>
<p>Thankfully Erlang is not the only language for its highly fault-tolerant and concurrent VM. There is indeed a language worth getting excited about.</p>
<p>For me, that language is Elixir. Elixir fits all the requirements above and feels like a joy to both read and use.</p>
<p><img data-recalc-dims="1" decoding="async" style="float: right;" title="Elixir.gif" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/06/Elixir.gif?resize=100%2C191&#038;ssl=1" alt="Elixir" width="100" height="191" border="0" /></p>
<p>Like many other Rubyists, when I first found Elixir I thought of it as Ruby for the Erlang VM, due to its largely familiar syntax. But it turns out to be so much more than that. In fact, it’s much more than Erlang as well.</p>
<p>To hastily summarize, we get:</p>
<ul>
<li>A highly readable, elegant, concurrent, functional programming language.</li>
<li>The fantastic Erlang VM (i.e., BEAM) and OTP integration.</li>
<li>Shared nothing Actor-based concurrency.</li>
<li>Metaprogramming via macros.</li>
<li>Polymorphism via protocols.</li>
<li>A whole host of other nice features (pipeline operator, pattern matching, docstrings, streams, mix, etc).</li>
<li>An excellent web framework called <a href="https://www.phoenixframework.org/">Phoenix</a>.</li>
<li>A fast growing supportive community, that it’s reminiscent of Ruby during the early days of Rails.</li>
</ul>
<p>Ruby’s usage skyrocketed in the past decade and I would argue that Elixir, though not widely adopted as of yet, is well equipped to do the same in the coming ten years.</p>
<p><a href="https://elixir-lang.org/">Give it a try</a> and let me know how you like it.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">Though <a href="https://en.wikipedia.org/wiki/Sam_Ruby">Sam</a> was both literally and figuratively a Ruby guy. 😉  <a class="reversefootnote" title="return to article" href="#fnref:1">^</a></li>
<li id="fn:2">Now an IBM Fellow, which is the highest honor a tech person at IBM can achieve. It’s worth noting that I had not mentioned performance at all until that point. He simply figured it out based on the features of the language.  <a class="reversefootnote" title="return to article" href="#fnref:2">^</a></li>
<li id="fn:3">Some might like <a href="https://nim-lang.org/">Nim</a>, instead. <a href="https://crystal-lang.org/">Crystal</a>, with its Ruby-like syntax, is probably the most interesting option for Rubyists, despite being at very early stages of development.  <a class="reversefootnote" title="return to article" href="#fnref:3">^</a></li>
<li id="fn:4">I suspect that the next decade, outside of system programming, will belong to functional languages (or hybrid languages heavily influenced by functional programming).  <a class="reversefootnote" title="return to article" href="#fnref:4">^</a></li>
<li id="fn:5">I know, I know, I’m putting a lot of emphasis on syntax. That’s because it matters more than most people give it credit for.  <a class="reversefootnote" title="return to article" href="#fnref:5">^</a></li>
</ol>
</div>
<p>The post <a href="https://programmingzen.com/next-programming-language/">A Language for the Next 10 Years</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/next-programming-language/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1679</post-id>	</item>
		<item>
		<title>10 Lesser-Known Programming Languages Worth Exploring</title>
		<link>https://programmingzen.com/10-lesser-known-programming-languages-worth-exploring/</link>
					<comments>https://programmingzen.com/10-lesser-known-programming-languages-worth-exploring/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Tue, 07 Jun 2016 15:31:01 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[esoteric languages]]></category>
		<category><![CDATA[fun langauges]]></category>
		<category><![CDATA[interesting languages]]></category>
		<category><![CDATA[lesser-known programming languages]]></category>
		<category><![CDATA[programming languages]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1675</guid>

					<description><![CDATA[<p>There are probably a few thousand programming languages out there, some of which are quite esoteric. Yet most developers only end up learning a handful amongst the most common ones that are currently in use within our industry. I would argue that learning a new language, perhaps even a lesser known one, can be a lot of fun and definitely worth your time. Even if you don&#x2019;t end up using a given language in production for anything of a serious nature, a good language will offer you a different perspective and let you grow as a programmer in the process. </p>
<p>The post <a href="https://programmingzen.com/10-lesser-known-programming-languages-worth-exploring/">10 Lesser-Known Programming Languages Worth Exploring</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><img data-recalc-dims="1" decoding="async" style="float: right;" title="ponylang.png" src="https://i0.wp.com/programmingzen.com/wp-content/uploads/2016/06/ponylang.png?resize=187%2C150&#038;ssl=1" alt="Pony Lang" width="187" height="150" border="0" /></p>
<p>There are probably a few thousand programming languages out there, some of which are quite <a href="https://esolangs.org/wiki/Main_Page">esoteric</a>. Yet most developers only end up learning a handful amongst the most common ones that are currently in use within our industry.</p>
<p>I would argue that learning a new language, perhaps even a lesser known one, can be a lot of fun and definitely worth your time. Even if you don’t end up using a given language in production for anything of a serious nature, a good language will offer you a different perspective and let you grow as a programmer in the process.</p>
<p>People who learn, for example, Lisp or Haskell, will end up being better programmers because of it, even when using Ruby, Python, or Java in the course of their day-to-day development.</p>
<p>It’s also worth noting that it pays big dividends to become an early adopter of a programming language that ends up being popular, both in terms of job / consulting opportunities and in regards to the impact you can affect the community. (Though I wouldn’t use this as your main motivation, as your crystal ball might not be as haze-free as you think.)</p>
<p>In this week’s post, I’d like to list (and link to) ten different programming languages that have caught my eye, and which I’ve personally found to be interesting for one reason or another. I invite you to check them out and perhaps spend some time getting more familiar with one that, after a precursory look, appeals in particular to you as well.</p>
<p>Depending on how closely you follow the development world, I expect some people will find this list to be somewhat too mainstream for their tastes. Even then, you may still encounter some languages you are not familiar with. At least I hope you do.</p>
<p>Without further ado, here is my list:</p>
<p>1) <a href="https://www.ponylang.org/"><strong>Pony</strong></a> is an open-source, object-oriented, actor-model, capabilities-secure, high-performance programming language. (Launched in 2015.)</p>
<p>2) <a href="https://nim-lang.org/"><strong>Nim</strong></a> is an imperative, multi-paradigm, compiled programming language. It is designed to be efficient, expressive, and elegant, supporting metaprogramming, functional, message passing, procedural, and object-oriented programming styles by providing several features such as compile-time code generation, algebraic data types, an elegant foreign function interface (FFI) with C and compiling to JavaScript. (Launched in 2008.)</p>
<p>3) <strong><a href="https://julialang.org/">Julia</a></strong> is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical computing environments. It provides a sophisticated compiler, distributed parallel execution, numerical accuracy, and an extensive mathematical function library. Julia’s Base library, largely written in Julia itself, also integrates mature, best-of-breed open source C and Fortran libraries for linear algebra, random number generation, signal processing, and string processing. (Launched in 2012.)</p>
<p>4) <a style="font-weight: bold;" href="https://elixir-lang.org/">Elixir</a> is a dynamic, functional language designed for building scalable and maintainable applications. Elixir leverages the Erlang VM, known for running low-latency, distributed and fault-tolerant systems, while also being successfully used in web development and the embedded software domain. (Launched in 2012.)</p>
<p>5)<strong> <a href="https://www.rust-lang.org/">Rust</a></strong> is a general-purpose, multi-paradigm, compiled programming language sponsored by Mozilla Research. It is designed to be a safe, concurrent, practical language, supporting pure-functional, imperative-procedural, and object-oriented styles. (Launched in 2010.)</p>
<p>6)<strong> <a href="https://haxe.org/">Haxe</a></strong> is an open source toolkit based on a modern high level strictly typed programming language, a fast cross-compiler, a complete cross-platform standard library, and ways to access to each platform’s native capabilities. (Launched in 2005.)</p>
<p>7) <a href="https://wiki.portal.chalmers.se/agda/pmwiki.php"><strong>Agda</strong></a> is a dependently typed functional programming language. It has inductive families (i.e., dependent types), parameterised modules, mixfix operators, Unicode characters, and an interactive Emacs interface. Agda is a proof assistant. It is an interactive system for writing and checking proofs. It has many similarities with other proof assistants based on dependent types, such as Coq, (Launched in 2007.)</p>
<p>8)<strong> <a href="https://www.idris-lang.org/">Idris</a> </strong>is a general-purpose purely functional programming language with dependent types. The type system is similar to the one used by Agda. The language supports interactive theorem-proving comparable to Coq, including tactics, while the focus remains on general-purpose programming even before theorem-proving. Other goals of Idris are “sufficient” performance, easy management of side-effects and support for implementing embedded domain specific languages. (Launched in 2011.)</p>
<p>9<strong>) <a href="https://gosu-lang.github.io/">Gosu</a> </strong>is a general-purpose programming language built on top of the JVM. It is object-oriented, statically typed (with type inference), imperative, Java-compatible, and it offers simplified generics. It’s a “simple and pragmatic” language for the JVM. (Launched in 2010.)</p>
<p>10)<strong> <a href="https://kotlinlang.org/">Kotlin</a> </strong>is a statically typed programming language for the JVM, Android, and the browser. It is entirely interoperable with Java. Kotlin is developed by JetBrains. (Launched in 2011.)</p>
<p>(Most descriptions are from Wikipedia and/or the homepage of each project.)</p>
<p>Have you found a lesser known programming language that intrigues you? What do you like and dislike about it? Feel free to share in the comments below.</p>
<p>The post <a href="https://programmingzen.com/10-lesser-known-programming-languages-worth-exploring/">10 Lesser-Known Programming Languages Worth Exploring</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/10-lesser-known-programming-languages-worth-exploring/feed/</wfw:commentRss>
			<slash:comments>19</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1675</post-id>	</item>
		<item>
		<title>On Programming Languages as Languages</title>
		<link>https://programmingzen.com/programming-languages-as-languages/</link>
					<comments>https://programmingzen.com/programming-languages-as-languages/#comments</comments>
		
		<dc:creator><![CDATA[Antonio Cangiano]]></dc:creator>
		<pubDate>Thu, 27 Nov 2014 16:05:32 +0000</pubDate>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[programming languages]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[Ruby]]></category>
		<guid isPermaLink="false">http://programmingzen.com/?p=1571</guid>

					<description><![CDATA[<p>When you look up the word &#x201C;Language&#x201D; in the dictionary, you&#x2019;ll find a few variations of similar definitions. My trusty Google Dictionary extension in Chrome, offers up a first definition that is rather obvious, but nevertheless: The method of human communication, either spoken or written, consisting of the use of words in a structured and conventional way. The second definition is more interesting because it allows me to make a point about programming languages. It goes like this: The system of communication used by a particular community or country. Look at that. Isn&#x2019;t that beautiful? Let&#x2019;s cut the country stuff, </p>
<p>The post <a href="https://programmingzen.com/programming-languages-as-languages/">On Programming Languages as Languages</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>When you look up the word “Language” in the dictionary, you’ll find a few variations of similar definitions. My trusty <a href="https://chrome.google.com/webstore/detail/google-dictionary-by-goog/mgijmajocgfcbeboacabfgobmjgjcoja?hl=en">Google Dictionary extension</a> in Chrome, offers up a first definition that is rather obvious, but nevertheless:</p>
<blockquote><p>The method of human communication, either spoken or written, consisting of the use of words in a structured and conventional way.</p></blockquote>
<p>The second definition is more interesting because it allows me to make a point about programming languages. It goes like this:</p>
<blockquote><p>The system of communication used by a particular community or country.</p></blockquote>
<p>Look at that. Isn’t that beautiful? Let’s cut the country stuff, and shorten it to, “The system of communication used by a particular community”. Tell me that it’s not a spectacular definition of programming languages as well.</p>
<p>We can look at programming languages in two possible ways. They can be a means for us to instruct the computer, and incidentally communicate with fellow programmers, or they can allow us to communicate with other programmers in specific terms that are ultimately executable.</p>
<p>The first interpretation is technically more accurate. Or, more specifically, the worst kind of accurate.</p>
<p>I like to think of programming languages as languages because, outside of trivial programs, above all else they enable programmers to communicate with one another when it comes to resolving a problem or completing a particular task, while incidentally producing code that is also understood by computers via “translators” (e.g., compilers and interpreters).</p>
<p>There are plenty of benefits that can be derived from thinking about programming in terms of the second interpretation.</p>
<p>When you view programming in this light, you start considering the value of comments expressing the “why” and code expressing the “how”. Tests become a way to communicate to a fellow programmer <a id="fnref:1" class="footnote" title="see footnote" href="#fn:1">[1]</a> that a change to the codebase has violated a given requirement. Above all, writing idiomatic code becomes important.</p>
<p>Remember the Google Dictionary definition. “The system of communication of a particular community”. It is in fact the community, for better or for worse, that sets the guidelines and de facto style of a particular programming language.</p>
<p>Since we are operating in a system of communication, programming is a bit like driving: predictability is important. That’s why in the Ruby community we have the <a href="https://en.wikipedia.org/wiki/Principle_of_least_astonishment">principle of least surprise</a> <a id="fnref:2" class="footnote" title="see footnote" href="#fn:2">[2]</a> and in the Python community one finds the “There should be one – and preferably only one – obvious way to do it” mantra. <a id="fnref:3" class="footnote" title="see footnote" href="#fn:3">[3]</a></p>
<p>When you think of programming languages as a series of conventions adopted by a community, and incidentally understood by the computer, you avoid recklessly monkey patching classes just because you can. You know that doing so leads to unexpected results and miscommunications with other programmers.</p>
<p>You also avoid features which are technically legal in the language, but rare and confusing to fellow experienced developers in that particular language. For an example of this, take a look a the <a href="https://nithinbekal.com/posts/ruby-flip-flop/">Flip-Flop</a> operator in Ruby (a reminiscence of its Perl heritage). Technically legal Ruby, even useful at times, however you shouldn’t use it because only a handful of fellow Rubyists will understand what you’re doing. <a id="fnref:4" class="footnote" title="see footnote" href="#fn:4">[4]</a> Worse yet, it will be hard to Google for an answer unless you are familiar with its name already.</p>
<p>When you’re first picking up a human language, you learn the meaning of common words. Then you use simple sentences that you memorize from books, people around you, songs, movies, and TV shows. Then you try to mimic the idioms you see used by mother tongue speakers. Often you won’t get them right at first, resulting in comical variations that are close, but not quite right, to those of native speakers.</p>
<p>When it comes to programming languages things really aren’t all that different. That’s why it’s critically important to read other people’s code, write code and receive feedback in code reviews, do peer programming, take part in open source contribution, and engage in other forms of social interaction pertaining to code. Doing so is immensely important when it comes to truly mastering a programming language.</p>
<p>Another consequence of this emphasis on communication among programmers through a common, precise, language whose style, conventions, and idioms are defined by the community is that you should choose your communities carefully. What are the community’s priorities? If there is no love for beautiful, clear, elegant, easy to understand code, tread very carefully. <a id="fnref:5" class="footnote" title="see footnote" href="#fn:5">[5]</a></p>
<p>As someone who had to learn English as an adult, pretty much from scratch, I can tell you that I find many parallels between the experience of learning a new language and that of a new programming language.</p>
<p>Even if the two are not a perfect match &#8211; and seeing a programming language as a human language is an imperfect metaphor &#8211; I feel that thinking of it in these terms has allowed me to quickly acquire key skills in the programming languages that I needed or wanted to learn.</p>
<div class="footnotes">
<hr />
<ol>
<li id="fn:1">At times, that other programmer is just your future self. <a class="reversefootnote" title="return to article" href="#fnref:1">&#8593;</a></li>
<li id="fn:2">Well, at least that doesn’t surprise Ruby’s creator, <a href="https://en.wikipedia.org/wiki/Yukihiro_Matsumoto">Matz</a>. <a class="reversefootnote" title="return to article" href="#fnref:2">&#8593;</a></li>
<li id="fn:3">Run <code>import this</code> in your iPython shell. What, you’re not using iPython? Stop reading. Go <a href="https://ipython.org/">install it</a>. <a class="reversefootnote" title="return to article" href="#fnref:3">&#8593;</a></li>
<li id="fn:4">Idiomatic code can be hard to understand by inexperienced programmers. And that’s fine, as long as reasonably experienced developers can parse its meaning. If nine out of ten programmers in your own community are unable to understand what you are doing, you are equivalent to someone who intentionally uses archaic words in conversation. You end up sounding <em>grandiloquent</em> for no good reason. <a class="reversefootnote" title="return to article" href="#fnref:4">&#8593;</a></li>
<li id="fn:5">At the risk of getting backlash for these remarks, the PHP community comes to mind. Or even the JavaScript community prior to jQuery and Node.js. There were excellent PHP and JavaScript developers back in the day of course, but the community as a whole had a tendency to hack things together, as long as it worked. Somehow. <a class="reversefootnote" title="return to article" href="#fnref:5">&#8593;</a></li>
</ol>
</div>
<p>The post <a href="https://programmingzen.com/programming-languages-as-languages/">On Programming Languages as Languages</a> appeared first on <a href="https://programmingzen.com">Programming Zen</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://programmingzen.com/programming-languages-as-languages/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1571</post-id>	</item>
	</channel>
</rss>
