I was thinking about steps towards personal digital assistants. In a separate thread, I was also thinking about the psychology of aging. In a third thread, I was thinking about projects I might want to build to help me learn more. It makes sense to bring all these threads together: thinking of systems I can build to improve the quality of life I’ll enjoy in the future.

I think this might be a better fit for my experimental learning than either a hypothetical market or specific people. After all, I’ll always have a future self who could benefit. (And if I don’t, I’ll be past caring!) If the things I build along the way turn out to be useful for others, all the better.

Anyway, I was thinking about the kind of simple, deterministic, idiosyncratic assistant I could build to make life a teensy bit better in the medium term and the long term.

I could start with a text box interface on a webpage, then move to alternative inputs like dictation or neuro-integration(!) when that becomes reliable. It would be great to have some kind of offline buffering, too.

In terms of logic, I could start with stateless well-defined responses, add synonyms, support conversational interfaces, use weighted factors, add feedback mechanisms, and then eventually reach proactive notification and action. Inferences would be awesome, but I don’t have to wait for them to be sorted out. Ditto for program generation and adaptation.

In terms of sensing and acting, I can start with existing APIs and tools, write specific adapters for other sites, push into the physical world with sensors and actuators, use context and probability to simplify, and then take advantage of improvements in fields like computer vision or biometric analysis as other people build and commoditize cool tech.

But first, it starts with building a simple tool. Hmm, maybe a little thing that suggests what to do next (and coincidentally makes it easy to track)…

I really like Sumana Harihareswara’s post on ‘From “sit still” to “scratch your own itch”’ because she shares great tips for people who don’t feel like they have big ideas of their own. I’ve been learning more and more about building things based on my own ideas. I often hear from people who struggle with coming up with ideas and who don’t feel like they fit in, or who are waiting for that one great idea before they go ahead and explore their dreams. There are lots of ways to get started even without that clear spark, though, and it’s great to read about some things you can pay attention to.

Here are Sumana’s tips and how I can relate to them from my own life:

Embrace boringness. It’s good to know you don’t have to create something new and wonderful all the time. It’s okay to not always be breaking new ground. I spend time writing about everyday things and trying out things that lots of other people have figured out before, like cooking, and sometimes I find interesting ideas along the way.

Embrace silliness. It’s okay to play instead of always trying to solve big problems. Drawing is starting to become play for me, and coding can be fun and silly too. (Like the time I made a smiley-face generator…) One of the things I love about W- is that we can be silly together. The other week he made funny sounds by patting his cheeks, which boggled and delighted me, so I had to go and figure out how to do that too. =)

Find someone else’s pain point. I like doing this a lot. I get a kick out of writing a small tool or creating a script that automates a painful or repetitive part of someone else’s work.

It’s fine to take a class. I’m not as good at doing this because I often talk myself out of spending money on in-person classes and I haven’t really engaged much with online classes. That said, I enjoyed my sewing class, and I learned a lot from my Japanese lessons. Maybe I should give this another try!

Work with scraps. I like doing this with writing. I pick up scraps of ideas from books, blog posts, questions, and experiences, and I combine them into new blog posts. When coding, I pick up scraps of API functionality and write something that glues them together. There are so many good things out there. I could probably spend the rest of my life connecting the dots instead of adding new ones, and that would still be a good life.

If you’ve ever told yourself, “But I don’t have any good ideas!”, you may want to check out Sumana’s blog post:

A number of people I know want to learn more about code. People see it as a useful skill, whether they’re dealing with functions and macros in Microsoft Excel, building tools in Ruby or PHP, or playing around with graphics in Processing. I had tea with a designer who’s learning how to code in the process of building a personal project. Since he was there and the code was there, I figured I’d help by answering any questions he had. By the time we wrapped up, he’d solved three of the things he was getting stuck on: limiting queries, working with inline PHP, and using AJAX to dynamically pull in data. Good stuff.

Helping people learn is so much fun. I loved teaching introductory computer science. Even though sometimes it was frustrating, it was such a thrill getting people to those "aha!" moments. I speed-read, so it’s easier for me to skim through Google results and documentation to spot just the right function. I’ve made lots of mistakes, so it’s easier for me to debug things than it is for people who are starting out. Sometimes all people need is a nudge in the right direction, a snippet of sample code, and then they’re off. I get such a kick out of it. It’s high-leverage – a little help can go a long way.

Problem decomposition is a key skill: breaking a challenge down into small, motivating steps, identifying the things you need to figure out first so that you can build on top of them. It’s hard when you’re new, and easier when you’ve solved lots of similar problems. I want to get super-good at this, which probably means doing this with more breadth and depth so that we have more building blocks to play with.

I’m figuring out what I like. I like one-on-one sessions and co-working chats more than group tutoring or teaching a class. I don’t mind looking at someone’s screen using Skype. I’m not an expert, but we can learn together, and I’ve been told that my enthusiasm is infectious.

What could this look like, if I folded this into my experimental life? Maybe it starts with informal coworking in a shared space, helping people while hanging out and doing my own work. (I might have a "Do Not Disturb" / "Open for Helping with …" sort of sign on my laptop.) I’m planning to join HackLab.to in March, after my current consulting gig winds up. (I hope the weather will be nicer by then!) More formally, people might book hour-long sessions in a cafe, coworking space, or library, like the way tutors meet with students. I’d get paid in cash (pay-what-you-can) and/or barter. I could offer virtual help, too – e-mail? Skype?

So there’s this idea of code coaching, for those questions that you can’t ask on Stack Overflow or on mailing lists, and for learning not just a specific thing but also the process of learning it. Shall we give it a try? I’m open to inquiries about Emacs Lisp, PHP, Ruby, Rails, JQuery, Excel functions and reporting tools, AutoHotkey, Bash scripting, and other things people might want to learn.

I’m a little anxious about the impostor syndrome, but I should just get over that. I confess up front: I’m not an expert in any of these frameworks, especially since most of them move faster than I can learn. <laugh> (You won’t believe the kinds of things people are building with Emacs Lisp these days!) I’m always going to be looking things up, because I switch between languages and don’t have all the syntax in my brain. I sometimes have to look up how to do basic control structures like a for loop. And I’ll tell you if I don’t have the foggiest idea how to solve something, but at least I can show you how I’d look for it.

This sort of mentoring is an expected part of teamwork. Who’s done this as an independent? Are there things I should watch out for? Will it hopelessly fragment my brain?

Who’s interested in exploring this with me? How would you value it, and how do we test whether it’s worth it for you and me? Jan/Feb’s busy with consulting, but maybe we’ll see what this looks like in March, or we’ll do low-key coaching for starters…

I’ve resolved to send more paper letters. I also have an odd mix of stamps that I want to use up: some with Canada Post’s permanent postage, and various denominations throughout the years. There are different rates for domestic, US, and international letter mail. Naturally, I want to optimize my stamp use so that I use the minimum number of stamps and avoid exceeding the required stamp rate.

Next question: Has someone built a stamp optimizer that lets you keep track of your stamp inventory, maybe through bookmarkable parameters? It would be neat to be able to not have to enter in your particular mix of stamps each time. That might be overengineering this, though.

Who knows, I may sit down one day and code this just for fun. It totally fits the profile of the programming competitions we used to do in high school and university.