Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Octocat-spinner-32-eaf2f5

Cannot retrieve contributors at this time

file 195 lines (138 sloc) 7.679 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>{ Technology::Trotter }</title>
    <meta name="author" content="Khaled Hussein">

    
    <meta name="description" content="Why Crowdtilt Chose Perl Apr 13th, 2012 Comments Here at Crowdtilt most of our system
has been built using Perl. When I get asked about our &hellip;">
    
    <meta name="viewport" content="width=device-width; initial-scale=1; maximum-scale=1">

    <link href="/atom.xml" rel="alternate" title="{ Technology::Trotter }" type="application/atom+xml">
    <link rel="canonical" href="">
    <link href="/favicon.png" rel="shortcut icon">
    <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
    <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    
    
  <script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-12029230-3']);
    _gaq.push(['_trackPageview']);

    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
  </script>


</head>

<body>
    <header class="inner"><h1 class="left"><a href="/">{ Technology::Trotter }</a></h1>
<nav class="menu left"><ul class="main">
<li><a href="/">Blog</a></li>
<li><a href="/blog/archives">Archives</a></li>
</ul>
</nav>
<div class="right">
    <form class="search right" action="http://google.com/search" method="get">
        <input class="left" type="text" name="q" results="0">
        <input type="hidden" name="q" value="site:khussein.github.com">
    </form>
    <div class="social right">
        
        
        
        
        
        
        <a class="rss" href="/atom.xml" title="RSS">RSS</a>
        
    </div>
</div>

</header>
    
    <div id="content" class="inner">


    <article class="post">
    <h1 class="title"><a href="/blog/2012/04/13/why-crowdtilt-chose-perl/">Why Crowdtilt Chose Perl</a></h1>
    <div class="meta">
        <div class="date">








  


<time datetime="2012-04-13T12:06:00-05:00" pubdate data-updated="true">Apr 13<span>th</span>, 2012</time></div>
        
        <span class="comments"><a href="/blog/2012/04/13/why-crowdtilt-chose-perl/#disqus_thread">Comments</a></span>
        
    </div>
    <div class="entry">
        <p>Here at <a href="https://www.crowdtilt.com">Crowdtilt</a> most of our system
has been built using <a href="http://www.perl.org">Perl</a>. When I get asked about our
technolog stack and mention Perl, I often get surprised looks followed by
&#8220;Oh! wow, why?&#8221; :). In this post, I will outline some of the most important
reasons we chose to go with Perl, and hopefully clarify some of the
misconceptions surrounding Perl and the Perl community.</p>

<p>While we don&#8217;t need a reason other than that we have a blast using Perl, and
love the people in the Perl community, here is my attempt to explain
a few of the reasons why my team and I decided to use Perl to build Crowdtilt:</p>

<ol>
<li><p><strong>We needed to move fast.</strong><br/>
<a href="https://www.crowdtilt.com">Crowdtilt</a> is a young startup that is very
passionate about enabling users to leverage the power of collaborative
consumption models. We needed to move really fast and provide a highly
scalable, extensible, and maintainable product to our customers to enable
them to pool money together. Using <a href="http://perldancer.org">Perl Dancer</a> and
<a href="http://cpan.org">CPAN</a>, we were able to prototype our site in a couple of
days. That same &#8220;protoype&#8221; has evolved to the current version of the website
over just a few weeks.</p></li>
<li><p><strong>We needed a strong community.</strong><br/>
Perl has a very strong community with highly competent hackers. When you look
at CPAN, you&#8217;ll notice that a lot of modules start their descriptions with &#8220;A
simple way to do bla&#8221;, which shows how much the community cares about
simplicity and implementing things in a way that makes sense. This resonates
very well with our culture and philosophy at
<a href="https://www.crowdtilt.com">Crowdtilt</a>. We love the Perl community, we love
simplicity and elegance, and the two go hand-in-hand :).</p></li>
<li><p><strong>Comprehensive Perl Archive Network.</strong><br/>
<a href="http://cpan.org">CPAN</a>, Perl&#8217;s module repository, is one of, if not, <strong>the</strong>
largest open source module respository amongst programming languages. The
repository is evolving constantly and at a blistering pace. Perl is powerful,
but CPAN is a game changer. Our team is gladly contributing new modules and
enhancements to existing modules, while benefiting from community feedback
and support.</p></li>
<li><p><strong>Philosophy.</strong></p>

<ul>
<li><p>Language Design.<br/>
Perl was designed to evolve the same way a spoken language does. Humans
come up with new slang words and meanings that evolve the language. Perl
evolves in a very similar manner that makes the language always fresh, fun
to use, as well as incredibly flexible and able to be re-tooled for any
purpose.</p>

<p>As far as I know, Perl is one of the only languages that can evolve via
3rd party modules. Examples are Moose, MooseX::Declare and perl5i. This
allows it to evolve much faster than languages such as Java and Python
(both of which are also great languages) which, in order to add new
language features, require changes to the core language.</p></li>
<li><p>Do What I Mean.<br/>
A lot of Perl modules follow a DWIM (Do What I Mean) philosophy. Lets say
I want to handle an HTTP request and grab the userid parameter. Was the
parameter a query param, a HTTP POST param, a key/value pair inside the
json body of the request, or a token in the url? It doesn&#8217;t matter. The
Dancer framework lets me simply grab it via param &#8216;userid&#8217;. It just does
what I mean. This might make some people feel uncomfortable, and for
those people there is a way to be more explicit. In practice however, the
DWIM way results in more elegant and succinct code which is what we thrive
on at <a href="https://www.crowdtilt.com">Crowdtilt</a>.</p></li>
</ul>
</li>
<li><p><strong>Perl code is fun to write.</strong><br/>
For me, it is because of how simple Perl code can be.</p></li>
</ol>


<p>We are always looking for ways to improve. So, I would love to get your
feedback. In future posts, I&#8217;ll describe the rest of our technology stack and
architecture in more detail.</p>

        
        
    </div>

</article>

<nav id="pagenavi">
    
    
    <a href="/blog/archives" class="center">Blog Archives</a>
</nav></div>
    <footer class="inner">Copyright &copy; 2012 <a
    href="http://KnightHacker.com">Khaled Hussein</a>
</footer>
    <script src="/javascripts/jquery.fancybox.pack.js"></script>
<script src="/javascripts/slash.js"></script>


<script type="text/javascript">
      var disqus_shortname = 'knighthacker';
      
        
        var disqus_script = 'count.js';
      
    (function () {
      var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
      dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
      (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    }());
</script>



</body>
</html>
Something went wrong with that request. Please try again.