看板 Soft_Job 關於我們 聯絡資訊
※ 引述《sniffer (again)》之銘言: : ※ 引述《oaz (幸福治安:破案數/十萬人)》之銘言: : : 基本上,台灣的規格書是比較接近需求搜集,然後下一步就要實作 : : 譬如: : : 規格書定義:一個畫面有三個按鈕,按了第一個要做什麼,第二個要做什麼事,第三個要做什麼事 : : 但比較學院派的人作法,是比較接近物件導向分析與設計 : : 譬如,會從使用者案例開始玩起 : : 就使者案例來說,除此需求之外 : : 還要考慮,使用者按了第一個按鈕後,再按第二個按鈕,這時候會如何? : : 或者,使用者連續第一個按鈕,會不會出什麼問題? : : 或者,這時系統發生了什麼事件,譬如網路斷線、東下下載完了 : : 程式是否要通知使用者或更新書面 : : 每種用法都要清清楚楚的列出來。如果有些結果還不確定,就要再回去 : : 如果做得好,不會等到程式實作差不多後才發現 : : 如果使用者怎麼做,會有大問題,所以要改架構 : : 如果系統這時網路斷線,會有大問題,所以要改架構 : : 做完使用者案例,還要做系統架構分析、物件分析 : : 要達成每個案例,系統該包含哪些物件,有什麼責任 : : 再根據每個物件 : : 理論上,這都是 SA 、SD 的人要做的 : : 但是,台灣只有 PM 提出要做什麼(還很不明確), : : 然後 RD 要身兼 SD、SD、PG : : 基本上,每種因素都會引起各種架構變化 : : 因此: : : 一、當設計的時侯要儘量有彈性,這也是 SA、SD 要有足夠能力 : 現實中的程式, 必須要顧慮效能, 也要顧慮時效性, : 最好效能的架構不會有彈性, 最快寫好的程式(例如perl)也往往最難維護, : 但是最好維護從來都不是大多數程式的第一優先, 也不應該是優先: : 1. 效能好的程式節能減碳, 這對server, driver或embedded system這類程式非常重要, : 因為這些程式擁有最多的執行時間, 少用一個clock就少砍很多樹, 電池多活很久 事實是:80-20 法則,程式有 80% 的時間花在 20% 的程式碼 甚至是 90-10 法則 要改善效率主要有兩個方法: 一、先寫出比較有彈性、可讀性較高的程式 再找出比較花時間的部分,對 二、不管三七二十一,就算沒有彈性、可讀性會變差 但撰碼時一律用最有效能的方式寫 事實上,第二種方式寫出來的程式並不一定會第一種有效能 第二種方式,很可能會了很多時間、人力,但都省在那種無關緊要的地方 甚至,可能會更慢 譬如,使用 cache 機制通常可以增加效能 但不適當的 cache ,在沒必要做 cache 的地方做 cache 程式反而要另花成本去維護 caceh ,反而是減少效能 不知道你有沒有遇過:在一開始寫得很美好,考慮了效能,使用了一些 cache 機制 在撰碼時就用最佳化的方式去寫程式,但比較沒有彈性,可讀性較差 但因為運作不錯,效能又跑不錯,就接受 等到期限前,忽然發現有 bug ,因為 cache 機制有問題,或者使用不當 或者使用雙重 cache ,又沒有把溝通流程搞清楚 但因為期限快到了,就另外硬加一套機制去修正 但新加的這套機制又無法顧及原先的 cache 機制 極端一點,甚至程式為了正確性,反而要資料都從新的機制拿 但舊的 cache 機制又不管拿掉 結果是,程式的效能最後是變差的 要聲明的是: 一、我不認為在任何情況下, "可讀性" 和 "可維護" 一定優先於效能 譬如寫嵌入系統底層(作業系統、驅動程式)的人, 除此以外,大部分的程式(應用程式),大部分的情況, "可讀性" 和 "可維護" 二、在真的需要效能的情況下, 一個架構良好,可讀性和可維護高的程式,通常可以很容易做最佳化又不會影響程式正確性 但一個可讀性可維護性低的程式,若出了一個正確性的錯誤需要修正時, 常常會去影響其原先設計的效能機制 : 2. 如果facebook慢慢做系統分析, 慢慢研究使用者行為, 慢慢推敲架構會不會DoS, : 那他就不會成功, 先做出來才是重點 facebook 是規模一直在變大,也就是需求一直在變 我相信, facebook 在成長的階段,也是也過分析、設計 隨著規模一直在變大,一直有持續的分析、設計 : : 二、就風險管理的角度,儘管有一百種各式各樣的因素導致架構變化 : : SA、SD 還是要能儘管可能掌控各種因素,譬如其中的九十種 : : SA、SD 不能因為還有十種因素不能掌控,所以連那九十種因素都不掌控 : : 照比較正規的作法(學院派),可能規格書真的比較 code 多 : : 不過要考慮一個因素,是因為這種規格書比較因素比較多,所以才會比較厚 : : 至於所謂的 SA自己寫全部code還比較快 : : 基本上,這純粹是規模問題: : : 譬如要蓋一間狗屋,應該不會有人大材小用還給出一個規格書 : : 當然是先動手做再說 : : 但如果要蓋一棟高樓大廈, : : 總不會說規格書會太厚 : : 設計師自己去蓋房子說不定還比較快 : 蓋房子設計師無法自己搬一棟樓的磚, 但是規格書裡面的流程假如比code還多, : SA直接用這個時間自己寫, 都已經做好了 規格書裡面的流程比code還多,是因為規格書考慮了很多例子 如果 SA 直接用這個時間自己寫,你那麼寫出來的程式真有有考慮到那麼多? : 一個很"正規"的例子, 世界前三大某IC豬屎屋, 他們的SDK就是在印度寫, : 採用"正規"作法, 裡面每個模組都帶有比code還多的規格書, 測試報告, : 其實這個產品全部的code只有幾MB, 但是拆成一百多個模組, : 於是當我要修改電路板某個clock, 問他們的人會影響哪裡, : 這件事情沒有人能告訴我, 所有的programmer都沒有辦法知道整個架構, 請問,為什麼programmer "該" 知道整個架構, 在這套玩法中,SA、SD 是最重要的,PG 是最便宜的 為什麼你認為 "知道整個架構" 的責任在 PG 上? 我很好奇你的角色是什麼? SA、SD、PG 還是標準台灣 RD = SA + SD + PG : 一點小小地修改都要找一群人開會, 大約要等二周, 沒錯,一點小小地修改都要找一群人開會, 大約要等二周 但是,這也表示,因為一個人在一天內做出的一點小小地修改 但因為沒有想清楚,造成整個系統的災難 這就是公司的決策者要去衡量的 : 或者自己看海量的文件, 找出所有用到這個clock的模組 再者,我很好奇,為什麼你的一點小小地修改,可以影響到很多模組 你做的真的是一點小小地修改? 模組的用義在於:主要介面定出來,模組內部怎麼亂搞,都不會影響外面 如果因為一點小小地修改就影響到很多模組 該考慮的是: 一、設計上可能有問題 二、這可能真的不是小小的修改 : 文件比code還多的時候, 所謂的好維護根本只是為了以後可以告訴你, : 他文件"有"寫到, 在編號E1046875r467文件的677頁120行.... : 找文件不會比找code方便, code至少是100%文字檔, C也比英文有結構 C 比英文有結構 但不代表你看了 C 程式碼,你就可以了解各種正確和失敗的例子 : : 所以說,是台灣不重視 SA 、 SD : : 否則,為什麼只有幾個人負責設計? : : 只有幾個 SA 、SD ,然後有幾百個 PG 嗎? : : 那是因為,在台灣, RD 要身兼 SA、SD、PG : : 如果是原作者說的那種玩法 : : 那就要有數十位以至數百位 SA、SD,是公司最重要的資產 : : 然後 PG 找工讀生或外包 : 這樣的架構, 一旦要改bug, 換規格, 反應非常慢, 大家時間都花在溝通, : programmer本來就應該有能力自己規劃模組的實踐, 自己為自己的程式負責, : 而不是中間分出一大堆所謂SA/SD來, 架構的人沒在寫程式, 也沒有run程式, : 寫的人只知道自己的一堆超簡單code block, 卻要找出整個程式哪裡掛了 : : 改規格是一定的,但是 SA 、SD 要儘可能分析各種可能 : : 儘可能設計到有彈性,使得之後的改變最小化 : : SA、SD 不能因為還有十種因素不能掌控,所以連剩下的九十種因素都不掌控 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.46 ※ 編輯: oaz 來自: 140.112.30.46 (11/14 14:28)
rodion:想法和你一樣 先做出簡單好懂的版本 需要時再來改進效率 11/14 18:44