/
index.html
221 lines (169 loc) · 11.4 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
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]> <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]> <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Keyword: clojure-internals | LispCast</title>
<meta name="description" content="A blog about the simple joys of functional programming.">
<meta name="author" content="Eric Normand">
<meta name="viewport" content="width=device-width,initial-scale=1">
<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet" type="text/css">
<link href="http://fonts.googleapis.com/css?family=Inconsolata" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="/css/styles.css" type="text/css">
<link rel="alternate" type="application/rss+xml" title="LispCast" href="/feed" />
<!-- start Mixpanel --><script type="text/javascript">(function(f,b){if(!b.__SV){var a,e,i,g;window.mixpanel=b;b._i=[];b.init=function(a,e,d){function f(b,h){var a=h.split(".");2==a.length&&(b=b[a[0]],h=a[1]);b[h]=function(){b.push([h].concat(Array.prototype.slice.call(arguments,0)))}}var c=b;"undefined"!==typeof d?c=b[d]=[]:d="mixpanel";c.people=c.people||[];c.toString=function(b){var a="mixpanel";"mixpanel"!==d&&(a+="."+d);b||(a+=" (stub)");return a};c.people.toString=function(){return c.toString(1)+".people (stub)"};i="disable track track_pageview track_links track_forms register register_once alias unregister identify name_tag set_config people.set people.set_once people.increment people.append people.track_charge people.clear_charges people.delete_user".split(" ");
for(g=0;g<i.length;g++)f(c,i[g]);b._i.push([a,e,d])};b.__SV=1.2;a=f.createElement("script");a.type="text/javascript";a.async=!0;a.src="//cdn.mxpnl.com/libs/mixpanel-2.2.min.js";e=f.getElementsByTagName("script")[0];e.parentNode.insertBefore(a,e)}})(document,window.mixpanel||[]);
mixpanel.init("ffad2bd88d2cb690edbbba6cf30b2958");</script><!-- end Mixpanel -->
</head>
<body>
<header class="banner">
<h1 class="banner-logo">
<a href="/">
<img class="banner-logo-img"
src="/img/Logo@2x.png"
alt="LispCast" />
</a>
</h1>
<div class="meta-data">
<img class="bio-img"
src="/img/eric_bio.jpg" />
<a class="twitter-link"
href="http://twitter.com/ericnormand">
<i class="fa fa-twitter"></i>
</a>
<a class="github-link"
href="https://github.com/ericnormand">
<i class="fa fa-github"></i>
</a>
<a class="mail-link"
href="mailto:eric@lispcast.com">
<i class="fa fa-envelope"></i>
</a>
<a class="rss-link"
href="/feed">
<i class="fa fa-rss-square"></i>
</a>
<a class="rss-link"
href="/archive.html">
<i class="fa fa-list"></i>
</a>
</div>
</header>
<div class="main-container">
<article class="article">
<h2 class="article-title-wrapper">
<a class="article-title"
href="/pre-west-interview-john-hume">
Pre-West Interview: John Hume
</a>
</h2>
<div class="timestamp">
April 14, 2015
</div>
<div class="figure">
<img src="http://www.lispcast.com/img/pre-west-prep.png" />
</div>
<p><em>This interview was graciously conducted by <a href="https://twitter.com/clojuregeek">Nola Stowe</a>. She's a <a href="https://github.com/rubygeek">programmer</a>, the co-founder of <a href="https://twitter.com/devchix">DevChix</a>, and a prolific teacher. She recently ran <a href="http://www.clojurebridge.org/events/2015-03-13-austin">ClojureBridge Austin</a>. Please shout out to her and say thanks!</em></p>
<p><a href="http://clojurewest.org/speakers#jhume"><img src="http://www.lispcast.com/img/pre-west/john-hume.jpg"
style="width:150px;float:right"></a></p>
<h3 id="introduction">Introduction</h3>
<p>John Hume is the next interview participant. He is <a href="http://clojurewest.org/speakers#jhume">giving a talk</a> at <a href="http://www.clojurewest.org/">Clojure/West</a> about Clojure internals. The <a href="http://www.lispcast.com/pre-west-john-hume">background to his talk</a> is available, if you like.</p>
<h3 id="interview-with-john-hume">Interview with John Hume</h3>
<p><strong>Nola</strong>: How long have you been doing Clojure and how did you get into it?</p>
<p><strong>John</strong>: I started playing with Clojure in late 2008—the fairly early days. It was interesting to me because I'd always heard that Lisp was amazing, but I'd never spent any time with one. Since Clojure runs on the JVM and has simple Java interop, it was far more accessible to me than any other Lisp. Since it was a new language and community, there seemed to be a lot of other people going through the same learning process I was, so the mailing list was very helpful. And back then it was low-traffic enough that I could actually keep up, which hasn't been the case for a long time.</p>
<p><strong>Nola</strong>: What languages did you do before Clojure?</p>
<p><strong>John</strong>: I'd been doing Ruby full-time for a few years before getting interested in Clojure—and continued to spend most of my time working in Ruby until 2012. Previous to that I'd done Java for about 5 years. Ruby really opened my eyes to how much power and expressiveness Java had been keeping from me. But after an exciting learning period with Ruby, I'd gotten a bit bored. Clojure came into my life at just the right time!</p>
<p><strong>Nola</strong>: Any suggestions for someone wanting to dive into Clojure?</p>
<p><strong>John</strong>: That's a tough one. A background in Java and Ruby made it easy for me to deal with some of what can make Clojure difficult for newcomers: Java helped with the JVM, the API, and the ecosystem, while Ruby had already made me comfortable with strong but dynamic typing and some functional concepts. For someone with a similar background, I'd definitely recommend giving Clojure a try.</p>
<p>My advice:</p>
<ul>
<li><p>Start with tools you're comfortable with, rather than learning a tool you don't find intuitive while also learning a new language.</p></li>
<li><p>Start with a problem space you're familiar with, whether that's web, graphics, or data analysis, and find libraries that don't hide away too much magic.</p></li>
<li><p>Read the code! Lots of clojure.core and most other standard and contrib libraries are implemented in straightforward, idiomatic Clojure. Hopefully your tool of choice makes it seemless to jump into that code from your own. The only caveat with that advice is that sometimes—and it's not always obvious when this will happen—a library fn will be implemented in an unidiomatic way for reasons that aren't clear.</p></li>
<li><p>When in doubt, lean on the mailing list or IRC to find out from more experienced Clojurists whether what you're reading or writing is idiomatic or idiosyncratic code.</p></li>
<li><p>For someone with a different background, that advice might all be good, but there are probably aspects of the learning curve that I underestimate, so I'd recommend trying to find Clojurists with a similar background and getting their advice.</p></li>
</ul>
<p><strong>Nola</strong>: Thanks for the interview. It was very informative.</p>
<hr />
<div class="article-cg-box">
<p style="font-size:0.8em">
<em> This post is one of a series called <a href="http://www.lispcast.com/keyword/pre-west">Pre-West Prep</a>. </em>
</p>
<h3>
You may like the Clojure Gazette
</h3>
<p class="article-cg-box-text">
For more inspiration, history, interviews, and trends of interest to Clojure programmers, get the free Clojure Gazette.
</p>
<p><a href="http://www.clojuregazette.com/"
class="article-cg-box-button js-clojuregazette">Learn More</a></p>
<p>
Clojure pulls in ideas from many different languages and paradigms, and also from the broader world, including music and philosophy. The Clojure Gazette shares that vision and weaves a rich tapestry of ideas from the daily flow of library releases to the deep historical roots of computer science.
</p>
</div>
<p style="font-size:0.8em">
<em> <a href="http://clojurewest.org/">Clojure/West</a> is a conference organized and hosted by <a href="http://cognitect.com/">Cognitect</a>. This information is in no way official. It is not sponsored by nor affiliated with Clojure/West or Cognitect. It is simply me (and helpers) curating and organizing public information about the conference. </em>
</p>
<h3 id="you-might-also-like">You might also like</h3>
<ul>
<li><a href="http://www.lispcast.com/pre-conj-2014">Pre-conj Prep 2014</a></li>
<li><a href="http://www.lispcast.com/pre-conj-anna-pawlicka">Pre-conj Prep: Anna Pawlicka</a></li>
<li><a href="http://www.lispcast.com/pre-conj-ashton-kemerling">Pre-conj Prep: Ashton Kemerling</a></li>
<li><a href="http://www.lispcast.com/pre-conj-bozhidar-batsov">Pre-conj Prep: Bozhidar Batsov</a></li>
</ul>
<div class="endmark">
<a class="endmark-link"
href="/">
<img class="endmark-lambda"
src="/img/lambda.png" />
</a>
</div>
</article>
<div class="notes">
</div>
</div>
<footer class="footer-banner">
</footer>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
document.write('<script src="https://oberon.herokuapp.com/cookie/get.js?_=' + (new Date()).getTime() + '"><\/script>');
if(window.oberon && mixpanel) {
if(document.cookie.indexOf('oberon-id') < 0) {
var expires = (new Date((new Date().getTime() + 1000*60*60*24*365*10))).toUTCString();
mixpanel.alias(window.oberon.id);
document.cookie = "oberon-id=" + window.oberon.id + ";expires=" + expires + ";path=/";
}
mixpanel.identify(window.oberon.id);
}
mixpanel.register({URL: window.location.pathname,
Title: $("title").text()});
mixpanel.track("Page Visit");
mixpanel.track_forms('.gazette-form', 'Submit Clojure Gazette');
mixpanel.track_forms('.subscribe-form', 'Subscribe');
mixpanel.track_links('a.homepage-offer-box-link',
'Click PurelyFunctional.tv',
function(e) {
return {ToURL: $(e).prop('href')};
});
mixpanel.track_links('a.js-clojuregazette',
'Click Clojure Gazette',
function(e) {
return {ToURL: $(e).prop('href')};
});
$('input[name=EMAIL]').change(function() {
var i = $(this);
window.o_email = i.val();
});
$('form').submit(function() {
if(window.o_email)
mixpanel.people.set({"$email": window.o_email});
});
</script>
</body>
</html>