最近公司比較忙,趕案,較沒空寫 blog ,一點心得,歡迎交流。
----------- Journal -----------
1. RD = Research & Develope , 別期待 RD 會有很多時間是在 Develope , 更多時間是在 Research & Using。
2. 別期待工作上 Coding 人人都有好習慣 , 相對的要訓練自己 , 能和 Coding 有不好習慣的人相處 , 像是變數名稱一堆 P1, P2, ... P23 的時候 ...
3. 在「非草創 (不一定是大公司) 」的公司裡,Trace , Debug , 加需求 , 會是最常做的事,因產品基本上都有大概的架構出現,蠻多部份都是先基於以前有的架構繼續做改善。
4. 寫 Code 前,先弄清楚,接下來做的是只要「功能達到就好,細節不要求」,還是「除了功能要有,中間的變數要開出來讓別人用」,或是「所有 Coding 細節都被 team leader 規定死,不要擅做主張」。
5. 不要假設自己使用的 library , function , 一定會是正確無誤的 , 因這些 library , function , 也很可能是公司內部正在研發階段的東西。
6. 就因為不確定使用的 library , function 是否正確無誤,所以會發展一些現象或硬體行為之「模擬程式」。
<EX> 理想中,A 程式 (自己寫) <-----> B 硬體 (自家發展 , 或供應商提供), A 程式向 B 硬體發出一個 req 需求,B 硬體收到 req 時傳回 msg , 最後 A 將收到 msg。
若過程中, A 發出 req , 卻沒收到 msg , 那到底是誰的問題? A 程式 ? B 硬體 ?
<驗證 1> 能用硬體方式顯示出 B 硬體接收到之 req 訊息、處理、傳回是較準的,但通常這種方式很麻煩,開發速度也沒比較快。
<驗證 2> 事先寫一個 B' 軟體去模擬 B 硬體行為,中間過程溝通方式很多,如 Message Queue , socket 等等。這種模擬方式實際上就是在做 IPC ( 行程相互通訊) 。好處是開發 A 程式之速度較快,唯 B' 大多沒辦法百分之百完全模擬 B 硬體行為。
<驗證 3> 換一個 B 硬體做 A 程式測試時,並不是件容易的事,必須事先驗證,拿來的 B 硬體是不是完全正常、沒問題的。
7. 大多時候,看到一段自己認為寫得很差的 code 的時候 (不論是變數命名、設計架構,還是執行效率 都很差,甚至連註解都沒有),千萬要忍住不要去改它。蠻多團隊的共識是,如果那段 code 沒有錯誤、也不是瓶頸效能時,通常不要去動。
----------- Tools Note -----------
1. embedded system ,會把環境架在 windows 下,用 BCB, VC 等簡便 IDE 開發,架 VMWare < Linux >,source code 在 windows 下開發完後,會有一支轉換程式轉到 linux 下,再進行編譯、燒錄。相關工具 : putty,然後有沒有 Cpp2C 這種東西我就沒再研究了。
2. 熟練三種技巧:search , comare , merge ,很多時候是在 Ctrl + F , F3 , Ctrl + C , Ctrl + V 。
3. 學會使用 socket 監看工具,監看 socket 不是只有 hacker 該會的事。
4. 比較兩個 Project 版本不同,用 WinMerge,可清楚知道不同的兩個版本改了哪些東西。若自己拿 v1.0.1 的開發, (假設自己開發完的叫 v1.0.my) 開發完後發現別人放了 v1.0.12,做法如下。
<1> 開 WinMerge 比較 ( v1.0.my , v1.0.1) ,知道自己加了哪些部份的功能 。
<2> 開 WinMerge 比較 ( v1.0.my , v1.0.12),不同的地方注意是不是自己寫的,是的話從 v1.0.my 複製貼上到 v1.0.12 (有時可能不用,大多是如此沒錯);不是的話保留它就行, 那些是中間改版的過程。
<3> 經過上述兩個步驟,最後加完的 v1.0.12 便可以成為新版的 v1.0.13。
5. 永遠用批次檔寫兩個 batch 放在 windows 快捷列
<1> taskkill /f /im <常當機的 IDE 名稱 , 或常當機的程式名稱> ,作用是強制關閉處理程式,如 BCB , VC , IDE ( mscv.exe , bds.exe)
<2> shutdown -r -t 0 ( 真的不行的話,那就重開機吧 ...)
6. IDE Debug 當機時,該學會聰明,哪些方面的程式會常當機 ( 像是 watch 視窗監看的 array 太大 、COM Componment 被搞爛、socket 程式常被玩爛、HDC 更新太頻繁)?有沒有辦法強制回到 IDE 結束 Debug ? ( 如 BCB , Ctrl + F2 )
7. 比較兩個文字檔不同可用 WinMerge;比較兩個二進位檔不同, 目前試用還可以接受的是 Ultra Compare ; 只是想簡單知道 "一不一樣" 的話,Windows 底下命令提示字元可研究 fc 指令。
<ex> fc /b file1 file2 ---> 二進位方式比較 file1 , file2
8. binary file search 問題。假設知道一串 unsigned char want_search[200] = {......} ,要在某個二進位檔案或某個記憶體裡,找出 want_search 前 150 bytes 完全符合之位置。這問題是現實遇到的字串搜尋問題,只是字串處理變成了二進位檔案、記憶體處理。目前沒找到類似的軟體可支援搜尋。
9. 記熟 UltraEdit 快捷鍵 , Ctrl + G 做二進位定址 , Ctrl + H 切換 16 進位顯示模式。其他的功能我用不太到,因沒打算將 UE 當作是一套 source code editor ,有需要的自己再加。
10. 想查一個專案裡面的某個 function,不用特地再用 IDE 把該專案之 project 開啟,在 windows 專案資料夾底下,直接按 Ctrl + F 搜尋,內容填上 function name ,檔案類型先過濾 *.c* *.h*。
11. 原始的 *.c *.h 預設用 NotePad++ 來開啟是個好主意 -- 前提是如果只是想看 code 的話。
12. 資料夾的顯示永遠設成「詳細資料」,用眼睛找東西比較容易。目前在 windows 下我還不知道怎麼改預設 (每次都是用小圖示之類的顯示),一進去的時候就按「檢視」-> 「Shift + D」。
13. 有空時,該學一下現在那些「安裝程式」是怎麼做的,最好是能找到 有 UI Design 介面的 script language < 這部份我還沒花時間找就是了 >,這部份通常是最後一步在做的事,所以沒必要額外開發一套 Res. 安裝程式系統。
暫時就這樣吧,有其他的 programmer tool 使用技巧,歡迎分享,這影響工作效率很多。
留言列表