5 ms·
The Redis Manifesto
- svlla 16y agoCall me a grumpy programmer but "optimizing for joy" reminds me of Ruby's "a programmer's best friend". Come on, keep it real... less marketing. For example, how is Redis a DSL? Is everything a DSL these days? How is it for ADTs in general? It's not for all ADTs, just the ones that are very commonly used, the ones you support. Which is good, but it's another example of your marketing missing the mark.
- antirez 16y agoHow Redis is a DSL? The basic 'verbs' and the command structure is taken from the Tcl language. See lrange, append, set, and many others. But it's not a full featured language of course, just a domain specific one for manipulating ADTs. But why is this DSL thing so important for Redis? If you look at the internals you'll discover Redis is in many ways an interpreter. So I think this is really important to stress to understand what Redis really is. 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.
- svlla 16y agoIs Apache a DSL? 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 :)
- tednaleid 16y agoI think that one of the biggest reasons antirez had for writing the manifesto was not for marketing, but so that he had a place to point people to who try to make Redis something that it's not. Feature requests/patches that don't fit the philosophy can be more easily rejected because there is a clear document spelling out what the goals of Redis are.
- xiongchiamiov 16y agoMuch like the Zen of Python.
- tluyben2 16y agoGreat stuff. We love Redis and I've always been impressed with the quality of the software (and readability of the code). This manifesto makes sense in that context. I like 'Redis is a data structure server' better than what point #1 says now.
- jdp23 16y agoAgreed. Also, viewing this as a manifesto, you might want move this out of the list and reframe this as a definition, instead of making it point #1. It's crucial, but at least to me doesn't have the same punch as the others. 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.
- bialecki 16y agoThe bit about "if we ever come in contact with other forms of life, they'll understand other basic data structures" is really interesting. I had never thought about that, but it's probably true.
- petercooper 16y agoIt's not exactly a "data structure" but we lean on expectations like these with some of our outgoing extraterrestrial communications when we send patterns based around prime numbers.
- jessedhillon 16y agoThis sounds like the Anthropic Principle, which to me is a tautology or hasty generalization: "We're intelligent, and this makes sense to us, so this must be how intelligent beings make sense of things. QED bitches!" 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?
- br1 16y agoAs you say, not all things are universal. Data structures, however, are based on principles, such as divide and conquer, that you may well argue transcend the human condition.
- bobz 16y agoWe optimize for joy. We believe writing code is a lot of hard work, and the only way it can be worth is by enjoying it. When there is no longer joy in writing code, the best thing to do is stop. To prevent this, we'll avoid taking paths that will make Redis less of a joy to develop. 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.
- tdrgabi 16y agoI'm not saying that redis is undocumented or buggy. 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.
- kbutler 16y agoYou misunderstand "joy". Least resistance <> joyful. 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...
- gruseom 16y agoTotally agree. I'm surprised more people don't figure this out. Our assumption that work and fun are opposed seems like an atavism from millenia of scrounging and slavery. Admittedly, those millenia are still going on for countless people, but not for those of us blessed with the chance to do creative work. Creative work is fun, even when it's gruelling. This is so vital for software projects that I sometimes toy with the conclusion that it's the most important thing - not the most valuable thing (that's what you create) but the most important indicator about the project itself. It's the canary in the coal mine: if fun goes, everything goes. You can walk into a software team's space and tell within minutes how a project is going by attending to this. Yet billions of dollars get spent trying to answer the same question. 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!
- alexpopescu 16y agoI suggest having a Redis command for it: redis man. Similar in a way to Python's import this
- pjscott 16y agoThere's already a Google command for it: "redis manifesto". This also turns up some discussion threads, which is an added bonus.
- alexpopescu 16y agoTry to get that from the command line :-).
- jimbokun 16y ago"4 - Code is like a poem..." This item makes me want to read the Redis source. (All the items do, actually.)
- simonw 16y agoYou should. I'm absolutely not a C programmer but I found I could follow the Redis source and figure out pretty much exactly what was going on for the most part - it's just a bunch of fundamental data structures hooked up to a simple network server.
- rch 16y agoLongevity is difficult to predict, but I suspect Salvatore's approach will seem familiar to those who wrote some of the decades-old software that programmers still use every day.