本期訪談的主人公是在德國從事汽車軟體開發工作的程式設計師:張偉。
張偉的聯絡資訊如下:
新浪微博: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。我時刻銘記在心裡。第二句就是我現在的老闆對我說的一句話。我們不能為了通過標準而通過標準,我們要把自己的流程做到足夠好,它至少要通過標準評估。最後一句就是我們公司最大的老闆說過一句話。銷售資料很漂亮,這很好也很重要,但是我想知道的是,我們今年的產品和服務的改進在哪裡。我們哪裡做的還不夠。只要我們的產品和服務做的足夠好,銷售和盈利會上去的。這三句話反應了德國這個民族的特性。在一些原則問題上堅決不妥協,不實用主義。這是德國人很多時候顯得不夠圓滑的原因。但是這是一個非常正確的做事態度。在汽車工業界這種個性貫穿從供應商到整車廠。這是一個德國車值得信賴的最根本的原因。
伯樂線上:謝謝張偉騰出假期,和我們分享你在德國的故事。保持聯絡,再見。
恩,保持聯絡。再見
////////////////////////////////////////
如果你有意向通過我們的採訪欄目分享你的故事,請郵件聯絡:editor@jobbole.com