This is a creation in Article, where the information may have evolved or changed.
At the beginning of start-up, how to choose the right language determines the product follow-up technology stack and how to carry out a reasonable business support direction. If you are more inclined to choose java/c#/php Common Language technology stack before reading this article, I think this article is not very helpful for you. Because for you, these technology stacks mean more convenience, more convenient troubleshooting data, and so on. But if a startup wants to choose a reasonable niche technology stack, I think this article might help you.
Before the article started, I felt it necessary to describe the so-called minority languages, and here I looked at the initial technology selection, including:
- Python: You may have heard Python's name in terms of contact crawlers, Big data analytics, and so on, and everyone knows that Pythonista is accustomed to saying: Life is short, I use Python.
- Ruby: If you've ever done a web framework, the most you've encountered is that many people will refer to the ROR framework. After the use of only one marvel.
- JavaScript (NODEJS): Have you ever heard of JavaScript full stack engineer? Have you ever heard of JavaScript full stack engineer? Have you ever heard of JavaScript full stack engineer?
- Golang: Simple Rude language, maybe you've seen a lot of people brag about you, Golang is the next generation of cloud computing development language.
Other languages are too small to be considered, and many need more community support to consider language applications, and are not currently in the realm of consideration.
The disadvantage of minority languages
The so-called enemy Baizhanbudai, before understanding a technology selection, it is best to study the shortcomings of these languages. Because you finally feel that this technology selection is not suitable for you, the fundamental reason is that these disadvantages affect you.
In several of the languages mentioned above, Python, Ruby, and JavaScript belong to dynamic languages. The biggest controversy about dynamic languages is whether dynamic languages are suitable for large projects. In fact, at some stage, when multiple people work together and people speak different languages, this is usually the problem: teams need to spend more time on ensuring the accuracy of dynamic languages. For a project with a high availability, low error rate requirements, due to the dynamic nature of language, it is necessary to program development of unit testing and post-integration testing requirements are higher. Because variables are given type meaning at run time, it is difficult to find enough problems during static detection. This can be a lot of pressure on testers, and when you don't have the right testers, this is usually the case when you're only covering tests for a successful failure in an ideal situation, and a lack of assessment of the unusual situation.
Python, Ruby syntax The biggest cost to programmers is the need to re-learn a new language. The cost of learning, the cost of time, is usually not affordable for startups, even in dynamic languages that are relatively easy to learn. Another important thing to note is that Python, Ruby's execution efficiency and throughput can have a greater impact in the long run if you follow a larger user growth and need to ensure a user experience.
Python and programmer get started with a large language gap: use 4 spaces to express the program indentation. This means that it is more expensive for programmers to find solutions directly from the Web (copy code), because it is likely that he will need to manually format the code, which may cause changes in the program logic. Another thing that has to be mentioned is that some Python libraries seem to be useful, in fact there are some pits, which are often fatal to novices. Corresponding, the Ruby language itself does not exist for these problems. However, the biggest problem with Ruby as a master language is that if you choose the ROR framework as the initial web framework, the cost of learning to modify the ROR framework is particularly high if you do not have a person who is familiar with the ROR framework: for a general-purpose framework, you may need more special scenarios to customize, This may require a large number of monkey patches, which can be more costly if the framework is not clearly understood.
JavaScript (later unified with Nodejs McCartney) enables high performance and large throughput with Nodejs. And at the language level, JavaScript is no stranger to many programmers. However, in the past a long time, the real master of JavaScript is the front-end engineers, this is a very embarrassing problem. For back-end engineers, Nodejs needed a different technology stack than the front end, and probably no company wanted a front-end engineer with no backend experience to take over the development of the backend project. Nodejs is a young language, young will inevitably accompany some problems, such as cubby less (of course, is now a blowout). Some of the necessary libraries need to be searched slowly. In fact, I also have to spit out the slot, probably a developer level issue, resulting in a lot of NPM provided packages, often more or less there are some more annoying bugs, these bugs may be in your development process, the normal operation of the appearance, and you have to kill it. For this kind of bug, a lot of times the quicker way to handle it is to do a quick fix yourself. However, when your programmer does not have this ability, you need to mention a issue to the developer, fix it by the developer, and wait for the version to be updated to the NPM source. Most of the time this process is awkward, especially if you choose a developer who is not particularly active.
Golang is a compiled language, and the syntax is simple, and everything seems to be so beautiful. In fact, Golang itself is still in the Google Development maintenance phase, in essence, although the language is completely open source, but is not a fully community-maintained language. In other words, Google will decide to Golang future trends. Fortunately, third-party packages are driven by the community, which provides more customization. Another worry is the package management mechanism of Golang itself, in fact, this is completely a pseudo proposition. Don't tell me you think go get is enough, it's just because you haven't had a dependency on a break problem (GODEP can also solve some of the problems, but you can't control the changes to the third-party package API). But from now on, at least Google is aware of its own problems and is trying to change it. Golang is also a young language, and cubby fewer problems will arise. Although you can use CGO to bridge some of the existing C + + libraries to the Golang program, but this part of the code maintenance, involving GC optimization processing and other aspects, the requirements of developers are not low. Another thing everyone will catch is the GC problem, in high concurrency environment The impact of GC has declined a lot from 1.5, but the GC is not as much controllable as Java, and in many cases the GC still needs to be controlled at the code level.
All the minority languages above also face a common problem, hiring. Yes, finding a suitable niche language engineer is a painful thing to do. While you can save labor by using the language's high development efficiency, it becomes very expensive to find a suitable substitute when you are faced with a shortage of people. Usually you need to cultivate from the existing staff is more reliable. (Fortunately, after training, even our mobile development engineers can hold on to the back-end part of our current needs.) Of course, this is just the premise of interest. )
How to choose the right technology stack
This is a complex problem. To choose the right technology stack, you need to cover all the disadvantages I mentioned above. For example, you choose Nodejs, you have to consider, you can hold all the difficulties, you can fix the problem of open source package, and even you can solve the problem of no package now, OK, then you choose the language itself is no problem.
And I've been thinking about it, and the technology stack I chose is simple: Python and Golang. In fact, the reason for the choice is very simple, both languages I am more familiar . Yes, that's the first reason. Why there are 2 technology stacks, which is actually related to our existing business status and future development thinking, this will be introduced in the following. It is another reason to say that most of theproblems in Python and Golang languages can be solved on their own now .
Next, the personnel training aspect, the above mentioned small majority language training is easy, in order to now the product development rhythm and the product evolution speed, our personnel training cost is now able to bear .
The reason for using Python is to develop faster, so that you can quickly try and make mistakes . With the existing web framework, with the right database, we can implement a complete product on-line in 1-2 weeks and make quick trial and error. We have developed a series of criteria for Python to standardize the format of the code and to ensure the robustness of the code. This can refer to my previous article on code style requirements.
The reason for using Golang is the need to make large-scale long-term stable operation projects . In fact, I mentioned earlier, in the current development process, Python in the multi-person collaboration process of personal coding style, engineering to be weaker, long-term operation of uncontrollable memory leaks and so on, if you need long-term stable operation, I prefer to choose the compiled language can be compiled, Through static check + dynamic test mode, better guarantee the program's strong type .
Conclusion
The top eight said so much, just to warn everyone, for the small language, the choice of opportunity cost is particularly high. If you just verify the trial and error, or you just want to roll a sum of money to run, the high development efficiency of the minority language is absolutely enough for you. But from the perspective of a large project, you need to consider the disadvantage of the minority language, it is necessary to choose a suitable language as your technology stack.
Another, Hangzhou Cloud pomelo Technology long-term recruitment potential Python/golang developers, interested please send resume to Kevin |at| Yeeuu |dot| Com
Others