Constraint Solving with Picat

I’ve been playing around with a few multi-paradigm programming languages. The most recent one is called Picat. It’s a hybrid language that is a mix of logic, imperative, actor, and functional paradigms with built-in constraint solvers and planners. That’s a lot to take in so whenever I’m faced with a language with roots in the logic paradigm the first thing I try to do is solve “SEND + MORE = MONEY” cryptarithmetic puzzle. It’s a small and manageable problem and there are at least two ways to solve it so it allows one to exercise several features of the logic and constraint paradigms. Continue reading

More augmentation, less automation

The emphasis in the DevOps ecosystem on automation instead of augmentation annoys me to no end. These people preach culture and enlightenment and yet the most fundamental observation escapes them. Tools must be subordinate to human intentions and not the other way around. This also goes for culture. Culture is another organizational tool. Continue reading

Stop cargo culting

Software is a formal discipline and yet the industry is saturated with cargo cult practices. Most companies are not Google, Amazon, Twitter, Facebook, Netflix, etc. and they never will be but a lot of programmers uncritically internalize and advocate for practices developed at those companies. Let’s try to critically analyze some of the thought leadership and technology that has recently come out of those companies. Continue reading

You don’t need HashiCorp’s Vault

There are a few things I dislike about the programming industry. Much of what programmers do is driven by fads and trends. There is a lot of cargo culting with little critical analysis. This is especially true when it comes to DevOps tools and practices. Today I’m going to argue that you don’t need to deploy and manage any kind of secret token management system, e.g. Vault, if your workloads are already running in the cloud. I’m going to argue that all you need is a set of GPG/AES keys and whatever key management system (KMS) is offered by your cloud provider. Google has Cloud KMS and Amazon has AWS KMS. I’m sure Microsoft has one too but the point is they’re all equivalent and basically have the same API. For the rest of this post I’m just going to generically refer to all these solutions as KMS. Continue reading

Software lifecycle management as operations on attributed graphs

A confluence of events at work recently reminded me of the schema drift problem. The concrete instance or how it comes about doesn’t really matter because the end result is always the same: there is some code on a server somewhere that is running with a version of a schema that is no longer valid. It will continue to work as long as nothing is restarted because the ORM only validates assumptions during startup but as soon as the server is rebooted everything is broken. Continue reading

No one will remember the code

No one will remember the code you wrote but they will remember what kind of person you were. This means you should work on your people skills before working on your technical skills. Learn to define yourself by things other than the code. Learn to be kind, honest, and brave. Learn to be a person before a programmer.