Just like the white stripe down a skunk’s back and the winding, white train of a bride, many of Ruby’s parts of speech have visual cues to help you identify them. Punctuation and capitalization will help your brain to see bits of code and feel intense recognition. Your mind will frequently yell Hey, I know that guy!

why’s (poignant) guide to ruby (a classic)

I’d imagine this is true of most programming languages, but reaching this point with Ruby was a huge breakthrough for me. Intense recognition is one of the best feelings.

Learning to program isn’t the hard part. The biggest challenge is figuring out how all the moving parts of a web application fit together. There’s no book for that.

Kaitlyn Trigger in an article about Lovestagram, her first web app and her Valentine’s day gift to Mike Krieger (co-founder of Instagram and her boyfriend of 2.5 years!)

This has been my experience, completely. So excited for Kaitlyn…and pretty much in love with Lovestagram.

Burrowing

I’m always worried that when the time comes to type, I won’t be able to summon the right incantation. I think this fear goes all the way back to being 8 years old and sitting down in front of my dad’s computer running MS-DOS, trying desperately to remember what words would bring Mario Teaches Typing onto the screen.

Today, intent on incrementally improving my programming skills, I decided to try just recording obstacles as they cropped up and then documenting the ways I got around them. This was good because it gave me an outlet for frustration while also encouraging me to verbalize exactly what was going wrong. And by putting the problem into words, promising search terms suddenly started materializing before my eyes. “I’ve already forked the project, so how to sync?” became “github fork out of sync,” which led me to GitHub’s Fork a Repo help page…which was exactly what I needed.

So, for posterity and perhaps your curiosity, here are two of the hurdles I ran into today and how I eventually got over them.

Read More

Coding and Decoding

In 2009, Robin Sloan and Tim Carmody invited me to contribute an entry to a speculative course catalog. (The whole thing is here.)

This is what I came up with; I keep coming back to it.

* * *

CODING AND DECODING

This course is about the deep end, and building the courage to plunge into unfamiliar places. Using lessons derived from the practices of cryptography, programming, and foreign language acquisition, we will learn to deduce information from context and recognize new patterns.

A language—of jargon, words, symbols, gestures, or images—is a collection of tokens. Shared language is a primary marker of community, a handy in-group/out-group indicator. The more languages we know, the more patterns we can recognize; the otherwise fleeting signals around us sink into meaning. Finding the pulse in what would otherwise be white noise, we come to understand and affect the surrounding world.

Coding and Decoding aims to confront two realities.

ONE: Languages are everywhere, and everywhere they are crucial. By expanding the scope of “foreign languages” to include unspoken languages (such as Perl, Ruby, and HTML) and hyperverbal tongues (such as the vocabularies of science, slang, and religion), that scope begins to include tools not just of communication, but of invention.

TWO: Most languages are most useful to know upon first encounter. But, precisely because it is the first encounter, it is the very time when we understand them least. This course aims to elevate the experience of first encounter. Through repeated and total immersion in unfamiliar endeavors—new countries, new communities, new machines—we will learn more quickly how to float.

Coding and Decoding is about all modes of communication, and all are in its view. But it is built with particular attention to the future, and what that future will be like. Technological experts can seem like magicians, conjuring effects wordlessly. By approaching that magic as a collection of component parts instead of an indivisible miracle, we can learn to see through these sleights of typing hands. In seeing through, we will learn to perform them ourselves; and think, as magicians, about the worlds we will build.

Language, now, is about more than communication. It is the architecture behind much of what we experience. Understanding that architecture will allow us to experience more.

Decoding requires immersion, patience, and attention. Coding comes more haltingly, but it comes most surely and usefully out of decoding. This class will require curiosity and endurance.

The Excel ‘=rand()’ function on just about any computer will flip the coin for you.

Ian Ayres, Super Crunchers

I was reading through the Kindle “popular highlights” for this book to refresh my memory, and was struck by something: almost every highlight was a sentence about a useful website—or, in this case, Excel function—that the author mentioned by way of anecdote. This suggests to me that readers were highlighting the passages as a way of noting to themselves, “I should check this out.”

If you use a tool or handy shortcut as a matter of course, I’d recommend broadcasting that fact widely, even if you think it’s common practice. The tool or the use case will almost always be news to somebody, and that’s how we learn from one another.

Every night, I record the story of my day and send it to Erik as a private track on SoundCloud. He listens later at night on the West Coast or early in the morning. This is one of the things we do to stay close while we’re far apart. (San Francisco and Boston, while I’m away at school.)
So every night I record a new track, and every track has a number; last night’s was #87. But sometimes I miss a number, or use one twice. So to practice Ruby and to solve the problem in a satisfying way, I wrote this script to automatically increment tracks above or below a certain threshold. (The gist on GitHub.)
Here’s the thing: much of my life online is stored on sites with great APIs—Twitter, SoundCloud, even Tumblr. To be able to play with that data programmatically is a powerful, mind-bending experience. I love sites like RubyMonk and Codecademy for learning programming, but there’s nothing like solving a real problem you really have with a few lines of code.
APIs connect what I want to do with what I want to learn.

Every night, I record the story of my day and send it to Erik as a private track on SoundCloud. He listens later at night on the West Coast or early in the morning. This is one of the things we do to stay close while we’re far apart. (San Francisco and Boston, while I’m away at school.)

So every night I record a new track, and every track has a number; last night’s was #87. But sometimes I miss a number, or use one twice. So to practice Ruby and to solve the problem in a satisfying way, I wrote this script to automatically increment tracks above or below a certain threshold. (The gist on GitHub.)

Here’s the thing: much of my life online is stored on sites with great APIs—Twitter, SoundCloud, even Tumblr. To be able to play with that data programmatically is a powerful, mind-bending experience. I love sites like RubyMonk and Codecademy for learning programming, but there’s nothing like solving a real problem you really have with a few lines of code.

APIs connect what I want to do with what I want to learn.

As we did our diligence and talked to “real developers” about Codecademy nearly everyone of them was dismissive of the idea. “Real developers” would never actually learn to code by typing into a browser. “Real developers” needed classic training on foundational principles not some web based toy. Besides, they said, the lessons are so basic they only scratch the surface of what it takes to write real code. Oh, and a bunch of people have tried the “writing code in a browser” thing before and it’s never worked.

That feedback may have scared off others but it sounded like disruption to us.

BRYCE DOT VC: Our Investment in Codecademy

For me, setting up my development environment was the most formidable barrier to learning to code. Coding in the browser tears down that barrier. I’d encourage everyone to take Codecademy and RubyMonk for a spin. Quick wins build momentum, and momentum is what it takes to reach escape velocity.

For more background on disruptive technologies, check out this classic Clay Christensen talk recently unearthed by Horace Dediu at Asymco.

robinpam:

Week 2 of Ruby class blew my mind. We learned more about methods. And that you can MAKE YOUR OWN! Then we learned about classes, and that you can make your own of these, too. Then we made a new class, called dogs, and invented some methods for it, like eating. And put an argument in that, like food (which can change!).

Week 3 happens on Thursday. Stay tuned…

Delighted by Robin’s discoveries.

>

/mentoring

Introducing a distributed mentoring movement.

In college, I studied history. I researched amateur magician communities at the turn of the twentieth century and read all about Soviet department stores. But mostly, I was fascinated by the history of technology. And halfway through college, I looked up and realized that history was happening around me: that the internet was transforming this moment, and that I wanted to be a part of it.

Before that moment, my plan had been to pursue a Ph.D. in history. The mentors I’d sought had been professors, and at university they’d been close at hand. Research assistantships, small seminars, and office hours all provided structured opportunities for getting to know the scholars I admired. When I decided that I wanted to pursue a career in technology, it didn’t stop me from loving history or looking up to my professors. But it did change my sense of what my future would look like, and more and more I realized it was looking less and less like theirs.

Finding “internet people” to look up to never felt like a hurdle: as soon as I started looking, I found people whose writing and outlook and accomplishments I longed to learn from. Better yet, the open book of life online gave me a more vivid picture of what my future could look like. The internet felt to me then, and feels to me now, like an electric frontier. Opportunities abound for bold experiments and spontaneous connections.

Yet without the structure of office hours, research assistantships, and seminars, it seldom occurred to me to look for an opening to connect—to actually seek individual guidance from the people I so admired, or even simply to express my admiration. In the absence of an invitation, doing so felt like an imposition.

I know now, though, that it’s the opposite: the opportunity to offer guidance from experience is a gift. In her book Reality is Broken, Jane McGonigal describes the phenomenon of naches — pride or gratification, especially in others. “We don’t describe ourselves as ‘bursting with pride’ over our own success, but we do for others; this language suggests that the feeling of naches is even more explosive” than satisfaction over personal success. But that reward requires commitment: “to generate the emotional reward of naches, we have to throw ourselves into the act of mentoring.”

As we live and work on this electric frontier, it’s important to build and renew our own traditions. My goal with /mentoring is to encourage people to believe in one another, and to make it the easiest, most natural thing in the world to express and welcome that belief.

Anyone can be a part of /mentoring. All it takes is a few lines of text on your own website, blog, or other profile, expressing your openness to mentoring and offering a specific invitation to get in touch.

I’m calling it “/mentoring” because I hope that eventually it will be as natural a part of the internet as “/about” pages. I’m placing my invitation at http://dianakimball.com/mentoring, and I invite you to do the same—or place it wherever it feels right to you.

Over time, I hope that this page can become a center, though not the center, of community experiences and best practices. Philosophically, that it’s on GitHub is no accident: I want this idea to flourish, and so I’m setting it free. To expand on it yourself, please take the idea and run with it to wherever it takes you. In the best tradition of open-source, I look forward to incorporating many ideas and also celebrating many alternatives.

Are you ready? Let’s begin.

>

Apply to Code for America by July 31st

Code for America is a service year for civic-minded geeks. It’s an organization extremely close to my heart, not least because this past year as a CfA fellow has been a transformative experience for Erik—the person closest to my heart.

The program’s 120 GitHub repos, lively blog, and notable supporters speak for themselves. So do the fellows: Erik and Max were interviewed on the latest Changelog podcast.

Code for America’s not just for coders—it’s also for designers, researchers, journalists, and anyone who cares about changing the way government works. CfA is accepting applications for its 2012 fellowship through July 31st. It’s the opportunity of a lifetime, and I can’t recommend it highly enough.