一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一名IT工程師在Coverity的職業(yè)生涯

工程師人生 ? 來源:網(wǎng)絡(luò)整理 ? 作者:工程師吳畏 ? 2018-07-12 14:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

好久沒有寫博客,一方面因?yàn)楣ぷ魈?,另一方面是因?yàn)闆]有發(fā)現(xiàn)什么好寫的??墒呛髞戆l(fā)現(xiàn)沒什么好寫的原因其實(shí)也是因?yàn)楣ぷ魈α恕CΦ貌徽?,所以沒有很多時(shí)間和精力來研究和欣賞自己喜歡的東西了。

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

Coverity 制造一種叫做“靜態(tài)分析”(static analysis)的軟件。這種軟件可以在不運(yùn)行程序的情況下,經(jīng)過對代碼的分析,自動的找到程序里面可能出現(xiàn)的問題。這有點(diǎn)像我之前給 Google 做的那個 Python 分析器,只不過針對另外的語言(C,C++Java 等),分析的側(cè)重點(diǎn)不同,能處理代碼的規(guī)模也貌似大一些。還有就是這么多年了,久經(jīng)沙場考驗(yàn)了。

Coverity 具有世界上最先進(jìn)的一些技術(shù),所以麻雀雖小,卻讓很多人離不開它??峙潞苌儆腥酥溃@小小的公司的忠實(shí)客戶,包括了一系列的大拿:美國宇航局, 波音, 洛克希德馬丁,雷神(Raytheon),BAE Systems,豐田,歐洲原子能中心(CERN)…… 貌似幾乎所有對代碼質(zhì)量不敢有絲毫差錯,又不得不用像 C++ 這樣毛病眾多的語言的公司,都購買了 Coverity 的產(chǎn)品。比如最近的火星好奇者號上的所有200多萬行代碼,都經(jīng)過了 Coverity 的靜態(tài)分析。當(dāng)然,如此精密的設(shè)備不可能光靠 Coverity 查一下錯就能確保萬無一失,它必須依靠很多其它的技術(shù),但 Coverity 確實(shí)是這些東西的開發(fā)過程里面比較重要的部分。

我必須承認(rèn),Coverity 給了我足夠的啟發(fā),甚至間接的讓我發(fā)現(xiàn)了自己之前做的 Python 靜態(tài)分析里面存在的一些問題。Coverity 的產(chǎn)品在大規(guī)模的代碼上面的成功,也讓我意識到了自己在 Python 分析器里的一些突發(fā)奇想的設(shè)計(jì)的正確性和價(jià)值。如果我現(xiàn)在做一個新的 Python 分析器,它將比原來的精確和高效(也可以推廣到其它語言比如 JavaScript)。我也清楚的看到,Coverity 自發(fā)研制的一些“不大嚴(yán)謹(jǐn)”的做法,其實(shí)比程序語言領(lǐng)域里面一些看似高深的“邏輯”還要“正確”。這些微妙的“提示信息”,讓我把多個領(lǐng)域的知識串通了起來。所以我覺得跟這公司還有點(diǎn)臭味相投,加入 Coverity 也是不枉此行的。

然而我也發(fā)現(xiàn),Coverity 缺少我擁有的程序語言理論知識。絕大部分的 Coverity 工程師沒有系統(tǒng)的學(xué)習(xí)過 lambda calculus 和函數(shù)式編程。在我的 Python 分析器中,其實(shí)包含了 Coverity 還沒有的技術(shù)。Python 的靜態(tài)分析本來就比 C++ 和 Java 之類的難,然而我的實(shí)現(xiàn)卻異常的簡單。這些微妙的技術(shù),貌似很多人都可以說他“會做”,但是他們卻很難把它做對。這就像“CPS 轉(zhuǎn)換”一樣,很多人都說他會做,可是真正做對的只有極少數(shù)人(我是其中之一)。這些技術(shù)源自于我對程序語言本質(zhì)的理解,源自于 Dan Friedman, Kent Dybvig 和 Amr Sabry 等老師的教誨,也源自于我自己辛勤的實(shí)驗(yàn),實(shí)驗(yàn),再實(shí)驗(yàn)…… 在我簡短而優(yōu)雅的代碼中,包含了許多人需要花費(fèi)好幾倍的代碼長度才能達(dá)到的目標(biāo)。所以雖然 Coverity 的工程師們技術(shù)實(shí)力很強(qiáng),但在代碼的簡單程度和對程序語言語義的理解上,真的很難達(dá)到我的程度。

這就是為什么我經(jīng)常能夠一眼就看出 Coverity 產(chǎn)品里存在的問題,并且很快的修正錯誤。舉一個簡單的例子,有一天我修改了一行代碼,使得產(chǎn)品在某些 benchmark 上的內(nèi)存使用量減少了一半。我為什么可以做到這一點(diǎn)呢?因?yàn)樵谖业?Python 分析器里,這個問題是從一開頭就不存在的。它源自于一種幼稚的解釋器寫法,有點(diǎn)像 GoF 的《Design Patterns》里的那種。Coverity 的代碼里面有好些類似的問題,都是我自己根本不可能犯的錯誤,我都沒有機(jī)會給他們改進(jìn)。我不是想貶低同事們的水平,他們都是 Stanford, Berkeley 等學(xué)校畢業(yè)的高手,可是我也很清楚自己的技術(shù)地位。

所以我就經(jīng)常發(fā)現(xiàn)這樣的麻煩事:我順手改掉了一個自認(rèn)為很顯然的問題,或者一個我根本不會犯的錯誤,然后就發(fā)現(xiàn)有大批的測試需要被修改,我也會被要求寫出“regression test”,用以防止同樣的錯誤再次發(fā)生。某些同事對于測試的戰(zhàn)戰(zhàn)兢兢的態(tài)度,其實(shí)跟我當(dāng)年在 Google 實(shí)習(xí)的時(shí)候沒有什么兩樣??吹竭@里的問題了嗎?這些我“根本”不會犯的錯誤,幾分鐘時(shí)間順手就改掉了,但是我卻要花成天的工夫去修改和創(chuàng)建測試,防止它“再次”發(fā)生。我不得不說,在這些測試上所花費(fèi)的工夫,占用了比我修改代碼多好幾倍,甚至幾十倍的工夫!

想想這六個月以來我干了些什么,再比較一下在 Google 實(shí)習(xí)的那六個月獨(dú)自從頭做出來的東西,我發(fā)現(xiàn)自己簡直什么也沒有干。這就是我不喜歡“測試驅(qū)動開發(fā)”(TDD)的原因。在 Google 的六個月里,我無視同事對于測試的要求,從無到有的做出了如此精密的系統(tǒng),一個測試都沒有寫照樣做得好,為什么呢?因?yàn)槲业拇a非常的簡單清晰,我隨時(shí)都可以把它們完整的呈現(xiàn)在頭腦里面,從而讓“心靈之眼”可以看到可能出現(xiàn)的錯誤。也許這就是所謂的“邏輯思維”。

對測試過分依賴的人,往往不具有這樣的思維能力。他們不能夠看到代碼最簡單的本質(zhì),所以需要做很多試探,以求達(dá)到“近似解”。為了不至于偏差很多,就寫很多測試,用以捕捉和防止每一次的錯誤。這就像一個初學(xué)畫畫的人,一點(diǎn)一點(diǎn)的描,用橡皮反復(fù)的擦,可總也抓不住事物的精髓。這些人對“錯誤”的記憶能力特別強(qiáng),往往深入的追究一塊代碼是“如何”錯的,“為什么”是錯的,下次如何才能不犯同樣的錯誤。

然而我卻沒法記住之前的代碼是如何錯的,我也不想知道為什么它是錯的,我只記得“正確”的代碼是什么樣子。錯誤的方式有千萬種,可是正確的卻往往只有一個。把腦力浪費(fèi)在記憶錯誤的東西,這就是為什么很多人不能寫出真正優(yōu)美而正確的代碼。我受到的訓(xùn)練讓我可以直接得到正確的結(jié)果,所以測試對于我來說分量沒有那么重。當(dāng)我的代碼需要大量的測試才能確保正確的時(shí)候,那就是它該被推翻重寫的時(shí)候。所以我的代碼往往沒有任何補(bǔ)丁和變通,可以說是無懈可擊。這就像是一個真正會畫畫的人,他閉目沉思,然后一氣呵成。當(dāng)然,優(yōu)美的代碼并不是一蹴而就的,有的代碼被我推翻重來幾十次才最后成功,但我最后的代碼不留下絲毫錯誤的痕跡。所以我覺得,看一個程序員的水平,不要看他留下來多少行代碼,而要看他刪掉了多少行。

我覺得做 Coverity 的工程師真累。這種累不止在于以上的技術(shù)層面的繁瑣,而且在于管理層對工程師的缺乏尊重以及不必要的壓力。這讓我在受到了足夠的“啟發(fā)”之后,開始懷疑是否還有繼續(xù)為它工作的價(jià)值。對于公司管理,以及對于 IT 行業(yè)總體的看法,我還是以后再講吧。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Google
    +關(guān)注

    關(guān)注

    5

    文章

    1789

    瀏覽量

    59047
  • 工程師
    +關(guān)注

    關(guān)注

    59

    文章

    1590

    瀏覽量

    69500
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4900

    瀏覽量

    70751
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    問,成為硬件工程師需要幾只手?#硬件工程師 #YXC晶振 #揚(yáng)興科技 #搞笑

    硬件工程師
    揚(yáng)興科技
    發(fā)布于 :2025年04月25日 17:15:37

    如何成為一名合格的KaihongOS南向驅(qū)動開發(fā)工程師

    如何成為一名合格的南向驅(qū)動開發(fā)工程師 1. 我需要具備哪些方面的知識? KaihongOS南向適配的方向分為:驅(qū)動開發(fā)、內(nèi)核開發(fā)。根據(jù)適配方向劃分,需要掌握的知識技能分別為: 驅(qū)動開發(fā)
    發(fā)表于 04-23 08:02

    如何成為一名合格的KaihongOS北向應(yīng)用開發(fā)工程師

    如何成為一名合格的北向應(yīng)用開發(fā)工程師 快速發(fā)展的軟件開發(fā)領(lǐng)域,北向應(yīng)用開發(fā)工程師個專注于系統(tǒng)級應(yīng)用開發(fā)的高需求職位。 以下是成為
    發(fā)表于 04-23 06:46

    如何成為一名嵌入式軟件工程師?

    如何成為一名嵌入式軟件工程師? 01明確崗位的角色與定位 嵌入式軟件工程師主要負(fù)責(zé)開發(fā)運(yùn)行在特定硬件平臺上的軟件,這些軟件通常與硬件緊密集成,以實(shí)現(xiàn)特定的功能。 不僅需要精通編程語言(如C/C++
    發(fā)表于 04-15 14:37

    招拿捏電子工程師#被AI拿捏了 #電子工程師 #電子電工

    電子工程師
    安泰小課堂
    發(fā)布于 :2025年03月25日 17:30:51

    一名硬件工程師的獨(dú)白:我們?yōu)楹慰傇?amp;quot;用愛發(fā)電"?

    【寫在前面】 ? 互聯(lián)網(wǎng)高薪神話的光環(huán)下,硬件工程師群體的生存現(xiàn)狀卻鮮少被關(guān)注。今天,讓我們走進(jìn)這個"用焊槍雕刻時(shí)光"的群體,聆聽他們最真實(shí)的職業(yè)吶喊。?? 、工作強(qiáng)度:行走在技術(shù)
    的頭像 發(fā)表于 03-17 12:03 ?419次閱讀

    嵌入式軟件工程師就業(yè)好不好?

    ,市場需求大,所以其薪資待遇普遍較高。般來說,北京、上海、深圳等發(fā)達(dá)地區(qū),嵌入式軟件工程師的薪資水平會更高。并且,隨著技術(shù)水平的提高和經(jīng)驗(yàn)的積累,薪資待遇還會不斷提升。 行業(yè)發(fā)展?jié)摿薮?從長遠(yuǎn)來看
    發(fā)表于 02-20 10:19

    月薪 3 萬的嵌入式工程師都在用,串口屏到底神在哪?

    作為一名資深的嵌入式工程師,我深知選擇硬件組件時(shí),性能、可靠性、易用性和成本效益都是至關(guān)重要的考量因素。月薪3萬的嵌入式工程師們之所以傾向于使用串口屏,主要是基于以下幾個方面的考量
    的頭像 發(fā)表于 02-12 10:33 ?666次閱讀
    月薪 3 萬的嵌入式<b class='flag-5'>工程師</b>都在用,串口屏到底神在哪?

    如何成為一名合格的南向驅(qū)動開發(fā)工程師

    內(nèi)核開發(fā) - c,cmake,dts, linux常用命令 以上,如能對某模塊的南向適配研究透徹,自行調(diào)通,積極解決問題。那么對一名kaihongOS的南向驅(qū)動開發(fā)工程師而言,他便是合格的,若
    發(fā)表于 01-10 10:06

    如何成為一名合格的北向應(yīng)用開發(fā)工程師

    快速發(fā)展的軟件開發(fā)領(lǐng)域,北向應(yīng)用開發(fā)工程師個專注于系統(tǒng)級應(yīng)用開發(fā)的高需求職位。 以下是成為一名合格的KaihongOS北向應(yīng)用開發(fā)工程師
    發(fā)表于 01-10 10:00

    Victor Labián Carro:以好奇心成就 RISC-V 職業(yè)成功之路

    將對邏輯的熱情融入RISC-V職業(yè)生涯IT職業(yè)的成功之路通常是由好奇心、奉獻(xiàn)精神和不斷發(fā)展的意愿鋪蓋而成的。VictorLabiánCarro,RVFA,現(xiàn)職為AxeleraAI的客戶工程師,他把
    的頭像 發(fā)表于 09-10 08:08 ?525次閱讀
    Victor Labián Carro:以好奇心成就 RISC-V <b class='flag-5'>職業(yè)</b>成功之路