0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一名IT工程师在Coverity的职业生涯

工程师人生 来源:网络整理 作者:工程师吴畏 2018-07-12 14:47 次阅读

好久没有写博客,一方面因为工作太忙,另一方面是因为没有发现什么好写的。可是后来发现没什么好写的原因其实也是因为工作太忙了。忙得不正常,所以没有很多时间和精力来研究和欣赏自己喜欢的东西了。

我在一家叫做 Coverity 的公司工作,我住在三藩市(San Francisco)。Coverity 是一个奇怪的公司,三藩市是一个奇怪的城市。

Coverity 制造一种叫做“静态分析”(static analysis)的软件。这种软件可以在不运行程序的情况下,经过对代码的分析,自动的找到程序里面可能出现的问题。这有点像我之前给 Google 做的那个 Python 分析器,只不过针对另外的语言(C,C++Java 等),分析的侧重点不同,能处理代码的规模也貌似大一些。还有就是这么多年了,久经沙场考验了。

Coverity 具有世界上最先进的一些技术,所以麻雀虽小,却让很多人离不开它。恐怕很少有人知道,这小小的公司的忠实客户,包括了一系列的大拿:美国宇航局, 波音, 洛克希德马丁,雷神(Raytheon),BAE Systems,丰田,欧洲原子能中心(CERN)…… 貌似几乎所有对代码质量不敢有丝毫差错,又不得不用像 C++ 这样毛病众多的语言的公司,都购买了 Coverity 的产品。比如最近的火星好奇者号上的所有200多万行代码,都经过了 Coverity 的静态分析。当然,如此精密的设备不可能光靠 Coverity 查一下错就能确保万无一失,它必须依靠很多其它的技术,但 Coverity 确实是这些东西的开发过程里面比较重要的部分。

我必须承认,Coverity 给了我足够的启发,甚至间接的让我发现了自己之前做的 Python 静态分析里面存在的一些问题。Coverity 的产品在大规模的代码上面的成功,也让我意识到了自己在 Python 分析器里的一些突发奇想的设计的正确性和价值。如果我现在做一个新的 Python 分析器,它将比原来的精确和高效(也可以推广到其它语言比如 JavaScript)。我也清楚的看到,Coverity 自发研制的一些“不大严谨”的做法,其实比程序语言领域里面一些看似高深的“逻辑”还要“正确”。这些微妙的“提示信息”,让我把多个领域的知识串通了起来。所以我觉得跟这公司还有点臭味相投,加入 Coverity 也是不枉此行的。

然而我也发现,Coverity 缺少我拥有的程序语言理论知识。绝大部分的 Coverity 工程师没有系统的学习过 lambda calculus 和函数式编程。在我的 Python 分析器中,其实包含了 Coverity 还没有的技术。Python 的静态分析本来就比 C++ 和 Java 之类的难,然而我的实现却异常的简单。这些微妙的技术,貌似很多人都可以说他“会做”,但是他们却很难把它做对。这就像“CPS 转换”一样,很多人都说他会做,可是真正做对的只有极少数人(我是其中之一)。这些技术源自于我对程序语言本质的理解,源自于 Dan Friedman, Kent Dybvig 和 Amr Sabry 等老师的教诲,也源自于我自己辛勤的实验,实验,再实验…… 在我简短而优雅的代码中,包含了许多人需要花费好几倍的代码长度才能达到的目标。所以虽然 Coverity 的工程师们技术实力很强,但在代码的简单程度和对程序语言语义的理解上,真的很难达到我的程度。

这就是为什么我经常能够一眼就看出 Coverity 产品里存在的问题,并且很快的修正错误。举一个简单的例子,有一天我修改了一行代码,使得产品在某些 benchmark 上的内存使用量减少了一半。我为什么可以做到这一点呢?因为在我的 Python 分析器里,这个问题是从一开头就不存在的。它源自于一种幼稚的解释器写法,有点像 GoF 的《Design Patterns》里的那种。Coverity 的代码里面有好些类似的问题,都是我自己根本不可能犯的错误,我都没有机会给他们改进。我不是想贬低同事们的水平,他们都是 Stanford, Berkeley 等学校毕业的高手,可是我也很清楚自己的技术地位。

所以我就经常发现这样的麻烦事:我顺手改掉了一个自认为很显然的问题,或者一个我根本不会犯的错误,然后就发现有大批的测试需要被修改,我也会被要求写出“regression test”,用以防止同样的错误再次发生。某些同事对于测试的战战兢兢的态度,其实跟我当年在 Google 实习的时候没有什么两样。看到这里的问题了吗?这些我“根本”不会犯的错误,几分钟时间顺手就改掉了,但是我却要花成天的工夫去修改和创建测试,防止它“再次”发生。我不得不说,在这些测试上所花费的工夫,占用了比我修改代码多好几倍,甚至几十倍的工夫!

想想这六个月以来我干了些什么,再比较一下在 Google 实习的那六个月独自从头做出来的东西,我发现自己简直什么也没有干。这就是我不喜欢“测试驱动开发”(TDD)的原因。在 Google 的六个月里,我无视同事对于测试的要求,从无到有的做出了如此精密的系统,一个测试都没有写照样做得好,为什么呢?因为我的代码非常的简单清晰,我随时都可以把它们完整的呈现在头脑里面,从而让“心灵之眼”可以看到可能出现的错误。也许这就是所谓的“逻辑思维”。

对测试过分依赖的人,往往不具有这样的思维能力。他们不能够看到代码最简单的本质,所以需要做很多试探,以求达到“近似解”。为了不至于偏差很多,就写很多测试,用以捕捉和防止每一次的错误。这就像一个初学画画的人,一点一点的描,用橡皮反复的擦,可总也抓不住事物的精髓。这些人对“错误”的记忆能力特别强,往往深入的追究一块代码是“如何”错的,“为什么”是错的,下次如何才能不犯同样的错误。

然而我却没法记住之前的代码是如何错的,我也不想知道为什么它是错的,我只记得“正确”的代码是什么样子。错误的方式有千万种,可是正确的却往往只有一个。把脑力浪费在记忆错误的东西,这就是为什么很多人不能写出真正优美而正确的代码。我受到的训练让我可以直接得到正确的结果,所以测试对于我来说分量没有那么重。当我的代码需要大量的测试才能确保正确的时候,那就是它该被推翻重写的时候。所以我的代码往往没有任何补丁和变通,可以说是无懈可击。这就像是一个真正会画画的人,他闭目沉思,然后一气呵成。当然,优美的代码并不是一蹴而就的,有的代码被我推翻重来几十次才最后成功,但我最后的代码不留下丝毫错误的痕迹。所以我觉得,看一个程序员的水平,不要看他留下来多少行代码,而要看他删掉了多少行。

我觉得做 Coverity 的工程师真累。这种累不止在于以上的技术层面的繁琐,而且在于管理层对工程师的缺乏尊重以及不必要的压力。这让我在受到了足够的“启发”之后,开始怀疑是否还有继续为它工作的价值。对于公司管理,以及对于 IT 行业总体的看法,我还是以后再讲吧。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Google
    +关注

    关注

    5

    文章

    1713

    浏览量

    56790
  • 工程师
    +关注

    关注

    59

    文章

    1553

    浏览量

    67496
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66750
收藏 人收藏

    评论

    相关推荐

    个电源工程师的成长路径

    即将走马上任电源工程师这个岗位,请问各位大佬,这个岗位的职业路径般是怎样的?
    发表于 04-08 14:19

    Domo与Tableau和Power BI?前Tableau工程师建议最大化BI工具潜能

    作为一名解决方案工程师,TannerBrockbank曾在两家流行商业智能(BI)公司工作:Tableau和Domo。在他的职业生涯中,使用过许多BI工具。他发现部分组织选择使用两种BI解决方案
    的头像 发表于 03-28 08:04 137次阅读
    Domo与Tableau和Power BI?前Tableau<b class='flag-5'>工程师</b>建议最大化BI工具潜能

    SOLIDWORKS助学生铸就梦想中的职业生涯

    在科技日新月异的今天,SOLIDWORKS作为一款三维CAD设计软件,不仅成为了工程师和设计师的得力助手,更是学生实现职业梦想的强大工具。SOLIDWORKS以其直观的用户界面、强大的设计功能和广泛的应用领域,助力学生迈向成功的职业生涯
    的头像 发表于 03-12 14:43 60次阅读
    SOLIDWORKS助学生铸就梦想中的<b class='flag-5'>职业生涯</b>

    如何搞崩个硬件工程师心态?试试对ta说这几句

    硬件工程师
    扬兴科技
    发布于 :2024年02月20日 18:05:49

    优秀电源工程师需要哪些必备技能?

    随着电源市场的不断扩张,开关电源行业飞速发展,企业对电源工程师的需求日益增加,对电源工程师的技能要求也日渐提高,相信没有位电源工程师会错过让自己变得更优秀的机会。作为
    发表于 01-29 11:29

    FPGA工程师需要具备哪些技能?

    。 FPGA工程师进行DSP电路设计之前,需要深入了解数字信号处理技术。他们需要掌握数字信号处理中的概念和基础知识,例如滤波器、傅里叶变换、数字信号采样等。FPGA工程师还需要了解
    发表于 11-09 11:03

    如何成为一名优秀的嵌入式工程师

    如何成为一名优秀的嵌入式工程师?嵌入式学习的第步,首先是C语言。 1.理解内存管理:C语言不同于高级语言,它不会自动管理内存。因此,你需要理解并掌握如何使用malloc()、free()等函数
    发表于 11-07 15:36

    电源工程师常用的几个典型电路分享

    具有电源知识水平的工程师来完成设计和开发。作为一名合格的电源工程师平时工作经验的积累很重要,但同时也应该提高理论水平,通过积累几个常用的电源电路,说不定下次就能用上,还是学习吧!
    发表于 09-20 07:59

    有源滤波器和无源滤波器的区别在哪?

    想象一下,作为一名音频工程师,刚刚录制了整个职业生涯中最好的声音之一,但录音中有大量不需要的高频噪音,而且似乎无法消除,或者是一名电气工程师
    的头像 发表于 09-14 17:03 1163次阅读
    有源滤波器和无源滤波器的区别在哪?

    一名硬件工程师都具备哪些技能?

    芯片嵌入式物联网STM32
    学习电子知识
    发布于 :2023年08月02日 12:54:00

    走好职业生涯第一步|中科驭数2023校招生培训“芯星计划” 圆满落幕!

    文化、融入驭数团队,顺利迈过从“学生”到“职场人”的重要阶段,开启职业生涯。 ▲  视频回顾 2023年校招生培训项目 ——“芯星计划” 芯星计划是中科驭数为校招新员工量身定制的一套培训体系,让新员工全方位的掌握公司业务和文化,涵
    的头像 发表于 07-20 19:05 869次阅读
    走好<b class='flag-5'>职业生涯</b>第一步|中科驭数2023校招生培训“芯星计划” 圆满落幕!

    热门推荐:硬件工程师必备工具

    硬件开发的工作流程般可分为:原理图设计、PCB Layout设计、采购电子BOM、PCB板生产、PCBA组装、功能调试及测试、小批量试产、大批量生产正式投放市场等步骤。 作为一名优秀的硬件工程师
    发表于 06-21 10:15

    商业往事丨第88话:延长职业生涯的刺猬策略

    商业往事 每月分享几则有趣的商业小故事 (中英双语) ,邀请大家和我们一起透过历史故事,看存储商业。 延长职业生涯的刺猬策略 本文总计 1494 字 预计阅读 5 分钟 (英文文章在中文文章之后
    的头像 发表于 06-09 17:15 218次阅读
    商业往事丨第88话:延长<b class='flag-5'>职业生涯</b>的刺猬策略

    礼赞五一 | 平凡的岗位,不平凡的坚守!致敬每个努力奋斗的电子工程师!

    着强大的创造力,通过行行代码构建丰富多彩的数字世界。值此五一劳动节之际,向奋战各个岗位的他们致敬! 长期以来,每位电子工程师兢兢业业、尽职尽责,贡献自己的力量。在华秋,就有这样
    发表于 04-28 10:08