User-Centered Design of Principled Programming Languages