在公司里开发软件 和学校有什么不同?

来源:互联网 发布:监控软件 编辑:程序博客网 时间:2024/05/17 03:43
公司里面的关键代码可能会实现五遍,反复迭代,最早的实现和后期几乎可以看作两个产品,长期优化,反复测试,7*24小时,尤其是开发电信级代码,基础架构上,即使一个随机bug的发生率低于10的-12次方,也要抓住不放,要给予解释和给出结论,最终的结果就有很大的区别,这样的软件基础架构很稳定,开发软件各种爽,工业级别的基础架构代码要远远优于学院派的代码。
一系列的严格的测试下来,连std库,Linux tcp ip库都有多处隐藏很深的多个bug被发现,深入这些代码后,一些常用组件bug的影响是如此深远,令人惊叹。我们内部评估的结论是: 应该有更多大公司的团队早于我们发现这些bug,这些bug至今未修复的一个原因在于技术门槛,或者某软的大型软件和关键性应用需要这些门槛将二流团队挡在门外,毕竟现在IT产业的竞争都到了你死我活的地步,惨烈到了996加班加到猝死的地步,稳定性也是重要的竞争力。某些公司的某些程序员可能加班到死也想不通,为什么bug找不到,因为底层库有随机bug,而且有的bug是之前没有的,从某库管理员升级了版本之后,由于某个充满争议的所谓的优化之后,当然你提交patch也未必能够被釆纳的,前面就争议过,被质疑,然而intel公司有技术大拿说此优化没有问题,问题搁置。所以诺基亚死于多线程,也是死于bug。稳定性方面的问题只能各团队靠自己解决,解决了就能有机会进入某些关键领域,解决不了就只能靠人力去堆,靠服务去弥补,实在不行只能靠加班文化去感动领导,至少大家都尽全力了,对付着用吧。程序员加班的最大原因是解决bug。
学校写代码肯定沒有这么多测试,但是,大型软件的测试是决定生死存亡的,是要敢于测试一切可能性的,包括一切外部库。测试也不是简单跑几遍,有的测试是要测试上万亿次的,尤其是多线程并发下的复杂项目。学院派的代码商业价值不高,在于缺乏真正严格意义上的测试。


工作第一年,自己因为代码中一个路径名没改过来,造成整个部门测试推迟,那个时候正碰上移动集采,领导发了大火,要记我的处分,幸好我师父顶了上去。后来还亲眼见过部门一个同事因为一个小小的野指针,造成服务器宕机,整个片区都没了网。公司大boss亲自出面登门道歉,还带上了貌似几百万的补偿金,甲方一直拉着个驴脸,说以后不再考虑公司的产品。至于那个同事,嘿嘿。所以说学校里写程序是跟自己闹着玩儿,工作后写程序是跟钱闹着玩儿----------------------------------------可能有人觉得只处罚程序员太不合理了,出了这种错不能只让程序员背黑锅。这里我要声明一下,当时是在国内的通信设备大厂,各种流程都是很严格的,怎么可能只处罚程序员。产品一般的开发流程是首先程序员要写详细的需求文档和概要设计,之后就要开会进行审核,审核通过之后程序员就开始写代码开发功能,然后自测,自己觉得没问题了,就进测试部门进行测试,测试文档需要自己写,不然测试人员不知道怎么配置,如果有问题会随时提交bug系统,这个系统上bug的解决速度和数量是项目经理给程序员评绩效的关键。如果你写的测试文档上有的功能竞争厂商实现了而你没有实现,那又要开发新的功能。这个阶段的测试不只一轮,而是只要组网时需要,就要拉过来测试。等到设备采购商比如移动联通进行集采时,那就要进中试部门,这个阶段的测试就非常严格了,各种性能仪表、各种网络拓扑都要轮着上,而且真的是加班加点的一轮接着一轮测试,如果时间紧还要进行封闭开发,直到没有bug,完全满足甲方的需求。但是即使这时没有bug,也不代表功能就完美了,还有一些没有测出来的小概率性的bug。但是这时别人已经在使用设备了,那怎么办呢?前方有技术支持和网络工程师顶着,出了问题第一时间找的是他们。然后前方人员向总部汇报情况,让程序员解决bug,这时又要从头一个轮回了。像这种让设备宕机的bug属于非常严重的致命错误,一般是极少极少出现的。但是如果出现了,那肯定是要从上面一级一级进行处理,项目经理、组长、测试部门、程序员都脱不了干系,肯定不能只处罚程序员一个人的,这样也太不讲道理了。

学校里开发软件,多数是以竞赛拿奖、拿到学分、获得实践经验为目的;公司里开发软件是以营利,获得利润为目的。目的不同工作质量自然不同。 
学校这个环境里,大家的开发经验都差不多,最多相差三四年;公司这种环境下,上到三十几岁的老司机,下到刚毕业的学生,工作经验差别太大了,有经验的开发人员不知挖了多少坑,堵了多少窟窿,都成人精了,在这种环境下,你要想得到好的绩效、走到更高的位置、不被老司机鄙视,环境会逼着你进步。 
学校里通常是独立开发,或者几个小伙伴一起搞一搞,跟小作坊差不多;在公司里面,各岗位各司其职,开发团队成规模,为了用有限的人力资源创造更大地价值,提高开发效率,会有较为严格的开发流程和团队规范,如同生产线一样。 
学校里开发的软件,需求是已经定义清楚了的,在开发过程中很少会涉及到需求的变动,如果有改动通常只会在最原始的基础上有减无增;在公司里需求变动见怪不怪了。

转自:https://www.zhihu.com/question/66195500
阅读全文
0 0
原创粉丝点击