AJAX-y Goodness


After a much-needed holiday break, I’m back–and finally sat down to brainstorm projects. People who actually code keep asking me if I have any personal projects, and when I say “no,” they really pause. I completely understand; if someone were trying to become a book publisher and wasn’t currently reading anything, I’d be a little concerned, too.

But I’ve been nervous about starting a project, partly because I want to make a Beautiful project, with sexy graphics and an intuitive UI. I want to be proud to show it to people, and when they see it, I want people to say, “Wow! How useful and attractive!”

I’ve finally realized, though, that it’s just like a term paper: you can’t start with your conclusions, because you don’t know anything yet. You have to flounder around for a topic, because some (“Hinduism and Buddhism: A Comparison”) are entirely too broad, some (“Religious References in Ender’s Game“) aren’t sturdy enough for serious application, and after throwing out maybe a dozen potential topics, you’ve learned enough to choose a sufficiently narrow but interesting topic (“The Role of Feet in Christian, Buddhist, and Hindu Traditions”).*

And my personal projects will be like that, with false starts (I get HTML in theory, but in practice, how do I set up a website?) and wrong turns (I want the form to auto-generate a mad-lib style description, but people don’t like being told what verb tense to use over and over) and hours of digging through references. But at the end of it, I’ll have acquired some new skills!

I’m excited, really, to break my coding out of the box. Outside of my obsession with clearly named methods and variables, I’ve never made a user interface. I’ve never made something for other people to use that didn’t have a series of instructions (“First enable macros, then log in to retrieve your report, save it there, then click this big button….”)

My real dream, right now, is to develop language software for mobile devices, because mobile devices are the future and languages are hot. Especially when your device knows where you are and can adjust accordingly! But first, I will figure out HTML forms, then AJAX forms (still want something pretty), and then I get to figure out how to store all my new data. Woo-hoo!

*Yes, this is an actual list of topics I considered for my Intro to World Religions class.

Scaling Back


One of my good friends always talks about starting a blog about his current passions. “That would make a great blog post!” he’ll say in the middle of conversations. But he still hasn’t taken the plunge–mostly because he’s not ready to write a Blog, the kind that’s linked to and commented on and requires maintenance and diligence and care. I’ve been having the same problem; I want to write about something, maybe in a public way, but I don’t want to Blog about it.

So I’m scaling back, in my mind, the purpose of my writing here. It will help keep me focused on my goals and accountable for my work, but it will not be a PR campaign. And I will allow myself the occasional tangent, such as:

This morning I went for a run and the sun was shining, and now the fog has rolled in–but I am going to surprise a good friend this evening by delivering a load of fireplace to her apartment (fireplaces help the winter blues), and then, hot cider toddy in hand, I’ll hit the the caroling festival in downtown Seattle.

But first, I will implement add in my red black tree. It’s taken me longer than it should have, because I really believe there’s a way to do it iteratively without keeping a stack of the path or maintaining parent pointers—but I haven’t yet figured out how. At this point, I need to just make it work so I can make sure my test methods work, and then I’ll tease out efficiencies in the next round. Even if I have to rewrite it all when I find this elusive algorithm, it’ll be good practice for developing consistent interfaces; my black-box tests should be the same regardless of the implementation.

And when I say “find” the algorithm, I mean “figure out”, because I am too proud to just search for the answer. Honestly, what would be the point? The world has no immediate need for my own version of a red black tree; the only purpose of implementing it is to stretch and strengthen my brain. So even if my brain is too rigid and weak for this task, I will not let it stay that way for long. Onward, ho!

Learning to Curve


More than any of the new programming skills, I’m struggling without instant flashes of insight that make everything easy. In many ways it’s wonderful working at my own pace with my own tutor, but without a group of peers to judge myself against, I can’t tell if red-black trees are breaking my brain because they’re hard–or because my brain is just fragile. Especially since coding is a career change for me, every hour of slogging through cases makes me stop and question my whole decision to code for a living. “If I can’t immediately see the elegant solution now,” needles part of my brain, “how could I ever possibly contribute something meaningful to a team of awesome programmers?”

I still believe I can do it. I think rationally and clearly, most of the time, and it’s thrilling to make tools that make people’s lives better. I made a simple VBA program last year when I was first learning to code, and even though it took the better part of a week to pull together, that little program still saves my coworkers hours a week. How beautiful is that? Coding that program was the first time I stayed late at work because I was having fun.

Before I can be a great programmer, though, it’s essential that I learn patience and humility. Patience will keep bringing me back to test cases, breaking things down into smaller steps, building code out of a larger plan–and starting over when it becomes clear I’ve made a complicated mess of things. With humility, I’ll keep reminding myself that I’m not a coding super-genius: it’s ok not to re-derive red-black trees from scratch without ever having seen them before; it’s ok to work through the textbook example six times before starting to understand; it’s ok to need breaks. If I’m naively arrogant, though, the frustration will just compound, and I really won’t add anything to a great team.

This is, I think, one of the greatest lessons : I’m not just becoming comfortable with not knowing everything, I’m also learning how to solve problems and make progress in spite of the ignorance. And that is something that will serve me well for the rest of my life.