学好编程从写作开始

August 3rd, 2011

可能很多人不以为然,写作和编程能有什么关系。

首先,写作促进我们思考。程序员每天的工作,不论是学习新知识新技术、理解软件需求、阅读代码/文档、设计框架、还是实现业务逻辑,都离不开思考。相信很多人都有过这样的体验: 对于某个设计或知识点,你以为自己想清楚了,但真要让你解释给别人听,你又会觉得无从下手,几轮过后回想当初,之前所看到和相信的不过是错觉,当你完整的向其他人转述一遍之后,你才算是真正想明白了。其实这个道理和书桌上放一只橡皮鸭/填充玩偶(然后向它讲述你的想法)的做法是相通的,只不过写作本身不光整理了思路,还留下了文档,同时,写作的过程也是不断加深印象、提升信心的过程,可谓一举多得。

其次,和写作一样,编程的主要目的是与世界交流,不论这个世界是指的机器的世界还是人的世界。要有效地与机器世界交流,你编写的代码必须符合一定的语法和范式,必须逻辑上讲得通,这样才有意义。而基本的写作训练可以让我们养成主动留意错别字、格式、拼写错误、逻辑错误的习惯。如C. A. R. Haore所说,我们宁要明显无错误的代码,不要无明显错误的代码。这点洁癖是好程序员必须具备的修养。这也是为什么我看到有明显拼写错误的程序员简历时,会直接把他/她们拉黑。同样地,我一直坚持认为,如果程序员写不出结构优良的纯文本文档,那么我们也不必指望他/她能够写出优雅的代码。除此之外,我们还可以再稍微发散一下: 开源项目那么多,满足类似需要的往往不止一个,为什么有的很成功,有的却无人问津? 主创/灵魂人物的写作能力,不论是代码、文档、邮件还是PPT,是很重要的分野。我相信,改变世界、影响更多的人,是很多程序员梦寐以求的,而要做到这一点,离不开写作。

最后,写作通常是程序员的短板,亦即最容易低成本高产出的地方。我一直很不喜欢人为地给不同专业背景的人贴上文科和理科的标签,仿佛他们之间没有交集似的。这样做的最大问题在我看来是一方天然地觉得另一方的知识对自己没价值,以至于形成了类似”写作是文科生的菜”、”编程是理科才要学的东西”等谬误。就我的观察,计算机科班出身的同学,往往文字表达能力不够强,可能多少和这种心理暗示有关。如此明显的短板,如果能够引起广大程序员群体的重视,肯在写作上持续投入,效果一定是惊人的。

Emacs字符编码相关指令

January 5th, 2011

在Vim中,我们可以通过set fencs=utf-8,gbk告诉它按照先utf-8后gbk的顺序自动识别打开文件的字符编码。Emacs也有一组字符编码相关指令,整理如下:

指令全名:set-buffer-file-coding-system
指令作用:改变当前buffer的编码
调用方法:(以目标编码gbk为例)
C-x f gbk
该指令还可以用于改变当前buffer的换行习惯(编码参数用dos或unix,对应\r\n或\n)。

指令全名:universal-coding-system-argument
指令作用:指定紧随其后的命令(如C-x C-f或C-x C-w等)所采用的编码
调用方法:(以目标编码gbk为例)
C-x c gbk

指令全名:revert-buffer-with-coding-system
指令作用:用指定编码重读当前buffer(如果打开时用错了编码)
调用方法:(以目标编码gbk为例)
C-x r gbk

指令全名:recode-region
指令作用:将以错误编码解码的选区以指定编码重新解码
调用方法:(以目标编码gbk为例)
M-x recode-region gbk utf-8

除了这些操作外,还有一种方法,那就是在文件开始的部分给出如下形式的指令,直接告诉编辑器在打开和保存时应采用的编码:
-*- coding: gbk -*-
接触过Python的同学是不是觉得很眼熟?

[补充] 查看当前编码选择的命令为:
M-x describe-coding-system 或 C-h C
也可在回车前输入具体的编码名称(如gbk)以查看详细说明。

从阅读英文小说原著谈突破

January 1st, 2011

回想大学时代,我第一本从头到尾读完的英文小说是Arthur Hailey的《Airport》,是在大学门口的外研书店买的。当时的想法很单纯:要证明自己的英文阅读水准不差,光靠新闻、应用文和专业文献是不够的,小说占到native speaker们日常阅读相当大的比重。如果能够啃下一本真正原汁原味的长篇小说,至少说明他们读什么,我也能读、能欣赏。最终花了一个礼拜,利用课余时间读完了。

这个看似不起眼的”成就”,对我自信心的建立至关重要。没有这个打底,后面恐怕也不会在知识”原始积累”的时候能有心有力去大量地阅读原版或影印版的书籍,并且往往能比别人更准确地把握原著要表达的意思。这个阅读小说原著的习惯一直延续到今天,量虽然不大,一直都有意识地在进行,比如前几年的《The Da Vinci Code》,这几年的《Animal Farm》、《1984》、《Twilight》等等。

就个人成长而言,光靠别人给你压力,给你找突破点是不够的。经验告诉我,影响自己最深远的,通常是那些自己给自己找的突破点。你能走多远,成为什么样的人,很大程度上取决于你自己。

《开源SOA》译者序

December 30th, 2010

相信大家对SOA这个词并不陌生,很多企业都在讲我们要上SOA,也有很多企业在呼应:我们能帮忙。但究竟什么是SOA,SOA能做什么,如何在企业中推行SOA,采用什么样的技术,这些都是摆在我们面前的现实问题。

我为什么会对这本书产生兴趣?这要从我的工作说起。我从2004年开始投身到企业软件开发当中,具体而言,就是医院管理信息系统(HIS)。我们的团队,一直都是扮演独立软件厂商(ISV)的角色,为国内大中型医院提供高品质的HIS产品和服务。

接触过医院信息化的朋友都知道,医院对软件的需求是多方面的,通常很难有一家厂商能够提供从ICU/CCU、LIS、RIS/PACS到财务软件的全线产品和服务。而HIS在所有这些系统中,管理着医院的核心运营,贯穿医院业务的各个环节,经常需要和第三方系统进行通信。如何能更好地集成医院的各类资产,为医院这个特殊的企业提供优质的服务,与医院一同成长,就成为我们关注的焦点。

作为独立软件厂商,同时也考虑到医院的实际承受能力,我们很难说服自己和医院接受那些闭源SOA大厂高昂的产品服务价格。同时,出于对灵活配置和伸缩性的要求,我们在一开始就把目光锁定在开源产品上。

SOA为我们提供了架构设计丰富的营养和施展拳脚的平台。这本书要带给大家的,正是如何用开源的产品实现完整的SOA。在这个过程中,作者为我们分析了SOA的方方面面,对每个环节采用的技术都做了大量翔实的评估和介绍,对每个关键点都给出了详细的说明和完整的源代码。

如果你是企业主管、业务专家,相信你读完本书,会对SOA有更清楚的认识,对SOA能为你的企业带来什么样的价值会有更深的理解和体会。

如果你是架构师或程序员,相信你也和我一样,在阅读完本书之后,能更明白SOA的本质,掌握实际开发SOA的技能,懂得如何在企业或现有系统中引入SOA的思想。

得知博文视点引进并准备翻译这本书时,网上传来了质疑的声音,认为开源加上SOA,受众太小。我却不这么看。中国的软件产业,并非只剩下互联网和外包,除了叫得出名字的大公司,有大量中小型的独立软件厂商在暗自努力,他们在网上的曝光率很低,但都在踏踏实实地做事。他们是可爱、可敬的一批人,做的是幕后支撑企业运营的重要产品和服务,这本书也是为他们准备的。

在这里,我要特别感谢武汉博文视点的周筠老师,给我翻译本书的机会,与她相识是我的荣幸。感谢莫锡昌、成硕为审稿付出的宝贵时间。感谢编辑卢鸫翔、刘唯一和其他所有幕后工作者的辛勤劳动。

我还要感谢在事业上给予我重要帮助的两个人:毛颖和林勇,是他们的信任和鼓励让我走到今天。

最后要感谢我的家人,为了让我安心翻译这本书,牺牲了太多的周末和假期,谢谢你们对我的包容和支持,无私的爱当然要用无私的爱来回报,我爱你们!

在本书的翻译过程中,译者虽已尽力确保专业术语符合中文读者的习惯,也尽力将原著的真实意图以符合中文习惯的方式呈现给大家,毕竟水平有限,书中的问题和疏漏之处在所难免,恳请各位读者朋友批评指正,联系邮箱:gaoyuxiang.soa@gmail.com。

高宇翔

2010年11月于上海