入职后发现项目组代码异常混乱,是去是留?

如题,应届生刚毕业入职还在试用期。拿到代码后发现不仅混乱而且没有任何文档,公司技术靠心口相传。工程维护的人太多了几乎都是在“和稀泥”,代码可读性真心非…
关注者
2,213
被浏览
589,705

193 个回答

好多忽悠楼主重写的,让我想起十年前年轻的自己。

这里说点不同意见:

从公司利益角度来说,如果系统已经发布给客户(上线),不要重写。

从个人利益角度来说,可以私下尝试重写来提升自己的能力,但不要试图用来替换已经上线的版本。

理由:

一个刚进公司的新人,对整个系统的了解可以说浅薄之极,你看到的东西、能理解的东西,只是冰山露出水面的那一小角,只是巨大的地下皇陵表面的一层浮土。你只看到了代码混乱这一个问题,但忽视了系统已经解决了的几百几千个其它问题,而一个系统的真正价值却来源于它解决的问题,也就是说,新手容易关注缺点而忽略价值。

这种情况下让新手来重写,可想而知结局一定是灾难性的。事实上就算让精通熟悉这个系统的老手来重写,结果也很可能是灾难性的,因为人的大脑容量有限,今天改动的代码几周之后可能就完全忘光了,更不要说去回忆几年前写过的代码。当时为什么这么写,为了优化做了哪些权衡,这些记忆早都已经烟消云散,重写的时候还要再重新面对一次同样的困难,而这次的解决方案还真就未必比之前的更好。

废话说了这么多,来个国外的老程序员Joel Spolsky在2000年写的文章:

Things You Should Never Do, Part I

(15年前就已经有大牛总结过经验了,可见多读书有多么重要)

他的论点来源于一个简单的事实:

It’s harder to read code than to write it.

写代码容易,读代码难。

年轻的程序员似乎还认识不到这一点,但任何一个老程序员都会非常的认同这句话。

还有一个更详尽的带图表的分析:

vibratingmelon.com/2011

这篇文章的观点主要是:

1. 重写的代码即便能完全达到旧代码的所有功能、性能需求,为产品带来的竞争力也只有边际提升。(这个很好理解,因为代码的规范性和清晰度对产品的功能性没有直接帮助,只能降低远期的维护成本)

2. 由于重写代码过程中需要花费额外的钱和时间,可能会出现一些意外状况,比如预算不够了,核心程序员离职了,或是重写的产品没有达到原有产品的所有功能和性能需求,那么这个结果可能是灾难性的,重写的产品要么胎死腹中,要么市场竞争力反而更低了。(我马上想到一个例子,迅雷客户端,中间重写多少次都是越写越烂,最后大家都还在用原始的精简版)

当然以上并不是说我们写代码就不用管架构,随便敷衍了事一下算了。这显然也是不对的,具体情况具体分析,需要先看一下我们在公司写代码的目的和目标是什么。

有理想的人往大了说写代码是为了更好的服务人类,但不考虑开源和兴趣爱好之类的话,像我这样喜欢钱的小人往实际了说,写代码的本质目的是为了给公司和自己盈利,所以一切能够提高产出投入比的措施都是可取的,一切降低了产出投入比的措施都是不可取的。

在开发的早期环节,好好设计一下架构显然能够降低未来维护的隐性成本,所以好好设计架构是可取的。

在项目已经上线之后,重写代码在最坏情况下可能导致项目失败,最好情况下也只能获得边际效益提升,却同时要花费高额成本,所以重新设计架构重写代码是不可取的。

嗯你问如果公司的项目或产品代码混乱到无法再加入新功能或提升性能,跟时代严重脱节怎么办,那么应用以上原则,这时候既然这个项目已经快死了,那么放到新项目里重写显然是最合理的选择。

各种高票答案都在忽悠你,给你打鸡血呢。站在公司角度这些都是对的。但对于新人而言就是另一回事情了。就像你的小孩,你是愿意把他送到好学校里,周围都是聪明的同学,上面有牛逼的老师好呢?还是愿意把他送到一个差学校里,再告诉他,你要把到这看成机会呢?

建议新人还是到规范的地方去多学习两年,然后再到高速成长的企业去发挥。否则,给他机会让他改,他没见过外面的世界,都不知道怎么去改,对不对。当然,这些如果站在公司层面,公司要的是执(ting)行(hua),要的是效(fu)率(cong),要的是市场快速反应。铁打的营盘流水的兵,公司又不是学校,学习应该是你自己主动搞定的事情,呵呵。

--------------

有的公司,愿意花半年时间专门集中培训新人,让各种公司内牛人指导,让新人完成一个个的DEMO,拿着工资上课,学习完了再开始做项目,定期还有各种专业讲座,和牛人交流的机会。有的公司,入职时老大手一指告诉你坐哪,一本书扔过来告诉你学吧。一周的时间教你熟悉下最基本的东西,然后一句:“项目就是最锻炼人的地方”,立马赶鸭子上架。你有点想法,对不起,老代码即便乱,但是稳定得很,不敢给你动。你想改原来的代码?你还是多实现几个礼物让大家的奖金涨上去实在。

何也?经营理念不同而已,物化员工的公司里,公(gao)司(ceng) “发展” 压倒一切个人成长。你就是一盏油灯,来了就得付出,等你付出的不能再付出的时候,油灯熬干就该换了。而另外一些公司,认为人是自己的核心竞争力,只有不断的提高个体的实力,才能达到提高公司总体实力的目的。前者看重钱,讲究效(fu)率(cong);后者看重长期利益,讲究共赢。这就是格局的不同,最终的结果也不同。

所以,骚年,现在给你机会改你都不知道怎么该最好的情况下,找机会去大厂锻炼一下吧。等你有一定的经验了,再去所谓成长型公司,跟着他们一起创业,那时候让你来写架构你能写的不那么乱就算进步了。别听那些高票的答案,什么让你改才是你的机会,这样的公司里,大部分情况下,你其实没有改的机会呀。

最后问自己几个问题:

1. 你真的想改,你有机会改么?或者你有能力改么?

2. 你作为新人,你想学一身 “稳定” 的野路子呢?还是想学正规的技术?

3. 你作为新人,愿意身边都是牛人,还是都是普通人?

4. 你现在是学习新东西的年纪呢?还是干各种低端重复体力为公司挣钱的年纪?

5. 一家把你当作工具不替你的成长考虑的公司,你是否需要自作多情的站在高层角度上考虑?