words among

Friday, November 06, 2009

In my dating life I have been trying to pay attention to what I can do to find and meet women who are really attractive to me. One piece of advice that I came across was that keeping notes on the conversations you have is a really good way to diagnose your weaknesses, especially when you share your notes with a coach. My project lineoftheday is designed for exactly this process, and I have really high hopes for it's potential to help people improve their conversation skills.

Even if you're not delivering handwritten notes, one principal reason having a coach is helpful is because you have someone you have to tell if you don't practice your skills. Being accountable to someone you trust is a powerful motivator for almost anyone. In my youth I felt guilty telling my piano teacher that I hadn't practiced. She encouraged me to diligently write down my minutes every day, not do it from memory later in the week. She was showing me how to manage my guilt, by allowing my accountability to release the pressure on me to make decisions.

Being accountable at work is an area I've had to explore because I've worked in a few situations where my managers weren't especially proficient at evaluating what I was doing, and I wasn't always interested in taking the time to translate it into their terms. I have tried out a couple different approaches for bridging the gap, and I'm definitely starting to think that there are some good ones out there.

Github provides a simple way to view the chronology of my work, although the timestamps aren't very precise in the commit history view. Pivotal Tracker also keeps timestamps for when you start, update and finish stories. And you can use pickler to synchronize your tracker stories with the passage of your cucumber tests. Using a similar tool to synchronize tracker stories with rspec examples would be great, but I'm thinking about taking it one step further, and using the spec log to analyze every time the spec is run, not just the first time it passes.

Apart from making you accountable, the other primary reason that having a coach accelerates your progress is that he has been there before and he knows what you can do to address your mistakes. He's probably seen it a few times before in other guys as well, and seen what eventually enabled them to get around it.

If you shared every attempt you made to get the spec to pass, a coach would be able to point out which approaches were more reliable for the future, or explain what was missing in your earlier attempts. And simply by being exposed to the problems you're trying to solve he would be able to recommend alternative approaches you may not have known about. It would be like watching instant replay of you writing the code.

Git definitely provides the technology for making instant replay possible. Integrating it with spec runners that run specs on every save, or those that run individual specs or groups, would be the pivotal step in making coders accountable to their coaches. Now that github is so fast, it might be the preferred method of reviewing the code, but others could definitely be devised that focused on the individual histories of specs.

Accountability to your business associates could also be generated by the timestamps and metrics of your journey. In a normal workday you might only commit code five or ten times, and there's no evidence that you weren't on youtube for an hour in between. But you probably save a file every thirty seconds. And maybe you always get your specs passing within three tries. After running the repo and spec data through algorithms that make graphs of it, these strengths could be visible to your managers at a level of detail that would make you very much accountable for the quality and consistency of your effort. To measure the effectiveness of it, instant replay mode for Pivotal Tracker could be implemented, perhaps via the api.

I learned recently that watching yourself on video is such an effective means of correcting mistakes that sometimes you don't have to do anything at all to unlearn them. Simply having seen it once is enough.

Viewing your own replays could give the same results. Being accountable to yourself and others helps you work smarter because there are manufactured consequences for writing lazy code. And being able to see new patterns can help steer you in a direction of not even having to write much code. But it's something you have to see many times before you can write it sometimes. Your brain is always busy learning patterns that it doesn't tell you about.

When a famous coder publishes changes to a library he knows that they're going to be read over by lots of people, so his accountability is in place. When a famous pickup artist talks to girls in front of a camera, or just a microphone, he knows people are going to listen. And in both cases, part of how he got so good was by establishing that accountability so that he had to be good. You can establish it faster if you use artificial tools to manufacture it, simply by layering abstractions on top of it. I know this approach seems frivolous to some purists but to me it's just observing and regarding the natural phenomena that motivate people to act.

Thursday, November 20, 2008

I like coding without parentheses, partly to verify that my code respects the law of Demeter and other principles. Is it bad that I want a regexp that will highlight the arguments being passed to a method so I can be sure about when I need parens?

Shouldn't we rewrite RubyForge with ajax?

Should we lobby for Obama on Rails?

a rails version of phpmyadmin?

Is there anything left on your wishlist of what Engine Yard provides?

Is it a problem that some libraries now want us to use unnecessary parentheses?

How can we help postgres gain ground?

If there was an option that caused stack traces to print out the arguments that were passed to each method, would that demolish performance?

Aren't stored procedures a good scaling tool? Are they easier to maintain if they are written in Ruby (for postgres)?

Is there any way to have proprietary Ruby code besides serving it through a web app?

Is publishing (& blogging), releasing code, and other self-promotion the biggest factor that made you better at Ruby?

What I want to know about Ruby


As the finale of the Voices that Matter: Professional Ruby conference, Obie solicited questions from the audience and I managed to come up with several. That transfer of knowledge was great, but it was centralized kind of like a subversion repo. To raise it to the power of git, I would like to see what you all think about these dreams I have.


please answer the questions by leaving comments on the individual posts

Wednesday, September 03, 2008

Once I heard someone mention that although not everybody likes good music, almost everyone likes some kind of music. That made me think of why people like music, and how they learn the things they need in order to know whether they like it.

My conclusion is that people like recognizing patterns and recognizing when patterns have been broken. I think it's pretty straightforward to see the way these two things impact musical composition. A pattern is formed by repetition, but also by the sound of the instruments and the placement of the beats, and a hundred other things. Breaking the pattern allows you to deliver a surprise or a standout note, but also creates a new pattern that can be referenced later.

Focusing on patterns gives a perspective on why effect pedals are so fun. It's not just that the sound is cool; there's also a repeating pattern in terms of what the pedal does to the sound wave that can be recognized by the brain. When I play, I like to make those pretty subtle, so they can be noticed, but it's hard enough to hear that you actually feel kind of proud of yourself when you do. This also makes it more practical to layer more effects simultaneously.

My pedal collection grew this year, but even when I had six I was lacking some of the most typical effects that you usually see with guitar. Purchasing a couple of those (overdrive and wah-wah) has really enhanced my sound because they can be used with all of my other stuff and, in most cases, make it much prettier. When spending around a hundred bucks on a pedal, there is definitely a temptation to get fancy ones that do major surgery to the sound wave, but I think the next ones I go for will be more fundamentals, like chorus, distortion, tremolo, volume, and even phaser (which I have long considered a bit lame). My local guitar shop has vintage pedals and offers many options for most of these, and I admit I will probably opt for the funkier varieties of each rather than the plainest that can be found. I guess I'll give it some thought.

Sunday, May 25, 2008

daily drawings


when I started my job at mophie, one of the first suggestions I made to my boss was to implement 'daily drawings', which meant that everyone had to draw at least one picture each day. I didn't think it would consume too much time, and I thought it would help our work in a number of ways. The work we were doing was extremely creative, in the sense that we were building a lot of almost-tangible things out of thin air. We were producing not only artwork and code but the laws of a community and a new economy. Because of the relatively high pressure and seemingly huge consequences of getting it right, I thought it would be great to spend time each day doing work that was essentially zero-pressure. Working on our doodling and looking at our coworkers' could also stimulate some new ideas for visual designs or data structures.

Our work was heavily reliant on prototyping, then progressively adjusting and enhancing. Having the courage to create something at your top speed and show it to people immediately was something I knew would be important for me to work on. Reflection had its place in our work as well, but I think it would have been easier to reflect on our designs if we had more alternatives in mind to compare them with. Best of five is sometimes a different thing than best of two. There were a few things I did to try to get myself working at top speed, but I wasn't really able to do so most of the time. Often I felt that I wasn't getting the type of help from my coworkers that I needed. For example, when I suggested daily drawings, my boss agreed to let me do it. But he never told anyone else to try it, and he never reminded me about it. He did get me a coloring book, but there's a big difference between coloring and drawing. Several of the other employees were drawing things almost every day as part of their work, but I thought it wouldn't be too much to ask to have each one draw something on paper and hand it in every day. One day my boss did indulge my request to go to the art store and get markers, pens, colored pencils, crayons, and some reasonably nice ones at that. They made their way into use at the design table, and I used them to mark up some books so the other guys could find the important stuff (a lot of computer books have just one important line per page). I did drawings from time to time but never close to every day.

A lot of the drawings I do are just abstract scribbling, so it's not difficult or involved stuff. I should start daily drawings. Feel free to join me.

Monday, April 28, 2008

I am stupefied by how dead Brooklyn and Manhattan seem at night. I realize that thousands are sleeping within earshot of just about anywhere you go, but I would expect to see more life regardless, and I would love it if the daytime and evening culture were still available in small doses during the wee hours. Why shouldn't I be able to go buy a book and a muffin at 2:30 am? If we could provide that stuff for those who want it without causing nuisance to those who don't, I bet these two boroughs would spawn a nifty handful of all-night cafes.

Dampening noises is a tricky endeavor wherein a lot of things work well but few things work really well. I suspect that the invention of some kind of active panels might be the breakthrough we need. There are a lot of social norms that would change if we didn't have to worry about waking people up as much. There are also a lot of ways the economy would change if we could treat the night more like the day or evening.

Another invention I expect to deeply impact New York City late next decade is some product that absorbs sweat and keeps it off your clothes, no matter what you're wearing or how much you're sweating. I don't know if it will be an ultra-absorbent fabric or a battery-powered vaporizer or a bacteria that turns the sweat into oxygen, or a hybrid of all three. But I see a huge gain to be had in enabling more people to make practical use of their skills in running and cycling, and for more of the year, and in freeing people to exert themselves without needing to arrange logistics for a shower.

Monday, March 24, 2008

does anyone deserve anything?

it definitely makes sense to give people things, to think of them as tied to actions, even to feel entitled, for plenty of practical reasons. but nothing is tied to anything, it's merely a figure of speech meant to inspire trust. but even if you do trust someone and believe that they should trust you, that doesn't change the liklihood that you will sometimes disagree about what is best for them. and while you can get a lot of mileage by securing the trust of others, there must be some cases where your interest trumps theirs. who deserves anything then? at these points people make up excuses about somebody else being more deserving of some other reward that may not even be logically related to the situation.

we all act principally out of self-interest, it seems, at this point in our evolution. it can be very hard for a person to accurately judge the differences in personal satisfaction and stimulation that are liable to result from their actions and inactions. but they will sometimes be capable of influencing themselves by listening to predictions of how other people will behave in the form of arguments. most political argument is about behavior, but argument is behavior, I think that's what makes it so inherently dubious and we all prefer to listen to ourselves. Is that what Rawls said?

well despite how hard it can be to listen to someone without internally interrupting, correcting, or reinterpreting some of what they say, we are sometimes able to do it and genuinely change our own minds about how to become happier through sincere changes in our behavior. they are still motivated by selfishness. but they often carry great benefits to huge numbers of people, some of whom are able to pay it forward or pay it back. perhaps one reason the film 'pay it forward' seemed as plausible as it did was because people are familiar with the desire to stay in someone's good favor after they have just given you a gift and insisted that you not immediately reciprocate. often that feeling is expressed by the desire to give something to someone else, something they'll truly appreciate. why do people feel guilty upon receipt of such a gift? why do they feel bad when we really meant for them to feel good? it is because of the misunderstanding of this word 'deserve'.

Thursday, March 20, 2008

Surveillance tools are becoming stronger and harder to compromise. We have a lot of reasons to expect that they will play an increasing role in law enforcement.


For that reason, we have an imperative to repair our code of laws in a somewhat timely way so that we don't suddenly imprison all of our society's most valuable rebellious minds. Not all of our laws are ideal - that should be clear. The ones that mess with our melting pot in the wrong ways will do us a lot of damage if we don't get humble about reforming them before the police state is realized.