2014-04-24

[讀書筆記] The Practice of Programming - Portability

Portability 
SlideShare上的投影片分享



Why do we worry about portability? 
1. Less maintenance and more utility

2. Environments change
    環境會變 OS會升級

3. A portable program is a better designed program
    同意 一個可移植性的程式 本身抽象化的程度也比較高 設計上會比較好

程式語言
1. 照著標準走 

2. 照著主流走

3. 注意各data type的size 但彼此的 size關係不脫離下列
    sizeof (char) <= sizeof (short) <= sizeof (int) <= sizeof (long)
    sizeof (float) <= sizeof (double)

4. 賦值的順序不一定一樣 n = (getchar() <<8) | getchar()
    左邊的getchar()不一定先叫用

5. 注意char的 sign or unsign

6. 注意Struct的size, 計算大小請直接用Struct來計算, 不要用變數相加的方式
    Yes => sizeof (struct X)
    No  => sizeof (char) + sizeof(int)

7. Try several compilers
    既然考慮移植性 就在不同的compiler間 compile看看吧

Headers and Libraries
1. 使用標準lib

2. Header若太肥太亂 請把共同的程式碼抽出來 針對不同環境 把不同的Header集中
   換句話說 共同的程式碼應該在不同環境下都能使用 但是針對不同環境的Header Files 請將它們抽出放到各自的環境上 

3. 如果你取的變數名稱跟標準lib Header定義的一樣 你的名稱會被header汙 染 但是不要跟標準抗爭 請使用別的名字繞過去 

Program Organization
有兩種方法能達到移植性
1. Union
    利用條件式編譯 把所有環境的可能性放在一起
2. Intersection
    抽出共同的部分 根據不同環境塞不同header 作者相當討厭條件式編譯 認為這造成maintain上的困難 

如何避免條件式編譯 看看是否真的有其必要 

Isolation
1. 老話重彈 針對不同環境客製化不同的files
2. Hide system dependencies behind interfaces 盡量抽象化 例如 The I/O Libraries : 我們只會知道Read Write等 最底層最依賴OS的實作放在各語言中
3. 盡量使用Standard Language Library 而不是WINAPI

Data Exchange
作者贊成直接用String做資料交換

Byte Order
有時無可避免使用Binary Data
事實上Binary Data 也比較快比較小 但要注意 little-endian 跟 big-endian的問題
重點是 Sender跟Receiver要講好格式

Portability and Upgrade
1. Change the name if you change the specification 
   若改規格就改名字吧 Name要名副其實
2. Maintain compatibility with existing programs and data 
   要跟舊版保有相容性 就像Java每一版都還會留著舊版API 但在JDK中會註明不建議使用

Internationalization
1. 不要假設ASCII
    用Unicode吧 再用UTF-8轉 c/c++ 就用Wide characters吧
2. 不要假設English
    可以像趨勢的作法 將wording跟UI都抽出 到時方便替換

Related Posts:

  • [讀書筆記] Deploying and Releasing Applications Deploying and Releasing Applications 1.         Creating a Release Strategy           i.        … Read More
  • [Jug讀新聞] Personal Kanban 介紹最近在網路上看到一則影片 介紹Personal Kanban 資料來源 : http://www.personalkanban.com/pk/#sthash.uDtxChXM.dpbs 內容其實很簡單 我們要做的事情很多 但是當這些task都擠滿你的腦袋時 你會錯過很多很多正確的抉擇 做事沒有效率 所以來試試Personal Kanban吧 它能夠幫助你管理你的工作 Personal Kanban只有兩個規則 1. Visualize y… Read More
  • [新聞摘要] Scrum does not work here in Asia最近讀到一篇新聞 Scrum does not work here in Asia https://medium.com/software-craftmanship/scrum-does-not-work-here-in-asia-72d7bccccb4d#.5n8kqf3y2 SCRUM在亞洲是行不通的 作者提出了他的觀察 他發現local managers比較保守、墨守成規些 相當抗拒Agile 甚至還有人直接表明 這是西方社會在用的 我… Read More
  • 社群分享 在瀑布底下玩Scrum 今天很高興被AgileCommunity.tw邀請來跟各位分享一下我們Team的Practice 身在一個大型軟體公司稍微傳統的部門下也是能夠玩SCRUM的 這場sharing將會和大家分享我們在瀑布底下碰到問題之後 如何採用一些SCRUM的Practice以及Tool的協助來幫助我們解決問題 內容包括: Team Member的緊密配合 如何以JIRA視覺化我們的工作狀態 如何改善Standup Meeting的效率 如何在每次的Sp… Read More
  • [Jug讀新聞] How NOT to Run Scrum Meetings資料來源: https://dzone.com/articles/how-not-to-run-scrum-meetings-for-software-develop?edition=138252&utm_source=Daily%20Digest&utm_medium=email&utm_content=DZone%20Daily%20Digest&utm_campaign=dd%202016-02-04&… Read More

0 意見: