The Redis Manifesto
antirez.com
antirez.com
Love this as a priority, and not just as a coder, but as anyone involved in building software. I've noticed an extremely high correlation with how enjoyable a code base is to work on, and how easily I get into The Zone on that project. Hopefully I don't need to elaborate on the correlation between The Zone and developing a kick ass product in record time.
As for the meaning of enjoyable, well... hire great developers, listen to them when they speak, and make having a great, well designed, low code debt code base a priority whenever possible.
But stopping and avoiding taking paths that will make redis less of a joy, will make it so.
(Sometimes) solving bugs, adding documentation, support are not exactly joyful activities. But I'm picking on that phrase and not on Redis.
A buggy codebase, or one that is difficult to work in, is inherently non-joyful. Thus, removing bugs, cleaning up architectural mis-steps, improving the code for the next iteration, etc., are joyful activities.
This applies in life beyond software development, too...
While I'm surprised that so few people figure this out, I'm also surprised to see it expressed so elegantly as "We optimize for joy." Yay Salvatore! More projects should have manifestos. I want to write one!
One caveat though: whose joy is getting optimized for? The phrasing here makes it seem like it's only the developers' of Redis. I'd love this a lot more if they're also trying to optimize the joy of people using it as well.
The assumption is that the particular way of understanding the world that humans possess is the only intelligent way to comprehend it. First off, the way that we categorize the world is (as far as we can know) unique to us, and it is also the only way that we have to understand the universe -- it encompasses our math, science, epistemology, ontology and whatever other ways we categorize experiences.
We have no way of understanding anything that cannot be represented by this system of categorizing knowledge and experience, and that includes other incompatible systems which may in fact be superior. Nassem Taleb says that categorization is a necessary human activity, and I would agree. But it's not impossible to conceive of a worldview that is not predicated on categorization, and which could in fact be superior. It's not unthinkable also, that a being with such a worldview might use different (and possibly superior) informatics than our system, with its lists, maps and trees.
Suppose a two-dimensional being claims that his understanding of the universe is supreme and all other intelligent beings would likely use his own system of knowledge representation, manipulation and communication. It is likely that those techniques would seem feeble and impoverished to us. So why can we boldly claim -- a priori -- that all forms of intelligence we may encounter would use our systems?
There's an encoding scheme on top of the nucleotides -- amino acids are encoded with trinucleotides. The RNA sequence AUG can be used as a start signal to indicate that peptide synthesis should begin at that point (it can also be used to encode the residue Methionine). Other sequences encode splice sites, these are used to signal the removal of sequences called introns.
Still other sequences (DNA binding sites, like the famous TATA box) have a high affinity for protein (those with DNA binding domains). The presence or absence of enhancers or suppressors can activate or deactive protein synthesis.
DNA also contains error checking information. Eukaryotic DNA undergoes methylation (think of this as adding meta-data to the DNA). After cells undergo replication, the new DNA is untagged. When error-checking enzymes happen upon a mismatch in the DNA, they remove the untagged base. There are also unrecoverable errors. For example, two adjacent Thymine bases can undergo cross-linking upon ultraviolet exposure -- the bases get stuck together. This sort of error can contribute to melanoma.
I don't think that the data structure analogy is appropriate for DNA, but there are certainly data structures encoded on top of it.
Just to be clear this is intended only a minor wording suggestion, not a criticism -- great piece, really gave me a feel for what you're doing with Redis and why so many people are into it.
This item makes me want to read the Redis source.
(All the items do, actually.)
In the Redis manifesto there is no place where I claim we support all the kind of ADTs. We just have random access arrays, lists, sorted sets (trees), and dictionaries.
There was no marketing intention in the Redis manifesto.
I agree that the manifesto doesn't explicitly claim to support all kinds of ADTs. It just wasn't clear.
Manifesto without a marketing intention... interesting :)