男性早孕-从软件与程序的区别说起
引言
?????? 今日新聞《如此醫院太荒唐大小伙子被查出“早孕”》,百度搜索結果如下:
?
看到這結果,大家啥感想?
?
按常理,醫院粗心、醫療機構忽視患者權益、經濟利益的惡性驅動等等言論,唾沫星子基本足以把肇事醫院來個水漫金山。
?
但實際上,這可能真的是一個小小的技術失誤。
當然,歷史上小的技術失誤導致嚴重情況的后果很多,本文的目的并非為醫院開脫,只是單純從技術角度分析下該問題出現的原因。
?
?????? 以下文字,開篇扯的有點遠,但很快大家會發現聯系。
?
1-軟件與程序
首先一個問題,軟件和程序是否有區別?
本人能找到的最早回答此問題的人,是一代軟件工程大師Frederick P. Brooks,在其圣經級著作《人月神話》的第一章,就給出了這樣一個圖:
*出自《人月神話》(清華大學出版社2007年第2版,ISBN:?9787302155676)
?
程序,圖中左上角,Brooks定義:本身是完整的,可以由作者在所開發的系
統平臺上運行。它通常是車庫中產出的產品,以及作為單個程序員生產率的評估標準
編程系統產品,本人認為可以等價于“軟件”,Brooks定義為:可以被任何人運行、測試、修復和擴展的程序。它可以運行在多種操作系統平臺上,供多套數據使用。
??? 如何從程序變成產品,需要走的路,就是圖中藍色的兩條:
橫向:代表了大家熟知的技術完善方向,例如架構的規劃、接口設計、系統集成等工作;
??? 縱向:似乎是一些不太技術化的內容,測試工作、文檔準備等等;
??? 簡單的說,橫向的道路,是為了把軟件做出來,縱向的道理,是要盡可能延長軟件的生命周期;一個是從0到1,一個是從1到萬。
???
??? 那么,下一步的問題就是:Brooks大師為何如此定義,這樣的定義對我們有何意義。
?
2-認知模型
??? 任何一種定義,都和其產生的時代密不可分。結合上圖及計算機發展的歷史,基本可以看出,Brooks大師工作的時代,除了接口、系統集成之外,如測試、文檔等諸多工作,大部分也需要軟件開發者自主完成。
在這個過程中,其實兩類工作的思考角度是有明顯不同。
在軟件的制作過程中,制作者要考慮的是系統的結構,分為哪些模塊及哪些類(或函數)等,以及相互關系和程序控制方法。
在軟件的產品化管理過程中,制作者則要考慮如何保證系統可用,如何讓系統可以被更多的人維護,以延長其生命周期。
上述兩類工作者,在工作過程中思考問題角度和思維過程的差異,即可認為是認知模型的不同。
?
??? 時至今日,軟件行業已經從實驗室和超大機房里走出,成為生機勃勃的產業,其中所涉及的職能角色及其認知模型,也發生了不少變化。
?
3-我們的工作基礎
以醫院內運行的軟件為例,醫院內所使用的軟件系統,屬于典型的行業信息化,嚴格的行業規范、高度專業的業務知識、復雜多變的需求,形成了目前此類軟件系統的開發團隊通常由業務分析者、設計開發者、測試、項目部署實施等角色共同構成的局面。
當然,廣義的說,還要加上使用該系統的用戶。
于是,問題來了:這些人都關心什么。
用戶:系統是否符合規范,是否能避免規范中的禁忌,是否能更自動化完成工作,是否可以為管理等決策數據處理提供方便,等等;
開發團隊:根據業務需求形成開發任務,保證代碼質量,系統可測試,架構清晰,可維護,等等。
形象點說,用戶眼里,軟件產品是這么形成的:
??? *用戶認知模型
但在開發團隊眼里,軟件產品很可能是這么形成的:
*開發者的認知模型
顯然,除了起點和終點,幾乎沒啥一樣的,中間不出分歧,才是怪事,分歧大到一定程度,就會變成“焦油坑”(出自《人月神話》,描述的是IT項目由于諸多復雜的問題和影響因素的影響,導致項目陷入混亂的狀態)。
舉例:
(1)智能排序問題:某個輸入框的選項,顯示出來大約20項左右,可能出現的數據大約千項。
如果想要根據用戶的使用頻率,把常用的向前排,顯然是個技術含量相對較高的做法。
但實際可能是,用戶常用的是相對固定的幾項,剩下的用拼音碼檢索就可以。
?
(2)紅色標識:某個數字標簽,在大于一定的數值后要標紅,系統起初未開發此功能;后來增加,用戶高度贊賞。
顯然,(2)中所述的功能一般技術上不難,但獲得的價值極高;而(1)則反之。
?
除此之外,一些編程階段的不規范做法,給產品中埋下了若干地雷,比如一些變量未初始化,或簡單初始化為0,而這個0對應著第一個選項;或者不可見區域的下拉框選擇內容時錯了一位,但后續又沒有校驗措施,都可能會鬧出笑話,本文開頭的例子,很可能就是軟件中存在此類問題。
此類問題的修復在技術上一般也不太困難,但在業務上很可能給用戶帶來非常大的隱患,現今的醫療工作中,本身醫患之間解釋溝通的工作量就不少,再加上需要解釋軟件相關的一些問題,所引來的麻煩與溝通成本可想而知。
?
4-對組織的影響
??? 目前很多醫療軟件公司,在技術團隊的組織架構層面,融入了開發者認知模型,通常會將工作崗位劃分為:業務分析者,開發者,測試人員,實施人員,數據庫管理員等。
??? 而為了盡可能貼近用戶的實際使用場景,提高產品可用性,即解決“用戶認知模型”中的“更優化智能的流程”和“禁忌問題規避”兩方面問題,某些公司參考了互聯網領域的產品經理做法,但由于醫療行業當中智能點和禁忌點過多而且相對分散,尚需結合此類問題的特征,設計標準化模型后方可能有更好的成果。
?
5-回到最初
??? 個人認為:醫療行業傳統的信息化分析與建模等軟件工程方法更多的是解決如何將軟件從無到有做出的問題。
??? 在這個過程中,工作的重心是要關注重點功能,并結合技術難度,大量的資源用于處理關鍵需求與高難度技術任務,以保證項目整體工期與質量最佳平衡。
下一步,各供應商的產品不斷完善、技術積累日益豐富,從而會在一個比較長的時期,將軟件從無到有做出來的速度有顯著提高,但如何從正反兩個方向提高產品可用性就會成為核心問題。
正方向:如何從局部到整體的優化流程,由于醫療行業規范嚴格且數量眾多,目前可優化的空間較為有限。
反方向:風險問題分類,估算成本,以風險成本為核心驅動開發過程及分配技術資源。
?
結論:用戶的認識模型和技術人員的認知模型有很大不同,在開發角度看起來的一些小問題,可能會給用戶造成極大影響。
隨著信息化技術的發展,可以考慮選擇功能點如果出錯,對用戶的影響程度這個重要指標來進行需求分級與架構設計等工作。
轉載于:https://www.cnblogs.com/vbspine/archive/2012/11/27/software_and_program.html
總結
以上是生活随笔為你收集整理的男性早孕-从软件与程序的区别说起的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Exchange+2010实验手册
- 下一篇: 推荐12款非常有用的流行 jQuery