首页 > 代码库 > 关于编程,你知道吗?

关于编程,你知道吗?

      [作者袁永福,微软MVP,从业13年,南京都昌信息科技有限公司创始人,南京都昌公司专业从事于电子病历编辑器、电子病历文档技术、时间轴等国际化医用UI层控件软件产品。联系邮箱28348092@qq.com,网址www.dcwriter.cn]
     如何开发出好HIT软件是诸多HIT公司孜孜不断的追求,软件开发涉及方方面面,既有宏观战略,也有中层执行,最后还要落实到微观的编程。
     我作为电子病历编辑器的供应者,和行业内很多软件公司有着诸多交流,接触到大量的一线程序猿和许多实际代码,这些程序猿代表了HIT行业的真实生产力,这些代码代表了各家公司的真实水平。在和他们的交流中就萌发了这个主题:“关于编程,你知道吗?”。
     首先解释下,这个主题中的“道”就是编程之道,“知道”就不是传统的知道的意思,而是“知晓编程之道”的意思。
     “道”这个词高深莫测,我并没有深入研究过,各人有各人的理解。我觉得简简单单,起源于实践的就是我所理解的“道”。我本身就是道的一部分,万事万物都是道的一部分。吃饭喝水都有其中的道,编程也有道可讲。每一行代码都是一条小道,许多小道集成在一起就是大道。结合我十多年的编程实践,谈谈我所理解的编程之道。
任何道都讲究天时地利人和,结合HIT软件编程的现状,谈谈这个天时地利人和。
     天时,就是高高在上的大环境,浅显的理解就是云计算、大数据、移动计算、居民健康档案这些高大上的东西。
     天空乌云密布,风起云涌,但未必立即下雨,不过此时出门认为没下雨就不带伞,那是不讲天时,逆天而行,必然会淋雨的。因此天时是任何位置上的任何人必须要考虑的。
地利,就是各人所处的小环境,比如在某个公司、某个医院中。人都有惰性,不敢改变懒于进步,只想固守现状而不管天时。[袁永福原创]
燕雀可以在风雨来临时依靠地利仍然可能固守在片瓦之下,而鸿鹄知天时、用地利,就可以遨游于九天之上。
     毫不客气的说,HIT行业中存在着不少燕雀,还有一些是鸿鹄身燕雀心的,典型现象就是一些公司和医院IT人士还在抱着PB/DELPHI等老技术生存着。一些用PB的也敢自称云计算、大数据实在是忽悠人。医院人士由于体制原因固守老技术那是可以理解的,自生自灭的公司不与时俱进那是有些不应该的,公司不光是老板的赚钱工具,还担负着手底下弟兄们生存发展的良心。
     究竟要做燕雀还是鸿鹄,人各有志,各有各的幸福,不必勉强,不过想做鸿鹄的还是需要知天时、用地利,利用现有条件,拿出决心和执行力,顺应天时做出改变。PB的衰亡是必然的,一些没有断决的公司将跟着它温水煮青蛙式的陪葬。[袁永福原创]
     人和,也是软件的基础。一些公司具有很好的商业执行力,但缺乏技术力量,导致项目没有赚到该赚的钱,或者外包转包。即使是大的老牌公司也会出现这种情况。没有人和就没有执行力,天时地利等等严重受损。
     其实天时地利人和三者是相互影响的,没有规定前后关系。所谓战略和战术那个在先也是和鸡和蛋的问题那样无解。
天时就是众生的意志的加权和,地利是圈子里的一群人的加权和,人和就是更小的一群人的加权和。归根结底都是一群人的加权和,科技以人为本嘛。作为企业,三者都是要并行考虑的,比如对于一个公司,是谁当县卫生局长可能比谁当国家主席更重要,因此没有规定先后轻重,一切按需变化。
     天时地利人和是高级编程道,而具体的编码就是高级编程道,两者那个更重要也是没有规定的。
说到编码,可以说我接触的程序猿的编码水平和公司大小无关。大公司在软件开发流程管理上有些讲究,但仍然能盛产垃圾代码。举个例子,某公司的显示对话框的C#代码大致如下:
frmDialog frm = new frmDialog();
frm.ShowDialog();
就这么简单的两句话,非常的随意,基本上就能导致内存泄露,经过指导修改如下:
using( frmDialog frm = new frmDialog())
{
     frm.ShowDialog();
}
      经过询问,他们表示公司里写代码基本上不用这种using()语法结构,对此我表示无语。这就引出了代码质量的话题。
     现在医院的病历质控,病历书写时间和文档完整性控制大家都能做了,但是病历内容质控还正在发展中。[袁永福原创]
类似的,现在正规的软件公司已经能使用SVN等工具进行源代码版本管理,有部分公司也能参考CMMI的思想来进行文档控制了。不过对于代码的质量还是缺乏管理和干预的。
对于提高软件稳定性方面,我在实践中总结了几个原则,包括:
1. 最小权限原则。编码时让程序保持高风亮节,仅仅向系统申请操作所需的最小权限。比如读取文件内容那就以只读模式打开,而不是可读写模式打开。
2. 尽晚创建尽早释放原则。对于文件、数据库连接、网络连接等等资源尽可能晚的实例化,尽可能早的释放。即使稍微增加代码量也是值得的。
3. 尽早暴露错误原则。在软件的开发和调试阶段,尽量少使用try-catch结构,尽可能的暴露出程序的错误,而不是一味的和谐来掩盖错误,当然在发布正式版本时还是需要和谐的。
4. 资源共享原则。在商业运作上,大家都想自己的系统独占客户,但在编码时要时刻记住电脑不是程序独占的,还运行着其他程序,不能霸道的占据着系统资源,否则容易产生兼容性问题,甚至会大水冲了龙王庙。
     此外还有一些其他原则。时刻谨遵这些原则,就能较好的提高编码质量,产生高质量的软件。
     不过发现大多数程序猿是不会自发的总结出这些原则的,只有经过培训才能引起他们的关注,提升他们的思想。因此培训是一个必要的提升编程质量的手段。
     其实也没有必要请外来人员培训,正规的软件公司大多有那么几个高手,给这些高手安排些时间做员工培训工作就足以改进不少。[袁永福原创]
     可以说程序猿写出的每一行代码就蕴含着编程之道,写出高质量的代码,满足业务需求,这就是正道;写出低质量的代码,不能满足业务需求,这就是斜道。理解编程之道需要别人引导,更需要独立思考摸索总结,既能沉浸于无边码海,又能跳出来高瞻远瞩,这才是较为理想的编程之道。达到这种程度需要长期而广泛的编程实践加上每天的勤于思考,真是人间正道是沧桑啊。

关于编程,你知道吗?