我是濟南一所大學的一名計算機專業應屆畢業生,自2022年春天開始至畢業,我一直在上海某研究院的遠程實習生,我的崗位類別是:RISC-V 操作系統構建。
非技術圈的朋友可能比較難理解我的工作內容,來打個比方,比如我們要做一道西紅柿炒蛋,雖然菜譜在網上都是公開的,但我們還是要自己買來原材料按照步驟進行加工,才能產出一道成品的菜肴。開源軟件也類似,源代碼都是開源社區貢獻的,但是社區卻沒有提供編譯好的可執行程序。
【資料圖】
我的工作就是從社區下載一些開源庫的源碼,再根據我的專業知識以及源碼說明,把源碼編譯、打包成可供用戶下載即用的可執行程序或安裝包。
作為遠程實習生,又是純粹和數字資料打交道,我的工作是相對自由的。
我的工作單位是研究院,本身的學術色彩就比較濃,所在組的管理模式也是課題組形式。每周一的規劃組會上會確定這周大體的工作內容是什么,做一個簡略一些的規劃,而作為實習生,我具體的任務則會在組會后由我的“小老板”向我下達詳細安排。在確定具體任務后,我就可以自行選定時間地點來完成任務。我一般會按照我的課表安排和個人事務的規劃來統籌地選定每周的某幾天來作為“工作日”,偶爾比較忙的時候可能一天工作幾個小時然后幾天湊出一天來也說不定。
我的學校在濟南市,在一個“典型的”工作日安排中,我會在七點之前起床、洗漱,之后在學校食堂吃個早餐就打車去一家想去的星巴克。一家去膩了就換另一家。八九點鐘的時候店里也一般不會有太多人,我會選一個靠近角落的位置坐下,再等我的咖啡沖好,打開電腦,就可以開始干活了。
我需要跟很多外國工程師討論溝通,達成共識。他們都是在開源社區中具有卓越技術積累和工程能力的大牛,對軟件開發有著深入理解,見解往往也很獨到。和他們爭論,我更大程度上是在學習,學習一些優秀的工程師特質。
有次某個用戶提出了一個需求,希望我們能夠添加一個特定的冷門功能,但這個功能涉及到一些新的依賴項。這個時候一些老外擔心這些依賴項會增加軟件包的復雜性,同時還可能會導致運行環境的不穩定。
我試圖以我的思路來論述這個需求應該如何規劃:為什么我們應該采納這個功能,并解釋了如何通過適當的測試和文檔支持來減輕增加依賴項的風險。其他同事也提出了一些實際的案例和場景,來補充說明新功能的重要性以及它可能帶來潛在好處。有一部分人對我們的觀點提出了支持,然而,為數更多的外國工程師堅持認為,作為基礎軟件包,保持簡潔和穩定性是尤為重要的。而且兩撥人還專門針對我所表達的“軟件的功能性是最應該被重視的”的觀念進行了一番友好和富有成效的大討論。
大家就在郵件列表里吵了好幾天,不過最后彼此之間也終于達成了一個妥協:采納這個功能,但在添加新的依賴項之前,要進行更多的測試和驗證,并提供詳細的文檔來幫助用戶理解和處理潛在的兼容性問題。
說實話這種爭論在列表里比比皆是,來自不同國家地區的工程師們通過郵件來表達彼此不同的思維方式和工作觀念。對于我這樣一個計算機萌新來說,他們的經驗和洞察力真的讓我受益匪淺。
正式的工作其實在下午才真正開始。
“典型”流程就是邊看需要封裝的源代碼邊讀配套文檔,了解清楚代碼的依賴和構建配置,之后就丟去服務器上編譯,有時候在源碼里發現一些小問題也會順手去修正一下。編譯這個活是比較吃時間的,咖啡店提供了一個相對安靜和專注的空間,有時候旁邊還會有對著電腦寫文檔的白領,我就和她們一起加班。
偶爾,我發現有些編譯過程會有點問題,比如某個依賴缺失或者編譯性能離譜地差,大部分時候我都可以獨立搞定,但總有一些邊邊角角的問題我解決不了。
印象很深刻的一次,當時我打包一個大型項目中的某個小模塊,本來是一個砍瓜切菜的小任務,但那天編譯卻一直都不過,而且是很奇怪的代碼未定義錯誤。我回溯了最近一段時間的提交記錄,沒發現有和這個錯誤相關的信息。我又試圖通過代碼報錯的本身入手,發現報錯的未定義結構并不來源于項目本身,而是來源于項目調用的一個子模塊A。
我順藤摸瓜,發現該子模塊的最新版本對接口做了改動,導致項目無法編譯通過。于是我只好對模塊A做降級處理。但是,詭異的是,模塊A降級之后,又一個模塊B開始報錯。升級A后B就安分了,但A又不過,這讓我大呼不解。到這個時候,我已經在這個問題上花費了兩個多小時,身心俱疲。
最終我尋求了老師和同學的幫助,拉了個在線會議。三個人屏幕共享查日志,一番搜尋,最終確定問題在于模塊B看模塊A更新了接口后自己也進行了對應更新,而現在我降級了模塊A,新版本的模塊B自然接口和穿越的A不匹配了。
每周有三四天是我的“工作日”,周末的匯報組會上,我再按照自己提前準備好的匯報材料來展示一下我的工作進展,重點分享一下我在工作過程中遇到的困難和解決方案,之后“小老板”和組里同學再給出彼此的反饋意見,一周的工作到這里就算是正式結束了。
遠程工作可以很方便地與其他同事聯系,共同解決問題,而且這種方式非常高效,在解決問題上和在辦公室相比也幾乎沒什么差別。我的工位也不固定,周圍坐一起的人也不確定,偶爾周末在圖書館會遇到一些高中生做高考題,也有的時候會遇到一些拿一堆報表材料來星巴克加班的中年職場人,更多的則還是在星巴克遇到帶著電腦來寫文字材料的白領。不同的人,會給我帶來不同的工作體驗,我有時候出神,看著身邊也在電腦前敲敲打打的人,也是在看著另外一個可能是來自未來的自己。
不過,當時的我終歸還是個學生,工作地點也是課題組不是項目組,屬于是還沒有完全走出象牙塔的狀態。同學們對我這樣參與“遠程實習”的實習生反應也多有不同,有的同學會覺得工作還不著急,在學校好好備戰考研之類的會更好,畢竟學生時代就這短短幾年;有的同學就認為,本身計算機專業的實踐性質就比較強,學術界和工業界的割裂現象也確實存在,所以早些統籌個人時間來進入工業界探索一下業界的實際樣貌也是很好的一件事;還有同學會覺得實習有工資,雖然不多但對學生來說很夠花了,談戀愛或者出去玩什么的都會寬裕不少,所以一直努力尋找這樣的實習機會。對“工作”,幾乎有多少個不同的學生就會有多少種不同的態度。
我個人則更為偏向上面提到的第二類同學的觀點。從我了解到的有限的業內動態上,也可以看出,計算機行業也確實是一個活力四射的行業,各種新鮮事物層出不窮,我這個“遠程實習”的工作形式就是在疫情中大范圍普及開來的,之后又逐漸滲透到其他行業中,反過來又通過在線會議平臺等方式反哺了業內。
在這么一個注重變化、注重擁抱變化、注重敏感地擁抱變化的行業里,早了解些、多了解些業內狀態還是挺適合我這類重視實踐的學生的。在我個人的人生規劃中,“嘗試新鮮事物”也早就是一個優先級很高的人生指導理念了。
畢業后,我在一家做計算機硬件的公司做CPU 前端設計工程師,我那將近一年半的實習經歷,為我到正式工作提供了基礎:實習的工作算是“擰螺絲”,多了些技術背景,為現在的工作提供了專業技能上的支持。