Hi, there! I’m pmsteinberg aka ps (on the internet I usually go by the name objectliteral). This page is about me.

I’ve spent a good amount of the last twenty years in front of a computer and something tells me, the next twenty are not going to be so different. I like to write software, learn about software, complain about software, and I care quite a lot about the freedom and privacy of users of software.

My other interests are history, politics, film, photography, and quizzes and puzzles.


To provide some context for all my highly questionable opinions, here’s a short recap of my programming journey:

The first program I wrote, I can’t remember what language that was in, was a command line-based trivia quiz on my Windows 98 machine. The implementation was some spaghetti-fest of if-elses, but it was something. Writing down logical instructions for the computer to consistently follow was quite satisfying for my very young self.

Years later, after being introduced to HTML and CSS in school, I taught myself PHP and JavaScript and hacked on a bunch of small web apps; nothing exciting, but enough to satisfy my curiousity and to learn quite a lot about how the web worked. I came to really like JavaScript as a language (the semantics of a functional language in the syntax of a procedural one… what a neat combination!) and the web as whole due to its openness: How the internet was built on open standards and protocols, I think, shaped my conception of how software could and should be built, and its inviting and vibrant developer community made it a welcoming place for beginner programmers like me.

In high school and university I had to learn and use Java because that was apparently what the Real Programmers used. I won’t completely go on the soap-box here, but it feels necessary to state that my experience with Java hasn’t been the greatest. What people call Object-Oriented Programming is a paradigm that, to put it charitably, doesn’t seem to really gel with the way I think about code.

Instead I stuck to the web, but over the years that environment changed as well, and not for the better: The whole technology stack got increasingly complicated by adding too many features in browsers and languages, and conjuring up byzantine build setups. A platform that earlier felt so accessible, social and freeing, became increasingly encumbered by corporate interests and then government interference. As a user, I started to see the web now being abused as a vehicle for surveillance for the sake of advertising and surveillance for the sake of social control. From a technical standpoint I loathe websites making unnecessary use of scripting, and the fact that browsers have become these mini-operating systems on top of your actual operating system isn’t particularly elegant either. The community of web developers chased every trend and that inspiring “vibrancy” became a tiring rat race of change for change’s sake and hype-driven development processes.

Besides being frustrated with the way the web was changing, by the late 2010s, I realized that I had absolutely no clue how to write “native” applications. I toyed around with node.js and Electron (and nw.js before that) and that was alright, but I wanted to go deeper. Instead of shopping around for some higher-level language, I decided to go straight to C. We didn’t get any extensive C practice at university, but it had always been on my list to get to know it a little better.

Around that same time I made the switch to use Linux exclusively after getting too frustrated with Windows 10. Before that I had used Linux only occasionally on secondary systems like older laptops and my Raspberry Pi, but once I realized that all the relevant games ran just fine on Linux, I pulled the trigger and went Linux fulltime… and I haven’t looked back.

I mention this, because, for me, the journey of learning C and diving more into the unix world have (naturally) complemented each other really well. Surprisingly, I came to like C very much and these days, I do almost all my programming in it.


In software, tools, and programming languages I value simplicity, efficiency and user-empowerment. Computers are the greatest invention since movable type and their significance to our society makes it so vital that we always remember to put the human interest first. That includes fighting for the user’s right to decide what software runs on the hardware he owns. The technology has to be created for the benefits of its users, not to their detriment. Too much effort is expended to misuse software technology to surveil users and restrict what they can or can’t do on the computers and with the data they own.

Programmers, as the ones who understand the incredibly complex domain of software, must be mindful of the issues of user freedom, and apply their skills for good. This sounds dramatic, but I truly believe that a better world is possible if people work for it.

We programmers need to fight for user’s freedom: The freedom to choose which software to run and the freedom to modify the software to suit their needs. And we need to give them the tools to protect their private data and control where and how it is stored. Means to achieve this are interoperable interfaces, simple and efficient implementations, and user interfaces that provide effective and efficient control over computation and data.


That’s all for now. I invite you to browse around here some more and maybe write me what you think of it.