Recently in the company with several projects at the same time, in the development process will encounter different needs and constantly modified, and finally back to compare the original project design found that a very small project finally became so complex, redundant API and a large number of complex interfaces.
And all this is to meet the needs of different customers, reduce the cost of customer use. But such a design would eventually be a software-facing death (so complex that the code is greatly increased in refactoring).
Reflecting on the project content and the development situation, I think of a word----the minimalism of software
The minimalism of software, though not clearly defined at the moment, is thought to be my blindness.
Generally think that "minimalism" is a trend in the design industry, but software development, it seems to have gradually had such a trend, and even I think this is the future of the inevitable, we often hear people say "flexible" the word, literally to see is "flexible", but specific to the software is flexible, it is not very good to judge.
However, the simple software, must be flexible.
The great enemy of minimalism
Three great enemies of software minimalism: configuration files, redundant parameters, and a large number of complex interfaces.
Many people love configuration, obsession with configuration, that the more configuration items mean that the more powerful the software, the wider the scope of application, but this is the 90 's. In fact, we have carefully turned over the commonly used software, 90% of the configuration is redundant, no one understands what he does, and no one wants to change him. For example, many software configure files can often list hundreds of configuration items, but do we really need that much? No, we need the default values. What is default? Because the software designers think that these are the most optimized and most likely to be selected configurations, then since the optimal configuration, we have any reason to change them?
Besides the redundant parameters, there is a very powerful command ' tar ' in Linux, and from the man file it appears that he has at least 20 parameters, but do I really need so many parameters? In fact, I just remember that compression is -c , decompression is -x available, then why for 1% of the function and to add the 99% parameter it.
Finally the complex interface, with a chestnut, full-text search engine SOLR is very powerful to meet our various requirements for document indexing. But he is not easy to use, because I think that is because of his SQL-type query interface, a very simple thing to complicate. Let's imagine that we need to find an article containing a few keywords, what are the necessary conditions? Keywords, documents, no more. And the document is stored in the server, why we provide the key words, still need to add a variety of conditions, he can tell us the answer we want? I think the software developed to a certain intelligence, he should be like a talking encyclopedia, ask questions, and then tell us the answer.
Everything should be compared to see, so we find some software to compare.
Redis and SQL
Redis is smart enough to add up to 5M for all the source code, but he's very powerful, and the hash structure can replace our 80% requirement for SQL. He also has profiles, but there are few options, and each item has a detailed comment, and with the default configuration you can handle most of the situation. The only thing to be criticized is that he has a wide variety of interfaces, but fortunately these interfaces are very regular to follow, you only need to understand the basic data structure of Redis, then the official website of the document is easy to understand the purpose of all the interface, and most of the interface only accept 3 parameters within, this is much more. When I first approached Redis, it took me half an hour to get to work, and I was afraid that no one could handle it so easily.
ZMQ and RABBITMQ
ZMQ is the most minimalist-style software (component) I have ever seen. On the one hand he has to face a very complex task, in the asynchronous communication all we may encounter situation, he is for us to consider, but he again the underlying complex problem cover up, let us see a smooth surface, deep work and name. Also take a look at his peers rabbitmq, key words: Center service, multi-threading, mode single, last feature, slow! And with only 1.7M of ZMQ, fast is the most intuitive feeling, and the distribution and extensibility is icing on the cake. Some people say that zmq is like Lego bricks, and everyone can put out the shape he wants, which is a good thing.
Conclusion
Software design is changing rapidly, in the future will definitely come into contact with more excellent software, maybe one day I change the idea, perhaps one day encountered a more magical solution, perhaps I will add here.
The minimalism of software