-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.html
194 lines (138 loc) · 7.5 KB
/
index.html
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 …">
<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
“Oh! wow, why?” :). 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’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 “protoype” 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’ll notice that a lot of modules start their descriptions with “A
simple way to do bla”, 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’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’t matter. The
Dancer framework lets me simply grab it via param ‘userid’. 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’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 © 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>