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.

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.

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.

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.

Day 3: Writer’s block

It could just have been the effect of having Stargate on in the background, but for twenty minutes I sat here and couldn’t think of a topic. It’s day 3 of 21 in my attempt to establish blogging as a habit, and I hope that I’m not already out of ideas. I actually tend to have a lot of ideas about halfway through making a blog post (on days 1 and 2 I certainly did, at least), and I also come up with things throughout the day — perhaps I should note them down. If we can’t have one real topic, then let’s touch on a few smaller ones!

Decimal Time

Simple concept: 10 hour days with 10 ‘minutes’ each hour, and 10 ‘seconds’ within that, and so on. I think that using the same names for different units gets especially confusing though, so let’s ditch them and go with SI prefixes:

units for decimal time; zero point eight six four seconds equals one nan, of which there are one hundred thousand in a day.

What I find to be striking about this is that the units seem usable in real life. A nan is functionally equivalent to a second, and it’s faster and easier to say. A mic (I’d say “mike”, but you can argue about pronunciation if you like — it’s from “micro”) is the least useful, but it’d be more functional to say “just a mic” than “just a sec” or “just a moment”, because we often need 10-20 seconds when we say that. A mil is extremely similar to a minute, and a cent at about 15 minutes is a very common unit of time we work in already.

Okay, so what’s the big deal? Why bother, right? I’d love to have some solid defense against that, but I’ve got nothing. Especially when it turns out that a great number of people have attempted to accomplish this sort of reform before and it has rarely found success. Near the turn of the century, a company called Swatch marketed and sold watches which had 1000 “.beats” throughout the day, which you would use to denote time, @264 for example.

Before that, the France made a number of attempts (or perhaps, one very long attempt) at introducing decimal time, but it regularly fell out of use. Their system was much as I’ve described here. Just look at this fun clock picture I pulled off of the wikipedia page about it:

The Chinese were at it even before that, and seem to have operated with decimal time in full swing for a very, very long time, alongside a similar system to the one which we use. So this idea is hardly original, and it’s also unlikely to suddenly take the world by storm.

Why think about it at all, then? Just out of curiosity. First, I’m interested in what it would be like to have a different standard of time: the second being slightly faster, but the minute and the hour longer. How would that affect my mind’s perception of the world Beyond that though, I’d like to try out living in a different time than everyone else. It may be the closest a boy can get to being a time traveller. I’ve also put some thought into living on unix time, just have that monotonic timestamp on a watch and try to use it to live by. It could make for a really interesting experience.

A brief related tangent

Something I have done in the past is deliberately, regularly choose to do foolish or unusual things. It’s borne out of a desire to have new and fresh ideas. My rationale is that if most people think similarly about things, then two people who have similar experiences might have similar ideas. To have a “new” idea, you have to be “first” to it, which means that you need to spend more time thinking about a problem than anyone else who has had a similar set of experiences to you.

Really good ideas then should tend to come from people who have thought about problems a great deal, or who have had unique experiences. Since you can’t magically think about hard problems for a long time, a hack would be to raise the uniqueness of one’s experiences. A simple plan to achieve that is to add rules into your daily life which cause you to go about things a little bit differently, and then maybe you’ll see what others cannot.

That’s one reason it would be cool to live on monotonic time counting forward in seconds from epoch. Or to have one hundred thousand nans each day, instead of 24 hours.

Writing better code

As I have more code to write, I find I’m getting smarter about a lot of things and seeing a lot of clever ways to use (particularly python) language features that I might not have thought of in the past. Today I learned about python dict-expressions when trying to filter a given set of columns out of an array of dictionaries. They’re new to 2.7, but have been being discussed since before 2.3 — they’re just like list expressions, except you use {} instead of []. I’m writing in a 2.6 environment, so they were unavailable, but a workaround is to pass a list expression to the dict() constructor, like so:

dict([(i, 2*i) for i in range(10)])

I was curious about what was ultimately best performance-wise, because that hack job with the dict() constructor is tough to read. A coworker suggested using the profile module, callable with

python -m profile my_file.py

and it is excellent! I had to write my own repetition into the test to get useful results(unlike with the timeit module), but it dumps total, per_call and cumulative time spent in each function, as well as a count of function calls, without any additional instrumentation. It was greatly useful — and interestingly, vanilla code without any list or dict expressions was faster, but not by a huge amount. In 1,000,000 tests, a double-nested for loop to iterate over the array and save individual columns took 8.250 s of total time, while the dict-expression (on python 2.7) took ~10 seconds, and the list-expression in the dict-constructor took ~11 seconds. I couldn’t find any way to simplify or speed up the expressions, so I wonder if that points to some cases where expressions are just slower than vanilla code.

Rain on the trees

I’ll finish up with a cool phenomenon I saw today as rain started to fall on the trees outside my window at work. There was no appreciable wind when the droplets started to fall, and the trees outside are very young, so that you could see each leaf bounce as it got hit by the rain. Letting my eyes unfocus a little to watch the pattern of leaf bounces was particularly rewarding as the rain became heavier; it made a magnificent optical effect. Keep an eye out!