Skip to content

Commit

Permalink
Added my Goruco 2014 talk
Browse files Browse the repository at this point in the history
  • Loading branch information
jbrennan committed Jun 21, 2014
1 parent 547dcc4 commit 1343e64
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 0 deletions.
108 changes: 108 additions & 0 deletions Jun_21_2014_Designing_a_better_programming_community/goruco.md
@@ -0,0 +1,108 @@
# [fit] Designing a Better
## [fit] Programmer Community

^ Hello, I'm Samantha and this is my colleague Jason, we work at Hopscotch and we're going to talk to you today about our experience building a programming community of kids.

---

# [fit] 4 Lessons

^ We're going to go through 4 lessons we've learned at Hopscotch that we hope will be edifying to everyone here.

---

# [fit] 1

---

# Be *mindful* of who is a member of your community.

## And who isn't.
^ I hate to say it, but looking around this room, it's a little bit homogenous. (Ok, a lot.) And if you look at the data, this room probably pretty accurately represents the makeup of what most programming communities are like. They tend to be self-selecting for a specific type (i.e. nerdy white male). And that leads to an unvirtuous cycle in which the tools for beginners are also created by that same self-selected group for people like them. Some examples- "Hakitzu teaches kids to code with robot warriors", "Robocode is a programming game, where the goal is to develop a robot battle tank to battle against other tanks in Java or .NET".
^
^ To create a diverse community of programmers it's important to create tools for learning that are universally appealing. Here's a hint: girls don't fight with robots. This is something we are constantly watching in Hopscotch. We have to be careful about every new character we add so that it doesn't skew our app to look like it's for boys or girls. We also have to be very mindful of which projects we feature in our community to ensure that they provide a good balance of different interests. This leads to such projects as "Hopscotch's got talent" and "beautiful rainbow" but also "bird bullet" and "deer hunt". Having something for everyone is really important to make something really inclusive for lots of kids.
^
^ But it's really paid off. We've worked with a lot of kids. What we've seen is that there's basically no difference between girls and boys getting started with Hopscotch. Once they feel that the language interface looks friendly enough for them, kids of all types have no trouble at all diving in. So just tweaking the type of themes you use to introduce beginners you can really change the mix of people who will try your tool and the types of people who can join your community.

---

# [fit] 2

---

# Make your community *accessible* for beginners.

## And powerful for pros.

^ You can think of members in a programmer community on scale from Beginner to professional, with a lot of gradation in between, and for a healthy community you want to have a good mix across that spectrum. In order to do that, it’s important to look at how you attract both groups. So let’s start with beginners.
^
^ The key to getting beginners to be a part of your community is to make it accessible to them. You’ve got to make your community welcoming to beginners so that they can jump in and get started right away but most importantly, you want to make it easy for beginners to feel successful as soon as possible. The more successful beginners feel, the happier they’ll feel about your community, and the more likely they’ll be to stick around.
^
^ If you look at most programming environments...they’re really not accessible to beginners. For starters, most programming languages make you do quite a bit of work to get setup before you can even start to program. I’m an iOS developer, and I love Xcode, but as great as Xcode is, it’s far from accessible for a beginner to jump right in to.
^
^ If you’re trying to express an idea on paper, you grab a pencil and some paper, and you just start writing. But if you’re trying to express an idea in a programming language, there’s waaay more you have to do before you can even get things down. It’d be like having to get in your car, head to Staples, buy some pens, make sure they’re compatible with the paper you have at home and then....what was I going to write? Forget it, I can’t remember, you’ve lost me. It’s ridiculous.
^
^ If you want to get beginners, you have to let be successful as early as possible. They have to be able to be effective immediately.
^
^ We’ve seen this in Hopscotch where as soon as you open the app, you’re programming your world. You can pick up the objects in your program with your fingers! and it’s tangible right away. That’s huge. No compilers, no loading the right files or installing libraries, no bookkeeping. Just jump in.
^
^ Secondly, even once you get a programming environment all set up, you’ve then got to deal with code! As great and as powerful as code is, it’s not accessible to beginners. Code is abstract and symbolic, something that takes a lot of practice to get used to. And unless there’s a good path for beginners, they’re going to stumble over code. How do we solve this?
^
^ Well we’ve already solved this. Computer interfaces used to be restricted to a more command line style. You typed in commands, that you’d already memorized!, and then hope that the output is what you wanted. Does this sound familiar? But the graphical user interface was found to be a far easier way to interface with a computer. Instead of remembering commands, you found them with your eyes and you grabbed them with your mouse. And so isn’t it ironic to ask a beginner to use a graphical computer to then type in code in a text editor? We’ve just removed everything that’s accessible about a graphical interface and dropped them back to the command line. That’s sucky.
^
^ Graphical interfaces make your programming language more accessible for beginners. And that’s what we’ve seen with Hopscotch, too. Like I said already, Hopscotch is ready to go out of the box, but’s also also mostly drag and drop. You position your characters with your fingers, you drag blocks of code with your fingers. If you’re making an animation, we have a live preview while you’re writing your program. We had playgrounds before Xcode! You see and directly manipulate as much as possible.
^
^ These kinds of design challenges and solutions are important as beginners become better programmers too. If you make your environment accessible for beginner users, it’s going to be just as accessible for power users too. It’s important to make it accessible without dumbing it down for the pros.


---

# [fit] 3

---

# Start with a solid *mental model*.

## And read *Mindstorms*.

^ Next I want to talk about introducing powerful ideas to your programmer community so that you can let the community grow for you. There are many ideas in programming languages or in communities, but some are more powerful than others. What makes an idea powerful? I’m going to quote John W Maxwell here:


^ So these are the sorts of things that let your community grow organically and to have network effects. The obvious ones are the social aspects of a community, like having mailing lists and conferences, places where members of your community can work together and help each other. Humans are pretty great at this, and once you get started, your community grows faster and faster — it’s a positive feedback loop.

^ But there are other powerful ideas often overlooked. If you’re designing any kind of programmer community you absolutely positively **must** read Seymour Papert’s *Mindstorms*. It’s probably the best and most thoughtful book on a programming language for a few reasons.

^ Papert set out to improve the way mathematics is taught and learned in schools. That’s important. Papert didn’t set out to make a programming language, he didn’t set out to make a programmer community, he set out to create an environment for kids to think and reason in about *powerful ideas*, a place where they could become fluent in math and express themselves better. Isn’t that great? Papert thought: if a child spends a few years living in France, she’ll probably learn quite a bit of french. What if a child could spend some time living in what he called Mathland? How fluent would she become? The language he invented, Logo, was made for this purpose, to provide this environment for kids.

^ Seriously, just read the book. I’ll buy you a copy, just read it.

^ All good programming languages are built with solid mental models in mind. That’s how the programmer fits the logic into something that makes sense to their brains. Logo’s mental model was that of the Turtle. Kids played pretend, acting out how the digital turtle would move, then they programmed that in Logo.
^
^ Smalltalk has the mental model of Objects, which are based on biological cells. What’s important in Smalltalk isn’t the objects, but it’s how messages are sent between them. How powerful is this idea? It’s been powerful enough for Earth’s biology for the last couple billion years, and it’s been powerful enough to run the internet for almost 50 years without restarting it once.

^ Hopscotch uses the mental model of an active little world where you tell your characters how to behave. Every kid likes playing pretend with their toys, and Hopscotch lets them make programs with that model.

^ If you’re trying to make a programmer community, you need to be mindful of the kinds of powerful ideas your members are going to benefit most from.

---

# [fit] 4

---

# Try making a language.

## You don't have to be a whiz to do it.

^ The 4th lesson is kind of a meta lesson. What we'd like you to do is take into account everything we've said already, about being mindful of who you want in your community, about making it accessible for beginners, and about powerful ideas to make it grow, and try to make a language based around that. Trust me, you don't need a phd in computer science to do this. When we first wrote Hopscotch I was a math major turned ruby programmer and the people who helped me design the language were a teacher and a graphic designer and bunch of kids we talked to. What we brought to the table was a new perspective on programming languages. You don't need to know assembly or be good at C to create a language, ruby javascript and objective c (or swift!) are perfectly fine to start with. Focus on how your language expresses ideas instead of how it manages computer resources.
^
^ And this is really important. If we are truly commited to creating a more diverse community something needs to change. We need new and better ways to bring beginners onboard. We also need more inclusive environments that will work for different types of people than the stereotypical programmers who are being served by today's tools. So please, go out there and try it for yourself! And invite collaborators who are not necessarily programmers. They will definitely bring interesting perspectives.

---

# [fit] Thanks.

## gethopscotch.com
## @hopscotch

---
Binary file not shown.

0 comments on commit 1343e64

Please sign in to comment.