-
-
Save defunkt/6443 to your computer and use it in GitHub Desktop.
# Video: http://rubyhoedown2008.confreaks.com/08-chris-wanstrath-keynote.html | |
Hi everyone, I'm Chris Wanstrath. | |
When Jeremy asked me to come talk, I said yes. Hell yes. Immediately. But | |
then I took a few moments and thought, Wait, why? Why me? What am I supposed | |
to say that's interesting? Something about Ruby, perhaps. Maybe the | |
future of it. The future of something, at least. That sounds | |
keynote-y. | |
So why don't I just get that part out of the way. The future of Ruby. | |
In the future, Ruby will become... more popular. There will be more | |
implementations. There will be more programmers using it. More | |
machines with it installed by default. There will be more people | |
writing blogs about it, and more people reading blogs about it. | |
I know this may sound kind of crazy, but you have to trust me. I'm keynoting. | |
There will be more RubyGems, and there will be more RubyGems servers. At | |
least one, possibly as many as two, and it's conceivable that more | |
than three new books will be written about it. Current books will be | |
released in new editions, with more pages and more in depth information on | |
new features. | |
New Rubyists will be younger, and current Rubyists will get older. Some | |
Rubyists will get dogs, others cats. A few will remain dogless and | |
catless, perhaps opting for children instead. (This is a common | |
mistake, as, in my experience, children are much more expensive than either | |
dogs or cats.) | |
Websites will be created in Ruby, using futuristic versions of Ruby on Rails | |
and Merb. Versions like 3.0 and 1.0, respectively. New web | |
frameworks will be created with strange names and stranger maintainers. We will | |
come to know _why the lucky stiff as a less violent version of the Joker, matz guys | |
as a more controlled version of Two Face, Dr Nic as the Penguin (he really loves | |
fish), and DHH as our Batman. As for me... I am Iron Man. | |
New languages will come along, and they will become popular. People will | |
continue to scorn Ruby, calling it names like "Python's Perl," or | |
"Java for nerds," or even, God forbid, "Visual Basic for the web." | |
(Technically, however, I think that role was already filled by ASP versions | |
1 through 3.) | |
Ruby will be taught in college, to young nubys eager to learn the ways of the | |
master craftsmen. Most of the students will be drunk during these | |
classes, others hungover, all hungry for knowledge. | |
Behavior will drive us and macros will help define us. Well, some of us. | |
Proc. Lambda. | |
There will be more conferences. People will speak at these conferences, | |
sometimes about Ruby, sometimes not about Ruby. Speakers will wax | |
philosophically about the glory days of Smalltalk... without actually | |
having written any Smalltalk. Others will show benchmarks for their new, | |
superfast Ruby VM. No, it's not open source and no, you can't try it | |
out yet. | |
Someone will bring up a 2.0 version number, then quickly be hushed. Suit | |
people will surround us. Tests will be mocked, and mocks will be | |
tested. Or is that stubs? | |
Ruby will be fast and it will be slow, patches will be released that break | |
backwards compatibility, and security vulnerabilities will be handled | |
in a less than satisfying manner. Big websites will attract billions | |
of visitors while little blogs will appear, amaze, then vanish. | |
Most importantly, Ruby will stay beautiful. At least, we hope so. | |
And that's the future of Ruby. | |
Did that feel keynotey? Let's talk about the past now. | |
John von Neumann was one of the great mathematicians of the 20th century. He | |
made contributions to cellular automata, set theory, functional | |
analysis, quantum mechanics, ergodic theory, continuous geometry, | |
economics and game theory, computer science, numerical analysis, explosive | |
hydrodynamics, and statistics. (I know about 60% of those words.) | |
He also helped invent the modern computer. The ones we're all using, right | |
now. | |
In the 1940s, von Neumann and a group of, basically, geniuses got together to | |
build a computer. It wasn't the first computer, mind you. In fact, | |
'computer' is a term once used to describe individuals who computed | |
numbers. | |
Charles Babbage was such a computer frustrated by the fallibility of the human | |
brain - when dealing with massive amounts of numbers, mistakes were | |
common. For example, William Shanks spent 15 years calculating 707 | |
digits of Pi. | |
Tragically, he made a mistake at year 11. His next four years were | |
spent computing in vain and only the first 527 digits were correct. | |
Anyway, Babbage envisioned a machine that could carry out precise instructions | |
and deliver accurate information. If machines could do physical labor, | |
why not mental labor? | |
Guys like Alan Turing got in on the action and came up with ideas which would | |
eventually produce machines such as ENIAC, the first programmable | |
digital computer. While ENIAC was a breakthrough, von Neumann's | |
architecture was different in an important way: it stored both program | |
instructions and user data in RAM. Prior to von Neumann's ideas, program | |
instructions, while modifiable, were stored separately from data. | |
Like I said, this idea (called the von Neumann or stored-program architecture) | |
is what we use today. When you're writing your Rubys in your | |
TextMates, both the Rubys and TextMates are stored together in RAM. | |
Having both instructions and data in memory together could be used to | |
implement, as a primitive example, loops - branch instructions are | |
modified as the loop iterates. In the ENIAC and others, these sort of | |
transformations were done by hand, by programmers. (Oh, and the first | |
programmers? All women.) | |
Anyway, in the second half of the '40s von Neumann and a small team got | |
together at the Institute of Advanced Study (IAS) and started working | |
on a machine based on his stored-program architecture. To be fair, it | |
wasn't entirely his idea. Standing on the shoulders of giants, and all that. | |
Also, Wikipedia claims that some British team actually beat his team | |
at implementing a stored-program architecture computer. | |
But who cares about Wikipedia? | |
The IAS, where von Neumann's machine was built, was basically a dorm near | |
Princeton, but not officially affiliated with Princeton, started by | |
some philanthropists who wanted scientists to stay there, have their | |
lodging and food paid for, and get their science on. Big time. Einstein was one | |
of the first residents, as were von Neumann, Kurt Gödel, and J. | |
"mother fin'" Robert "atomic bomb" Oppenheimer. | |
So this place held historians, scientists, and engineers. The engineers | |
working with von Neumann on the IAS machine worked in the basement. | |
Sound familiar? To this day, the basement is the IAS server room. | |
These guys working on the IAS machine that summer were both programmers and | |
engineers. They would solder the parts themselves, program the | |
programs, and fix bugs in both hardware and software. Actually, they | |
often had a hard time distinguishing between hardware and software bugs. | |
Is the code wrong or is the machine wrong? What a nightmare. | |
They used about 2300 Radio Shack-caliber vacuum tubes for switches and memory. | |
Stuff would break constantly. They'd stay up until 4, 5am drinking | |
tons of tea with tons of sugar. In fact, since this was during the | |
war, sugar was rationed and they were using more than their fair share. The | |
historians and other nerds in the IAS building were pretty pissed. | |
(Sounds like me and my brother over Mountain Dew in high school.) | |
All the engineers kept notebooks, of course. Blogs. They'd write frustrated | |
entries, only to have massive elated breakthroughs the following day. | |
Their notes were being sent out to institutes all over the country so | |
others could reproduce their work and create new machines with the von Neumann | |
architecture. | |
And then they finished. On June 10, 1952 the IAS machine was fully | |
operational. Others built similar machines (though none of the | |
machines had compatible instruction sets - you couldn't yet write a | |
portable program) at similar institutions, and the IAS machine then carried | |
out its intended purpose: | |
Help design hydrogen bombs. | |
The first hydrogen bomb was detonated on November 1, 1952. It was called "Ivy | |
Mike," detonated on an island in the Enewetak atoll in the Pacific | |
Ocean, and was 450 times more powerful than the bomb dropped on | |
Nagasaki. | |
So, mathematicians built the first modern computer to aid them in applied | |
mathematics and hydrodynamics. These guys were true hackers working | |
on what was a massive side project, and, in a way, the ultimate yak | |
shave. | |
(Interestingly, this may also explain why everyone thinks you need to be great | |
at math to be a programmer, but I digress.) | |
Today, that is, in the present, there are a number of high profile | |
Ruby projects which began as side projects. Some of them might also | |
be called... the bomb. | |
Rubinius now has five people working full time on it, but began humbly | |
in 2006 as Evan Phoenix's side project. He wanted to build his own | |
Ruby. | |
Ruby on Rails itself was extracted from Basecamp, which was a website | |
the 37signals guys were doing on the side. At the time, they were a | |
design firm and David Hansson was a contractor. | |
No one really knows what _why does with his time, but Shoes is | |
certainly moving full steam ahead with no mention of monetary gain. | |
Just for hack's sake, to make things better for people wanting to put | |
together GUIs in their favorite langauge, for fun. | |
Merb started as a pastie, a thin layer on top of Mongrel to allow for | |
fast, concurrent file uploads. Developers at Engine Yard now actively | |
work on the framework. (Though I'm not so sure it can fit in a single | |
pastie (or gist) anymore.) | |
You should always have a side project, too. Side projects give you an | |
outlet, provide a useful distraction, let you explore new ideas, learn | |
new concepts, and generally give you the freedom to be unaccountable. | |
You don't have to worry about your boss, or your coworkers, or the | |
damn commentators on Reddit. Just have some fun. Treat yourself. | |
After I dropped out of college, I worked at a PHP shop doing trucking | |
logistics applications. We were a broker between independent truckers | |
and big companies like KMart. Truckers would register on our website, | |
say they're going to be in Delaware on the 3rd of May and that they're | |
heading to Denver, then get information on shipments along their | |
chosen route. They could then bid on shipments or accept them, all | |
through us. | |
It was a fairly complex application and two things were missing: | |
version control and constants. There was no version control, so you'd | |
have things like main2.php and compute_radius_of_from_shipment7.php | |
laying around. Along with versions 0 through 6 of that same file, in | |
the same directory. Truly painful. | |
There were no constants and no configuration, so the source code was | |
filled with magic numbers. If you wanted to tweak any of our | |
algorithms, you had to find the code which did the computation and | |
change some numbers by hand. Hopefully the correct numbers. | |
Naturally, the first thing I did was institutionalize Subversion. | |
(I've apparently always been a champion of source control, though I | |
didn't realize it until setting this story to paper.) | |
The second thing I did was start extracting the magic numbers into | |
configuration files. At the time, it was a pretty common PHP idiom to | |
use .ini files for configuration. Most of what you'd need was | |
supported, and I'm pretty sure PHP came with a library (aka a shotgun | |
blast of functions in the global namespace) that could understand .ini | |
files. | |
This worked okay, but once I started tinkering with Rails I was blown | |
away by YAML. So clean, so powerful. There was Syck, the C extension | |
written by _why, but it was just that: a C extension. I didn't know | |
much about loading C code in PHP, and even less about doing it on our | |
production servers. | |
So I set out to write a YAML parser in PHP, on my own time. As a nod | |
to Syck, I called it Spyc - S P Y C - a simple php yaml class. It was | |
my first parser, was stateful, and I think did two passes for the | |
reference / pointer stuff YAML supports. It didn't support all of | |
YAML, but it supported most of it - both dumping and loading. The | |
good parts. | |
I snuck it in and before long we were using YAML with great success at | |
my company. Naturally, I put the code up on SourceForge. King of all | |
online source code repositories. My designer friend made a page and | |
in the first month Spyc was a huge hit. I swear it had at least 70 | |
downloads. SEVENTY! | |
That was a big deal. | |
Fast forward about nine months: I realized the trucking logistics | |
business isn't the beacon of progress or congregation of forward | |
thinking individuals I had envisioned. After all, they hired me. | |
I quit and begun re-enrolling in school. This time I would major in | |
Computer Science instead of English. My path was set. | |
But then, near the end of that summer, a friend IM'd me. A close | |
friend I grew up with. He was into Digg and video games, but was far | |
from a programmer. "Hey," he said. "Do you know MySQL?" | |
"Shit," I thought. I figured this conversation would be the modern | |
day equivalent of said friend asking why Ruby sites are always down. | |
Real time trolling. | |
"Yeah, I know MySQL." | |
"And you know PHP too, right?" | |
"Yes." I was dubious about the direction this conversation was headed. | |
"GameSpot is hiring. You should apply." | |
Ah, GameSpot. He and I were both into video games. During high | |
school I worked at a local GameStop, and in college I worked at | |
EBGames in the mall. I had all the modern systems and grew up with | |
Atari, NES, Genesis, all that. | |
Gamespot.com was a site I had visited quite often while in high school | |
and college. By the way, notice how different the names GameSpot and | |
GameStop are - this would later cause my family endless amounts of | |
confusion, thinking I had moved to California to work retail. The | |
American dream. | |
So, when you Googled video games, GameSpot was usually #1 or #2 in the | |
results. I knew it well. GameFAQs.com (that's game F A Qs) was owned | |
by the same company, and probably the site I used most. It's | |
basically walkthroughs, how-tos, guides... and cheats. Lots of | |
cheats. | |
Anyway, I had no idea where San Francisco was or what the guys at | |
GameSpot were looking for, but I applied. I created a brand new | |
resume and stayed up all night working on the cover letter. By the | |
time I was finished, it was a page long and pretty convincing. | |
In it I promised to move to California the next day, bringing nothing | |
but my guitar and Xbox with me. My family would miss me but I was | |
ready to leave, and I was hungry to show the world what I could do. | |
Ready to learn from the masters. | |
The phone interviews went well, they liked that I was into Macs and | |
Ruby, and I obviously got the job. My first time ever stepping foot | |
in California was when I flew out to find an apartment with my dad. | |
My work experience wasn't what got me the job. I'm sure my cover | |
letter had something to do with it, but my short lived career in | |
trucking logistics was less than glamorous. I really only had one | |
thing to show GameSpot - Spyc. My code was freely available, had been | |
used in production, and worked. They could download it and play with | |
it, or check it out online. Regardless of whether or not they thought | |
it was good, they could tell it was clean and well thought out. Well, | |
maybe not, but I had a website and 70 downloads. | |
So I got the job at GameSpot, in my mind the first big step in the | |
path that brought me right here, thanks to my open source side | |
project. | |
Something I learned from that experience is that you don't need to | |
make money from code to make money thanks to code. I didn't make | |
money off Spyc, but I made money thanks to Spyc. (Also, it got my | |
name in a book. But that's a different story.) | |
So that was pretty cool, and I thought unique, until it happened | |
again. While I was working on GameSpot, I was doing more and more | |
Ruby on the side. I had an open source Rails tumblelog called | |
Ozimodo, a crappy FTP server called ftpd.rb (which I used as a way to | |
learn about threading), and a command line option parser DSL called | |
Choice. For Choice, I had a full test suite (I wrote the thing to | |
learn TDD) and an RDoc generated homepage on Rubyforge. | |
When CNET, GameSpot's parent company, acquired Chowhound, they decided | |
to rewrite the site in Rails. Classic. They brought on two Rails | |
programmers from Wayfaring.com and were looking for another. They | |
found me. | |
I later found out my RDoc site, Ruby gem, and test suite proved to the | |
Wayfaring guys I was a "real" Ruby programmer. They wanted someone | |
excited about this stuff, and I certainly was. | |
So they threw a bunch of money in my face and convinced me to work on | |
Chowhound. Thanks, again, to open source side projects. | |
This happened to me twice, so it's not uncommon. Open source can make | |
wonderful things happen for you, and not just financially but socially | |
too. At Chowhound I met PJ Hyett, a GitHub cofounder and coauthor of | |
Err the Blog. | |
So, start a side project. Who knows where it will take you. | |
Do you have one now? If not, why not? Not enough time? No ideas? I | |
think I can help with both of those. | |
First off, the time issue. I don't know how many of you read RSS, but | |
I challenge you (that's a keynote term) to give it up for a month. | |
Just turn it off. Stop using Google Reader or NetNewsWire or whatever | |
the kids are using these days. It's not worth your time. | |
What should you do instead? If you use Twitter, try following the | |
authors of your favorite blogs. Read their tweets on the bus. Or in | |
the bathroom. Check Ruby Inside once a week and skim over the posts. | |
Visit an aggregator like planetrubyonrails.com once a month. But | |
mainly, let other people do the filtering for you. Use your time for | |
other things. | |
You will not miss out on anything big. Stuff like the Google App | |
Engine, or Rubinius running Rails, or the killer speaker line up at | |
this year's Ruby Hoedown will find its way to you. How can it not? | |
I'm willing to bet a lot of the stuff in your RSS reader is stuff you | |
already knew, or heard about somewhere else. | |
Personally, I used to check RSS multiple times per day. Now I don't | |
use any reader, and haven't since January 2008. | |
Another big time sink among programmers, I've found, are books on | |
process and theory. Books like Smalltalk Best Practice Patterns, | |
Practices of an Agile Developer, and even, I dare say, the Pragmatic | |
Programmer, are not worth your time. Instead, listen to Rein's talk. | |
Talk to your friends or coworkers. Let other people filter the | |
information for you, then decide what you like. | |
The best way to learn about patterns, idioms, and best practices is to | |
read open source code. See how other people are doing it. It's a | |
great way to stay current, and it's free. | |
(I really wish someone had told me this before I bought and read Head | |
Start Design Patterns. The whole thing.) | |
Next implement the Jerry Seinfield GTD method. Every time you work on | |
your side project, mark a big X through that day on calendar. | |
Eventually you'll have a nice line of Xs. Missing an X will be | |
torture - it'll mess up your beautiful streak. The goal is to maintain | |
the streak, even if you don't think you have any ideas for the day. | |
The best way to overcome writer's block is to write, after all. | |
Okay, so the time excuse is gone. Now you have time to work on a side | |
project and the motivation to do it consistently - the beautiful line | |
of Xs. You can devote at least one Sunday a month to it, at least. | |
But what's the idea? | |
This is actually the easy part, because you don't need a good idea. | |
Just start doing something interesting. Play with a new framework in | |
Ruby - I hear Sinatra is pretty hot these days. Learn how to do GUI | |
stuff, with Shoes. | |
Learn JavaScript. Like, for real. If you don't know what the var, | |
with, or delete keywords are, get a book and start working on some | |
flashy effects. Or download Rhino or Johnson and write some server | |
side JS. It's a really beautiful and misunderstood language. | |
Take some time to master your editor. Pick up the TextMate book and | |
dive in. Write a bundle. If you're already got massive Vim-fu, try | |
out Emacs. Learn why people love it, then use that information in | |
your holy wars against them. | |
Write a web service. Something like Cheat, Subtlety, Disqus, or | |
TwitPic - tools someone can use to help make running a blog, site, or | |
coding simpler. Simple sites that do one thing very well, and surface | |
their information with digestible APIs. | |
If you've been meaning to learn a new language, start learning it. | |
But don't just read a book. Start writing a program. | |
Learn Objective-C and Cocoa. Write a little Mac app to do something | |
useful, then give it away for free. Post the code on GitHub. Put up | |
a Pledgie badge and accept donations. Profit. | |
Write Rake in a Lisp. It's a good way to learn about metaprogramming | |
and how command line scripts work in your new language. Write an RSS | |
parser and explore native data types in Erlang. Write a simple blog | |
and learn about the web frameworks in Haskell. Write Scrabble in Io, | |
picking up some OpenGL along the way. It doesn't matter if people | |
have done it before. | |
In fact, stop worrying so much about other people. Every time I've | |
worked on a project I thought other people would really love, it was a | |
massive flop. Every time I've worked on a project I loved, it worked. | |
If you're sitting in this room, your taste is not as far off from | |
those around you as you'd think. Build something you love and others | |
will love it, too. (Not everyone, of course.) | |
Alternatively, do something hard, the hardest thing you can think of, | |
in your language of choice. Stretch the boundries. Make Ruby cry out | |
in pain. Install ImageMagick. Rewrite all of the standard library. | |
Write an Objective-C bridge. You know, something just devilish. Flex | |
your brain. | |
Work on your small project for a few Sundays, declare it complete then | |
move on. Learn another language, or write something else in your new | |
language. Pick up a new web framework or work on flashy effect number | |
two. Add concurrent task execution to your Rake. The more acclimated | |
you get to this process, the more creative your ideas will be. It's | |
the whole 10% inspiration 90% perspiration thing, and it worked for | |
me. | |
This, after all, is how GitHub was started. Tom and I had full time | |
gigs, but we'd get together on Saturday, have lunch, then work on | |
GitHub. We wanted a pretty and simple way to share Git repositories. | |
Something we'd use. Something that would make it easier for us to | |
share and work on open source. | |
Now we have three people working on the site full time, thousands of | |
paying users, and tens of thousands of repositories. | |
But it wasn't an overnight eureka, and it wasn't intentional. I | |
didn't just walk out of high school, pick up a Ruby book, meet Tom and | |
PJ, then launch the site GitHub. Before GitHub came, in chronological | |
order, Spyc, Ozimodo, my ozmm.org tumblelog, ftpd.rb, Choice, Err the | |
Blog, acts_as_textiled, Cheat!, acts_as_cached, Mofo, Subtlety, | |
cache_fu, Sexy Migrations, Gibberish, nginx_config_generator, fixture | |
scenarios builder, Sake, Ambition, and Facebox. And that's just the | |
stuff I released. | |
The more side projects I had, the more I felt the pain of maintaining | |
open source code. | |
If you already have a job you love, this doesn't exclude you. You | |
probably use, day to day, many side projects from others. You can | |
also use your own side projects at your job. From Emacs configs to | |
simple web services, there are a ton of things you can do to stretch | |
your brain. | |
I had no intention of leaving Chowhound when I wrote Cheat - I just | |
wanted to make it easier to look up commands I rarely used. Things | |
like TwitPic or Twictures have nothing to do with anyone's job, | |
they're just fun and make life on the Internet a little bit more | |
enjoyable. Ruby on Rails may have a financial angle, but if there's | |
money to be made in Shoes I'm not sure I see it. | |
My plea to you today is to start a side project. Scratch your own | |
itch. Be creative. Share something with the world, or keep it to | |
yourself. | |
Side projects are less masturbatory than reading RSS, often more | |
useful than MobileMe, more educational than the comments on Reddit, | |
and usually more fun than listening to keynotes. | |
Thank you. | |
A great encouragement and inspiring read! Thank you.
Still a great read! Thanks.
This redeemed by Sunday. thank you!
Impressive!!
Motivating read.
Inspiring +1
The link to the video is now: http://confreaks.tv/videos/rubyhoedown2008-keynote or https://youtu.be/e37ggWG_Cig
Amazing read. Amazing that it's in a .txt file nevertheless. Thank you for sharing, Chris.
Great content and a fun read. Thanks! 👍
Really inspiring! Thank you!
HN sent me over.Who else is hear reading this in 2019?
@ultrasounder Same here.
👍
HN sent me over.Who else is hear reading this in 2019?
I am! 👍
HN sent me over.Who else is hear reading this in 2019?
me ;-)
still kicking ass in 2019...outstanding read.
👍
me as well ;)
Timeless work
Come here because of HN. I will read more later
Great read and advice! Thanks a lot!
Great read. Thanks a lot for this!
Thanks!!!!
This is fantastic! Thank you for taking the time to write this down. Consider me inspired.