2012年10月13日 星期六

最近看的一些書

這幾個月利用下班後和這個月比較空閒的時間翻了幾本書:

超強圖解前進 Android Market!Google Android SDK 實戰演練, 2/e (適用2.X/3.X/4.X)



iOS 創意程式設計家─ iPhone + iPad 跨平台通用, 3/e



這幾年不管是研究所或是出去工作後
碰的東西大部分都是底層的OS, Kernel, Device Driver... etc
去寫到上層的應用程式的次數可以說是寥寥無幾
唯一比較有相關的大概就是研究所時呈現分析結果的GUI程式是用Qt寫的
不過對這種GUI程式實在是沒啥搞頭
好不容易死拼活拼寫出來,但看了連我自己都有點懶的用..... Orz

但最近App正夯,自己也希望未來可以跟朋友合作做些屬於自己的東西
而不是將所有的心力都犧牲奉獻在公司工作上
畢竟到頭來做的東西還是屬於公司,而不是自己的
所以挑了點時間翻了這兩本書...

基本上這兩本書寫得都還不錯...
在天瓏上也都有不錯的銷售排名
《iOS 創意程式設計家─ iPhone + iPad 跨平台通用, 3/e》 這本更是很阿殺力的使用全彩頁面
讀起來硬是比黑白頁面的賞心悅目多了...

Android用的是Java...
Java以前大學有學過,所以還算有點底子
重新複習一下interface繼承的東西要看懂書本範例基本上不會太難

iOS用的是Objective-C...
C研究所和大學都有摸過
Objective-C雖然跟C還是有差
不過大概多會函式的呼叫方式 (正確來說應該稱之為:訊息傳遞 (message passing))
還有相當於Java interface的protocol基本上就可以大概看懂Objective-C的程式了
倒是iOS的記憶體管理還沒摸得很熟
ARC (Automatic Reference Counting)還有retain機制... etc
但我想這部份還是要真的自己有寫過才會比較清楚點

雖然還沒有實際去跑過書本裡面的範例
不過感覺Android的程式比較直觀些
iOS的程式有時候會突然蹦出不同的API可以使用
但整體來說只要實作好相對應的介面函式
(Android - interface / iOS - delegate)
"基本上"就可以實作出自己App要的基本功能了...

------------------

另外最近還看了一本關於Debugging的書:

《Debug Hacks 除錯駭客-極致除錯的技巧與工具》


市面上關於Debugging的書籍可以說是少之又少
畢竟Debugging這種東西本來就沒有一個套路可以套著用
很多bug都是必須case by case一個一個解的

原本買這本書是希望可以在未來工作的時候參考用的
不過這本書看完給我的感覺C/P值並沒有很高
雖然當初買它是因為它有特別針對Linux Kernel介紹不同的debugging工具和方式
另外也有介紹到我研究所論文關於效能分析有reference到的tools:
Oprofile, Kprobes, SystemTap, Valgrind... etc
(Debugging和效能分析用到的技術其實部份是可以共用的,只是用途和需要考量的點不同罷了...)
但或許是如同我上面所說的:
Debugging這種東西本來就沒有一個套路可以套著用
很多bug都是必須case by case一個一個解的

所以雖然書中試著舉了一些不同的cases來介紹要如何透過不同的工具和方式來找到發生bug的點
像是第五章就介紹了:
  • Kernel Panic (取用 NULL 指標篇)
  • Kernel Panic (List 破壞篇)
  • Kernel Panic (Race Condition 篇)
  • Kernel 卡住 (無窮迴圈篇)
  • Kernel 卡住 (Spinlock 篇之一)
  • Kernel 卡住 (Spinlock 篇之二)
  • Kernel 卡住 (Semaphore 篇)

但也因為書中所舉的範例都是他自己的問題
所以對我來說比較沒有"共鳴"
而且要是換成自己來解相似的問題可能也是會採取類似的工具或手法
原本期待書中能介紹一些更厲害的技巧
但最後給我的感覺只有:
  • 要是是我也會是這樣找bug
  • 如果bug真的有這麼容易就找到就好了

另外這本書所介紹的平台大部份都是使用在伺服器或是桌上型電腦的Linux
對於資源有限的嵌入式平台,其實很多工具都沒辦法使用
光是要想辦法把工具porting成ARM架構的程式就已經很不容易了
更別說如果是要透過工具所dump出檔案的來分析
嵌入式系統上的儲存空間有限也會是個問題
(雖然這部份可以透過掛載NFS filesystem等方式來解決.....)

另外對於porting Kernel書中所介紹的方式也很多都無法使用
很多工具都是要在完整的OS和執行環境都啟動好後才能運作的
對於在開機階段所發生的bugs,這些工具都無法派上用場
對我們這種嵌入式開發者來說能有ICE和GDB可以使用就已經是很感激的了...
甚至有些時候還必須透過邏輯分析儀等工具才能真正鎖定bug所在

只能說debugging這件事情,還是得case by case處理
實在是沒有一個方法可以完全套著來做...

不過書中介紹的一些方式和工具還是可以參考一下就是了
像是LKCD (Linux Kernel Crash Dump)Kdump都是我之前沒有用過的工具
但LKCD看似有一段時間沒有更新過了 (Since 2005?!)
而且似乎也很難用到嵌入式開發環境上(?!)
(倒是書中沒介紹到KGDB這個也不錯用的debugging tool反倒令我有點意外)

總之雖然書的內容還OK...
有些方法也是可以作為參考
不過對我幫助不算太大就是了

------------------

另外還有本書買了還沒時間看:

《Orange's 一個作業系統的實現》












這本書也可以算是魔王級
介紹了如何自己從頭寫一個小型的OS
從最早的硬體和記憶體初始化
(不過桌上型電腦這部份好像是給BIOS做掉了?!)
到OS的核心:Process scheduling和Memory Management
甚至是檔案系統和I/O處理
(聽說I/O其實反而是最困難的地方... Orz)
這本書都有做基本的介紹...

會知道這本書是從這篇文章看到的:
人體汽肛 - 風馳電掣, 人車一體: 聊聊作業系統書籍 - Orange's 一個作業系統的實現

這部落格的作者(台灣人)也有參考了這本書的介紹自己實作了個簡單的Simple OS
不得不說對岸(ex. 該書作者)的對於Linux Kernel或是OS的研究比台灣深入多了
參考資料也比台灣所可以Google到的量多太多太多了
不過這可能也跟台灣的工作環境有關...
之前在公司有幸可以面試到幾個有工作經驗的工程師
問了工作內容絕大部分都還只有在開發硬體的驅動程式而已
對於Linux Kernel內部的運作其實並沒有深入的研究
更別說有可能針對不同的領域去tune Linux Kernel的效能了
也難怪底層的介紹文章會比對岸少的多 (雖然人口數也差很大... XD)

說實在做這方面研究真的只是因為興趣驅使
對於未來工作的幫助可能也不大...

以前公司也有個Linux Kernel高手
在找工作的時候還是"處處碰壁"
一來是他希望可以找到真的有在做Linux Kernel相關的工作
但可惜台灣並沒有太多的公司有在做這方面的研究
(對岸可能還比較多,看最近阿里雲的新聞便可窺知一二)
二來有些公司反而怕他太強可能待不久,就直接拒絕他了...

所以自己常常也會在想是否需要花時間在這些東西上
或是可以把時間花在其他C/P值更高的地方...
畢竟不管是Linux Kernel或是這種自己實作簡單的OS
所要花費的心力和時間都是不容小覷的!!

不過既然書都買了...
有空應該多少還是會翻一下 (還得先學x86的組合語言... Orz)

------------------

接下來空閒的幾週應該會試著跑跑Android書本裡面的範例
iOS則是因為手邊沒有Mac所以想跑也沒得跑
不然光看書實在是沒啥feel...
有機會的話其實也是想自己寫點東西
不過雖然我也是用智慧型手機
但沒辦3G網路的智慧型手機其實跟智障型手機根本沒兩樣
再加上便宜貨,效能差,還被我毀容過..... 囧
所以對於自己App要寫啥實在是沒啥想法

說實在自己剩餘的時間也沒說很多
等到進去再出來後大概很多東西也都忘得差不多了
現階段也只能盡量加深印象
讓自己未來出來後能夠以最快的速度重新catch up回來就好了!!

------------------

其實自己也覺得時間不應該全部都投資在自己的專業領域上
也應該要多看看其他不同領域的東西
不然就真的是只能工程師做到死!!
但時間有限,想看、做的事情卻很多...
只能好好分配自己的時間不要浪費了!!

2 則留言:

Jeff 提到...

威哥!!太強了~學習速度超快!!!
看到你的網誌又警惕已經墮落閒晃好久的我 QQ

法克 提到...

還好啦...
這也是看了好幾個月加上這個月空閒時間爆多才看完的
而且實際上codes倒是沒寫到幾行
你有實作的經驗其實比較實在一點!! XD