ZT:疑Google员工把8w行Python项目用4w行Java重写了

2013-12-08 02:36:41 +08:00
 Ricepig
http://blog.est.im/post/69161031446

非常有意思的一个讨论

引用:“任何流程,任何规范,任何review,任何代码检查工具,都阻止不了程序员缓慢地一点一点地滥用语言特性,也阻止不了一个软件代码自身的腐败。Python本身鼓励滥用Mock因为没有不用mock就可以方便写unit test的测试工具。Python还鼓励不定义清晰的类接口和类关系,如果你写了一个接口继承,就会有Python大牛跳出来说你不Pythonic。系统复杂性在大型软件中是不可避免的,但是如果我们可以付出一些写code的时候的小小冗余,带来长期的代码可维护性改善,那就是值得的。Java不是完美的,用Java一样可以写出不可维护的代码,但是Java至少比Python在这方面强很多。我们的经验证实了这点,信与不信就是看官的事了。”
10980 次点击
所在节点    Python
39 条回复
wizardoz
2013-12-08 15:21:01 +08:00
8W行的python能被4W行Java重写,那一定是本来设计的有问题吧
Ricepig
2013-12-08 15:51:05 +08:00
题目是有点儿标题党的意思,但是文章里面还是有值得思考的地方:
1. 任何流程,任何规范,任何review,任何代码检查工具,都阻止不了程序员缓慢地一点一点地滥用语言特性,也阻止不了一个软件代码自身的腐败。
2. “Python很好,只是你们这些外行不会用”,这是我听到的最多的所谓Pythonic人的论调。事实是Python作者自己亲自带领的那个项目也是一塌糊涂。
3. Python程序的问题之一就是“腐烂”得很快,程序刚写好的时候看起来很简洁,一旦开始维护就快速地变成一堆乱七八糟的东西,动态语言代码腐烂速度远远超过强类型语言。
4. 如果用一个语言开发出可维护的代码需要的能力超过了Google能招聘到程序员的平均水平,我认为这个语言就不是一个可以用来开发可维护代码的语言。
5. 现在随着某Python之父的离开,公司里面粉Python的人也越来越少了。
dorentus
2013-12-08 16:05:38 +08:00
这八万行的 python,假如这次是用 python 来重写,估计也可以变得更好,所以……
ovear
2013-12-08 16:18:41 +08:00
@dorentus
发信人: daluobu (阿土仔), 信区: Python
标 题: Re: 终于把一个8万行的Python程序用Java重写了
发信站: 水木社区 (Sat Dec 7 00:48:05 2013), 转信

这个项目里面,重构是一直在进行的,在过去的八年里面,用Python大规模地重构也发生过好几次。

为什么不仔细看内容就下结论。。
wdlth
2013-12-08 20:51:46 +08:00
既然是Google自家的,为何不用Golang呢?Python 8W行换成Java 4W行,看来原来Python的版本就有很多冗余的东西。
mikale
2013-12-08 21:35:14 +08:00
python版竟然比java版多4W行,这代码确实有问题。

我所知道的情况,认识一哥们把C++的3W行代码改成python变成了6千行

就我个人和周围的朋友,用python写超过100行代码十倍以上的,多的是情况

这里唯一的问题,公司是google,按照此文的楼主的描述,我看google的水平差别很大啊,竟然会出楼主这种水平的员工。
Ricepig
2013-12-08 21:40:36 +08:00
@wdlth 你稍微看一下你楼上的回帖。另外“如果用一个语言开发出可维护的代码需要的能力超过了Google能招聘到程序员的平均水平,我认为这个语言就不是一个可以用来开发可维护代码的语言。”
mikale
2013-12-08 21:41:06 +08:00
发信人: iJava (简单美好), 信区: Python 标 题: Re: 终于把一个8万行的Python程序用Java重写了 发信站: 水木社区 (Sat Dec 7 14:28:56 2013), 转信

这个帖子满精彩的,俺就8了一下:

楼长说的那个系统应该就是Mondrain,从来没有开源的.这里有详细的介绍,包括对g公司的code review process.

<amp-youtube data-videoid="sMql3Di4Kgc" layout="responsive" width="480" height="270"></amp-youtube>
发信人: yueq (yueq), 信区: Python 标 题: Re: 终于把一个8万行的Python程序用Java重写了 发信站: 水木社区 (Sat Dec 7 16:09:34 2013), 转信

根据楼主的描述,是Google的内部code review工具:)。

发信人: yueq (yueq), 信区: Python 标 题: Re: 终于把一个8万行的Python程序用Java重写了 发信站: 水木社区 (Sat Dec 7 16:15:16 2013), 转信

旧系统Mondrian 新系统Critique

如大家上所述,我觉得楼主对于UT、OOP的理解还有待加强。

(我也在G家某组用PYTHON)
Nver
2013-12-08 21:49:29 +08:00
没有错,不好讲是语言的区别。更多在于重构。
mikale
2013-12-08 22:07:59 +08:00
没有方法可以解决人的水平问题,方法只是给出了指导原则。任何软件规模慢慢庞大起来,又要可维护性高,一定会面临重写,不管是用什么语言重写。java语言的优势还是无可比拟的JVM的性能优势和几乎人人都知其语法。

繁琐的软件工程流程,适合于所有语言,团队越大越繁琐,动态语言不解决这问题。软件工程一旦发生问题,再牛的人也要趴下,合作是软件开发的难题。一堆牛人做出一个破项目,在软件开发的历史上不算少见的事情。

牛人在技术的所有领域都很牛,那是上古传说。
mikale
2013-12-08 22:34:26 +08:00
其实动态语言追求的是更少的人来做事,就个人工程实践经验而言,更高效的开发有助于让人数增加的速度减缓,从而控制软件工程的复杂度,这个道理跟算法的时间复杂度的想法类似,想必都能体会。

软件工程的大规模合作的难题难以解决,没有好方法可以处理此问题。坦白说,OO也不是解决方法。当前解决这个问题的主流思路是,避免大规模合作,降低代码行数,即避免庞大化,这是动态语言之所以流行的原因。

开源软件开发名著《大教堂和市集》,首次表达了避免庞大化的是如何可以做到的。github.com之类都是这条思路的当前最佳实践。在牛人总数整体不变的前提下,这几乎是唯一的方式。也是最自然的方式,社会也是这么运作的。

这个故事的槽点:python版改java版竟然没增加团队的人数,看来项目压力还是比较小。
clino
2013-12-08 22:49:46 +08:00
gerrit 我们现在一直在用,还是很不错的,不过性能部分有问题,例如有些大的git提交会失败,怎么也提交不上去,已经给了几十G的内存给gerrit了还是不行,而同样的提交用 ssh push 就没问题,原因大概是用java实现的 jgit 不如用c实现的性能好的原因

不过我在想如果用纯python实现git在性能上应该会糟糕很多,当然一般来说会用c+python的方式来实现这种库的使用了

以前我就知道gerrit的前身是用python来实现的,也会想python是不是不合适去实现这样的一个项目,但这种问题应该是木有答案的

不过有一种场合我觉得python不合适去做应该是比较确定的,就是像android这样的一个系统,用python来做主打语言应该是不合适的,至少性能上会很渣
standin000
2013-12-08 23:42:01 +08:00
@aku 哈哈,一句宏!
@mikale 人月神话,增加人手不见得减少时间。
mikale
2013-12-08 23:45:42 +08:00
@standin000 那是项目正在开发中不能增加人手,都推倒重来了,可以增加人手。不然软件公司根本不需要招人了。
est
2013-12-09 09:07:59 +08:00
@clino 大文件上传,很多系统不会考虑很周到。。。比如给 git 上传个8G的 iso 文件很多系统也要跪。现在如果做git 也没有人会sb到用纯python实现,都是直接用这个了 https://github.com/libgit2/pygit2

python在桌面,移动端都没有任何优势。
clino
2013-12-09 09:49:27 +08:00
@est 基本同意在桌面和移动终端上无优势的看法.另外gerrit这样的系统不是跑在桌面也不是移动终端,但这种系统的python实现被java实现替代了,可能说明确实python也不适合做这样的项目,或者即使可以,在沟通成本和人员要求上可能比用 java 的代价还要高.
Livid
2013-12-09 10:01:36 +08:00
Same story at Twitter. From Ruby to Java.
standin000
2013-12-09 14:02:50 +08:00
@mikale 项目的需求不变,算是同一个项目了。估计增加人手,未必都同意改JAVA。
WhyLiam
2013-12-10 00:41:10 +08:00
"Python实现原型创造80%的价值,Java重写维护创造20%的价值。" 赞这句话
@efi

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/92241

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX