Coming together

We’ve been working on our final projects for a couple of weeks now.  At first my project seemed a cool, though insurmountably large, task.  Christian assured me that he believed I could do it, and complete enough of it to have something to show at our Demo Day/Career Day/Speed Dating Day (when we will have a chance to talk about our projects a bit with representatives of companies who could potentially hire us).  I was incredibly skeptical that I’d have anything to show at that point, but I was going to try anyway.

As I’ve already mentioned, that first week was incredibly frustrating. Once I finally collected the data I needed from the user, and could (temporarily) ignore javascript and ajax altogether, I finally started working on how to figure out which keys a user meant to hit versus which they crossed over incidentally.  There are so many ways to do this, which made it daunting in itself. Which is the best way? What even determines the best way?  Do I optimize for speed of processing?  Or just try to get as accurate a prediction as possible? Do I implement a few steps of word-filtering along the way, and hope that increases accuracy?  Or do I risk getting the wrong word, the more filters the input passes through? And how on earth do I account for letters that a user meant to hit but missed?

Christian suggested just picking one that seemed to make the most sense, that was the easiest, to start with, saying I could optimize later.  OK. Ultimately, after a few days of toying with some ideas, I picked one to start with; vectors between points, angles between vectors, and selecting only the non-trivial angles as the points where I’d count a ‘letter’.  I will deal later with double-letters and with letters crossed over in the path from one turning point to the next.   For this, I had to brush up on vector math, which fortunately came back to me fairly quickly.  Christian thought I’d need to get the rate of change of the angles(between vectors between points), but I didn’t think that extra step was entirely necessary… so I just tried it my way. Just to see.

It worked better than I’d hoped it would- and I’d picked an arbitrary angle threshhold on a whim!

It seemed, up until this point, that my project was very difficult, and I wasn’t sure if I was up to the task.  The moment I tested my method on an actual swipe input was a watershed moment; after that, everything seemed eminently doable.  I had a produced a result.  It wasn’t perfect, I was capturing more letter-moments than were strictly necessary, but I could adjust the angle threshhold, I could write a function that would filter out the unnecessary duplicates, I could implement a spell checker, I could address the intentional double-letters and the missed letters en route from one corner to another… and I could pick any one of those to do and execute, independent of the others. Now that I had something to show, everything else was an exciting bonus puzzle I could add on in whatever I wanted. It was a really heady feeling, one I wouldn’t mind getting used to.

It was also at this point that I realized exactly how much larger the scope of our final projects is than any of the projects we’d done before. In the course of collecting the swipe data, interpreting it, and beginning to implement a spell checker, I’ve done, as a matter of course and in 20 minutes of work, tasks that would have been an entire day-long project, earlier in the course.  Tasks that I would have had a walk-through to follow, tasks that seemed bafflingly large themselves, too.  One such task entailed collecting a list of all the words in a text file (comprised of 10 or so of my favorite books that are in public domain, thanks to Project Gutenberg), stripping them of extraneous punctuation characters, and listing frequency of occurance for each word in descending order. This took a whole day, a month ago. Now, it took 20 minutes. I could make it better, sure, and I plan to- but it was as doable as writing in english. How far we’ve come!

I feel like my project is coming together, and that I will have something to show for my efforts in a week.  I feel, increasingly, that I can do this; that I can contribute meaningfully to a code-base at a job, with a little bit of ramp-up time.  I am still really nervous about interviewing, networking, and finding that next job, but it’s wonderful to feel like maybe, someday soon, I won’t be an imposter when I put “engineer” on my resume. I’m still hoping someone else will put that on my resume for me, though; as comfortable as I’m becoming with coding, I don’t think I’ll ever be comfortable writing my own resume.

This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply