Programming::碎念~

最近有不少感觸,大部份的 programer 對於 OS 在做什麼都沒有很清楚的概念 。就算,今天他是在搞 OS base porting 的也是一樣,蠻神奇的~

也許,你會說你在玩 Java、.Net,這跟我比較沒關係,但是你還要去瞭解 VM/Runtime library 在做些什麼,這真的很重要。

寫 native application 的人,要知道怎麼跟系統打交道,寫出來的 code 才會是 optimized。例如記憶體的配置,物件/資料到底是放在 stack or heap,這跟系統的 performance、scalibility、stability 都息息相關。如果連一塊使用中的記憶體放在哪裡,誰擁有它、什麼時候這個資源能釋放都不是很清楚,這樣寫出來的 code 會穩定才有鬼。

搞 base porting 的人,居然能在不知道 OS 行為的情況下搞出能動的 driver、HAL、bootloader,這多半要拜 HW vender 已經搞好了 BSP 的 base 然後由使用者再去 tunning,但可想而知,如果不瞭解 OS,一些 kernel structure 在同步存取時一定會出很多毛病的。什麼時候需要 lock、什麼時候才能 unlock、什麼時候能 sleep 什麼時候 sleep kernel 會 dead lock(通常在 interrupt handling 時不能直接呼叫 sleep、wait…不能配置記憶體,知道為什麼嗎?)…不瞭解 OS,你能做出正確的判斷嗎?這種情況下,多半只有改改 HW register 設定的份吧…要 from scratch 搞出個 BSP?到能用的等步我想會等到死吧~

你說搞 base porting 的人強不強?我可以跟你說,有一大半的人可以說是處於很尷尬的位置。說軟體,它搞不大,因為 BSP 裡的東西大多都是很片斷的程式,不會大到你要去分析個幾週、幾個月,有些搞 base porting 的人還會很看不起寫軟體的人,真不知道他們在想什麼,要這種人把程式寫大?也還是要好好的再訓練一下吧。硬體的相關知識?也不見得強。之前的公司送我去上 windows ce 5.0 BSP 的課,上課的老師看來在這個產業玩了不短的時間,可是在看 ce 中 microsoft 寫給 SMDK2410 的 BSP 的 code 時還是一樣,一堆的不知所以然,還要一直問同學,說他最喜歡整搞硬體的人了,誰是搞硬體的,然後在課堂上以自己的無知挑戰那個同學…真是無言。所以,搞 base porting 的硬體背景強嗎?見人見智吧。

這樣子,如果大家都不知道問題所在,那只有呆呆的一直 single step 到頭髮白掉…有想法的人,在跟其他人溝通的時候就要教育其他同仁,如果說能搞受還好,雖然累了點。但是如果說對方不當一回事,或是跟本不知道你在說什麼,這樣子想同心協力把東西搞出來,只怕你自己會先氣死,因為要一直去收其他人產生出來的爛攤子。就算是你因為收了不少爛攤子而在這個團隊出了名,通常的情況是你會得到更多的問題要去解…要有更好的待遇?這就要看公司文化了。

之前看過文章,裡面說一個 team 要有戰力,會要有不同的角色去支撐(好像是 7 種)

  • Genius(天才): 不能多,因為通常這樣的人不會 team work 得很好,但有它存在的必要 - 解決問題用
  • Pioneer: 喜歡玩新的東西,吸收新知識,但是產能不一定好,但是它可以在團隊需要方向時給予指引
  • Analysiser: 找出/分析問題,不一定能解決,但就是能看出問題、分析問題,並讓大家有問題是什麼,瞭解問題,進而有相關能力的人能提出解決方案
  • Manager: 要能有足夠的能力向上反應團隊解決不掉的問題,並把團隊的戰立集中砲口一致,避免他們產生降為零
  • 實際做事的 team member: 也許不是那麼聰明,但要積極負責,把交代的事情完成
  • 負責整合的 team member: Team member 的產出是片片斷斷的成果,如果把這些東西結合在一塊成為最後的產品,不是每個人都做得來的
  • 還有什麼角色?忘了,可以自己上網找找

臺灣的軟體產業目前就處於這樣的情況,規模大不起來,純軟體活不下去,很多拿了 CMMI 的公司也不過就是一個部門過了號稱整家公司有 Leve 3 的能力,這種態度玩下去,真的很危險,目前的 mainland china 雖然還算蠻亂的,但是,大家都肯往困難的地方研究,而不像臺灣專撿軟的吃,OEM/ODM 到翻,只會跟人家打價格戰,這樣的情況,到底還能撐多久?我可不想拭目以待,我要打破現狀!