Smarter IDEs

As a programmer I use specialized software to edit code. Hundreds of shortcuts are available out of the box to make certain operations faster, like deleting an entire line of code, moving it up or down, or searching and opening a particular file. Out of the hundreds I maybe know and use a couple dozens. I can also create my own shortcuts to make nearly any frequently repeated operation faster.

I happen to use IntelliJ IDEA, but this is true of most IDEs. And it’s not just programming software. Shortcuts are everywhere from operating systems to email clients and everything in between. I’m guessing I’m not a human exception when I say, I only know a tiny fraction of what’s available.

Now, thankfully, I don’t need to know ALL the shortcuts. But I also know that I don’t know all the shortcuts that would save me time. So what should I do? Well, I could print cheat sheets and sort of read through them and highlight things that seem useful and try to remember them and put them in practice as much as possible until they become muscle memory. I’ve done this before.

OR, what if my IDE could teach me? And not in a “Tip of the Day” sort of way. What if it identified my own personal patterns? The things that I do over and over. Like inputting a certain block of code manually, or deleting words character by character. And what if it could look at my frequent, most time-consuming patterns and suggest or even create shortcuts to replace them? Like adding a live template or telling me to hold down ⌥ (option) as I delete.

That would be dope is what that would be.


Nation of Immigrants

Amidst the current wave of nationalism in the USA, it’s important to remind ourselves that we are a nation of immigrants. It’s also worth noting that we are a nation of immigrants who got started by eradicating most of the natives.


But that’s unlikely to happen to us. We’re not welcoming imperial armies onto our shores. Today’s immigrants aren’t trying to impose their way of life by force. Rather, they love America just the way it is. Those who lived through oppressive regimes understand how good we have it better than many of today’s natives, myself included.

What about the ones who don’t love America? Those who believe in a hateful ideology. The terrorists. They’re out there, and it seems to me we have two high-level options for dealing with them.

We can isolate ourselves. Tell refugees who share our values that they’re shit out of luck because they share the same ethnicity as their oppressors, and that’s scary.

OR, we could welcome them. We could say hey, if you believe in freedom and democracy, if you just want a shot at a peaceful and prosperous life for you and your family, then please come in. You belong here.

And for the teeny tiny minority who means us harm, hey, we’ll try to filter them out. But we’ll miss some. Now imagine if those who slipped through the cracks and arrived in this country, rather than being greeted by hate-affirming racism and fear, were instead flooded with tolerance, freedom, equality, and love… the likes of which they had never experienced before.

In other words, if you’re a nationalist and you believe America is the greatest country on Earth… If this is you:


Then isn’t America great enough to convince visitors of its greatness, no matter how skeptical they may be? And if not, isn’t that the greatness we should strive for?


I’ve been investing in Ethereum lately. It’s the second most popular cryptocurrency (after Bitcoin) with a market cap of over $20 billion. Three things make it particularly interesting:

First off, it has the most professional-looking websites and software of any other cryptocurrency that I’ve seen, as well as a visionary founder working full-time on the project.

Second, other cryptocurrencies can be created on top of Ethereum, ie. using the same network but with their own identity, supply, and rules. Although it’s not yet possible to replicate the functionality of all other existing cryptocurrencies this way, there’s a possibility that Ethereum will become the end-all and be-all blockchain.

Finally, Ethereum is much more than a cryptocurrency. It thinks of itself as a “decentralized platform that runs smart contracts.” That’s a mouthful. The way I think about it? The Ethereum network is made up of humans, like you and me, that can transact much like we can with Bitcoin or with dollars or whatever. It’s also made up of robots.

Anyone can create and deploy robots (or “bots”) onto the network. They are able to transact with all other members of the network, humans and bots. Their exact behavior is programmed at creation and can never be changed.

These bots are what’s called smart contracts. Their behavior can replicate that of banks, funds, markets, wills and many other things yet to be invented, all without the need for human arbiters.

Genius Assholes

A coworker once told me that he would hire any amazing engineer, even if they are undeniably assholes. Having pondered this, it seems short-sighted. Sure, some people — engineers or other — are brilliant, super productive, and exceptional dicks.

Anybody willing to tolerate them is likely underestimating, or flat-out ignoring the effect they have on other people. One bad apple spoils the whole bunch, and so forth. Few things deplete energy and motivation faster than having to interact with mean, bitter people.

So they’re brilliant. Fine. Does it make up for bringing a dozen of their coworkers down, reducing their productivity as a result? Does it make up for the recursive effect that those coworkers’ spoiled moods then have on yet more people?


Live Coding

Today I live-coded for 15 minutes in front of a 30-person audience of fellow Android engineers from Airbnb. The subject was a couple of frameworks that we use to build UI that have been rapidly evolving over the past few months, so much so that few people have kept up with all the latest developments. (One of those frameworks is open-source and deserves your attention: Epoxy.)

We’ve had extensive documentation available (of course), and conventional talks had been given to the same audience before, but everybody learns differently and finds the headspace to do so at different times. So, with that in mind I thought, why not experiment with a different medium?

Live coding means that my computer screen was projected on a giant screen while I refactored and converted one of our classes to follow our most recent guidelines. The code I was working on was outdated and from our actual codebase. As I worked through it — live — a friend held a microphone to my face and I narrated.

Me during a live coding session at Airbnb

The anecdotal feedback I received immediately after is that it worked. People who had previously been disoriented by changes similar to those I showcased now felt they understood them. And they found the live coding aspect to be particularly engaging.

This creates new questions for me: Can I scale this? Maybe by creating some videos or by organizing live streaming sessions while I work on pertinent projects. Can I teach more things at no extra-cost, by having people observe my workflow and certain shortcuts I use for example? Will others teach me things based on the way they see me working?