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

引言

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

 

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

 

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

 

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

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

 

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

 

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…

含有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…

MySQL主从复制作用和原理

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

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…

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的头部,作为最近访问的元素 页在缓冲池中的数据,把它放在队列的前面(情景一)页不在缓冲池中的数据,…

Hbase Rowkey设计原则

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

explicit关键字详解

C explicit关键字详解 首先, C中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数默认情况下即声明为implicit(隐式). 那么显示声明的构造函数和隐式声明…

Palm应用开发之四Palm 应用模型

本系列目录 Palm Web OS 简介 Palm 应用开发之一开发环境搭建 Palm 应用开发之二从Helloworld开始学习Palm开发Palm应用开发之三appinfo.json文件详解开发语言 应用使用的技术和Ajax使用的技术完全相似&#xff0c;palm webos 系统上建立应用没有专门的语言为其服务&#xff0c…

T-SQL 中ON和WHERE的区别

SQL中ON和WHERE的区别 数据库在通过连接两张或多张表来返回记录时&#xff0c;都会生成一张中间的临时表&#xff0c;然后再将这张临时表返回给用户。在使用left jion时&#xff0c;on和where条件的区别如下&#xff1a;1、 on条件是在生成临时表时使用的条件&#xff0c;它不管…

luogu3830 [SHOI2012]随机树

传送门&#xff1a;洛谷 题目大意&#xff1a;对于一个只有一个节点的二叉树&#xff0c;一次操作随机将这棵树的叶节点的下方增加两个节点。$n-1$次操作后变为$n$个叶节点的二叉树。求&#xff1a;&#xff08;1&#xff09;叶节点平均深度的期望值&#xff08;2&#xff09;树…

Mysql binlog应用场景与原理深度剖析

本文深入介绍Mysql Binlog的应用场景&#xff0c;以及如何与MQ、elasticsearch、redis等组件的保持数据最终一致。最后通过案例深入分析binlog中几乎所有event是如何产生的&#xff0c;作用是什么。 1 基于binlog的主从复制 Mysql 5.0以后&#xff0c;支持通过binary log(二进…

数据库中间件详解

本文是转载的文章&#xff0c;原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzA5MDA5Njk0NQ&mid2456618601&idx1&snc10839f1797e7be1ea41f005b57432df&chksm87897237b0fefb215dd74c28cf5b524984b8f50d2ef13293e37919774f1c51e36642e489ee38&scen…

读书笔记《集体智慧编程》Chapter 5 : Optimization

本章概要 本章介绍了优化问题的基本概念&#xff0c;以及常见的优化算法&#xff08;随机搜索&#xff0c;爬山&#xff0c;模拟退火&#xff0c;遗传算法&#xff09;。读完本章后&#xff0c;感觉茅塞顿开&#xff0c;之前一直认为遗传算法高深莫测&#xff0c;原来这些算法都…

第五章· MySQL数据类型

一.数据类型介绍二.列属性介绍一.数据类型介绍 1.四种主要类别&#xfffc;1&#xff09;数值类型2&#xff09;字符类型3&#xff09;时间类型4&#xff09;二进制类型 2.数据类型的 ABC 要素1&#xff09;Appropriate&#xff08;适当&#xff09;2&#xff09;Brief&#xf…

深入浅出Android:初识Intent(BMI)

1、strings.xml 1 <?xml version"1.0" encoding"utf-8"?>2 <resources>3 4 <string name"app_name">BMI</string>5 <string name"height">身高(cm)</string>6 <string …

xcode10 自定义代码块

xcode10 之后自定义代码块已经不是10之前&#xff0c;直接将代码拖拽到代码块列表进行编辑了&#xff0c;10之后自定义代码块的方法&#xff0c;选择代码右键Create Code Snippet 在这里查看代码块 然后选中想要自定义的代码块&#xff0c;光标放在图标上&#xff0c;就会出现个…