背景:
公司原有项目是 php,业务量也不小,每日 100W+订单。
前部门负责人想在公司内部推广 golang,希望用 go+服务化改造业务,而且推荐内部从 php 转岗,还招了几个 golang 工程师带队。
一段时间内公司已经改造和上线了 10 多个服务,结合 codepipeline,k8s,ingress 等已经很接近 devops 了。
但是由于需求变化快,PHP 岗位缺人,大量人力被调去做业务层开发等多种原因,服务化进度其实很慢。
后来部门负责人走了。
新来的 CTO 说 golang 产出慢,golang 招不到人,golang 招人成本高,golang 项目不好维护等理由,突然决定公司停用 golang。坚持用 PHP 开发。对业务优化提供了升级 PHP 版本,使用依赖倒置等设计模型,对于业务服务化设计没给出具体指导方案。
对于升级 PHP 等措施我们是支持的,但是对于拒绝 golang,我们是有些心凉的。
对此 v 友怎么看。
101
ericgui 2019-12-30 07:47:31 +08:00
@lolizeppelin php7.4 了解一下
|
102
husky2019 2019-12-30 08:01:38 +08:00 via iPhone
我司几亿月活也是 php (逃
|
103
rokeyzki 2019-12-30 08:28:06 +08:00
%E8%87%AA%E4%BB%A5%E4%B8%BA%E6%98%AF%E7%9A%84%E5%82%BB%E9%80%BC
|
104
askfilm 2019-12-30 08:42:40 +08:00 5
1. php 可没有那么不堪, 成熟度很高, 稳定性也非常好(包括人才资源稳定性).
2. golang 小地方招人不好招. golang 人员参差不齐(人才资源稳定性较差). 3. 稳定的可靠性比较, 例如同样的 go 和 php "初学者" go 写崩的风险要比 php 大很多. 4. 用 golang 要花更多钱(成本问题), 人工成本提高, 项目重构带来巨大风险和极高开发和维护成本, CTO 还是非常理智的, 人家要向项目和老板负责. |
105
nnnToTnnn 2019-12-30 08:51:05 +08:00
我是前端开发的,有一天领导问我能不能接受 vue 开发方向的技术选型( PS: 我是 React 开发工程师用的 antd pro )
我说: 1. 第三分团队,如果 vue 前端能够做的比 antd pro 好 2. 确实很方便提高的我们团队的开发效率 3. 其兼容性支持 IE9 4. 不耽误项目进度 如果能满足以上的几点,转 vue 我们团队是没有任何问题的。但是如果转了之后没办法保证项目进度,甚至比之前的技术更加坑,那我们为什么要转? -------------------------------------- 这是我代表团队的观念,同样也合适你们团队。php 转 golang 如果团队在不耽误项目进度上做的更好,那为什么不转? 如果做的没 PHP 好,为什么要转? 合适的场景选择合适的技术,google,gitlab,github 这些都不是一个技术语言实现的!!!! |
106
niubee1 2019-12-30 08:51:22 +08:00 2
狗狼粉真的好烦啊。谁不用就怼谁。
|
107
jorneyr 2019-12-30 08:56:40 +08:00
我要是你们的下下下个 CTO,PHP 和 Go 都不用,必须 Java ^_^
|
108
AlexHsu 2019-12-30 08:59:21 +08:00
emmmmm 为什么不用 java
|
109
atonku 2019-12-30 09:05:44 +08:00
试试 java 呗🐶
|
110
PhpBestRubbish 2019-12-30 09:09:10 +08:00
要么忍,要么滚
|
111
LokiSharp 2019-12-30 09:09:52 +08:00
没啥业务是非要用特定语言写的吧
|
112
netChen 2019-12-30 09:10:18 +08:00
看到楼主的心凉,能够体会出来这个其实跟开发过程中客户该需求应该是一样的。功能要实现了,突然这个需求砍了。。。一样心凉。。。。
|
113
dnsaq 2019-12-30 09:13:16 +08:00 via iPhone
没看懂为啥用 go,有的人 php 技术栈都还是半吊子,连自己平时用的都搞不好,就不要用 go 了,每个人水平不一换的成本太高。
|
114
ww2000e 2019-12-30 09:17:18 +08:00
公司肯定选人多,应用量大的,要么 java,要么 php,go 自己捣鼓捣鼓玩吧
|
115
blless 2019-12-30 09:25:22 +08:00
@no1xsyzy #99 一开始就说了啊,别的语言工程化也可以啊。只是在我看来没有 Go 简单方便而已,我司甚至专门为了审查某些内部不允许使用的语法改造了一份 go vet,别的语言改造难度多大我没看过,但是 Go 是真的简单。
|
117
lbyo 2019-12-30 09:30:38 +08:00 4
|
118
jccg90 2019-12-30 09:34:41 +08:00 via Android
前部门负责人为什么要走?是不是因为推广 go,搞了半天改造,最后失败了,所以背锅走人?
|
119
sunznx 2019-12-30 09:36:52 +08:00 1
php 这么简单都用不好的人,用啥语言都一个 jb 样
|
121
jakychen 2019-12-30 09:49:13 +08:00
没啥心凉的,这个本就是中上层决定的,你只管做就是了,php 的 swoole 化 完全可以顶得各场景运用,没有最牛逼的语言,只有最适合的场景
|
122
saltedFish666 2019-12-30 09:50:49 +08:00
谁说了算?
|
123
KuroNekoFan 2019-12-30 09:52:26 +08:00
那就跳槽
|
124
abcbuzhiming 2019-12-30 10:04:39 +08:00
有啥好心凉,楼主你自己都说了,你们的第一次 go 语言迁移明显失败了,那么后来的 cto 是来收拾烂摊子,你指望他会对 go 有好脸色?
在公司干活不是给自己干活,不要总是一副技术长技术短的,谁给钱听谁的。不爽辞,少 BB |
125
keepeye 2019-12-30 10:10:33 +08:00
不是大厂还是不要轻易尝试吧。像我司刚开始使用 go 开发了所有后端业务,后来随着业务规模扩大,人手不足却招不到靠谱的 goer,以至于决定后面所有的业务用 php 开发,go 只维护原来的核心项目并对外提供接口。
|
126
imkerberos 2019-12-30 10:16:30 +08:00
你的新 CTO 很靠谱。
|
127
crazjieb 2019-12-30 10:16:36 +08:00
Tars 了解一下
|
128
tanranran 2019-12-30 10:17:44 +08:00
技术选型是政治问题
前部门负责人为啥要选,绝逼是为了拿工资学技术 |
129
winiex 2019-12-30 10:17:48 +08:00
从公司运营层面出发来做技术决策和从技术研发角度出发的思路是很不一样的,如果不是到了技术方案拖累公司业务的情况下(例如后端程序性能不足导致公司订单增长受限),一般最好不要提前优化,这样很可能是一场折腾。
|
130
robot1 2019-12-30 10:27:05 +08:00
可以参考一下成历转型的公司的情况啊,如 知乎社区核心业务 Golang 化实践
|
131
wmwmajie 2019-12-30 10:28:17 +08:00
就 go 那个没使用的变量编译不通过这一点我就想打死他。
要不是我是个爱学习的人我是一点不像了解 go 相关的东西 |
132
passerbytiny 2019-12-30 10:29:27 +08:00
我是 Java,半路搞了两年 PHP,最后又回到 Java,对 Go 只有一个“替代 C/C++”的了解。但是我不想对语言做评价。
楼主,前部门负责人跑路或者被赶走了,新来的 CTO 要搞自己的一套,你倾向于前部门负责人,你竟然还有心思来 V2 划水,还不赶紧跑路。 |
133
wucao219101 2019-12-30 10:32:14 +08:00
从楼主个人发展来看,有 go 的开发经历,确实发展会比单纯写 PHP 业务更好,跳槽也方便;
从公司角度来看,如果没有 go 大牛带队,可能有很多不确定性,而且团队原本是 PHP 团队很成熟,没必要折腾浪费时间,没有转型的意义。 看问题的角度不一样而已。 |
134
luvroot 2019-12-30 10:34:26 +08:00
立场不同,下面的员工希望学到新东西方便跳槽,上面的管理层希望系统稳定不出问题。
|
135
cai314494687 2019-12-30 10:51:55 +08:00
核心业务可以使用 Golang 开发,但是需求经常变化的业务层推荐还是用 PHP 开发。
|
136
qbhy 2019-12-30 10:58:24 +08:00
CTO 没毛病。
|
137
miniwade514 2019-12-30 11:00:01 +08:00
并不是换个语言就会变强,对个人和公司而言都是这样。
|
138
hbolive 2019-12-30 11:18:51 +08:00
如果不是出现了某些瓶颈 /近期会出现瓶颈,不建议转语言。。
|
139
julyclyde 2019-12-30 11:58:39 +08:00
什么叫“很接近 devops 了”
从这个说法里,我看出…… |
140
fengjianxinghun 2019-12-30 11:58:44 +08:00
@blless Rust clippy 直接教你怎么写代码,cargo 包管理器秒 go mod。
|
141
bluua1 2019-12-30 12:15:46 +08:00
没啥可说的,觉得合得来,跟着 CTO 干就行了
|
142
bluua1 2019-12-30 12:16:07 +08:00
觉得不行,干 TMD 的 CTO
|
143
mamahaha 2019-12-30 12:20:02 +08:00 3
用 golang 的人就是一群 端着饭碗等人做饭的,大家都在等轮子。现在不像 Java、php 刚出现那个年代,大家的忠诚度都是百分百,开荒牛遍地都是。
|
144
exploreXin 2019-12-30 12:21:50 +08:00
千言万语就问一句,前负责人为什么走了?是觉得公司对待自己不公还是自己 hold 不住了?不要说公司无情,是否无情要具体问题具体分析,技术选型方面,公司不会关心用什么语言,公司的目的就是赚钱,能赚到钱的语言就是好语言,对于技术迁移,尤其对已经上线运营一定时间和业务量的项目,不是说改就改的了的,单纯的技术方面可以有具体场景下的应用优劣,但是站在经营者的角度,要考虑更改的各方面成本,一定不只是技术上面的成本考虑。员工写完代码,等着每月发工资,公司经营者可就没这么轻松了,没准下个月公司能不能存活都是要经营者考虑的事情。
所以对贵司的情况不是很了解,难以做出客观的评价,但技术迁移,不止要考虑技术方面因素,另外技术更改导致的损失和风险,也是要考虑的,并且各方面余量要足够充足,才能产生技术迁移的适宜条件。经营者对技术不了解的情况下,保守使用熟悉的技术,对于公司来讲,也并没有什么特别可以讨论的。 |
145
hantsy 2019-12-30 12:21:53 +08:00 2
>>golang 招不到人,golang 招人成本高,golang 项目不好维护等理由
我觉得说的很有道理,从公司角度去考虑一点没错。Go 除了让某些人吹牛 B 的时候看起来很 Cool 外,没别的好处。用上最新的 PHP,语法上已经和现代语言在一条起跑线上,开发效率也不错。如果熟悉 Enterprise Application Patterns, 遵循 PSR,那么用 Zend,Symfony,Doctrine 这些框架为基础也是可以写出高质量,可以复用,可维护的代码。 |
146
fox0001 2019-12-30 12:49:01 +08:00 via Android
CTO 没毛病。CTO 考虑得比你多
|
147
coloz 2019-12-30 13:25:21 +08:00
没毛病啊,CTO 占公司角度考虑,你可以占你角度考虑,只是最后肯定要服从 CTO
|
148
Chenamy2017 2019-12-30 13:26:28 +08:00
CTO 想的没问题,你可以站在对立面想想。
|
149
fanpei0121 2019-12-30 13:32:05 +08:00
我觉得项目处于稳定状态,需要对项目进行重构的话。当然是用更规范的静态语言啊,php 开发起来倒是爽。项目大了动态语言怎么维护呢
|
150
vone 2019-12-30 13:43:01 +08:00
我站现任 CTO。
|
151
NoKey 2019-12-30 13:55:05 +08:00
都是 CTO 了这事情应该给老板报备过
下面的人去顶,估计意义也不大 要不然招我去,我可以让你们把 php 改成 java,怎么样😄 |
152
815979670 2019-12-30 14:02:48 +08:00
看楼主的描述需求 只看语言瓶颈来说,php 完全没有达到性能瓶颈,千万日活项目使用 php 都可以完全没问题,当然 如果你们是 php5.x 当我没说
|
153
daodao 2019-12-30 14:19:06 +08:00
PHP 已经满足当前业务现状,也远未到瓶颈,为什么要换 golang ??
golang 招人很难招,一个人离职,后面谁来补? |
154
andrewDDC 2019-12-30 14:22:00 +08:00
感觉选型没有问题呢,语言只是解决问题的工具,什么合适用什么!
|
155
back0893 2019-12-30 14:29:46 +08:00
不服对怼,怼了再说
|
156
sonyxperia 2019-12-30 14:36:33 +08:00
不如转 Java 啊
|
157
Vhc001 2019-12-30 14:37:40 +08:00
项目做大之后从 php 转 java 是常态吧,贵司为何选择 golang ?
|
158
deadofpeople 2019-12-30 14:58:05 +08:00
@shiny 有内味儿了
|
159
a547926122 2019-12-30 15:16:44 +08:00
“新来的 CTO 说 golang 产出慢,golang 招不到人,golang 招人成本高,golang 项目不好维护等理由“
|
160
ben1024 2019-12-30 15:22:58 +08:00
当前功能能支撑业务,没必要折腾,新技术应该用来解决问题
|
161
rapkey 2019-12-30 15:33:13 +08:00
@uxff #8 从这里就可以看出,支持 golang 重构的大都是奔着学习去的。整个技术团队的语言转型,对于公司来说代价是很高的,时间、人力都是成本,相反收益最大的是员工。
|
162
visonme 2019-12-30 15:52:24 +08:00
公司不是个人,不敢随便折腾,CTO 的决定没有什么问题,新语言和技术应该用在解决现有语言不能轻易解决的问题上的,目前 PHP 应用开发良好,完全没有这个必要,至于未来业务增长会不会带来新的选择,而作为一名 CTO 相信他是又考量的。
旧系统转新语言 /技术开发,成本其实是蛮高的,公司在做选型时候都是需要考虑进去的。 |
163
sweb 2019-12-30 16:04:15 +08:00
你们公司没有订单的时候,经不起你这样折腾,你公司日订单 100 万的时候更加经不起你们这样折腾,go 写服务好是好,但产出跟 php 不是一个级别,对人的要求,工作量全上来了,成本可想而知,这次我站 CTO。go 哪怕再牛逼,可 3 台打 10 台服务器的性能,但开发时间可能不止三倍,人值钱还是机器值钱? 楼主让我想起了当年为了一时爽追新技术的搞了一大堆 node 的项目然后拍拍屁股就走人的那批人,现在那 node 项目都不敢 npm install,只能用别的语言重构....
|
164
kkzxak47 2019-12-30 16:18:29 +08:00
CTO 决定是正确的。
|
165
wo642436249 2019-12-30 16:57:09 +08:00
让我去做你们的 CTO 吧,我支持你们用 Golang,让大家够浪
|
166
nnnToTnnn 2019-12-30 17:09:55 +08:00
@lbyo #117 antd 只是一个设计规范,如果用 vue 肯定是看对面团队的选型。 [捂脸] ,不过目前还是 antd pro 的技术站。
------------------- 我就是一个码农,领导怎么说,我怎么做,最多帮忙把把关 。谈不上架构,这边架构都是找大厂咨询的。。 [捂脸][捂脸][捂脸] |
167
Evilk 2019-12-30 18:49:55 +08:00
这次支持 CTO,可以考虑升级到 PHP7.4,部分高并发业务可用 swoole
不过,说真的,99%的项目都达不到语言的性能瓶颈,换句话说,这个世界上,能达到这个瓶颈的项目,屈指可数 |
168
zibber 2019-12-31 11:22:34 +08:00
公司不用新技术,大家学不到东西,干一段时间也一样跑路
|
169
firefox12 2019-12-31 13:35:21 +08:00
100*10*1000/8.0/3600
34.72222222222222 100 万订单 放到 8 个小时 qps 也就是 34 , 大 100 呗,现在最弱的 db, 也能支持下来。 这是性能问题吗? 不是。 如果我是 cto, 首先看,原来的架构稳定不稳定,如果不稳定,那是迟早要找出路的, 找什么出路,自己不会 go, 找 go 吗? 还是找 java 吧,成熟 例子多。go 还是差在很多地方,基础框架不如 java 全面,全面监控的方案,全链路监控 有没有。这些都是空白。所以 如果稳 就继续, 或者转 java, go 出局。 其实 cto 应该尝试把项目转到 k8s 上,解决稳定问题。 |
170
no1xsyzy 2020-01-03 10:58:03 +08:00
@blless 工程性根本不是问题所在,其他语言的工具能做到的,Racket 也能做到,并且可以做得更好
但是 Racket 用的人还是少 为什么呢?因为 worse is better ?因为自己构造的工具可以迁移到任何平台而无需考虑不同平台行为不一致? 我不能确定。但可以确定的是,一直是:最好用的无人问津,最常用的乏善可陈。 |
171
blless 2020-01-03 13:05:59 +08:00 via Android
@no1xsyzy 你就说说你说的这个语言工程性好在哪啊,说啥 worse is better ? show me the code 好吧
|
172
no1xsyzy 2020-01-03 14:08:24 +08:00
@blless 首先,这和 code 没有任何关系。其次,Racket 的元语言基于 Scheme 语法,语法是如此简单,以致于各类工具都可以做到极为简单。最后,我是把 go 放在偏 “好用而无人问津” 那边的,别的不说,单一个 channel 就秒了 80% 语言了,但相对的,使用量仍然在几个大头剩下的 20% 里争。
|
173
blless 2020-01-03 18:54:56 +08:00 via Android
@no1xsyzy 首先,我们理解的软件工程不一样。复制一段百科,软件工程过程关注软件过程的定义、实现、评估、测量、管理、变更、改进,以及过程和产品的度量。
软件工程在语言层面撑死也就是便利一点,做工程更多靠完整约束,标准,规范和制度保证产品质量,效率质量等等因素。机械工程靠设备仪器,软件工程靠工具,go vet 保证基准代码质量,go fmt 保证代码格式,go test 保证单元测试 /覆盖率 /压力测试,go mod 管理代码依赖,go pprof 性能调优,还有 go doc 生成文档。其他语言也能做啊,但是标准就完全是社区要么是内部标准。你说的什么语言跟我说的有半毛钱关系吗? |
174
no1xsyzy 2020-01-04 01:56:58 +08:00
@blless raco test 单元测试,虽然我记忆中存在
``` (+ 1 1) "should be equal to" 2 ``` 这样的单元测试语法,但我实在没能找到 ; 覆盖率其实是幻觉,但姑且有 cover 包(存在于官方文档内)可以 raco cover DrRacket (自带 IDE )包含格式化和性能测试 raco pkg 管理依赖 scribble 文档工具 而且重点是,Racket 并非一门语言,而是一组构造语言的工具,并且上述工具对所有构造出的语言通用。 |
175
daoqiongsi1101 2020-05-24 12:28:06 +08:00
不一定只用一门语言,php 和 go 完全可以并存,可以把部分性能要求高的接口用 go 重构,另外一些遇到性能瓶颈的逻辑也可以用 go 实现,php 使用 grpc 来调用,这样可以各自发挥长处. 但是直接拒绝 go 确实不应该.
|