男性早孕-从软件与程序的区别说起

引言

       今日新闻《如此医院太荒唐大小伙子被查出“早孕”》,百度搜索结果如下:

 

看到这结果,大家啥感想?

 

按常理,医院粗心、医疗机构忽视患者权益、经济利益的恶性驱动等等言论,唾沫星子基本足以把肇事医院来个水漫金山。

 

但实际上,这可能真的是一个小小的技术失误。

当然,历史上小的技术失误导致严重情况的后果很多,本文的目的并非为医院开脱,只是单纯从技术角度分析下该问题出现的原因。

 

       以下文字,开篇扯的有点远,但很快大家会发现联系。

 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-boot+swagger实现WebApi文档

1、引用依赖包 <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.5.0</version> </dependency <dependency><groupId>io.springfox</groupId><artifact…

如何使用单线程处理高并发

单线程相当于一个队列&#xff0c;只能按照顺序执行&#xff0c;如果要实现高并发&#xff0c;可以借助下面的方式&#xff1a; (1)、IO多路复用技术 (2)、采用事件驱动模型&#xff0c;基于异步回调来处理事件来

Sql优化文档

sql 优化 目的 数据库参数进行优化所获得的性能提升全部加起来只占数据库应用系统性能提升的40%左右&#xff0c;其余60%的系统性能提升全部来自对应用程序的优化。许多优化专家甚至认为对应用程序的优化可以得到80%的系统性能提升。因此可以肯定&#xff0c;通过优化应用程序来…

为什么在中国“公有云”落地那么难?

【编者按】本文是在美国和中国的互联网和云服务领域有近10年经验的专业人士Lillian Shao应PingWest邀请撰写的文章。从专业的角度解析了为什么在美国和世界很多地区已经大范围普及、对创业者帮助甚大的“公有云”服务&#xff0c;在中国却很难落地的各个维度原因。大家可以直接…

含有5亿个整数的大文件,如果排序?

给你1个文件bigdata&#xff0c;大小4663M&#xff0c;5亿个数&#xff0c;文件中的数据随机,如下一行一个整数&#xff1a; 61963023557681612158020393452095006174677379343122016371712330287901712966901...7005375 现在要对这个文件进行排序&#xff0c;怎么搞&#xf…

jmeter连数据库

前提&#xff1a;jmeter不能直接连数据库&#xff0c;需要导入一个jar包 步骤&#xff1a; 1、右键线程组--添加--配置元件--JDBC Connection Configuration 2、jdbc的基本配置&#xff1a;可以修改jdbc配置的名称、随便填写变量名Variable Name&#xff0c;再填写最下面的数据…

设置窗口的光标,设置ToolBar,设置状态栏

代码 //ex_10Dlg.cpp : implementation file//#include "stdafx.h"#include "ex_10.h"#include "ex_10Dlg.h"#ifdef _DEBUG#definenew DEBUG_NEW#undefTHIS_FILEstaticcharTHIS_FILE[] __FILE__;#endif///////CAboutDlg dialog used for App Abo…

java 实例变量和类变量

当JAVA程序执行时&#xff0c;类的字节码文件就被加载到内存&#xff0c;如果该类没有创建对象&#xff0c;类的实例成员变量不会被分配内存&#xff0c;但是类中的类变量在类被加载到内存的时候&#xff0c;就分配了相应的内存空间。如果该类创建对象&#xff0c;那么不同的实…

MySQL主从复制作用和原理

该文章是转载的&#xff0c;但是原文中有些描述的不准确&#xff0c;进行了修改。 一、什么是主从复制? 主从复制&#xff0c;是用来建立一个和主数据库完全一样的数据库环境&#xff0c;称为从数据库&#xff1b;主数据库一般是准实时的业务数据库。 二、主从复制的作用 1、…

排列

例题 洛谷P1088 在c的函数库algorithm里有几个关于排列的函数 下一个全排列next_permutation next_permutation(num,numn)函数是求数组num中的前n个元素的下一个全排列&#xff0c;同时并改变num数组的值。 上一个全排列prev_permutation&#xff08;同理如上&#xff09; ac代…

windows mobile开发循序渐进(1)关于平台和工具

最近要进行windows mobile开发&#xff0c;很兴奋&#xff0c;因为之前对移动开发很感兴趣&#xff0c;并且做了一些B/S模式的开发&#xff0c;也做了一些包括WML和WEB移动开发的学习和开发&#xff0c;这次需要系统的整理一下windows mobile开发过程了&#xff0c;希望园子里的…

LC-BLSTM结构快速解读

参考文献如下&#xff1a; (1) A Context-Sensitive-Chunk BPTT Approach to Training Deep LSTM/BLSTM Recurrent Neural Networks for Offline Handwriting Recognition (2) Training Deep Bidirectional LSTM Acoustic Model for LVCSR by a Context-Sensitive-Chunk BPTT A…

mysql innodb缓存策略之Buffer Pool

The InnoDB Buffer Pool Innodb 持有一个存储区域叫做buffer pool是为了在内存中缓存数据和索引&#xff0c;知道innodb bufferpool怎么工作&#xff0c;和利用它读取频繁访问的数据&#xff0c;是mysql优化重要的方面。 理想状况下&#xff0c;把bufferpool的大小调整到足够大…

动态规划---背包问题分析

0/1背包 问题描述 有N件物品和一个容量为V的背包&#xff0c;第i件物品的体积为c[i]&#xff0c;价值为w[i]。求将哪些物品放进背包可以使物品价值总和最大&#xff08;有两种情况&#xff1a;不要求填满背包和填满背包&#xff09;。 每件商品只有一件&#xff0c;且只能选择放…

乱想想关于捕获异常后继续执行的实现。

好像是在csdn上看见的一个问题。 如下 现有A() B() C() 。。。。等很多个方法 但是他担心程序按 try { A(); B();//如这里抛异常 C()将不执行。 C(); //..... } catch (Exception e) …

spring boot 实战

https://windmt.com/2018/04/26/spring-cloud-full-reactive-microservices/ 这篇文章一级棒&#xff0c;实际操作一番&#xff0c;感觉有点理解微服务以及服务发现&#xff0c;服务间调用这几个概念。 但是对于响应式编程以及对于异步非阻塞场景等还是比较头大。 在实际操作中…

MySQL InnoDB的缓冲池之预读失效和缓存池污染

InnoDB的缓存池作用: 缓存表数据和索引数据,把磁盘上的数据加载到缓冲池中,避免每次都进行磁盘IO,起到加速访问的效果. LRU算法(Least recently used): 把入缓存池的页放在LRU的头部,作为最近访问的元素 页在缓冲池中的数据,把它放在队列的前面(情景一)页不在缓冲池中的数据,…

【database】database domain knowledge

Database Principles Database Systems Design Advanced Database Technology 一、Database principles Relational data model – relational algebra SQL – DDL, DML, DCL, ODBC(JDBC) Database design — Entity-Relationship model Relation normal forms XML – DTD, XM…

国内交流电频率和电压的历史渊源

国内交流电频率和电压的历史渊源 发布时间&#xff1a;2009-6-25 14:28 发布者&#xff1a;xiaochunyang 阅读次数&#xff1a;546商用交流电最早的频率是60Hz&#xff0c;电压是110V&#xff0c;其发明者Nikola Tesla是美国人&#xff08;移民&#xff09;并且是受…

Hbase Rowkey设计原则

Hbase是三维有序存储的&#xff0c;通过rowkey&#xff08;行键&#xff09;,column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位。 Hbase中Rowkey可以唯一标识一行记录&#xff0c;在Hbase查询的时候&#xff0c;有以下几种方…