Like many other programming languages designed before emojis started to dominate our daily communications and the rise of multilingual support in commercial apps, Dart represents a string as a sequence of UTF-16 code units. The encoding worked fine in most cases, until increased internationalization and the introduction of emojis that go with any language made the encoding’s inherent problems become everybody’s problems.

Consider this example:

The image shows the string “Hello” with a handwaving emoji at the end and it’s UTF-16 code units. The emoji takes two units.
The image shows the string “Hello” with a handwaving emoji at the end and it’s UTF-16 code units. The emoji takes two units.

In the string “Hello👋”, each user-perceivable character is mapped to a single code unit except the waving hand emoji 👋. An immediate consequence of this mapping is confusion over the length of this string. …


Photo of the book “Showstopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft”
Photo of the book “Showstopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft”

I got my first computer at the age of 12. It ran Windows 95. Later, I learned that Microsoft had another version of Windows called Windows NT for professionals. I never knew that NT was an entirely different beast from Windows 95 until I read a book dedicated to the making of this operating system.

This book is entitled “Showstopper!: The Breakneck Race to Create Windows NT and the Next Generation at Microsoft”. I thought I’d share a few takeaways from reading it.

First, building production-grade software is really hard, not to mention a new operating system. The NT team…


When you write computer programs, it’s inevitable that errors are introduced, even for the most experienced developer. To resolve an error, the first step is often reading the error message that’s displayed in the console. But, research shows that programmers, especially novices, struggle to make sense of error messages, never mind take action on them.

Admittedly, when it comes to helping you, the developer, recover from errors, Flutter hasn’t done a great job. The console output from an error is typically verbose, and it’s often unclear how an error can be traced back to a particular place in your code…


Explained through a user study of Flutter

When people talk about User Experience (UX), they often talk about their beloved consumer products: a smartphone, a messaging app, or perhaps a pair of headphones.

User Experience also matters when you build something for developers. People tend to forget that developers are users too, and software development is an intrinsically human activity limited by not only how computers work, but also how programmers work. Admittedly, there are fewer developers than consumers in general, but the more usable developer tools are, the more energy developers can spend on delivering value to their users…

Tao Dong

UX Researcher at Google. Learn more about my research at http://www.taodong.net/.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store