A question from Zhihu: Why is Go so popular in China? https://www.zhihu.com/question/46755408/answer/586812009 reply, finishing the coma here
Ho ha, let me very happy a subtitle ————- screenshot from ReadHub developer information, a smart aggregation website that makes people like
1. Because “Golang does not solve problems in a subversive way “, it is just simple and easy to learn
1.1 There is nothing new under the sun, history always “repeats”
In the CGI era of the Web, PHP beat Perl.
Similarly, vueJS is much more popular than React in 2018, because vueJS are cheap to learn.
Go is also somewhat similar to Java in that it is cheap to learn.
Several years ago, Game development, Erlang in the background, that is the backbone, and these two years, Go as the background of game development, also a lot of it.
Golang is also cheaper to learn than Erlang.
In the same case, go code is simple and easy to read (and maintain).
I agree with this sentence, but I don’t completely agree with this sentence
It is agreed that for traditional businesses, especially enterprise applications or businesses, as well as businesses with defined end users, there are similarities between business implementation processes and processing constraints, and development implementations, regardless of the magnitude.
As a result, there is not much difference between languages/architectures, for example, user management/fee delivery/business authentication/merchandise management (not content management, content is very different, but not merchandise management).
By business magnitude, we mean the total number of users, the number of concurrent operations, the total amount of data accumulated over time by business operations and the total amount of valid data sets
For example, for large online stores, the product data after removal belongs to invalid data set for online sales, but it is valid data set for big data estimation such as sales behavior analysis)
For these, different language development, is moving bricks.
What difference does it make when you move bricks?
- Everyone tends to choose tools they are familiar with.
- R&d managers/product managers tend to be easy to hire, deliver on demand, and be underpaid
1.3 “Not a disruptive problem solver.” Yes, Go just tries to solve it simply and easily, with no black magic, very little grammar sugar, and even no generics (maybe, someday…).
A friend said, “Golang does not solve the problem subversively “, yes, go can solve the problem, Java can solve, or even better ——–> so, just the same” bricks and…”
But bricks are different. The same business management (yes, I have led the team to implement it. The total number of designed users is 100,000, the number of new users is 3,000 to 10,000 every month, and 90% of the daily start-up volume is 90%. The business model/technical architecture is the same. The business subsystem/middleware/database model is basically the same, especially the interface between subsystems/business units is exactly the same, see Note 1). Go implementation is much cheaper than Java in terms of deployment/operation and maintenance.
As a developer within 2 years after graduation, go has better performance and stability than Java as long as it passes the basic business test. As for development costs (per person per month), they have also dropped considerably.
Note: In the above-mentioned 3/4 projects, video business and financial business respectively, I was the project manager/product manager. In addition to requirement specification (MRD/RSD) and system General Outline Design (HLD), I don’t write code outside of Subsystem Outline Design Specification (HLD), Interface Definition Document (ICD).
On the other hand, if it’s a 100-month-plus project and you have 30 or more developers, it really depends on the makeup of the development team. This involves long-term maintenance and replacement of projects, as well as recruitment, salary and expenses.
So, basically choose easy to recruit development language (and the development language corresponding to the mature frame/library). Java is good to recruit people. Go do not choose (Shenzhen Baoan several companies, recruit GO developers, recruitment information everywhere, have sent nearly a year, still hanging around recruitment)
A few years ago, the Courier picked up the package from the mobile phone in the community. A large company in Shenzhen mainly used Java. There was a PC in the package and the channel was 2G wireless module, and the unpacking time was 3 seconds (the 2G channel was basically smooth in the worst case). The optimization made by the technical team I worked in as the technical consultant is to change the communication from the server side to the PC in the express box from the native Java RPC to the Java RPC with Ericsson ICE as the middleware. ICE, Ericsson’s c++ middleware of more than 30 years ago, has hardly improved in more than 20 years, but its performance is still stable and strong.
C++ / Erlang/hackell is heavy, the learning curve is steep, the Java brick is heavy, the go brick is light, python is light, javascript (NodeJS) is light, just look at TJ’s experience.
Note 1: the core developer of TJ – koa.js, currently the main development language is Go
Before 2017, nodeJS was used in server backend development, and the main problem was callback hell. NodeJS has come a long way now, and VScode is also “hot” due to M$led typescript’s strong typing support for JS.
1.4 Go is very popular in China. It is the accumulation of Chinese programmers
Notice I didn’t put quotes around it
There are great programmers in China, past, present, and future, too many to list
Why golang seems so hot in China? !!!!!!!!!
The real core reason is that Since 1997, China began to connect with the Internet, to 2007 ten years, Chinese programmers, especially in English communication ability generally “just enough” situation, still accumulated a lot of software engineering practice and thinking, in their respective fields “wearing shackles dance “….
Like Xu Shiwei, Dada, Smallnest, Astaxie, MAO Jian……. In go language, a new modern programming language, their accumulation in other programming languages, respectively, developed a new world:
- Xu Shiwei, go based qiniu Cloud storage, the earliest and most respectable early evangelist of GO language in China
- Dada, go – based game backend, non – trained famous game company CTO
- Smallnest, GO’s RPCX remote call middleware
- Xie Da, Beego, great and complete Web framework, its document is golang entry to learn the practice classic business
- MAO Jian, bilibili listed after go reconstruction
.
.
There are many, many, many more to list
And, GolangChina China Golang Conference, great……
Chinese programmers, freed from the shackles of Golang, have made their voices heard in the world!
Wow!!!!
_
Wow!!!!
_
Wow!!!!
_
1.5. Go is hot But it is by no means a panacea
What I’m trying to say is, go has a niche, it has excellence, but it’s not a cure-all.
It looks like go is very popular in China, it’s just a fake.
Especially go is still too young, mature general library or frame is very few, many applications have to masturbate. —–> this, look at Uber know, they masturbate a lot, but also open source, such as Uber open source their own zAP log library, strong performance.
Java libraries and frameworks, by contrast, are a relic of the past.
And Python, as elegant and easy to learn as Python is, it’s the divine libraries that make Python development faster, such as SQLAlchemy, my favorite.
In fact, GO is not so popular in China or the world, but compared to Java, GO is not so bad.
2 Some suggestions, don’t transfer to GO, concurrently repair good
2.1 You don’t need to go from Java/Python /nodeJs
I want to say to my friends who just graduated 3 years ago that it is unnecessary to switch from Java to GO
Instead, it should be based on Java (in addition to video encoding and decoding, ak47, the main force in each research and development battlefield, kills all), while using GO as an efficient development tool for some components (portable scalpel, in some fields, one shot sees blood, one move against the enemy).
If you’re still interested, have some fun with Python/Haskell/SQL.
Yes, you read that correctly, talking about SQL, especially PLSQL database stored procedure programming and NewSQL
Mastery of one programming language and comparison with other programming languages will lead to a deeper and more thorough understanding and practice of programming/design tools
2.2 Is it more important to know how to program than to know a development language
That’s selling sex. “Wang Lao” selling melons? (…… Waterfall development khan…….)
8 years in THE SA/SE team of IPTV/OTT division at UTstarcom
After working through THE IPTV solution SE/STB solution SE and part of the business subsystem SA/broadcast control system product line SE/ Broadcast control product line Release SE (equivalent to product line manager), PACKAGE came out later
Speaking of development languages, I have used in commercial projects:
-
Perl (search perlChina + Tsingson for my dark history)
-
C/C ++ (Mobile MSN/MSN China community)
-
PHP, the first development language in the universe, in… (both on UTstarcom’s RollingStream platform) used, this platform contract object is the largest one, 200 million…
-
Javascript (both front-end and back-end, written a few times)
-
Java/Java/Java (enterprise application, financial platform, radio and television/telecom business platform BOSS RollingStream/broadcast control product line/business navigation subsystem… , public security traffic police RFID storage retrieval platform…)
-
Now, of course, go go go Golang + Postgres, some Haskell, some Typescript
Memories of youth, a salute to Perl (1) — Thanks to Zhen Yisong
I don’t know how to contact Zhen Yisong. If you know, let me know. Thank you.
Intermediate advanced: anonymous hash table with references (original) tsingson – thank Yang road — — — — — — — — — once footprint… Tonight, I’m gonna have a drink
With a little emotion, I picked a paragraph in zhihu’s reply three years ago to remember:
In fact, my English name Tsingson, some old Perler in China should remember this English name. From 1999 to 2004, I was a crazy Perl language lover, vigorously promoted Perl in China and participated in some activities in the early stage of PerlChina community. The culture and thinking of the Perl language continues to influence many of my career-related decisions in the most visceral way.
After leaving a foreign company, I worked as the product manager (and chief technical engineer) of a set-top box manufacturer in shenzhen for the development of a certain video playback platform, using c++ (mpeg4 and.264.265 streaming)/Python (almost all business/operation and maintenance…). Give priority to
The network element division of this platform, as described in the last section of this article, is not complicated, and the terminal is a TV set-top box.
The OTT platform was successful (I left after a successful trial run)
In the process of this project, I almost never wrote the code in commercial deployment (no more than 1000 lines), except that I wrote the prototype of some business network elements as a demonstration during the project start-up period of 3 months. It took me two months to learn GO by myself. First wrote some command line small tools, and then wrote some TCP/UDP small tools, streaming transmission of large files, test network jitter/network speed collection….
Three years later, the platform was so successful that I copied myself, redesigned it, rewrote the code, implemented it again with GO and commercialized it (which is still in progress, of course).
All I’m saying is that the platform, with a few “minor differences “, is pretty much the same with Java
The problem is
When I was parachuted into the position of product manager, I was given 7 guns. Except for two C/C ++ veterans with more than 10K, the rest of the team worked for about 3 years. They were primary in r&d and didn’t have in-depth development skills, and barely learned Python (one month later, they hired a Python developer from other departments). The average salary was 8K…
Five months later, after several rounds of platform development, I began to plan for trial commercial launch. Before and after the launch, I recruited 3 good hands of 15K+ and several interns (one document/test/Web interface…).
The network element division of this platform is described in the last section of this article. The first commercial trial version went live and took six months to develop
Although as a product manager, I have some personnel/financial rights, in fact, this has caused a lot of controversy in the company (mainly because the average salary of the company is relatively low, and the salaries of the good developers I recruited are the same as those of the EXECUTIVE vice president…).
2.3 Small differences? What are the small differences that have led me to choose Go as my current primary development language
A small difference that really seems small:
- Deploy, compile the executable, add a configuration file description document, interface verification service health interface document, package together, throw o&M copy to run, ok, end.
- Write code, compile, test (UT/LIT/SIT…) Close the development test log, compile it, throw it to o&M, and there you go
- Operation and maintenance report said that there are users connected to the service, check the number of users online, over 5000 (this is the internal limit value), let operation and maintenance open a new server, and then copy a run, well, later with this, don’t bother me…. Operations said, OK, you take a trip…
Other than C/C ++, is it this easy to deploy in any other language? Of course, there are…
but
Our operation and maintenance several, very young (21 years old or so), management of hundreds of servers, dozens of ne services, IDC room in North America, Singapore, Europe… Little O&M is still at school
2.4 Summary
Programming is design
Design in software engineering is about solving problems, mastering a programming language (really mastering whatever it is), and being a problem solver.
Be a problem solver. That’s where your personal value lies (making a little money), and that’s where your joy lies (free time for family and friends, food/travel/photography/music/painting/writing a book…. Enjoy the joy of life)
Gentlemen, look at me in the street, give you a song, relax
3. Some interesting additions
3.1 Supplement 1, the name of some development documents
A bosom friend asked that several English abbreviations. In short, abbreviations are just idioms.
Requirement Specification (MRD/RSD)
MRD refers to marketing Requirement Documention, namely, market demand, which is written to Party A and before sales, with the goal of confirming demand details. In general, the technical requirements detail document that accompanies a large company’s technical bid can be considered an MRD.
RSD is Requirement Specification Documention, which is a collection of Use Cases written for developers and testers
System Overview Design Specification (HLD)
It is divided into System HLD/sub-system HLD. HLD is High Level Design Documention, commonly known as system architecture/summary Design. To put it more simply, it divides subsystems and defines the division of labor among them. The Subsystem Outline Design Specification is a similar thing.
Of course, there are HLD outline design, corresponding to the detailed development design document, not expanded
Ho ha, there is a small picture at the end of the article, you can see
Interface Definition Document (ICD)
Interface Control Document (Interface Control Document) Interface Control Document (Interface Control Document) For example, RFC 7230 ~ 7235 defines the HTTP 1.1 interface between the Web server and web browser. Of course, this kind of document can also be called the Protocol Specification document
3.2 P.2, software architecture, what stuff
Note: this part is for the beginning to consider the software architecture, and understand the role of the architect of the friend to write, very not rigorous, if there is inappropriate place, please give advice and criticism, thank you first.
Some friends asked me what is software architecture and what does an architect do? (Some friends even ask why you didn’t write code when you were an architect/product manager/technical lead).
Yes, AS I said, I don’t write much code in my work as an architect
(I have actually written some code, such as a prototype to validate a solution or algorithm, or some quick-fix patches or tools, which are not usually used in a production environment for a long time.)
Just because an architect doesn’t write code doesn’t mean he doesn’t know how to write code.
Architecture is a simple and complex thing
3.2.1 Programming, yes, about
Let’s start with a simple service (multi-user todo-list)
- A user registers/logs in with a mobile number on a website (authentication/authorization)
- After you log in to the website, you can send a text message to remind yourself of the delay (at any point in the next week) on the web page and send it to your mobile phone short message.
- The web interface can edit the publishing time (from the current time, any time in the next week), and the text to be sent (within 500 Chinese characters).
- The total number of messages each person is waiting to publish is 100, and the error in the delivery time of a text message is allowed to change within two minutes. After an SMS message is published, it is moved from the waiting list to historical records and records the SMS release status for historical query on the Web UI. Each person’s delayed information release provides a historical query with a maximum of 1000, more than 1000, delete old information in chronological order.
- Each user can only view their own information, not others’ information.
- The todo-list is free for users.
Ok, so that’s the business requirements, and of course, it basically describes the business process and some specifications.
One of the hidden requirements is to connect with a telecom service provider to provide SMS service. Here, we have simplified for China Telecom has provided unlimited free interface, China’s provinces, cities and counties with unlimited concurrent SMS delivery time of 1 second, the docking method is also simple and secure. Ha ha, pu Daxi Ben…….
(This simplifies billing issues, as well as deployment/operation/operation costs……. , etc.)
The above business, in fact, any developer can implement.
Regardless of how to design, implementation, basic can achieve. — — — — — — — — — — — — — — — — — — — — — — — — — — — > this is called the program design,
But it’s not really architectural design.
3.2.2 Architecture design
Achieving one to six goals is not usually called architectural design, but one server
When is architecture design?
Based on the realization of the above business functions, plus the realization of long-term/a large number of whole-process requirements to ensure business, it is called architecture design:
- Multi-user todo-list service requires 10 million concurrent users to send 10 million messages in the same second, delay of SMS delivery time, excluding telecom transmission time, no more than 3 minutes, at least 15 days of uninterrupted service (similar to Taobao Golden Week), support a total of 100 million users, 40 million active users, Support users for all China Telecom mobile phone coverage of provinces, cities and towns in China.
- The multi-user todo-list service requires a web page for a single user to log in to or operate his/her own delayed SMS notification. In Internet explorer 11 or higher, the page response time is 200ms (200ms after excluding the network round-trip response time, 20% fluctuation is allowed). The slowest response time shall not exceed 1800ms (close to the slowest response affects users and shall not exceed 5% of the total number of concurrent users)
- It is required that the total service interruption time of the whole platform should not exceed 30 minutes each year. The total service interruption time of each administrative region should not exceed 6 hours. At the same time, according to the total amount of county-level administrative areas, the number of county-level areas where business is suspended shall not exceed 10% of the total amount during the same period
The implementation of requirements 1 through 9 (7/8 is the key) requires the help of architectural design.
The architect, on the other hand, addresses 7/8/9, and on top of 7/8/9, has a lot of interference with implementation 1-6.
Of course, the attached, the architect in the selection of the technology and the overall design, in addition to technical maturity, commercial support, the learning curve, the accumulation of experience and talent reserves, also consider the cost of the development team, development efficiency, cost and efficiency of operations, operating costs, deployment costs, personnel changes (including outsourcing), technology upgrade, Scalability of service functions and costs/benefits of interconnecting with third parties………
The reason uber switched from Postgres to mysql is not that Postgres is not good. It’s mysql (the real reason is mysql’s low-level storage engine) that is better suited to Uber’s super-large storage/query needs. For architects, the excellence of a single component, development efficiency, or execution efficiency are not the only factors that determine the selection of architecture technologies.
4. Afterword.
Attached is a picture, drawn in 2015 and mentioned in section 2.2 of xx platform. It is the first picture for newcomers to know about this XX platform and the interface of division of labor among nes:
.
.Salute to the creator of Golang:
Of the three original creators of Go — Rob Pike, Robert Griesemer, and Ken Thompson, Robert Griesemer helped design the HotSpot VIRTUAL machine for Java and the JavaScript V8 engine for Chrome, Rob Pike worked for years at the famous Bell Lab, Ken Thompson has been involved in the design and implementation of the Plan9 operating system, the C compiler, and compilers for many languages. He is a Turing award winner, the father of Unix, and the father of the C language. Ken Thompson, in particular, is the founder of Unix and C. Therefore, the design philosophy of Go is deeply rooted in Unix: simplicity, modularity, orthogonal, composition, PIPE, short and focused functions, etc. That’s why many developers love Go’s clean, efficient programming model.
— — — — — — — — — — — — from blog. The taohuawu. Club/article/gor… Author: Pan Jianfeng, thank you!
.
.
.
.
Finally to the end, I put in a programmer/designer I respect who is telling the truth:
Wang Yin — Wisdom of programming
.
.
Thank you so much for seeing it. It’s a little wordy.
It’s a waste of your time.
Above, hats off and have a nice day.
_
_
About me
Online name Tsingson (Sanmingzhi, known as Uncle 3)
Original Ustarcom IPTV/OTT Business Unit Broadcast control product line Technical architecture Wet/solution engineering Wet role (8 years), freelancer,
Like music (harmonica, one of the main planners of the 3rd / 4th / 5th Guangdong International Harmonica Carnival), photography and cross-country,
Golang language (postgres + Golang for commercial projects)
_
_
Tsingson wrote in Shenzhen, China
Luo Harmonica Music Center, 2019/05/14