Re: [閒聊] Domain Knowledge

看板Soft_Job作者 (Gnimnek168)時間10年前 (2015/03/01 22:37), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串3/5 (看更多)
關於「Domain Knowledge」,這裡先釐清下軟體開發所謂的領域基本觀念。 問題領域 (problem domain): 待解決問題所在的領域。例如「線上商品購物系統」、「戶政管理系統」,前者的問題領 域為「商品購物」;後者的問題領域為「戶政事務」。 解題領域 (solution domain): 為了實現 (realize)問題領域所提出的解決方案與相關技術。例如商品訂購系統採用 Java/Spring/Linux 實現、戶政系統採用 C#.NET & .NET Framework/Windows Server 等相關技術來實現。 這兩個領域均各需有專家並能相互合作。 問題領域的專家稱為「Domain Expert」,他熟悉該業務領域的關鍵知識與業務流程 (business process);而一般操作人員 (operator)則較熟悉某局部功能的操作細節 (畫 面表單的操作與欄位細節等)。 解題領域的專家,回到軟體開發這個圈子,大致有兩個角色比較重要的 (單指軟體技術而 言,不涉及專案管理):一為軟體架構師 (architect)、另一為實作技術的Leader,例如 CTO。架構師重視的是如何調合需求分析、結構設計與寫碼實作;而CTO當然就是對如 Java/C#.NET 的實作具化能力。因為實作技術的多樣化及快速的變遷,所以與其說高深 的技術人員懂多少技術、倒不如說他是否具備能快速學會相關實作技術的 Skill,這反而 比懂多少還要更重要。 這兩個領域的專家所需具備的知識與技能均不相同,但卻要能相互合作,這是軟體系統是 否能搭配領域知識進而創造出所謂的「business value」關鍵之所在。要說有同時能具備 兩者領域的專家,只能說以個人在這個業界10多年來是沒有看過 (或許真有這種天賦異稟 的奇才),雖然期間有碰過許多專案經理號稱有,但是﹒﹒﹒ 從程式碼反映出來的並非稱為「domain knowledge」,程式碼只是為了實現所需完成的功 能,而且往往看到的都是片段局部的功能而已。 至於軟體專家如架構師,倒是可以從程式碼看出它的結構性,諸如靜態的類別結構,以及 動態的物件呼叫關係,並進而審視與議定該結構的好壞與合理性與否。 附帶說明下,一般業界幾乎是要求 SA/SD 具備該問題領域的知識,其實這蠻有問題的, 因為反而 SA/SD 並沒有具備了軟體相關包括需求/結構設計等應具備的技能,且得到所謂 問題領域的知識都往往僅限於局部。與其說要求 SA/SD 具備問題領域知識,倒不如說了 解如何與問題領域專家溝通的技能反而才是重點。 SA/SD 應具備的是「domain natural」的分析/萃取的抽象能力,而這些相關技能/技術, 則是偏向為「純」軟體領域這個範疇。 ※ 引述《AmosYang (泛用人型編碼器)》之銘言: : ※ 引述《csfgsj (Lazy bone)》之銘言: : : 曾經有一個老竽仔跟我說 : : 如果你在看程式碼的時候,能看到程式語言以外的思維 : : 那就是它啦!Domain knowledge : : 它偶爾會冒出來 : : 在大部分都是程式語言的視野中佔據一小角 : : 隨著時間的漂移 : : 你會發現越來越多程式語言以外的思維從程式碼中冒出來 : : 佔據越來越多的視野 : : 相對的,程式語言所佔的視野會越來越小 : : 直到有一天 : : 當所有的視野通通與程式語言無關時 : : 那你就出師了 : 同意;其實,把 domain knowledge 想成「創造 business value 的 : 工具」的話,就很好理解 : 以「這個按鈕按下去後,列出所有資料」這功能為例 : 首先自然是刻 UI ,把客戶端接上後端,後端大概再寫個去撈資料的 : 東西,最後把資料吐出來 : 接下來就是最潮的 domain knowledge 惹 : * 這軟體是賣給誰用? 若是要賣給美國公家機關,刻 UI 時就要懂得 : 要設計成色盲也能用,若有用顏色來作 visualization 的話,就 : 要設計成有灰階版本的;要設計成身體不方便的人也能用,例如, : 每個 UI 元件要支援 speech 功能, 要支援 high contrast, 要與 : OS 內建的各種 sticky key / tab key 等等功能相容 ... : * 這軟體是處理什麼資料? 這些資料的特性為何? 例如: 安全性? 或 : 著,是否需要遵守 document retention 的各種法律? 資料量有多 : 大? 是否要 server-side paging? 資料的「本質」為何? 是否該 : 設計分析功能? 要設計怎麼樣的分析功能? 統計分析? visualization? : data mining? : * 軟體開發本身的 domain knowledge, 例如 agile, CI, devops; : , dev-qa-pm 是 heaven 的三位一體還是 hell 互婊三巨頭? : PM 是否有給予 dev 足夠的 context? 還是把 dev 關在黑箱裡 : 直接要他們去實作 PM 想像中的 solution? : dev 與 qa 是否知道這產品是為什麼而做? 做了要賣給誰? : etc. : 其他的,什麼 i18n, 會不會踩到別人的專利? 踩到了是要戰還是要 : 和;這個專案的時程為什麼這樣排? 這產品的競爭對手是誰? 價格如 : 何定? 如何黏住你的用戶? 有的沒的 : 易言之,「到底解決了什麼問題? 創造了何種 business value?」 : ============================================================ : 基本上,認識 *domain knowledge* 最簡單的方式,應該是 : 1. 取得該產業裡一般公認的最基本入門知識與技能,例如,以軟體 : 業來說,「取得 Computer Science 學士學位」是個最常見的方 : 法 : 2. 進入業界,從「在這個業界,若要讓公司活下去,成長茁壯,需 : 要怎麼樣的知識與技能? 」的角度去看事物以及每天發生的各種 : 大大小小的事件 : 3. ??? : 4. Profit!!! : 總結: : 在背景知識與實務經驗間取得平衡,競爭之後活下來;你所經歷的 : 一切,就可說是 *domain knowledge* -- FB 社團:軟體設計鮮思維 http://ppt.cc/~4VN -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.107.221 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1425220622.A.4D6.html

03/04 12:29, , 1F
domain neutral?
03/04 12:29, 1F
文章代碼(AID): #1KyoGEJM (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1KyoGEJM (Soft_Job)