伯樂訪談之程序員在國外:張偉 – 汽車軟件開發者在德國
本期訪談的主人公是在德國從事汽車軟件開發工作的程序員:張偉。
(張偉在黑森林)
張偉的聯系信息如下:
新浪微博:http://weibo.com/u/1630562695
博客(德文):http://cndelive.blogspot.de
以下是采訪的全文。
伯樂在線:請簡單自我介紹一下
我老家在浙江臺州,目前在德國工作。之前在國內學習軟件工程,2008 年來到德國學習汽車軟件工程專業(碩士),2011 開始在德國一家做汽車軟件公司寫論文后工作至今。期間做過開發工程師,測試工程師,現在要轉向 Program Manager(不是產品經理,還接著寫代碼)。
伯樂在線:能說說 2008 年去德國讀碩士的申請過程和一些要求嗎?
我是在國內讀完本科直接申請碩士的。自己成績中等吧。只要專業對口,來德國讀書申請還是比較容易的。我申請的時候德語還是 DSH 考試,工程類 2 (滿分三分)就可以了,現在是德福了,要至少四個四(滿分五分)吧,口語,聽力,寫作,和語法。
伯樂在線:現在已經移民德國了嗎?
還沒有。我還要一年才到資格。當然,在別的州是已經可以了,我現在所在的州要求時間更長一點。在德國,要交養老保險滿 60 個月,才有資格。移民這塊,基本上大學畢業有工作的年輕人他們非常歡迎。
伯樂在線:你是在校就開始交養老保險并做了準備?
只有有工作才可以交,我讀書的時候拿的是 DAAD 的獎學金,第一年沒積極去學校找工作。最后是從第二年去系里工作,之后實習,論文都算工作了。應該早做打算的,當時也不知道。
伯樂在線:你去德國讀書時,是不是已經有了移民的打算?
應該是到了德國才有這個念頭,我之前一直準備學成回國。當然現在我還是計劃會回國工作幾年。
伯樂在線:為什么之前沒有計劃移民,到了德國才有了念頭?
我覺得我的教授和老板,大概跟我父輩年齡差不多,他們的學識修為讓我更愿意在他們的指導下工作。總體上,我來德國的時候很浮躁,一心想著怎么掙錢,等等。經過老板們不停地提醒,我覺得現在自己才開始靜下來。另外就是這里的生活挺適合我,在這里,我沒覺得自己是外國人。
伯樂在線:在德國沒有覺得自己是外國人,你怎么體會到的?
我覺得德國給了我一個很公平的機會,我在學習工作當中沒有受到優待,也沒有受到歧視。學校和公司都很信任我。在工作學習之外的休閑活動也是。在 工作中也建立了一些關系,圈子。也不需要什么背景。對德國這個國家,我了解以后也比較認同,能讓一個接受了幾百歐元招待的總統下臺,或者是博士論文引用沒 寫清楚的國防部長走人,這樣的國家差不到哪里去。當然我對中國也非常有信心,我們有這么多聰明的人,有這么多勤奮的人,早晚我們也會非常出色。
伯樂在線:那為什么還有計劃回國工作幾年呢?
首先,中國汽車行業跟德國汽車行業的差距對我個人是一個很好的機會。 雖然現在交流很多、合作很多,但是給中國行業能力的提升并沒有帶來幫助。現在只不過把市場讓給了別人。我作為在德國行業工作,同時和中國行業有很持續交流 的從業者,可以把問題看的更清楚,更知道該怎么做。
另外,我覺得在中國也應該開始設置汽車軟件工程這個專業,如何更好的培養更多的人才,這實際上是對這個行業發展最重要的。如果可能的話,我也能出點力。
伯樂在線:請簡單介紹一下在德國讀碩士和實習的情況
德國課程設置是兩年。我也是基本一年半把所有考試考完了。之后半年在另外一家公司實習,在目前的公司論文寫了半年。實習跟最后的論文沒有太大的 本質區別,但實習是必須的。不過這兩年半應該算是我這人生中最用功的兩年半吧。如果不是之前已經在本科在同一個學校讀,并且本科就修了碩士的課程,兩年讀 完是不可能的。我認識唯一一個特例,是一個德國同學,在同一個學校讀的本科,在本科時候就修了碩士的課程,他是兩年畢業。
伯樂在線:參加工作后,一直都在現在這家公司嗎?
是的。我沒有打算挪窩,應該說在德國,在汽車軟件,我們肯定是行業翹楚。當然,作為供應商,在行業外沒有什么人知道我們。德國人跳槽頻率比較低。如果三年內跳槽,下一個雇主肯定會問你 “為什么三年就跳槽了”。
伯樂在線:你是如何進入現在這家公司工作的?
我在大學用過這家公司的產品,然后覺得這公司東西做的不錯,就找到他們人事 Email 地址,發了個簡歷過去,說想去寫論文,然后就成了。我在寫論文的時候投的幾家公司都是因為我知道他們的產品。最后都成了。
伯樂在線:面試的環節可以簡單介紹一下嗎?
面試進行了一個小時,首先談了我對汽車軟件架構的認識、我做的項目和學校,然后是汽車總線的基本知識。 最后給了我一段C程序,讓我說說運行時的狀態是怎樣的,(寄存器存取,堆棧操作等)基本就是匯編描述一下。
伯樂在線:有筆試這樣的環節嗎?
因為我最后是內部招聘就寫論文后直接被部門接收了,所以沒有筆試。但是正常流程,有筆試的,基本上是自動機實現啊,考一些C的算法。
伯樂在線:在汽車軟件相關的專業,匯編是不是比重很大?
C 語言比重很大,本身沒有匯編語言的課程,但是在計算機體系結構這門課里,有必須用匯編完成的作業。德國大學不專門教授編程語言。但是要求作業用相關語言完成。因為我們編程比較靠近硬件。所以匯編和C非常重要。
伯樂在線:請介紹一下你現在做的汽車軟件
剛開始自己專業學習的時候,我也簡單地把在汽車里電子控制單元里跑的所有嵌入式代碼認定為汽車軟件(狹義上的汽車軟件)。隨著對這個行業的逐漸 了解才發現除此之外還有很多在電腦上跑的軟件也應該歸為汽車軟件。比如用來對在電子控制單元中程序進行測量,測試,以及標定,診斷的軟件,比如用來設計汽 車軟件整體架構的軟件。這類軟件的利潤占到整個汽車軟件行業非常大的一部分(廣義上的汽車軟件)。
我自己工作的部門主要負責在電子控制器中跑的嵌入式代碼(狹義的汽車軟件)的開發。當然在開發過程中需要在電腦上跑的汽車軟件(廣義上的汽車軟件)的輔助。 (接下來提到的汽車軟件均為狹義上的汽車軟件)
伯樂在線:你現在的工作內容有哪些?
我的工作內容可以分為兩塊:開發和測試。先說說作為開發工程師吧。
一方面汽車嵌入式軟件作為提供特定服務的軟件,其基礎功能以及接口都已經被標準化了。這里包括其操作系統以及其他功能模塊。作為開發工程師在這一塊并沒有多大的自主權。
另一方面因為汽車嵌入式軟件本身有硬實時性的要求以及受存儲空間,芯片計算能力限制的特點(是的,十六位的芯片在汽車行業還在被使用,因為成本 控制,八位的芯片也有)除此之外還有嚴格代碼可靠性的要求(汽車軟件運行時錯誤會死人的,看看豐田凱美瑞就知道了),所以在開發中對代碼質量的要求非常 高。 比如說到底是 for 循環是應該用 for (i=0; i < X; i++) 還是 for (i=X; i !=0; i – - ) 需要在匯編層面加以考慮。
編寫C代碼除了有編碼風格規定,還有 MISRA-C 等標準,很多C的結構是不允許被使用的,如果一定要用一定要在代碼中添加注釋和相關的測試用例證明這么用是沒有問題的。基本用的是一個C語言的真子集。公 司的大概四十到五十的資深工程師腦子是可以當編譯器前端使用的,看到C就能翻成匯編。我也有想達到這個境界的沖動。(但是還沒有什么具體行動)
另外作為開發工程師還有很大一部分時間在寫代碼生成器。因為汽車平臺化概念的引入很多車型共用嵌入式代碼。這些車型對功能要求大體上相同,但是 部分有差別。作為汽車軟件供應商的對策就是把基本功能寫成靜態代碼,把差異分抽象出來,讓他們作為動態代碼存在,用動態代碼控制靜態代碼的具體執行時行 為。最終車廠可以根據自己的要求通過配置工具配置控制參數,然后讓代碼生成器生成代碼,最后編譯鏈接動態代碼和靜態代碼。 這些主要是用 EMF(Eclipse Modell Framework)下的代碼生成器框架,一般用 Java 衍生的特殊語言編程。
除此之外其余大部分工作就是對自己負責的模塊和代碼生成器進行測試了。因為汽車軟件標準已經把抽象做的非常好,除了操作系統,和直接操作寄存器控制 ECU 硬件模塊的軟件模塊需要在 ECU 上做測試,其他可以通過 stubs 在電腦上直接進行模塊測試。
聽起來以上的工作非常有印度的感覺,為什么現在還在德國呢,原因一,如果按照標準來開發出來的汽車軟件是肯定不能使用的,還有很多內容標準并沒 有規定也沒法規定。終究其原因,汽車軟件更像是一個系統工程,首先需要對硬件特性的非常好的理解,其次要對汽車上層功能應用有非常好的了解才能把代碼寫 好。這兩點都是印度工程師缺少的。原因二,國際標準雖說是英語寫的,但是由于持筆的大多為德國工程師。所以標準里流露著很多德語式的句式,要加重了其他國 家工程師理解標準的困難。原因三,其他國家缺少這么多汽車軟件工程師聚集在一起的效應,定期的研討班,workshop,研討會等。
工作的關于抽象概念幾點感悟。
- UML 圖非常重要,第一幫助自己理清思路,第二方便于人交流,一定要畫的標準避免誤解。
- 形式表達 (Formal Specification)在系統設計中非常重要。這種表達最準確,最能夠避免誤解。
- 命題邏輯在測試用例設計以及功能 Defensive Programming 上非常有用。
伯樂在線:你提到的“基礎功能以及接口都已經被標準化”,這個標準化的工作是哪些組織在主導?
德國的車廠和一級供應商, 博世和大陸一般先在技術前期階段成立一個技術聯盟,當技術已經成熟到一定階段,他們開始在 ISO 標準上來推行這些技術。這時候 Toyota, GM, Ford 開始進入。 標準化工作基本上就是這些人在推,德國車廠之間的技術合作是非常緊密的。可能他們在產品上競爭非常激烈。 到目前為止,德國主導了大多數汽車行業標準的制 定。因為人員流動和技術聯盟,一級供應商交流。德國整體汽車工業維持著一個較高的水平,沒有誰特別技術牛。基本上你有 ESP,我也有。可能時間上差個一年兩年。
總之,這些標準是由企業組成的組織在定義,不是政府機構。但是德國聯邦政府資助大學的非常前期的研究。
伯樂在線:如你所介紹 “汽車軟件有嚴格代碼可靠性的要求”,那么,你們公司通過什么機制來確保代碼的可靠性呢?比如:如何設計測試用例 Review,代碼檢測工具,產品上線測試,軟件質量問責(假設因軟件質量出了事故,這其中會追究企業的責任,最后牽涉到開發者嗎?)
本身測試用例,和 review 應該和普通程序沒有什么特別之處,review 會檢查特別的編程標準有沒有遵循,如果違反的話有沒有給出理由。
對運行時錯誤,我們用在航空很早就開始用的 Polyspace 用靜態方法檢測運行時錯誤。 還有要進行最壞執行時間檢測(Worst case execution time analysis)。 包括對進行測試開發的工具都有可靠性評估的要求。具體在行業里有標準(功能安全標準 ISO26262)
關于責任問題,1,首先我們為自己的代碼買了保險。第二,德國有句很著名的話:“犯錯誤是人性”。 如果真有很重大的錯誤出現,在德國是認為我們的流程有問題,我們整體機制有問題,絕對不會把責任推給某一個人。
伯樂在線:為代碼買保險,德國的保險公司還有這樣的業務?
是的。
伯樂在線:請接著講講測試這塊的工作內容
因為汽車嵌入式軟件,input 沒有鍵盤,output 沒有顯示器,所以唯一途徑就是通過通訊的接口用電腦把測試的 stimuli 傳進去,把狀態和數據傳輸出來。同時考慮到一個電子控制器在現實中是連接著很多其他電子控制器的,這些電子控制器也需要通過電腦來模擬。所以整個測試框架 是一個分布式系統。考慮到汽車軟件的實時性要求,就是一個實時性分布式系統。所以這樣的一個測試系統的建立是非常復雜的特別是碰到硬實時的通信總線系統如 flexray。
作為測試工程師需要對不同的功能模塊設計不同的分布式系統策略,建立測試框架。因為要應付不同的硬件平臺,所以測試框架代碼也是通過代碼生成器來實現的。在設計完框架寫成C代碼后,要根據C代碼寫出相應的代碼生成器。
除此之外,作為測試工程師的主要工作當然是理解軟件功能,在軟件層面上寫測試用例,測試用例的代碼也是通過代碼生成器生成的,測試代碼包括在被 測試的 ECU 上的C代碼,和電腦上軟件用的代碼。這部分用了 DSL(domain specific language)的技術。
人都說測試是份輕松的工作,我覺得測試是我工作以來遇到最有挑戰性的工作。特別是牽扯到分布式系統實時策略的設計以及測試用例的設計。第一點是 因為實時性分布式系統設計本身諸多挑戰。如時間協同。第二點是因為我們的測試不可能做到 modified decision condition coverage 百分之百,因為客戶有很多配置的可能性,我們不可能把這些配置的可能性窮盡。所以每一個測試的用例都要非常好的理由,要一直問自己為什么要寫這個測試用例 而不是別的。
對這兩部分工作還有個感觸就是,作為車廠的軟件供應商,我們最大的目標就是要滿足車廠在汽車整個生命周期對軟件的各種要求。所以開發的汽車嵌入式的很多功能是在汽車制造和汽車售后而不是汽車最終用戶駕駛時用到的。
在這個行業中,德國應該是比較領先的,大部分的標準也都是德國制定的,全世界所有車里的汽車嵌入式軟件或多或少都是德國制造。
伯樂在線:因為你的工作涉及到開發與測試,能不能介紹一下你所在的汽車軟件公司的開發和測試團隊的組織結構?
我是在不同時期做的開發和測試崗位,前一年半是開發,后一年是測試。 和別的軟件公司沒有太大的區別,測試本身分為 Module Test, Integration Test 和 System Test。作為開發工程師的話,需要做前兩者,作為測試工程師的話進行 System Test。 開發一般以 feature 為單位,一組 6 到 7 個人,測試組一共也只有七個人。當然大部分的測試有已經自動化了,只有 Integration Test 還沒有完全自動化,
伯樂在線:前一年半是開發,后一年是測試。這種輪崗有什么特別目的?
我們內部的這種流動很頻繁,第一,對公司內部信息流動非常有好出,因為各個部門是要協同工作的,大會小會并不能幫助我們真正理解別的部門真正在 干什么。 第二,各個部門有自己的強項,這種流動給新的 team 帶來新的 know-how。和新的理念。第三,同事之間的聯系比以前更緊密。第四,如果一個人跳槽了的話,總體上都有人可以挺上。最后,對我們員工來說,不斷有新 的挑戰,我是我到現在還留在這個公司最大的原因。
伯樂在線:開發和測試的輪崗是自愿嗎?據你了解,其他的德國企業很多也這樣操作嗎?另外,如何讓不懂測試的開發和不懂開發的測試在第一次換崗時,順利過渡?
有六個月的 Mentor 期。當然這個前提首先是員工素質。我們的同事應該在我看是德國優秀的年輕人,無論是技術上和管理上(好大學,好分數)。 大家基本上都在兩到三個月內迅速上手,到六個月基本上一到兩個交給的項目就完成了。德國人還是很敬業的。
伯樂在線:你們的產品上線(配備你們開發的軟件的汽車出售)后,有沒有出現過問題?
到現在還沒有出現過問題。一般汽車開發都有四到五年,在正式開始生產之前都經過很多測試。這個問題到現在沒有出現過,上了汽車出現問題。我們的良好聲譽也是建立在這一點上的。
伯樂在線:一輛汽車所涉及的軟件會由很多軟件供應商來開發,雖然有標準來約束,但你們在集成時,是不是仍然會遇到彼此兼容性的問題?
首先,在一個 ECU 單元上的軟件來自于一個到兩個供應商,數量相對較少,第二保證車載網絡上的通訊,所有 ECU 的底層軟件一般會選擇同一個廠商的。 這里我說底層軟件指 OS 和通訊模塊。標準已經規定了接口和功能,之后出現的兼容問題一般就由一個 ECU 上軟件供應商一般兩個,互相協同解決。一般通過多次 Delivery。
伯樂在線:能介紹一下工作福利與假期嗎?
軟件公司的標配,最好的咖啡機,無限量的咖啡以及各種飲料,幾乎每天的免費早餐,半價中餐。兩到三個人一個辦公室,很多各種型號的會議室,隨時 頭腦風暴。可以養花,沒人帶寵物不知道可不可以。因為 Open Door Policy。辦公室要么沒有門要么就是開著。大家的大門都必須打開,包括最大老板的。當然,這是公司內部的交流。工程師至上,這里,一切為工程師服務, 原來四個大老板就是編程的,現在還在一直編程。一年一次集體旅游,要么去奧地利,要么去瑞士。還成。工作時間一周四十小時,但是什么時候來,什么時候走隨 意。員工穿著打扮很隨意,拖鞋,光腳的,褲衩,唯一一次就是聯邦勞動部的女部長來視察,前一天收到一封電子郵件,希望大家克制一下。另外還有免費德語,英 語課程等。
公司有各種運動隊,足球,長跑,樂隊,攀巖,跆拳道,摩托車。干啥的都有幾個。公司為每人以及家屬還買了一份養老保險,反正待滿五年就可以兌 現。應為德國本來就全民養老保險,所以也沒注意。 公司有自己的幼兒園。比 Google 可能還差那么一點,但是在汽車行業已經不錯了。公司工作語言是德語。
關于德國的休假,國內各種眾說紛紜,我就說說斯圖加特的情況。(由于各聯邦州法定假日不同,差最多兩三天,所以總體上其他州差不離). 斯圖加特所在的聯邦州法定假日十二天,加上帶薪的假期三十天,一共一年是四十二天。但是由于我們加班時間可以折成假日,一年我基本上還可以休上十五到二十 天的樣子。基本上六十天左右。感覺一年有兩個月在放羊。
德國汽車行業的總體薪酬比醫生律師和金融行業低,高于其他所有行業。中等偏上,但是德國是個福利國家,稅收很高。
伯樂在線:你平常的工作時間安排是怎樣的?
跟很多同事一樣,早上五點起床,洗漱坐輕軌去上班,路上想想自己今天的任務。六點十分到辦公室一直到十點開始寫代碼,(十點開郵箱,寫寫文檔, 回回郵件,看看 blog 到十一點一刻)接下來就是每天的 Scrum Meeting,大家聚在廚房,說說昨天干了什么,今天要干什么,有什么困難,或者有什么是一起合作的同事需要注意的。(我們也 Agile)。
吃完中飯后,開始捧著咖啡跟同事聊一會兒。如果有需求,開始去跟同事一起調試程序。一直到三點。然后接著咖啡休息到三點半。三點半到六點開始接著寫代碼,這時候同事基本走了。效率也很高。
伯樂在線:你們公司的同事普遍都很早到公司嗎?在德國你們公司算是特例?另外,為什么都選擇這么早?
我們組的同事都挺早的,我覺得早起應該是算是德國這個國家的一個特性吧。冬天早上六點,公車和等火車的人好多。當然也有非常晚,十點到公司的。 但是,銀行,保險公司都是九點才開門。早上六點一刻到十點,效率最高。寫代碼,想問題。晚上十一點基本睡覺了。下午一般有個會,同事來找討論個問題,沒辦 法專心工作。
伯樂在線:請介紹一下德國 IT 技術圈的氛圍
首先德國的專業活動劃分非常細致,沒有很一般的概括性技術沙龍,比如說汽車軟件工程有一個專門的題目叫做虛擬安全。(Virtual Safty). 在這個領域工作的工業界人士和學生,大學教席的研究人員就會每年定點聚在一起兩三天,進行專業的 Seminar,和交流和合作。一般這是接觸同行,發展人脈,交流技術的好機會。 然后就是專業標準制定的例會。在這些會議上同行之間就對已成熟的技術標準化。
前者主要著重在研發,后者主要著眼成熟技術。 前者多由大學牽頭組織,后者當然是工業界的活動。 德國大學的教授必須有在工業界工作的經歷才能擔當教席教授,因此有工業界的人脈,對工業界的需求也非常了解,大學和工業界的合作非常緊密。
這些都是計算在工作時間內的。德國人工作時間之外有很豐富的業余生活,除興趣愛好外一般不會用私人時間參加專業活動。我的印象是,專業組織活動 在德國嚴格按照流程,高效,效果可控,持續性非常有保障。 很多標準制定會議里標準化的技術就脫胎于研發時期的 Seminar,制定標準的很多就是參加過前期 seminar 的人,專業化非常強。一般參加會議的人員回到公司都需要做一個演講,把收獲傳遞給所在的單位。除此之外,德國是世界上專業雜志最發達的國家,僅僅是汽車軟 件,在德國就有十多種專業期刊。這也是交流的很好的途徑。
在汽車軟件行業里德國沒有像美國以及中國有很多對某個專業非常狂熱以及充滿創業激情的人。他們對工作非常認真負責充滿熱情,但是僅限于工作的時 間。而且德國的年輕人更向往有保障的職業生活。這點德國明鏡雜志還專門出了一期討論德國年輕人只愿意在愛好上冒險但不愿意在職業上冒險的問題。可能互聯網 行業例外吧。德國有創業精神的互聯網行業的年輕人去硅谷的很多,比如說 Google Car 的負責人,Udacity 的創始人就是德國人,在波恩讀的大學。
伯樂在線:請簡單介紹一下在德國的衣食住行
德國的生活成本很底,占到工資比例比中國低的多,我生活在斯圖加特,這里房價也便宜,使用面積七十平的房子加上稅收什么的一百二三十萬人民幣 吧。如果是兩個人都工作的話,五年可以還完貸款在不影響生活水平的前提下,同事們一般都是剛工作買個套間,四十歲的時候住進獨立房子。作為一個工程師在德 國絕對可以安居樂業。在不影響每年旅游的情況下。 但是不是非常有錢的話就不要去慕尼黑,法蘭克福這種城市,那里的房價就高的嚇人了。不過跟帝都魔都還是沒法比的。
伯樂在線:從 08 年到現在,你在德國已經過6、7 個年頭,能分享一下在德國的最大收獲嗎?
我覺得對我影響最大的就是三句話,第一句是我的講席教授對我說的一句話,一步一步做事 Schritt fuer Schritt。我時刻銘記在心里。第二句就是我現在的老板對我說的一句話。我們不能為了通過標準而通過標準,我們要把自己的流程做到足夠好,它至少要通 過標準評估。最后一句就是我們公司最大的老板說過一句話。銷售數據很漂亮,這很好也很重要,但是我想知道的是,我們今年的產品和服務的改進在哪里。我們哪 里做的還不夠。只要我們的產品和服務做的足夠好,銷售和盈利會上去的。這三句話反應了德國這個民族的特性。在一些原則問題上堅決不妥協,不實用主義。這是 德國人很多時候顯得不夠圓滑的原因。但是這是一個非常正確的做事態度。在汽車工業界這種個性貫穿從供應商到整車廠。這是一個德國車值得信賴的最根本的原 因。
伯樂在線:謝謝張偉騰出假期,和我們分享你在德國的故事。保持聯系,再見。
恩,保持聯系。再見
本文鏈接: http://blog.jobbole.com/57005/