Programming in logic can help you produce better optimized, more secure, bug-free code … if only you knew how to do it.

woman holding a giant lego, attempting to build a structure out of giant legos
woman holding a giant lego, attempting to build a structure out of giant legos
Image created by stories

It took me about two years to write my first program in Z3. I had done some tutorials, wrote code to solve other people’s example puzzles, but I couldn’t really figure out how to cross over from very abstract “toy” use cases to applications that had actual relevance.

Z3 is a Satisfiability modulo theories (SMT) solver, a cousin to the satisfiability (SAT) solvers I’ve written about before. Whereas SAT solvers require encoding everything in to a set of…

Silicon Valley’s ethics via opt-out isn’t going to work anymore

Image created by freepik

Last week I wrote a piece for the popular military theory blog, War on the Rocks, about what Silicon Valley has learned about the impact of automation on complex systems and how that should shape the military’s goals.

Discussing the military use case for technology with other technologists is often awkward. Many believe that it is possible to instill new technologies like A.I. with ethical and safety principles purely from the comfortable environments of ivory academic towers or plush FAANG collaborative spaces. One need not go where the technology might have its deadliest and most critical impacts. …

If I’ve seemed quiet lately, it’s because I’ve been working on guest pieces for other publications (and the second series of my exploration into program language design, Marianne Writes a Programming Language). This year I’ll be doing a small series for BuiltIn on abstractions and architecture. The first installment on platformization and what abstractions qualify as part of a platform is online right now

The key is generalization. Platformization is dividing out parts of the system that can be generalized enough to operate as a black box. It’s not that the system is simpler, because more abstractions invariably mean greater…

The more software eats the world, the more critical safety is … but what exactly does that mean?

Hacker image by catalyststuff

Software engineers are bad at safety because software engineers are not used to the idea that software can injure. All around the industry, the mantel of technical leadership has been passed to people about my age, perhaps a few years older. We grew up when computers weren’t so powerful, when their use was an optimization rather than a necessity, when their first commercial successes were in toys. …

Why are organizations committed to positive ideals so often shitty to their employees?

Image created by pch.vector

I have a checklist of things I talk to new hires joining my team about during our first 1:1. Top of that list is the word boundaries double underlined. By the end of that first conversation I want to have covered the importance of three different categories of boundaries I consider absolutely essential to doing any kind of social impact based work.

Internal boundaries: How you treat yourself. Getting enough sleep, eating right, getting regular exercise, etc. Everybody’s different here and what I want from my employees…

Why do some programming languages feel neat and orderly and others seem loaded with inconsistencies?

Technology vector created by artmonkey

When I first started trying to write my own programming language I was surprised by how difficult it seemed to be to find best practices on language design. In an industry filled with opinions, where people will fight to the death over tabs -vs- spaces, there isn’t much guidance for would-be program language designers.

Eventually I came to my own conclusions: the pathway to success with program language design is to think of programming paradigms as logical groupings of abstractions and be as intentional about…

Hand vector created by stories

I’m very excited about this. A few months ago I decided to start keeping an audio diary of my experience trying to learn how to design a programming language. In a few weeks I’m inviting you to start this strange journey with me through parsers, grammars, data structures, and the like. Along the way, I’ll interview researchers and engineers who are active in the this space and go deep on areas of programming not typically discussed. Episode 1 drops on November 18th.

I don’t want to overwhelm my regular readers with a long series on the ins and outs…

Maybe magic markers really *are* a best in class data access control tool.

illustration by freepik

When I was asked to start the Identity team at Rebellion Defense my first thought was “do we need a whole team to do that?” After all, we weren’t going to build our own sign-on system when there were so many companies that focus on identity as their core product. It seemed like all that needed to be done was to select the appropriate tool, set it up and make sure it was maintained. That should be simple.

But to paraphrase the military theorist Carl von Clausewitz…

Before ‘cyber’ was a prefix for everything internet and computers, it was how mathematicians were going to conquer the world.

Technology vector created by upklyak

I first encountered the word cybernetics while reading Benjamin Peters’s account of the Soviet Union’s attempts to invent the internet, How Not to Network a Nation (still a little disappointed that MIT didn’t spell it Nyetwork, come on!) At the time my reaction to it was “Ew gross” — anything with the prefix cyber- feels cheesy and passé — followed by confusion. The dates seemed impossible. Cybernetics actually predated both the internet and the rise of the computing industry by…

How small engineering teams can build distributive systems

Image by freepik

I actually really love monoliths. But I’m the sort of engineer that wants my tool box to be full of tools, even weird looking ones that only become useful in very specific circumstances. The advice I typically give people about maintaining technology is to embrace the inevitability of Conway’s Law and factor in team structure, composition and size into architectural decisions. Small teams tend to build monoliths because small teams tend to be monoliths.

Monoliths also offer slightly better performance than service based architectures. At least at first. It’s only once products…

Marianne Bellotti

Author of Kill It with Fire Manage Aging Computer Systems (and Future Proof Modern Ones)

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