December 20, 2018

For a brief moment, the wireframe fibres constructing the world were visible. But in the blink of an eye, they vanished, and the man found himself in a comfortably decorated, warmly-lit room with a short, dark-haired woman who looked to be in her early thirties.

She smiled at him. “Welcome back. It’s good to see you again. How have you been?”

Read more…

The Chasm of Culture

May 27, 2018

If you know a bit about me, you’ll know that I grew up between multiple cultures: my mom’s side of the family lives entirely in Brazil, my dad’s side almost entirely in Portugal, and I myself grew up in Canada. Those three cultures have some pretty profound differences, from Brazil’s laissez-faire looseness, to Portugal’s focus on social rituals, to Canada’s more British-style aloofness and distance when compared to the other two.

I was exposed to all those cultures young enough that I internalized the different aspects of them. I grew up knowing that these different sides of my family and social groups acted and expected to be treated in different ways, and managed to find a way to center myself in the common ground between them while adjusting myself to fit them wherever necessary.

It’s led to a lifetime of feeling a bit like a misfit no matter where I go, but it’s also helped me have a broad perspective on a wide variety of different issues. I consider that outlook and perspective to be a very fundamental part of who I am today.

But even that kind of upbringing didn’t prepare me for the culture shock I would be exposed to when, as a kid, I moved from downtown Toronto to a semi-suburban neighbourhood in Halifax, Nova Scotia.

Read more…

In Defense of Negativity

April 5, 2018

Let me tell you about my great-grandfather.

There’s actually a lot I could tell you about my great-grandfather. It’s one of the things that my dad’s side of the family did very well, helping maintain a sense of continuity throughout the generations. My great-grandfather made his home in a tiny village in the interior of Portugal, and I’ve visited that place many times in my life. We still have a great-aunt who lives there in the same house he used to live in, one of the dozen or so people that still call that village home.

Every time we visit there, my dad tells us stories. About how the land around the village, now overrun with pine trees and brush, used to be covered in well-tended fields. About how he used to play with the rabbits they raised, and then have them for dinner later that day. About the time the village finally got itself a phone. One phone, in the centre of the village, for everyone to use.

And he told us about my great-grandfather’s old nickname. “José Mau”. “Bad José”, to partially translate it.

Read more…

Atypical: A Differently-Optimized Type System

November 25, 2017

What are programming languages for? This might be a silly question, but bear with me for a moment.

Most programming languages try to be at least partially general-purpose, but the languages that tend to grow popular are the ones that work well in an area where existing languages do not. C’s popularity persists because it’s still one of the few languages that lets you—forces you, in fact—to drop down to a low level and root around in the guts of the computer’s memory yourself. C++ carried that forward from C, but added more complexity, allowing people to create structure in larger software systems. Java took that object-oriented large-system-structure approach even further, but divorced it from the low-level programming of C and C++, running programs on a virtual machine that acts the same on a wide variety of hardware, at the expense of some performance. And then you even have environments like Node.JS, whose selling point was web development, where asynchronous programming is important and allowing people to use a single programming language in both the front end and the back end was desirable.

Many of these decisions stemmed from the kind of things each language was optimizing for: low-level programming, hardware agnosticism, easy transition by web developers, and so on.

A simple animation of a screen cycling through colors.

But if you go further, into the less-widely-used languages, you find some interesting cases where people are optimizing for other things. Rust optimizes for safety while trying to retain as much performance as possible. Haskell and its powerful type system tries to make sure your program does exactly what you want it to do and nothing else. Prolog is an attempt at making you tell the computer precisely what you want, and letting the computer go and figure out how to do it for you.

So here’s a question: how would you design a feature for a language meant for live presentations?

Read more…