the failure of common sense

Let this be a reminder that common sense may not get us very far.

Two hundred years ago, the common sense approach to getting from point A to a distant point B would be to walk, ride a horse, or take a carriage. A person today would think to take a car. That doesn’t seem like a wild distinction, but think about how someone two hundred years ago would have reacted to the notion of a carriage without horses. You’d probably come off a little crazy just trying to explain it.

Consider that in 50 years, the notion of physically controlling a vehicle from your point of origin to the point of destination will seem bizarre. By then, it’ll just be common sense that you tell the car where you want to go, and you end up there. That’s much simpler than being trained for years just to be a highly fallible controller of a multiton steel bubble that gets packed into a tight space with hundreds of other steel bubbles, hurtles along faster than birds typically fly, and relies on hundreds of strangers to maintain constant attention and vigilance for hours at a time. Why does doing that make sense to us? It’s insane!

But it doesn’t seem that way to most of us yet. For now, that’s uncommon sense.

Think about electricity, or airplanes, or hot air balloons. The principles behind hot air balloons had been figured out by the Romans, yet no one made one until the 18th century. People had worked very hard to build flying machines, and somehow putting a big container around a fire never occurred to them as a sensible idea. It’s just common sense: hot air rises. But it wasn’t at the time. Imagine how differently the world might have looked if we’d have had hot air balloons from 50 AD. I think it would make for some pretty wicked steampunk.

On a daily basis, we probably make hundreds of decisions based on our common sense. Unfortunately, I’m not aware of any heuristic for detecting when common sense should be replaced by uncommon sense. It’s strongly tied to what the uncommon sense replacement will be, and if someone could easily figure that, well, they’d be a genius super-inventor.

While we can’t easily identify those times, we can probably identify some times when we’re just using common sense. It might be useful to try to be aware of when you’re making a small logical leap about ‘what the best choice is’, and whenever you catch yourself doing it, examine: what are the assumptions that underly that? For example, with cars in 1812, someone might think ‘well I’d take a carriage’. If they were to stop and determine what assumptions underly that, they could easily say things like “assuming I can’t fly or magically just be there” — but with some thought, they might arrive at “assuming I need horses to make the carriage move”.

So next time you’re out enjoying your day: think about the assumptions that underly simple decisions. Like putting on your shoes, locking your house, wearing a helmet on your bike, stopping at a red light, heading in the correct direction for work, or not forgetting to bring your key-card. Just taking a mental tour of my journey to work, those things came up. I wouldn’t have to put shoes on if they were always on. Or if the ground were cleaner. Or if a barrier somehow magically existed between my feet and the ground. I wouldn’t have to lock my house if my doors only ever opened for me anyway. I wouldn’t have to wear a helmet if it became impossible to crash bikes the way we can today. Maybe those are stupid analyses: maybe not. The point is just to recognize things that would make the situation different.

If you consider the assumptions you make about the default decisions in your life, you might strike on a vein of uncommon sense. Good luck.

Posted in Uncategorized | Leave a comment

“We would have been home by now!”

Today, I spent two hours on a train listening to a conversation. Two tradesmen decided to travel home by train instead of heading with their crew on the highway. Throughout the conversation, the younger of the two men repeatedly expressed his frustration over the fact that they had lost time by spending money on the train (their crew was already home shortly after we left), while the older man told him again and again to relax, and to enjoy himself for once.

They had a few beers along the way, and their conversation was at times heated, deeply personal, nostalgic, and humorous. They were each a little rough around the edges, in slightly different ways. The younger man had lost his driver’s license for one reason or another, the older had been heavily involved in gang activity when he was younger. They discussed women, drugs, getting and staying clean, their plans for the weekend, the past, really the gamut of life. They rejoiced in their friendship, they talked about how they hated each other (and each threatened violence to the other, at times jovially, at times seriously).

The younger one was intent on saving money and hurrying, even if it meant taking extreme personal risks. The older kept telling him not to bother — a particular sticking point was around their transportation when they arrived. The older man wanted to just split a cab, while the younger man insisted they only take a cab as far as his house, and then he’d drive the older man home. But he wanted the older man to cover the cab. The older man insisted that neither of them should drive; they’d been drinking. The younger man repeatedly brushed him off.

It was really interesting. Near the end of it, during a reprise of their earlier argument over timing and the cost of the train and why they took the train in the first place, I suddenly started listening as if they were characters in a play. Things slipped into an uncanny valley very quickly, and I felt like someone outside of the world, or that these men might just be actors who screw with travellers, performing a brilliant two-man show. Suddenly, their lines didn’t seem to be delivered as convincingly. It sounded like they were just saying what they thought they were supposed to say.

It was one of the strangest things I’ve ever noticed.

As we got into town, the elder man, frustrated with how sour the younger had been throughout the trip, stood up and headed for the exit early. The younger one sat silently for a bit, and then followed. I had a few minutes to mull the experience over. I considered the subjects they’d talked about, their differing perceptions of time, and their attitudes toward life, each other, and the people they knew. I haven’t had an opportunity to observe people so different from me in such a candid fashion before, and it was really stunning.

My final thoughts, as I put my laptop away and got off the train, were that I, like a fish in water, pay very little attention on a daily basis to the geekiness of the people in my universe. I had actually forgotten that most people aren’t like the ones I interact with every day, and it’s weird to recall that generally, I am the weird one.

Posted in Uncategorized | Leave a comment

Hockey and Honing The Craft

I did not ever think I would grow up to describe myself as a hockey player. I remember being alright at “getting the ball away” when playing floor hockey as a youngster. Some of the kids who knew things about hockey were angry that I never passed it to anyone, and they had every right to be. I was just flinging the ball as far away as I could.

I can also remember getting my two upper front teeth knocked in while playing floor hockey during Grade 11 or 12. One of them is porcelain now, and the root on the other fortunately survived. Thankfully there’s no gaps! From that day on until a few months ago, I pretty well stayed out of sports’ way.

Fast forward to today: I’m feeling a bit down on myself at work because I haven’t found the level of productivity I aspire to. Two particular kinds of decisions come up occasionally, and my annoying default response is to freeze up and find a distraction. If it’s a particularly tough little knot to figure out, I can burn a lot of time thinking, getting frustrated, finding something else to do, returning and reloading the mental context, then getting frustrated and removing myself again in a sort of loop.

This has got me thinking — just a bit — about the dreaded topic of “whether I should even be doing this kind of work at all”. In many other situations, I feel I can act quickly and land on my feet, but these ones just catch me. The first is the “should I write it one way or another” moment, and the second is far worse: “I wrote it the one way, but now I see the problems with it are bigger than I guessed… should I continue down this road despite the looming clouds, or undo my progress and try the other path? Maybe there is a third option that hasn’t occurred to me yet?” That one kills me. Especially when the “looming clouds” are something that appears time consuming, might still fail, and I don’t really know how to do it.

So anyway, back to hockey. It’s floor hockey, by the way — I’m not awesome enough to do this on skates yet — tonight I got a goal and a half, while playing defense. The first goal, the full goal, was a lucky shot that soared in under the crossbar. Felt great. I played a pretty solid game (for me) tonight: kept on people, cleared the ball to the right places, stopped lots of incoming attacks, and I didn’t get as out-of-breath as I have in the past.

I’ve only been doing this once a week for two or three months. When I started, I was dying by half-time, and I noticed very clearly how bad I was. It was still fun, but I felt like I was as much harm as good out there. That feeling kept on for a while, but it’s been less and less. I’ve made steady progress. But wait: I didn’t tell you about my other goal yet.

They got one on us, and we were already down by a few. It felt like we kept outsmarting and outplaying them, but something would slip and the ball would fly just perfectly off of legs or a mask into the net. A fluke of flukes! I felt angry — not at the other players, but at how we just couldn’t catch a break. The goalie passed me the ball and I started to bring it up; the other team moved in to block me as I got to half, and my teammates broke over the halfway, but were pretty well covered.

I focused my anger, and decided to be tricky! I deked right like I was going to pass while I ran left, bringing the ball with me. I dodged around a confused-looking forward, ran toward the net, halted the ball and shuffled it away from a nearby defense, then shot! It went straight past the goalie, who just stood there dumbfounded. Everything had lined up perfectly: I felt like a boss. While triumphantly strutting back to the other side, I heard shouts: “doesn’t count! doesn’t count!”

Why the hell doesn’t it count? Were you guys subbing really slowly? That’s your fault.

No, actually, see, there’s this rule in hockey. When the goalie passes it to a person after a goal, that person can bring it forward with them up to half, but must pass it over the line. I didn’t pass the ball: I just ran with it. The rule probably exists because rushing the net like that gives an advantage. The reason everyone just let me past is because they all know the rules, and I looked like an idiot. A complete amateur, which is what I am.

At the end of the game, they decided to count it anyway. We lost by a wide margin regardless, and they were feeling charitable. I made a complete beginner’s mistake tonight, but that doesn’t change that I played a solid game. I poured my heart into something, and it was a dumb idea. But I learned something.

My stuff at work? I’m probably making stupid decisions all the time. As long as I keep my head level and really work hard, I’ll learn. The same goes for every thing in my life: I have mistakes ahead of me, and should consider them as welcome opportunities to learn from. All I can do is try to be better each day.

Posted in Uncategorized | Leave a comment

Electrogravitics?

So, this is a pretty wacky wikipedia article. I wish that the uncertain pseudoscience-y nature of it weren’t quite so uncertain, because then it would either be a “wow neat!” or just not be worth writing about. The article talks about things called “lifters”, which utilize an effect known as an “ion wind”, where charged particles are actually pulled between electrodes due to their charge difference to cause lift. This means that these devices wouldn’t work in a vacuum, and are relatively useless.

But the way the article is written has just enough bait there to make you wonder about this other, crazier explanation being involved. Not as a replacement for ion wind (which is a very real thing), but as an additional effect under the right circumstances. Mythbusters apparently tried to replicate this myth and busted it by showing no lift generated by one of these machines in a vacuum, but the conditions described for the “mysterious effect” to come into play sound very demanding. Dense piezoelectric crystals and incredibly high voltages being pulsed at particular frequencies. This has the earmarks of crappy science: a holy-grail like claim and a billion reasons to explain why the failed tests that falsify the claim aren’t really conclusive.

But then there’s also all this military stuff. The article has a claim that there was a demonstration to the military in the 1950s showing off the mysterious effect, and that the whole thing was immediately classified and spawned 40-50 US military projects lasting over 20 years. The guy who performed the demonstration worked for the military and the precursor to Lockheed Martin and apparently on a secret project in France, and his job through all of this was to “research antigravity propulsion”. So, if it’s just ion wind, were they all just not well enough informed for those 20 years? But then, all of those projects were shut down in the early 70s by a policy intended to get rid of crap that wasn’t helping the military.

And then you read that the guy who reported on this “mysterious force” being shown off is a science fiction writer and model rocketry enthusiast, and start thinking that he could have just fudged some facts. But what isn’t disputed is that a demonstration did take place by a real man whose name is attached to the general ion wind effect, Thomas Townsend Brown, and that he did in fact work and research gravity propulsion systems for the next 20 years, while a large number of military projects surrounding the concepts were going on.

It’s back and forth, back and forth. Each extra bit of research turns up something very legitimate looking, which ends up being the most ridiculous thing yet. These videos (make sure you listen to the music a bit) are where I called it quits due to an outbreak of hysterical laughter. And yet, if they didn’t have the weird music and “gravitec” logo everywhere, they would have seemed to be doing something really credible. It’s kind of like when a spammer sends you a really well crafted, personal-looking email with a spoofed address, but opens with “Dear Sir (Madam) ,” and blows the whole operation.

While reading up on this, I was reminded of (and ran across) things in the same wishy-washy region. Burkhard Heim and Heim Theory and the Hoverbike and the Moller Sky Car. They’d all be so cool, if they were more than just zany nonsense.

Posted in Uncategorized | Leave a comment

Our Noble Defense

Collected Data

Yesterday, a blogger wrote about a topic dear to the hearts of many programmers. The community at large came together to shout about it, and the spectacle has been a pleasure to watch. I’ve collected what (qualitative) data I can, in the hopes of distilling useful things.

The original post, by Jeff Atwood:

Some of the flood of responses:

..and I’ve certainly missed some. (each (hn) link leads to the hackernews submission/discussion for that article)

A Brief Summary of Atwood’s article, list form:

  • Atwood is annoyed by the “learn to code” craze
  • he jokes? about why the mayor of new york might want to learn
  • Suggests that coding is like plumbing; not vital know-how for everyone
  • Agrees that a little bit of programming could be useful
  • Ends by saying that basic computer skills, how the internet works, curiosity, reading, and interpersonal communication skills are ultimately more important

Typical response formats / focuses:

  • Comments on the flaws or virtues of the overall premise
  • Attack (or applaud) Jeff’s choice of analogy (plumbing)
  • Attack Jeff’s equation of “knowing how to code” to “knowing functions, pointers, and recursion”
  • Clarify the distinction between “coding” and “programming” in this context
  • Tell an anecdote about programming being useful to non-coders (lots of these)
  • Tell an anecdote about non-coders doing harm by programming (fewer of these)
  • Interpret “What Jeff Really Meant”
  • Express anger at the post’s obviously-bait title
  • Zed Shaw being brash and over-the-top
  • People naively thinking that replying to Zed will minimize that problem
  • People pointing out misconceptions or errors raised in other people’s responses

Analysis

This article is eerily well crafted for virality. I wish I could credit Jeff with adding minor logical foibles like non-sequiturs, hasty generalizations and strawmen on purpose. Or subtly drawing a brand new distinction between synonyms, then using that distinction to appear to call for war while actually calling for supper. It super-effectively gets under people’s skin and drives them to want to respond, but they’re unlikely to disagree on the whole. Unfortunately, to actually give that credit feels like breaking Hanlon’s razor. Cock-up before conspiracy: these are probably just errors.

Jeff clearly has a good sense for how to deliver a topic to be read and talked about, because here we are, but his suggestion for people to learn to communicate effectively felt … hypocritical in its conext. Much of the surrounding discussion has been a consequence of misunderstandings of his post, and most responses are in fact along the same lines as the points Jeff makes.

After hours of reading, I will join the throng of interpreters and attempt to reflect the collected opinion of the masses, imperfect lense that I am:

“People shouldn’t plan to dive into this field and come out overnight as experts, making hot social app startups or being paid top dollar for their skills, nor should people encourage others to dive into it for those reasons.

But it would probably be good for people who aren’t career-programmers to learn a bit about how computers work, and how to automate simple stuff, and if they’re curious after that, they should keep at it. Oh, and people should still learn other stuff, too.”

I feel that this adequately sums up the spirit of Atwood’s original post. I also feel that this is pretty much a representative average of what has been said in response, back and forth, for the past 12-20 hours.

Action Items

I’m reminded that many programmers sense something special and important about our discipline. Some responses glazed over the distinction between programming itself and the virtue it brings, but it is clear that people perceive some mix of problem solving, recognizing cause and effect, strategic thought, comfort with trial and error, raw utility, and more in the writing of programs.

I think that what they’re feeling is related to what Harold Abelson spoke about in the first SICP lecture, that we’re just beginning to learn to “formalize notions about process” as Egyptian surveyors founding geometry (and all modern math) were just beginning to formalize notions about space. There’s something truly special, even magical here, and I think that people perceived Jeff Atwood’s post as an attack on the special nature that we sense. I believe that specialness is what so many people have really been defending.

My chief takeaway is to think about better ways to identify, express, and know that thing. Whatever it is. Before we finish, I’ve got to quote the SICP again. This time the opening quote:

“I think that it’s extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don’t think we are. I think we’re responsible for stretching them, setting them off in new directions, and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all, I hope we don’t become missionaries. Don’t feel as if you’re Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don’t feel as if the key to successful computing is only in your hands. What’s in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.”

Alan J. Perlis (April 1, 1922-February 7, 1990)

No matter how great we perceive the virtue of programming to be; even if we think of it as a literacy, Perlis has it right. Like reading, and like math, the best thing to do is to make it fun first, and then the knowledge will flow. If we become a bunch of missionaries, or Bible salesmen, I’m certain we’ll have lost the best part.

Posted in Uncategorized | Leave a comment

Day 8: Progress Report

Warning: bit of a boring show today — just plans and record keeping.

Learned, Keep, Start, Stop

I’ve completed one week of blogging each day. What have I learned, what should I keep doing, what should I start doing, and what should I stop doing?

I’ve Learned

  • Things may fall into place easily, or take a lot of effort. No pattern yet.
  • Starting after 10:00 PM means I won’t finish until after midnight.
  • My best posts have specific messages to deliver.
  • Cut things that don’t need to be said.

Keep

  • Blogging.
  • Trying to get exposure to topics which give me reasons to blog.
  • Thinking about the post earlier and earlier in the day.
  • Meticulously editing things. Thanks to Robyn for some inspiration here.

Start

  • Writing as soon as I start thinking.
  • Thinking earlier — days in advance, not hours in advance.
  • Trying not to let this mess up my bed time.
  • Learning so that I can explain, instead of learning for its own sake.

Stop

  • Worrying about correctness. I tend to be wrong anyway, so why work so hard at it?
  • Quitting on topics that I don’t feel like writing about at the moment.
  • Trying to trick myself into starting new focus items (things to do for 21 days) early.
  • Trying to accomplish too much, and thinking about what I haven’t accomplished.

Summary, or Commentary, or something

That’s all just sticks in the sand. I don’t (yet) have any metrics to base these on, so it’s just gut feelings for now. I’m pleased with the progress so far, and will definitely continue. I just need to find ways to integrate this into my day other than appending it to the end.

Next week I might try to write a plan of each post first, and I’d like to start researching a topic the day before writing about it. I’ve made some headway today — first draft written at 6:30 PM in a barber shop, third draft now at 11:01, and I’m mostly wound-down for sleep.

Thanks to the friends and family who have been reading and giving feedback. I appreciate it a ridiculous amount. Now it’s time for sleep, where I’m a viking.

Posted in Uncategorized | Leave a comment

On Learning Math (largely, ‘complaints on’)

I have been ‘planning to learn more math’ for longer than any person should. I’m going to try to outline the roadblocks I’ve run into, and we’ll see if some solutions fall into place. My bet is that the actual reason I haven’t learned much more math is that I haven’t really prioritized it, but who knows? Maybe it’s the world’s fault.

Tricky algebra leaps

I’m unable to find the original source, but I’ve read that a single unfamiliar word in a paragraph can seriously throw off a reader’s comprehension. (the closest thing I could find is this (pdf)). So, when a professor sets out to explain a concept from start to finish, care should be taken to ensure that each step in an explained process is clear and easy to follow — even at the expense of time or space.

Professors often seem to skip why and even jump past most of how to arrive at what a little sooner. I ran into an example of this today, watching the first video lecture offered by MIT for single variable calculus.

The professor poses a problem to the class about finding the area of a triangle made up of the x and y axes and a tangent line to a function. He explains the “calculus” part of the problem very well, but then seems to straddle showing the rest of the problem for completion’s sake and actually teaching us how to solve it.

At one point he needs to find the x-intercept. Rather than explain why it needs to be found and how to find it in concrete terms, he just starts pulling pieces of information from the last five minutes of work into an equation, while changing them slightly and performing transformations on the equation, often skipping multiple steps at a once to save time and space on the chalkboard. After doing all of it, he doesn’t stop and explain why this was done or how it worked — he just jumps into the next piece of the problem.

This is where it gets even worse: there is an opportunity to repeat the work to reinforce it, where the professor could even ask his students to tell him what to fill in and promote active learning, but he decides to be clever instead. Noticing that the function in the question is “y = 1/x”, he calls upon an “argument by symmetry”, and shows very thoroughly that “y = 1/x” means “yx = 1″, which means “x = 1/y”, so everything we just did to solve for the x-intercept can be done for the y-intercept by swapping x and y wherever they occur.

Don’t get me wrong here: that’s a cool logical tool, a cool pattern to show off, a good thing to teach, and this part is even well taught! He shows the trivial step in switching y = 1/x to x = 1/y — but the professor left considerably more complicated transformations unmentioned just seconds ago, and has essentially just said to the class “and what we just did (whether you get it or not), we do again.”

One could argue that the impetus is on the attendants of the lecture to ask for clarification. One could also argue that the bits of math which are unrelated to calculus aren’t worth focusing on in a calculus class, and anyone who is lost should do the remedial work required to get up to speed. It’s also hard for the professor to guess how low level to get. During my teaching experiences, I often felt like I was dragging things out and boring everyone to tears whenever I showed a full piece of code.

Video lectures make this less of an issue, thankfully. I watched the lecture at 2x speed, and rewatched the part of the lecture where the prof worked through the problem multiple times, pausing whenever he got ahead of my head. No single step was too complex, but all together it took some real thought to understand some of the less-trivial changes. It could just be my lack of experience and rustiness in this case, but it seems to be a common issue for teachers.

A dialogue with the class

Continuing that line of thought, I recently took lectures on set theory and proofs. I feel like I got very little out of the second half of the semester, which devolved into the professor writing for 4-5 minutes, turning to the class to say “as you can see, the axiom of choice applies” and turning back to write for 4-5 more minutes. This could happen multiple times in a row each class, sometimes just to solve a single problem.

This may sound like the flip of the instance above — being too low level, going too slowly, showing too much, but I should clarify: the steps being taken here were not all trivial. Often, new concepts and methods of argumentation were being introduced alongside manipulations and substitutions that went by without remark.

This may be an effective method for some people. Maybe it’s similar to what I ran into in my own classroom: the topic seems so obvious to the professor teaching it that it’s kind of like writing prose on the chalkboard. They expect us to just read and understand. Perhaps there’s a sense that “this is the way math is taught”, or a machismo idea of “if you can’t follow this, then you can’t don’t do math”. I’m not sure what the motivation is; I hope it is not something like those.

What I think would work best is a genuine dialogue with the class. Even if there’s 80 people in class, it seems to me that knowledge might be more effectively conveyed by an active exchange, perhaps begun by posing the problem in as non-technical a set of terms as possible, and inviting people’s ideas about how to solve it. When the super-geniuses in the front row respond with a series of symbols, the professor can nod and say “that’s great, but let’s try to put this into simple, every day language.”

From that point on, the regular people who actually need to be in the class have a chance of learning something. The professor can ask leading questions, and try to use real world concepts to provoke thought and inquiry from his students.

When they suggest an idea, it might lead down an interesting — maybe incorrect — path. She could work it out on the board, reiterating the motivations for what’s about to happen, and explaining how what she’s about to do next corresponds to what we just discussed. Again examples from the real world could be used to illustrate why a concept makes sense or doesn’t work as we’d expected. When people know why a thing is being done, it seems likelier that they’ll grok how it is being done. At the end, they’re also far likelier to understand what has been done.

While this sounds great to me, it might not engage anyone other than myself, or those I share a learning style with. It might be a complete failure of an idea that was tried before. Maybe this is what tutorials typically are. I didn’t get this experience in any of my classes, and I haven’t ever heard of math class being like this. It just feels intuitively like it would be a breath of fresh air.

Accumulation

Yet again, I can’t find the research I’m looking for — I think this one came up in a TED talk about khan academy; at the end Bill Gates comes onto stage and has some very awkwardly scripted dialogue with Sal Khan about the topic. Anyway, earlier in the video, Sal shows some of the metrics they had been testing out in grade school programs using khan academy for teaching. They found that some kids rocket through the lessons, while some others struggle, and he spoke a little about the implications of one of their findings on the idea of giftedness in schools.

The students who were struggling often failed to understand just a single aspect of a single lesson, at times because they had missed an even earlier piece of information that the lesson relied upon. Once armed with that single piece of information they needed, they would typically shoot forward and rejoin the students that at first glance had appeared to be gifted. The suggestion was that students that do the best may simply be the ones lucky enough not to have missed the most important parts of class.

This is one of the sticking points in my attempts to go back to learning math: I have no idea where to jump into it. Whenever I do, I either feel like I’m missing vital knowledge, or like I already know everything I’m being taught. It’s kind of like picking up a book that you were reading a year ago: pick a random spot and things seem familiar, almost boring, but some interspersed pieces seem entirely foreign. It’s tough to tell what’s been forgotten versus what hasn’t been read!

For example, I don’t know many trig identities, or projections and the like from discrete geometry in grade 12, but I tend to use radians and remember pieces of plane-intersection math. I also learned a fair bit of combinatorics, but can’t recall the definitions of Pick versus Choose. Say I go back to where I feel fully certain I know everything that’s going on: soh cah toa and simple polynomials from grade 10 — it seems like a mountain range of repeated knowledge to be braved before I could get back to real math.

Advice

Having put my thoughts down, reviewed and edited and shuffled them around so they’re neat and tidy, I feel like I’ve detected some things that would be neat to investigate about math education. Real world examples for higher level topics in math would be something excellent to write about (I know that this person has a few great examples for e and an introduction to calculus), but pages about spaces, and metrics, and lie groups, and multivariate calculus — it would be cool to read down to earth explanations of that stuff.

If you’re setting out to learn math (like I, presumably, am), I think it makes sense to have a target you want to hit. Something you want to be able to understand or accomplish. I don’t, though — that’s probably a problem. Too often, I just wander around aimlessly and feeling emptyhanded and emptyminded after a collection of skin-deep first encounters with topics I can’t begin to understand yet. If I chose a specific destination, it’d be a lot easier to find, draw, recognize, and even just to read a map. But good luck even finding a destination!

As a final note, the math I’m talking about in this post is, by and large, not the real math that mathematicians wish everyone knew about. I have read some of the Mathematician’s Lament (pdf), and agree with it as enthusiastically as a layperson justifiably may. Sadly, I know of no place to find better education, and I am not in school any longer. For now, I plan generally to bring myself up to the task of real mathematics, instead of trying to pull real mathematics down to a place where I can try it out.

If you can suggest to me a destination, a resource, or a way to pull real mathematics down from the stars and into reach, by all means, do so. I’d love to hear about it.

Posted in Uncategorized | 1 Comment

blogging without authority

I am not an authority on … really, any subject. It’s making this blogging run pretty difficult so far.

I started writing about skepticism today, but ran into several problems. For each sentence I wrote, I ended up doing an hour or so of research. Also for each sentence I wrote, I went back and rewrote earlier sentences to cut down on verbosity or to retreat from making claims that I didn’t think I could defend. So I’m facing the blogger’s perennial crisis: what can a total layperson write about? There are only so many self-analytical posts a person can make.

My style of writing tends to follow a long, verbose narrative. I’ve been told that I write in a way that “sounds like I’m talking to you”. The biggest downside to this is that I need to put real effort into being concise. The biggest upside is that thoughtful expositions flow easily, and I’m rarely at a loss for volume. I should try to use it to my advantage.

My position as a layperson means that I should be able to write introductory guides to things, but to what? Math topics? Programming? Science? Art? Hm. I didn’t think that this would be a real problem; it seemed like once I got started, the ideas would flow on their own, but it isn’t the case.

I guess I’ll just write whatever comes to mind.

I watched V for Vendetta today, and throughout the movie I became increasingly interested in revolutions and oppression and conspiracy. Not an impressionable mind at all! Last year, there was a tremendous amount of political unrest around the world, so I was wondering about what to expect this summer. I just spent an hour watching youtube videos and searching google for people’s opinions about global unrest in 2012, and it comes off as a lot of alarmist crap.

There’s a lot of crackpot-ey sounding financial people talking about the US dollar collapsing at some point in 2012, but it seems like that would just make the cost of living higher for us, and things would stay pretty much the same. I’ve read about political unrest being tied to the price of food, and I checked out the global food price index:

I call the big one bitey

The big spikes are May 2008 and 2011, with some notable little jumps in 1996, 2004, and 2006 (as well as 2009 if you discount the gulf it’s sitting in). I looked up “civil unrest” with those years, but didn’t find evidence which convinced me that there’s a strong correlation. I don’t really recall hearing about widespread political issues in 2008, but maybe there were.

So, like most people, I’m unable to tell if there’s going to be riots and whatnot this year. Watching V made some part of me want to throw off the shackles of my oppressors, but then I stopped to ask myself: what shackles? What oppressors? I am fortunate enough to have been plopped into a privileged position via my gender, ethnicity, and career-disposition, so from my point of view, if I’m in a society that needs to be overthrown, it has power in a very subversive sense.

Wandering into that ground where I have no authority, I can’t help but be reminded that a warning to take from 1984 was about a society where totalitarian rule isn’t even noticed. People can be so tricked by the system that we don’t even notice the walls of the prison. In the story, the machinations and trickery seem obvious, but not to the users of newspeak who dare not commit thoughtcrimes.

I guess I’m just feeling that occasional ennui that hits when one realizes they are perfectly free to choose what to say (as long as it isn’t hateful, taboo, or media-sharing instructions), where to live (in their country, provided they can pay for their housing), and what brands to purchase.

/down-note. Hopefully I’ll write about something fun like learning about integrals tomorrow.

Posted in Uncategorized | Leave a comment

Teaching Kids to Program

Every Tuesday night, a few of my friends at work and I head to a nearby youth centre to teach a class about programming to junior high school students. Our initial goal was to teach them javascript using codecademy‘s tutorials and our own guidance. We have failed to meet that goal.

On the plus side, we (and the kids) have learned things, and we’re sure it’s been a net positive experience so far, but we’ve got some changes in mind to make it even better. I’d like to share our situation, how our lessons have gone, what we’ve learned, and our plans for the remaining weeks of the program. Hopefully this can be of use to someone in the future, even if it’s just us when we try again.

Our Background

Our team is about half programmers and half people who work in other roles at the company. One fella in particular in our group has headed up the majority of the curriculum choices and plans for this program, and I’ve done my best to assist him along with a group of seven other volunteers. None of us have significant teaching experience – I think I might top the list with four or five courses as a teaching assistant. The class has about 15 kids at a maximum, and we tend to have 5 grownups in the room, teaching from 5:30 to 7:00 PM. We hoped that we would be a good natural fit for teaching programming as people who either know how to program or are learning it at present.

Our Plan

Initially, we believed that we’d be working with high school kids. Our plan was to use codecademy’s codeyear tutorial series to try to build a game of blackjack all the way from fundamental syntax. We worked through the first block of lessons in 20 minutes or so to review it, and felt like it would be reasonable to expect high schoolers to get through it in around 90 minutes. Then we found out it would be junior high students, and because we didn’t have anything else, we decided to give it a try as planned.

How the lessons went

(this is a lengthy narrative format; there’s a summary at the end)

Our first lesson plan was to introduce ourselves, get the kids to introduce themselves, show them how to get to the website, briefly walk through using it (type into the window, hit enter, follow the instructions, etc), and then loosely supervise the group, helping when necessary. The general plan worked well. The kids followed the instructions and typed things in, but only got through the first 3-4 lessons of the first block in an hour and a half. What was worse was that afterward we felt like we hadn’t taught much, and that the kids had gone through the motions, but hadn’t learned much either.

The next week we decided to keep the same approach because we had only a hunch that our lessons weren’t hitting their target. We knew that the kids would start to run into walls during the lesson if they weren’t getting it, so we did more codecademy with a bit of review of the concept of variables at the beginning of class. The kids did not seem enthused by the material, but they worked at it. One or two kids got to the end of the lesson block, and most of them got to lesson 6 or 7, about conditionals or loops. We took note of the failings of the codecademy tutorial and the sort of questions that we were being asked. Some of the kids clearly did get it, while most did not.

We discussed the situation before the third week. We felt like leaving codecademy would be abandoning our goal, leave the kids wondering what was up, and could leave our course without its core value. We wanted to try something else though, so we introduced the class to LightBot, a flash game where the object is to move a robot around an environment by giving it simple commands with a drag and drop interface.

This seemed to interest some of the kids more than the javascript, though it seemed to be a bit more confusing too (it required some understanding of functions to get through later levels, and our attempts to explain the concept in an odd context like the video game didn’t always get through. We noted that the kids were definitely doing more problem solving and were clearly more engaged on the whole.

Before week 4, the team researched MIT’s Scratch, CMU’s Alice, the Logo language, and simple Javascript canvas playgrounds, but nothing felt cool or easy enough to be a great choice. Then a member of our team found a program called Kodu, which blew us away, but the computing resources at the youth centre couldn’t handle it. We went back to the drawing board, and ended up using the second LightBot game in week 4′s class. The kids were much more savvy this time around, and several came to grasp the concept of simple loops and functions in the game’s context.

The following day, we had a phone call with an instructor who has run a number of short programs intended to teach kids about programming, and we barraged her with questions about her experiences and about what our goals should be. We found out that she had made use of Scratch, and that the kids in her program (who were a little younger than ours) loved it. She also had a fantastic takeaway for us — don’t worry about teaching concepts. It’s not important that kids leave our class with strong computer science fundamentals. They’ll do that naturally if they are excited about code when it comes up later in their lives. It’s our job first and foremost to bring a sense of joy to messing around with computers, and they’ll figure the rest out on their own.

To summarize, we began trying to teach javascript with a self-driven tutorial and hoped to convey concepts. We found that this approach was not working well, and that engagement rose when we played a game based around the concepts instead of working through examples. From there, we’ve been advised to aim for excitement and to worry even less about concepts. Motivation will make concepts take care of themselves down the road, so it should be our focus.

Next steps

Our current plan is to introduce Scratch using some teaching materials we’ve found*, along with our aim to excite and advice from a coworker who taught high school students in the past. After a week or two of introduction, we hope the kids can spend the last few weeks building their own scratch games/videos while we help them to get past any roadblocks they encounter.

We’ll be taking a more hands-on approach to teaching the Scratch program, having the kids see small sections of the steps played out and repeating them. We hope that we can bring more excitement to the class, give the kids an opportunity to create something, and let them take home a more positive view of making things with computers.

Conclusion

I don’t want to paint the image that the kids have been unhappy; the man who supervises the outreach program put our minds at ease by reminding us that if the class were totally awful, far fewer of the kids would keep coming back. We have just felt a consistent belief that we could do more for them, and we think that we’ve arrived on a better path now than when we started.

Also, as a final (nitpicky) note: codecademy is not a very good platform for teaching kids. The biggest nits for me to pick in the initial block of lessons is a lack of consistency and very difficult language / abstract examples. The first few variables you declare are myName, fullName, and myLastName — the kids got confused about why and whether the ‘my’ needed to be at the front of what they were writing.

Beyond that, names are often things like “array” for an array, or examples occur like a variable “word” which holds the word “this” or the word “that”. It’s entirely too complex and abstract. Attempting to explain an if statement evaluating the variable “word” which may have “this” or “that” inside it quickly turns into a “Who is on first” situation. These could be rewritten to use more concrete language. For example, a variable can be descirbed as being like a jar with a label on it that you put pickles or berries into. That level of concreteness would have made our task worlds easier.

We considered writing our own codecademy lessons to continue down the javascript path, but in light of the extra research we did, Scratch is by far the best route for kids in the age group we’re teaching. Codecademy has its place and is a great resource, but those initial lessons could be vastly improved.

Unrelated Addendum

As a final and very marginally related note, I tried writing this out on piratepad so that I could replay my writing process in an attempt to improve it. I ran into two major problems.

The horizontal resize bar decided to operate on hover or somehow to interpret hovers as mousedowns. Every time I moved the mouse, the text writing field started resizing itself. I resorted to being extremely conscious about keeping my mouse to the left of the margin bar, and using the keyboard for any window/tab switches or text selection I might make; it was a big darn pain.

Next, the pirate pad server apparently went down while I wrote. A “re-establishing connection” notice came up, and presented an option to “Reconnect” as the big clear nice-looking button. Doing so refreshed the page, which would have been great if the piratepad server had not just gone down. I checked its status using downforeveryoneorjust.me, and waited 5 minutes. It fortunately came back up! And to the service’s credit, my writing was preserved across the gap. The experience was very scary, and comes down to the simple UI issue of not suggesting a user reconnect without warning them to copy their text away first.

* If I find the URL to these lesson plans, I’ll insert it. If you’re looking for them after reading this and I haven’t done that yet, please email me.

Posted in Uncategorized | Leave a comment

Skills, the lottery, and my congratulations to Mixpanel

Mixpanel raised $10.25 Million in a Series A round led by Andreessen Horowitz (see Peter Levine’s post), and that is fantastic — my congratulations to Suhail and the gang for building a kickass product and team. I know they’ll continue to find success!

I have a personal story to share about Mixpanel, about being the wrong person at the right place at the right time.

The background

Last August I was an intern at Google working at their San Francisco office — just a fifteen minute walk from Mixpanel’s abode. I had a single semester of school remaining back in Canada and I was thinking about future employment. I responded to one of Mixpanel’s frequent hackernews job postings, and received a response from Anlu not long after.

We set up a time to come by their office, and I ended up a block away by mistake, so I showed up fifteen minutes late. They didn’t seem to notice — nothing but a warm welcome. I was quickly greeted by the team and went into the meeting room (it had a table in the middle; hence it is a meeting room) and we started the interview process. Everyone on the team took a turn, which is a great idea! They all need to be confident of a person’s skills before committing to work side by side with someone for years.

Over the next few hours, I grew to understand that these were smart, funny, friendly people who loved what they did. Suhail spoke often about how important it is to have passion for what you’re doing. I did my best to yield valid responses to their questions, and while I think I came off as a nice guy, I didn’t deliver world-class chops. I was largely unfamiliar with javascript, missed a simple solution to keep a dynamic ordering of a set of objects, and took my sweet time to write a full answer to a problem Suhail gave me.

Their ad had asked, “want to learn how to scale?”, and suggested they needed a back-end person. I like to play with *nix, but had no idea about the tools or processes involved in building scalable web applications or doing high volume data processing, so it appealed greatly. At the end of the day, Suhail asked how I felt about working on front end stuff, or whether my passion was for working on infrastructure related things. I told him (as I said just now) that I don’t really know javascript. That I don’t have design experience and can’t make pretty websites — but I’d love to learn how.

He told me that I simply made too many mistakes to work on infrastructure in their fast-deploying environment. Their philosophy (at the time, I have no clue now) was to ship as soon as what you have is better than what’s out there. He asked again if back-end work was my passion, and how I felt about the front-end. I defended my ability to write solid code, and echoed my willingness to learn, and I might have even said that cliche “I don’t know what my passion is yet”, because really, I don’t. Then we shook hands; a few days later I got confirmation that they’d moved on in their search, and a thanks for coming in.

That was an ego hit, but I am very thankful that Suhail gave me the advice. I made a lot of mistakes in that interview, and I saw that he was right in the larger sense: I probably would have made some mistakes and shipped code soon after at some point. Infrastructure code is too mission critical for to be incorrect. Until I improve, I have to work slowly and surely.

The Lottery

There is a stance that I could take regarding Mixpanel’s recent seed round (which is the sort of successful growth I expected from them when I interviewed). That stance is that I missed a winning lottery ticket.

I’ve been thinking about my long term plans lately. Down the road, I might want to end up in the startup game, stay secure in the working world, or return to academics. An acquaintance of mine recently got into YCombinator, raised money, and appears to be doing great — I admit to feeling envy — so I’m going to indulge in a story: Imagine that I sold Suhail on my passion for the front end.

Back to that conversation we had: he’s asking if I’m more passionate about infrastructure, and I told him that I don’t know the front end, but I’d be willing to learn. Instead of that, let’s pretend that I mustered very fine words and drove home to him that come hell or high water, I’d write the best damn front-end code anyone had ever seen. Clean, efficient, beautiful, and fast. I would make it my life, because I had a (just-ignited) passion for it. The next element of the real story is the handshake and the “too bad” notice — instead now it’s a high five, and a confirmation that they think I can kick ass along with them.

Fast forward to now, imaginary timeline: I’ve learned a ton, helped them with their front end, taken some charge — maybe made a few mistakes, but didn’t cause severe data loss — and I’m living the California startup life with a small bit of equity in a fantastic, growing company. As they hire people, my front-end veteranship naturally brings me to lead the front end team, and 5-10 years down the road they have a public offering and I end up a millionaire. My dreams of financial independence and starting my own startup then come true! All because I displayed sufficient passion that day.

This has all the earmarks of classic stories. Shirking the big company to work for a little guy. Doing something impossible “because no one told me I couldn’t”. Riding on passion alone and “doing what I love every day of my life”. The great tech-magnate tropes.

Except it’s hogwash.

Skills

While the tropes I just mentioned have value (especially “don’t tell yourself what you can’t do; the world will stop you if you actually can’t”), to think that saying something different in that one conversation is similar to ‘missing out on the lottery’ is not just naive, but downright stupid. Here’s why:

I am a junior developer.

There are some people out there who finish college as fantastic programmers. They know design and code and code-design and they whip out complex, correct code like lightning. That’s who Mixpanel needed, and I am just a mediocre programmer who is learning his craft.

I could not have fired on all cylinders and magically made up for missing skill with passion. Suhail was looking for passion because it’s probably a good signal for skill and work-ethic. If I had acted differently in that situation and delivered on passion, it would not have changed my lack of skill. I would have ended up failing their team by coming into the situation learning instead of knowing.

The bottom line is that learning and developing your skills is not something to be ashamed of, and it’s also not something that can be skipped. Instead of pretending to be awesome already, I now work with talented people who know way more than I do and I’m learning from them while contributing. That’s where I should be. (though, it is perhaps the sort of experience I should have had during my internships; I’ll write about that some time.)

This is not a Lottery

The second major takeaway from my imaginary story is that it wrongly trivializes what the team at a company like Mixpanel does. It is built on the false assumption that a great company is a thing to ride, instead of something to carry.

People who work at small companies have to work much harder than people at large companies. It is not an easy life, it doesn’t often lead to riches, and it’s certainly not a magic ticket to success. Let’s imagine that I not only had the passion, but also the skill to be worthy of a first-10 hire when I applied: Any success I might have had would be the product of great coworkers, extremely hard work, long hours, luck, and intelligence over a great period of time.

Once again, my best to the team at Mixpanel. Keep it up.

Posted in Uncategorized | Leave a comment