-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathhackathons-vs-ctfs.html
161 lines (149 loc) · 8.71 KB
/
hackathons-vs-ctfs.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
<!DOCTYPE html>
<html>
<head>
<link rel="canonical" href="https://hardmath123.github.io/hackathons-vs-ctfs.html"/>
<link rel="stylesheet" type="text/css" href="/static/base.css"/>
<title>Capture the Hackathon - Comfortably Numbered</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link rel="alternate" type="application/rss+xml" title="Comfortably Numbered" href="/feed.xml" />
<!--
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script>
MathJax.Hub.Config({
tex2jax: {inlineMath: [['$','$']]}
});
</script>
-->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css" integrity="sha384-Um5gpz1odJg5Z4HAmzPtgZKdTBHZdw8S29IecapCSB31ligYPhHQZMIlWLYQGVoc" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js" integrity="sha384-YNHdsYkH6gMx9y3mRkmcJ2mFUjTd0qNQQvY9VYZgQd7DcN7env35GzlmFaZ23JGp" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/contrib/auto-render.min.js" integrity="sha384-vZTG03m+2yp6N6BNi5iM4rW4oIwk5DfcNdFfxkk9ZWpDriOkXX8voJBFrAO7MpVl" crossorigin="anonymous"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
// customised options
// • auto-render specific keys, e.g.:
delimiters: [
{left: '$$', right: '$$', display: true},
{left: '$', right: '$', display: false},
{left: '\\begin{align}', right: '\\end{align}', display: true},
{left: '\\(', right: '\\)', display: false},
{left: '\\[', right: '\\]', display: true}
],
// • rendering keys, e.g.:
throwOnError : false
});
});
</script>
</head>
<body>
<header id="header">
<script src="static/main.js"></script>
<div>
<a href="/"><span class="left-word">Comfortably</span> <span class="right-word">Numbered</span></a>
</div>
</header>
<article id="postcontent" class="centered">
<section>
<h1>Capture the Hackathon</h1>
<center><em><p>Why hackathons aren’t helping the world, and how CTFs can fix that.</p>
</em></center>
<h4>Tuesday, March 17, 2015 · 3 min read</h4>
<p>If you’ve been following my blog, you know that I’m not a fan of competitions.
One of the few exceptions to this is CTFs. CTFs, or Capture-The-Flag
competitions, are computer security challenges where the organizers host a few
vulnerable servers and you need to “hack” them to find secret keys. CTFs are,
to be very honest, a lot of fun.</p>
<p>But I’m not here to advertise CTFs—I’ve already done that in another post—I’m
here to talk about how CTFs should be replacing Hackathons.</p>
<p>Hackathons are great. You hang out all night long, eat junk food, listen to
music, and get all sorts of swag from the riches companies in Silicon Valley.
You get to meet successful people who have their own start-ups.</p>
<p>But that’s all.</p>
<p>Respectable hackathons advertise themselves as educational: if you know how to
code, you get a chunk of time to work on a project and learn a new skill. If
you don’t know how to code, we’ll teach you.</p>
<p>The truth is, neither actually works out in the real world.</p>
<p>I know of exactly zero pieces of hackathon-code that the authors are
legitimately proud of. “Authors are legitimately proud of” differs strongly
from “authors are capable of making an exciting, buzzword-heavy pitch about,”
the latter generally being the sole criterion in determining winners.
Hackathon veterans largely agree that hackathon-code is rarely touched after
the demo, because it’s usually written as just enough to create a demo. You
aren’t supposed to pay heed to petty things like maintainability—you’re
hackers! And so your efforts over 24 sleep-deprived zombie hours all go to
/dev/null.</p>
<p>At the other extreme are the brave souls who walk into a hackathon cold: no
programming experience whatsoever. From what I can tell, they’re generally
persuaded to come by their nerdfriends, with the prospect of free food. In any
case, I have yet to meet someone who actually fell in love with programming at
a hackathon. Yes, the rich Silicon Valley startup culture is appetizing, but
you can’t just show up at a hackathon and found a company. You need to put in
the effort to learn the basics and fall in love with programming, and that is
<em>not</em> something you can do in 24 continuous hours. You can’t put on a concert
in 24 hours having never touched an instrument.</p>
<p>So, what are hackathons good for? They’re great for networking: making friends,
and even getting internships or jobs. They’re great for getting T-shirts,
playing games, and having awesome conversations. They’re great for hearing
talks that make you feel good about yourself for being a “hacker”, “innovator”,
“creator”, “developer”, etc. They are, in short, what the humble party has
evolved into to suit Silicon Valley.</p>
<hr>
<p>Enter CTFs. CTFs are hardcore. To do well in one, you need to be really clever.
You need oodles of esoteric knowledge about all sorts of computer science. You
need to be good at math, algorithms, general-purpose problem solving, and of
course programming. A single CTF problem can teach you far more than an entire
hackathon can ever hope to.</p>
<p>(You do <em>not</em>, by the way, need to be good at making a pitch in front of a
panel of judges.)</p>
<p>I posit that a CTF is also as social as a hackathon: perhaps a majority of my
best friends are folks I’ve met CTFing, either because they were my teammates,
or because I ran into them on a CTF’s IRC channel. The conversations you have
with your teammates while trying to solve a CTF problem are fantastic: you
share large wealths of information, refute or build upon each others’ ideas,
and ask hard questions, and do all of that while making puns and inside jokes.</p>
<p>As far as I’m concerned, a CTF is much more valuable than a hackathon for a
casual programmer—mildly experienced script kiddies and ninja rockstars alike.</p>
<p>But more importantly, I can envision CTFs for beginners, too. Solving the
problems in an introductory CS textbook is far more appealing when put in the
context of hacking into someone’s server. I’m sure an elegantly crafted
sequence of problems can Socratically teach someone enough basic Python to, for
instance, compute large Fibonacci numbers recursively—for the right people,
that should be enough to make them fall in love with computer science.</p>
<p>CTFs have a lot of potential: it’s a shame we’re instead promoting
hackathon-parties as “CS education events”.</p>
<hr>
<p>P.S. It would be an even bigger shame if this post comes true in the wrong way,
and CTFs go the same route as competition math. As much as I love the idea,
some part of me wants to keep the CTF world a secret so that the people who
ruined competition math can’t get their hands on CTFs as well. I hope that’s
not selfish—but I think that’s a topic for a whole new post.</p>
</section>
<div id="comment-breaker">◊ ◊ ◊</div>
</article>
<footer id="footer">
<div>
<ul>
<li><a href="https://github.com/kach">
Github</a></li>
<li><a href="feed.xml">
Subscribe (RSS feed)</a></li>
<li><a href="https://twitter.com/hardmath123">
Twitter</a></li>
<li><a href="https://creativecommons.org/licenses/by-nc/3.0/deed.en_US">
CC BY-NC 3.0</a></li>
</ul>
</div>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-46120535-1', 'hardmath123.github.io');
ga('require', 'displayfeatures');
ga('send', 'pageview');
</script>
</footer>
</body>
</html>