2013年4月17日 星期三

我想,你所缺的,並非是不是有做軟體 RD 的天份

引用自 台灣 BBS:  PTT.CC   
作者: mgtsai

我想,你所缺的,並非是不是有做軟體 RD 的天份
而是,你以前未曾經歷過系統層級的大型震撼教育
                                                                               
職場與學校最大的不同點於,以軟體面來說,學校的作業或專題
可能只要寫個幾百行上千行的程式就可以交差
但進入業界,隨隨便便一個子系統的程式碼行數可能就多一個或兩個零以上
初入行的新人會適應不良其實是在大家預期範圍中
                                                                               
這麼多行程式碼,也不會是只有一個人寫出來的,必定是多人合作下的產出
不會只有自己一個人獨幹,在這樣的狀況下,重點在於,如何和別人一起 co-work
學會如何讀懂別人的程式碼算是待磨練的技能
                                                                               
因為每個人的思維邏輯與寫作習慣怪癖等等都不會一樣
所以在讀懂別人程式碼過程中,需要花心神力氣去抓出作者的模式
如果一個系統有好幾個人參與過,你也要想辦法抓出各種模式來
而這些是非常吃經驗的,只有浸在裡頭的時間夠久
看過許許多多不同類的的 code,才會稍有心得如何在相對較短的時間內看出來
                                                                               
你會有這樣的焦慮,只能說你在這裡頭蹲得還不夠久
還沒辦法像老鳥一樣可以比較輕鬆駕馭雜亂無章的程式碼
只是要先了解一個狀況,就是硬體 RD 並不比軟體 RD 輕鬆
                                                                               
你如果在系統廠工作,硬體研發的工作內容大概就著重在電路板設計這個環節。
這個工作與軟體相比,只會更麻煩。
                                                                               
在這個崗位上,要處理以下面向的問題:



1. 電路設計本身,包含畫電路圖 (schematic),與電路板繞線 (layout)
                                                                               
2. 與機構工程師之間的配合,包含產品周邊各式各樣的接孔與按鈕的海岸線配置
   電路板的幾何形狀與大小。有時剛好某個零件與外骰支持架發生空間衝突,
   因為要移動零件在電路板內的位置而更改設計。
   若允許的面積太小又要塞進那麼多 IC 與其它零件,真讓人頭腦爆炸。
                                                                               
3. 高速電路的處理。如果你們是以 SoC 為基底做產品,那你大概會需要處理
   幾個很棘手的東西,諸如 DDR bus, USB bus, 若產品帶有螢幕還要處理 LVDS bus
   若做影音相關產品還可能要處理 HDMI bus。由於這些都屬高速訊號
   所以在 layout 時,要調整線寬控制阻抗 (阻抗值也與生產工廠所用的PCB板材相關)
   要調整走線長度讓其 equal delay。最麻煩的還在於出問題時,因為訊號頻率太高
   無法使用一般普通的示波器抓問題,還要想辦法調用專用的儀器。
                                                                      
4. Debug,即使學校學過數位邏輯,但在電路設計上用到數位邏輯類的問題相對不多
   因為現在主要的數位功能已被大型 IC 所包含 (是 IC design house 的工作)
   不像 20 年前那時數位功能是用一堆 74 系列的 IC 一個一個拼湊出來。
   反而會花很多力氣處理偏類比的問題,諸如 3.3V <-> 5V 的準位轉換
   DC-DC 電源轉換電路,開啟某顆電晶體造成瞬間電流變化太大導致瞬間電源壓降
   導致系統不明原因重開機,pull up 電阻太大導致訊號上升太慢以致讀取錯誤資料
   諸多有的沒有的疑難雜症要去處理,也是相當吃經驗的部分

                                                                               
5. 散熱處理。當使用 SoC、功率放大器、或電源電路時,因所耗功率較高
   設計電路必須考量散熱因素,甚至直接在電路板上預留 thermal path。
                                                                               
6. 與軟體/韌體部門間的協調,尤其當系統出現bug無法確認倒底是硬體還是軟體問題
   這時一定是兩邊互踢皮球,此時要有兩邊都懂的人跳下來處理分析。
                                                                               
7. 與工廠生產部門間的協調。你所設計的電路所使用的料件,有可能因為種種因素
   包含料件成本,備料lead time,工廠製程上的難易度,與上游廠商採購的麻吉程度
   打消庫存呆料等等的眾多因素,迫使你要變更硬體設計以滿足眾多需求。

8. 安規認証。諸如美國的 FCC 或歐盟的 CE (包含電磁波的規範)
   無線通訊類的的安規,電源類型的安規,環保安規 (RoHS 之類的) 等等。
   比如在 EMI 預掃時,發現某個頻率的電磁波太高以致無法通過安規
   就要使出對應的 EMI 手段 (比如加 bead 加 choke 加 shielding 等等)
   甚至必要時得變更電路設計或加上 spreading spectrum 機制以避掉這個問題

                                                                               
9. 量產階段出包時的緊急 rework 處置。雖然量產階段出包的傷害不小應儘量避免
   但難免偶爾會發生類似的莫非定律。這時得要在短時間內應變出一個在成本上
   可接受的 rework 方案以降低這類事件的衝擊。
                                                                               
10. 其它一時三刻沒有想到的部分......
                                                                               
一個系統廠的硬體工程師的工作內容要處理這麼多面向的問題
雖然不會每件事都全程跳下去做,但一但有狀況時,硬體工程師都要親自跳下去處理





沒有留言:

張貼留言