Are you a verbal proponent of Object Oriented Programming, or do you prefer the parentheses en masse of Functional Programming? What if I told you that there are another school of thought. What if I told you about Value-Oriented Programming (VOP).
If you’re a programmer, you’ve probably heard of all kinds of programming languages. You might have heard of Object-Oriented Programming (OOP), those languages where programs are made of objects talking with each other using properties and methods, using the concept of inheritance to share behaviors.
You might also have heard of Functional Programming, where everything is a function that you compose with explicit inputs and outputs, and you don’t change things that you have already defined.
The virtues of Value-Oriented Programming
However, the thing with those definitions is that they are self-referencing: they describe programming languages based on how you write programs in them. Unlike VOP they don’t describe their aspiration or purpose. You cannot say “this language is better because it’s more Object Oriented” or “more Functional”, it doesn’t say anything useful. That’s where Value-Oriented programming comes in.
VOP in 3 steps
I like to think in terms of Value-Oriented Programming. What do I mean by that?
Value 1 – Business value
First, I evaluate how I get business value out of that language. By that I mean: can I deliver things quickly using it? Does it have the best libraries or tools I need to solve a particular problem? Is there a community around it that can support me? Can I collaborate with my colleagues using it? Is the community growing?
Value 2 – Soft value
Second, I evaluate the values embraced by the language, and I want those values to be aligned with my own. Is the community kind and inclusive? Is it welcoming to beginners? Are the members open-minded, curious, pragmatic?
Value 3 – Data as value
And last, I evaluate how I can manipulate data in that language. That’s the only “technical” perspective I have: I just want to deal with data as value, with as little boilerplate and incidental complexity around it as possible. I want the language to help me achieve my goal, and not stand in the way. However, that comes strictly after the previous two points.
Bigger Picture, Bigger Value
With Value-Oriented Programming, the code in itself is not the objective, it’s a means to an end. But as a programmer, it’s easy to lose track of that. We usually lose perspective because the world is moving fast, we form bonds with communities, we invest in knowledge, build social capital around certain technologies… but at the same time it’s hard to deliver objective value, to keep up with the trends and competition, so we get stressed.
And as we get stressed, we tend to surrender to beliefs, and we focus on the things we can control, creating new objectives around those things that we then share with our tribe: trying to write code more Object Oriented, more Functional, more abstract, more reusable… And then we fight with other tribes that have different arbitrary beliefs and objectives!
Instead, I would love for us all to take a step back and work on the bigger picture. To me, it means being kind, open-minded, and thinking in terms of Value-Oriented Programming.