The Performance 星球茶話會 - 第一期

語言: CN / TW / HK

2022.3.25 ,週五晚上九點,The Performance 知識星球(付費版本)舉辦了第一次線上茶話會,3 位星球主理人 + 5 位星球嘉賓,50 多位球友參加,非常感謝各位!

第一次茶話會沒有預設主題,預計 1 個小時就可以結束,結果聊了 2 個半小時,光是主理人和嘉賓的個人介紹就花了一個小時。平時大家在羣裏和星球裏交流很多,但是通過語音在線交流還是第一次,再者大家的公司基本上涵蓋了 Android 上下游:既有 App 大廠的大佬,也有一線手機廠商的系統大咖,也有芯片公司和造車新勢力的資深專家。所以在每個人自我介紹的時候,會聊一些公司相關的東西,再發散一下,其他人再問一些問題,時間就過去了。

後續會不定期舉辦星球茶話會,主題會更加明確,也會邀請更多嘉賓來一起聊聊,不侷限於技術,歡迎大家多多參與和提問。考慮到隱私問題,

本次茶話會沒有錄屏,下面的內容也不會涉及到各位的隱私,文字稿是根據聊天內容部分還原的。

關於職業發展

領域的應屆生真的被龐大的知識體系壓的有點喘不過氣

  1. 改變心態 :學校跟專業領域是不一樣的。學校是有課本,學完一門課就算結業了。從事專業事項的時候,兩個不一樣,而且很不一樣。
  2. 從手邊的問題開始學習 :把工作中遇到的不懂的問題弄懂,做到 100 分甚至 110 分,平時儲備自己不具備的知識。對於新人來説,把工作做好有很多好處。一是增加經驗,二是獲得更多學習與接觸新東西的機會。切忌主業沒做好,做另外一個方向,除非你確定目前的主業不適合自己幹。
  3. 面向解決問題編程 :工作中很重要的一個技能就是解決問題,老闆發錢就是讓你解決問題的。掌握好度,以經濟學來説就是控制好邊際收益,投入與產出應最大化是比較理想的情況。
  4. 掌握學習的方法和技巧 :爬山的時候直接看山頂,更讓人容易放棄。更好的方式是, 頭朝下一步一步走,偶爾看看地圖是否走錯,或者走着走着發現更適合自己的路。

剛從 App 開發轉到安卓系統性能優化的小白

  1. 跟蹤公司的項目走 :如果有人帶那就好,跟着公司項目走,這是最快的。
  2. 自驅力 :如果願意平時學習,會的多了爭取到的機會也多一些。還是那個觀點,對於新人來説,把手頭工作做好的前提下努力學習跟主業相關的新知識。當你做手頭工作的時候你的主觀能動性會變強、周邊同事與領導也會支持你,而且給你的獎勵也是不錯的。
  3. 不要給自己設限 :知識都是融會貫通的,不要把自己侷限在自己的一畝三分地,尤其是做性能的,App、Framework、Kernel、Hardware 這些,都可以去看去學習。努力使自己處於「知道自己不知道」的狀態,最糟糕的是「不知道自己不知道」還覺得優化沒啥可做,從經驗與常識來看,這都是錯誤的。
  4. 知識體系化 :性能優化涉及到的知識非常廣,平時分析和解決問題的時候,要多看代碼、多記錄、總結和歸納,把學到的知識體系化,不要想着一蹴而就,要厚積薄發。
  5. 利用好現有的資源 :跟着星球內容、博客內容、大廠的優秀文章這些學習,多提問,不管有多初級。

關於提問

  1. 星球是一個很好的平台,很多讓你困惑的問題別人也經歷過。但是你要利用好他的前提是能問出準確的問題。如果問問題,是個技術活。
  2. 可以參考這篇文章: 到底如何提問?https://mp.weixin.qq.com/s/l_Iz5pZ5yXhBAoPzNi4m-Q
    • 決定探討、思考、回答的質量和效率。「提出好的問題已經解決了問題的一半」,説得沒什麼科學依據,但也不妨理解好問題的重要性。
    • 決定做事方向。曾經有人問愛因斯坦:「如果您有一個小時來拯救世界,您將如何使用?」他回答説:「我將花 55 分鐘確定問題,然後花 5 分鐘解決問題。」
    • 提問是認識世界和人的橋樑。好問題能激發優秀者的教學慾望,將寶貴信息傾囊相授。
    • 其實可以從一個人提問的能力來判斷其段位。就像楊瀾説的,「一個人的提問力,彰顯在與外界互動質量的高低。」
  3. 儘量使用 Google 來搜索答案,百度和 Google 的答案差異很大。答案不區分中文資料和英文資料,能解決疑惑就是好資料,值得保存和分享(到星球或者星球微信羣)。
  4. 需要提供日誌分析問題時
    • 如果涉及到敏感內容,比如 Systrace 中涉及到敏感信息,可以使用文本軟件,比如 VSCode 打開 Systrace 文件,一鍵將敏感信息(比如 package name)替換。
    • Log 中如果涉密,儘量還是不要發出來。
    • 如果是單獨發給三個主理人,那麼不脱敏也無所謂,我們承諾不會公開這些內容,只會做分析使用。
  5. 一個好的閉環:大傢伙提問 -> 一起分析原因 -> 嘗試各種方法解決 -> 通過數據驗證有效果 -> 把結果分享給大家。

關於面試

有時候需要出去跟友商、新賽道的人溝通下,可以看看外部環境都在發生怎樣的變化。首要目的不是為了跳槽(如果有好機會,跳也無妨),而是為了讓自己在人力資源市場上有比較高的競爭力。

這裏首先要區分職業與工作的區別。我是軟件工程師,這是我的職業。我在 A 工作任職負責某個模塊,這是我的工作。這兩個是不一樣的,如果你能把兩者區分開(前提是能區分得開),那在擇業、面對公司變化的時候都能從容應對。

最理想情況下,應該追求自己喜歡的職業,因為它伴隨你絕大部分時間,如果這個職業本身不讓你感到興奮,你不太可能做出比較好的成績,進而無法獲得比較高的回報。

遇到好的工作,那就看天意了。這很複雜,與很多很多因素有關係。當你遇到面試不順利,只能説這個工作不適合你,沒有緣分,無法進一步説明更多的事情。

關於公司環境

不同的公司在不同的行業賽道、競爭格局上所採用的策略是不一樣的。微觀上,你的部門領導的風格以及同事們的結構,都影響到了你具體做事的環境。不同環境所追求的「回報最優值」是不一樣的。

有的是需要你做到行業 5%,得到組織認可。有的是能把問題搞定就行而不關心如何搞定的,得到組織認可。

要麼直接硬剛這種環境,按照你認為對的方式行事,要麼就適應它。無論選擇哪種,要知道局面是什麼局面,而不是遇到與自己想象不一樣的時候要麼懷疑自己,要麼以為這個世界就是這樣。

關於學習新技術

對於優化業務來説,它是有底層邏輯可尋的。而這些底層邏輯遇到不同的技術棧、不同的局面的時候會藏的比較深。平時學習中,要努力找出這種底層不變的東西,將可變的東西套進去,一是增強對新技術的判斷力,二是可以舉一反三提出更進一步的優化方案。

不要在新技術的表面上遊蕩,一是自己覺得累,二是這沒啥意義。

優化做到一定深度,肯定是往底層走。比如編譯器、硬件特性,甚至硬件整合。因為這些東西直接決定了程序的速度,所以是繞不開的一道坎。

關於 GPU

  • 講 GPU 架構相關 :下面是一些 PDF,各時代、各廠商的 GPU 架構都不一樣,當然也有相似之處,建議都看看。初學 GPU 架構的人會遇到很多專業名詞,遇到了不懂的詞要去搜索,然後弄懂,會有文章介紹,看完後會更加拓展你的視野,發現新的一片天地。
    1. GPU Architectures
    2. Introdution to GPU architecture
    3. Introduction to Modern GPU Architecture
    4. Graphics and Computing GPUs
    5. GPU Architecture and Function
  • 講 GPU 架構相關的書,幾乎沒啥書
    • Mobile 3D Graphics SoC From Algorithm to Chip 這本書網上只有付費的,免費的 PDF 可以在我們星球上搜。
  • 講 GPU 相關的博客,很多我找不到了,就列舉了一些我能找到的
    1. 深入 GPU 硬件架構及運行機制 - 0 嚮往 0 - 博客園 ,這個論壇講的內容比較成體系,作者面向的讀者應該是遊戲開發的人羣,不過學習圖形的人都可以看看。
    2. Tile Based 架構下的性能調校 ,關於 Tile base 如果性能調優。 廠商一般都沒有 OpenGL 實現庫源碼,如果又對源碼感興趣,可以下載下面兩個庫代碼看
    3. 谷歌的 swiftshader,在谷歌 android 源碼根目錄 external/swiftshader 下,一個完全用 CPU 實現的 OpenGL 3.0 的版本,代碼可讀性非常高,可以幫助大家理解 OpenGL 的各種原如:狀態機、資源管理、API 實現等。
    4. Mesa 3D ,一個開源的圖形驅動庫,網上有一些文檔介紹可以搜搜。
  • 如果沒有圖形開發經驗,想學習 Vulkan 開發個人推薦先學習 OpenGL :因為 GPU 底層原理和機制都一樣,學習了 OpenGL 入門 Vulkan 會更加簡單,因為 Vulkan API 更加底層如果直接學習 Vulkan 估計會比較困難。如果有了 OpenGL 開發基礎,想學 Vulkan,我分享一下我的學習之路(可能不是最優的,大家參考一下即可):
    1. Vulkan Tutoria l 學習最簡單的 Vulkan 例子,如:如何繪製一個三角形。
    2. 《Vulkan Programming Guide》By Graham Sellers and John Kessenich,網上有 PDF,也有中文版,這本是官方出版的書,一本沒有感情介紹 Vulkan API 的書,比較赤裸裸的介紹 API,幾乎不講原理,我學習它的目的是要熟悉 Vulkan 的 API。
    3. 《Vulkan 學習指南》作者帕敏德·辛格,也是一本入門的書,我是微信讀書看的中文版,不過翻譯得很一般,能看英文的儘量看原版,這本書比較注重渲染的流程和原理的講解,不過 API 的介紹不全,需要配合《Vulkan Programming Guide》一起看。
    4. 看了入門的書,那就要動手寫代碼了,所以我推薦大家看一本用 Vulkan 來介紹遊戲開發的書,我個人看的吳亞峯的《Vulkan 開發實踐指南》,這本書個人覺得寫的很一般,我看它的主要原因是,我大學的時候看過這本書 OpenGL 版本的,這本書基本就是 OpenGL 版本直譯過來,講的比較冰冷。
  • 為什麼都在推 Vulkan,Vulkan 比 OpenGL 有什麼優勢?可以看
    • 蘋果開發官網的 Bringing OpenGL Apps to Metal 視頻,Metal 和 Vulkan API 基本一樣,目的也是一樣,都是來自 AMD 的 Mantle,把視頻中 Metal 當做 Vulkan 就可以了
    • 上面書中《Vulkan 學習指南》作者帕敏德·辛格,開編就有講 OpenGL 和 Vulkan 差異

最後就是: 學習圖形開發的人一定要沉得住氣耐得住寂寞,多看書多練習,不然很難學得精通,這是一個長期的過程,不是看幾本書就能精通的。學習 GPU 架構的人,國內基本沒有一家像樣的 GPU 供應商,GPU 方面資料會很少,所以一定要多到外網去收集學習資料,可以多用 GPU 調試工具調試去分析應用程序,去了解 GPU 內部的 Counters,如 DS5 Streamline、Snapdragon Profiler 等,另外在沒有很全面的學習資料的前提下,去學習一門更加底層的圖形開發技術對學習和了解 GPU 架構也很重要,如 Vulkan,這會有助於自頂而下的去了解 GPU 內部的工作原理

關於提到的文章、書

文章:十年創業者萬字長文分享招人

文章地址: https://presence.feishu.cn/docs/doccn71hTTKbaRGF8RvD2XzLJEK,裏面列舉了作者總結的 S、A、B、C 類人才,大家可以對照一下自己做事的方式,看看更高級別的人才是怎麼做事的

書籍:程序員的自我修養 by 俞甲子 / 石凡 / 潘愛民

豆瓣地址: https://book.douban.com/subject/3652388/

這本書主要介紹系統軟件的運行機制和原理,涉及在 Windows 和 Linux 兩個系統平台上,一個應用程序在編譯、鏈接和運行時刻所發生的各種事項,包括:代碼指令是如何保存的,庫文件如何與應用程序代碼靜態鏈接,應用程序如何被裝載到內存中並開始運行,動態鏈接如何實現,C/C++運行庫的工作原理,以及操作系統提供的系統服務是如何被調用的。每個技術專題都配備了大量圖、表和代碼實例,力求將複雜的機制以簡潔的形式表達出來。本書最後還提供了一個小巧且跨平台的 C/C++運行庫 MiniCRT,綜合展示了與運行庫相關的各種技術。

對裝載、鏈接和庫進行了深入淺出的剖析,並且輔以大量的例子和圖表,可以作為計算機軟件專業和其他相關專業大學本科高年級學生深入學習系統軟件的參考書。同時,還可作為各行業從事軟件開發的工程師、研究人員以及其他對系統軟件實現機制和技術感興趣者的自學教材。

書籍:軟件調試(第 2 版) by 張銀奎

本書堪稱是軟件調試的“百科全書”。作者圍繞軟件調試的“生態”系統(ecosystem)、異常(exception)和調試器 3 條主線,介紹軟件調試的相關原理和機制,探討可調試性(debuggability)的內涵、意義以及實現軟件可調試性的原則和方法,總結軟件調試的方法和技巧。

卷 1:硬件基礎

豆瓣地址: https://book.douban.com/subject/30379453/

第 1 卷主要圍繞硬件技術展開介紹。全書分為 4 篇,共 16 章。第一篇“緒論”(第 1 章),介紹了軟件調試的概念、基本過程、分類和簡要歷史,並綜述了本書後面將詳細介紹的主要調試技術。第二篇“CPU 及其調試設施”(第 2 ~ 7 章),以英特爾和 ARM 架構的 CPU 為例系統描述了 CPU 的調試支持。第三篇“GPU 及其調試設施”(第 8 ~ 14 章),深入探討了 Nvidia、AMD、英特爾、ARM 和 Imagination 這五大廠商的 GPU。第四篇“可調試性”(第 15 ~ 16 章),介紹了提高軟件可調試性的意義、基本原則、實例和需要注意的問題,並討論瞭如何在軟件開發實踐中實現可調試性。

本書理論與實踐緊密結合,既涵蓋了相關的技術背景知識,又針對大量具有代表性和普遍意義的技術細節進行了討論,是學習軟件調試技術的寶貴資料。本書適合所有從事軟件開發工作的讀者閲讀,特別適合從事軟件開發、測試、支持的技術人員,從事反病毒、網絡安全、版權保護等工作的技術人員,以及高等院校相關專業的教師和學生學習參考。

卷 2:Windows 平台調試

書籍信息: https://book.douban.com/subject/35233332/

第 2 卷分為 5 篇,共 30 章,主要圍繞 Windows 系統展開介紹。第一篇(第 1- 4 章)介紹 Windows 系統簡史、進程和線程、架構和系統部件,以及 Windows 系統的啟動過程,既從空間角度講述 Windows 的軟件世界,也從時間角度描述 Windows 世界的搭建過程。第二篇(第 5-8 章)描述特殊的過程調用、墊片、託管世界和 Linux 子系統。第三篇(第 9-19 章)深入探討用户態調試模型、用户態調試過程、中斷和異常管理、未處理異常和 JIT 調試、硬錯誤和藍屏、錯誤報告、日誌、事件追蹤、WHEA、內核調試引擎和驗證機制。第四篇(第 20-25 章)從編譯和編譯期檢查、運行時庫和運行期檢查、棧和函數調用、堆和堆檢查、異常處理代碼的編譯、調試符號等方面概括編譯器的調試支持。第五篇(第 26-30 章)首先縱覽調試器的發展歷史、工作模型和經典架構,然後分別討論集成在 Visual Studio 和 Visual Studio(VS)Code 中的調試器,最後深度解析 WinDBG 調試器的歷史、結構和用法。

本書理論與實踐結合,不僅涵蓋了相關的技術背景知識,還深入研討了大量具有代表性的技術細節,是學習軟件調試技術的珍貴資料。

這本書應當還有卷 3,此卷裏會講基於 Linux 平台的調試方法。

關於 The Performance 知識星球

The Performance 是一個分享 Android 開發領域性能優化相關的圈子,主理人是三個國內一線手機廠商性能優化方面的一線開發者,有多年性能相關領域的知識積累和案例分析經驗,可以提供性能、功耗分析知識的一站式服務,涵蓋了基礎、方法論、工具使用和最寶貴的案例分析

星球介紹https://www.androidperformance.com/2022/03/13/the-performance/

付費版本微信掃碼加入即可

還有一個 免費版 ,定位是知識分享和交流,也可以微信掃碼加入