Saturday, June 29, 2013

没有愚蠢的程序员,只有懒惰的程序员

这是多么万能的一句话——没有愚蠢的XXX,只有懒惰的XXX:没有愚蠢的女人,只有懒惰的女人;没有愚蠢的学生,只有懒惰的学生;没有愚蠢的人类,只有懒惰的人类。关键在于,这么多种说法,偏偏都很有道理。想要不愚蠢,你不懒惰啊?
我个人不喜欢别人叫我程序员,也不喜欢叫自己软件工程师,这些名字都显得大气而空洞;伴随着这些名字,随之而来的,便是责任;发生问题时,总会需要更大的精力才可以填满这些称号。我喜欢叫自己开发者(Developer),简单,确定。在设置完备的环境中,条件满足的情况下,做着无技术挑战的工作。开发者写下的代码不具有任何新意;每天做着几乎一样的看似无聊的工作。所以开发者既不愚蠢,也不懒惰,因为不会有难题,不需要愚蠢,而且完全确定的任务,更不用懒惰。换而言之,简单,确定——这是一切项目的极致,五到六个星期完成一个项目,便需要的是这种开发者。
当然完美而理想,对于程序员来说也是很难的;更多的时候,程序员无法给出答复,或者给出的选择也无法让用户满意;这个时候,程序员便是愚蠢的,至少绝大多数的时候,被认为是愚蠢的。没有办法,这个时候,虽然程序员不懒惰,但依然是愚蠢的——谁让你是程序员呢?跟你说了,你是开发者,开发者永远不会接受这种无辜的愚蠢。
程序员愚蠢的表现,不在于用户,而在于自己。怎么说呢,一个愚蠢的程序员,总是会坑自己,或者坑自己的同僚。当程序员用一段天马行空的逻辑,写下一段天马行空的代码时,竟然有问题,这个时候首先被坑的便是自己——自己首当其冲的被坑,因为它可能不对,便需要修改,然而天马行空岂是那么容易改的?等坑完自己之后,便轮到同事了,因为天马行空影响到了别人的代码运行,别人又需要帮你修改;就算不需要帮你修改,别人至少需要扫一眼你的天马行空——可是一眼扫完,竟然看不懂!扪心自问,你有多少次看不懂自己曾经写下的“完美”的代码?扪心自问,你有多少次看不懂别人的代码?好的代码,好在于它读起来便仿佛一场单方面的对话,又怎会读不懂呢?当然了,如果不懂英语的话又另当别论了——不懂英语的话为什么要用英语编程呢,你可以用拼音啊!所以说这个时候,注释会需要到吗?对于一个经常读代码和写代码的程序员来说,你可能百分之九十九的时候会把注释忽略,因为你的眼睛只关心代码。
所以说,代码需要平淡无味,毫无新意,使用的都是大家都明白的技术。简单的代码,并不等于愚蠢的代码;反而言之,简单的代码,是为了不愚蠢。当你的代码步入生产,得到运行时,竟然不对,合理的布局,合理的记录(log),可以让你第一眼明白问题出在哪里——反之,坑自己。(推荐Clean Code 或者 Effective Java)
程序员是和机器打交道的一群人,这不同于开发者。开发者是使用已知技术做事的人,而程序员却需要更新自己。换而言之,开发者是正常运行的程序员,开发者非常关注自己的产率。程序员需要实时维修自己,需要训练自己。不幸的是,更新自己和更新机器差不多,需要了解最新科技,需要阅读文档。一个懒惰的程序员,会觉得这些非常辛苦。因为程序员需要精读的东西很多,如果他不想让自己愚蠢的话。你知道为什么你的公司要花钱让你去买书吗——你很幸福是吗?这只是为了让你不再如此愚蠢。读文档,比读小说更加有趣,原因就在于你需要精读——所谓精读者,在于不是为了记住它,而是了解它,使用它,对它负责。愚蠢,大多数情况下都是源于懒惰,对程序员来说便是如此简单。

Saturday, April 20, 2013

安史之乱


做编程的人不能天天看编程,否则会无法忍受;其实并非无法忍受,而是无法自拔。某一类东西看多了之后,便会觉得越看越想看,越看越有趣。所谓专业者,便是越做越专,随着视野的加深,也会同样的视野狭窄。或许这只是某一类人的强迫症,就仿佛认为开窗就可以通空气一样,虽然窗外雾霾满天。我不幸便是这一类人,不过我可能并不能真正领会到自己为何是这一类人。
然而读历史可以开阔眼界吗?不见得。虽然有人曾经说过,读史可以明志,然而真的不见得。读史分为不同类的读法,有些人读史分析的头头是道,而有些人可能只是为了装逼。对于后者,你说能明志吗?然而,在做某些事情时,自己可能并没有意识到已经走到多危险的地步了。所谓身不由己者,便是懦夫的体现;身不由己可以作为很多事情冠冕堂皇的解释。

安史之乱之所以会被提起,因为它发生的年代比较奇怪:公元755年,天宝十四年末,正值盛唐;唐玄宗也是正值盛年。唐玄宗对于安禄山大权在握了然于心,对于安杨之争也是了然于心,偏偏他装糊涂,不过问;于是历史学家就说此时的唐玄宗已经迷于女色,昏庸过头。于是当安禄山率众二十万河北起兵时,唐玄宗才发现自己自信过了头,兵力不足,打不过。安禄山的要求很简单,“清君侧”,灭了杨国忠,万事大吉。
在帝制时代的中国,七王之乱,“清君侧,诛晁错”,于是可怜了晁错;靖难之役,也是清君侧,诛方黄齐;毕竟以下犯上就是大大不该,再不找个好的借口,没人肯跟你混了。
当安史之乱时,唐旁边有个大国叫吐蕃——吐蕃本国名叫大蕃(音“大波”),可能翻译时觉得大蕃不好,于是成了吐蕃。大蕃趁乱对唐用兵,赞普一怒,攻陷长安。曾经的甥舅联盟,如今乱了,人家也不认你天可汗了。回纥虽然认天可汗,但更认钱,帮你打仗可以,给钱。
司马光在《资治通鉴》里对安史之乱的评价很直接,“由是祸乱继起,兵革不息,民坠涂炭,无所控诉,凡二百余”,维基百科觉得很对。起兵前,安禄山身居三镇节度,手握重兵,本身就有精兵十三万,又拉上胡人一起动手,唐无力与抗,一方面找自己其他的节度使,另一方面找异族。此二者皆祸源也。前者勇武,而且不用担心非我族类之类的问题,但是却随着剿匪,尾大不掉,杀了安禄山、史思明,造就了更多的潜在安禄山。后者已经前面说要钱,要钱还是小事,人家还要面子!你这天可汗没得当了是小事,哪天“其心必异”的时候,就不简单了——唐朝有类似于前朝的胡人南迁,汉胡杂居的问题在中原武威之时可以民族大融合,在你弱了之后便是江统理论重现,危矣。
司马光的评价是很中肯的。安史之乱之后,唐中央军队凋零,不得不依赖节度使。而加之之后的黄巢起义,节度使更加强大,直至朱温代唐,两百多年之后,随着北宋中央权力的加强,节度使制度才真正名存实亡。所谓节度使,拥有治军、治民权力;当然,有了这些之后,实际上缺的只是“开府仪同三司”的封号而已了,虽然节度使肯定有自己的小朝廷。对于既掌军,又掌财政的节度使来说,俨然就是一个草头王。出于对节度使的惧怕,北宋在治军方面的政策有了极大调整,直接导致了文盛武衰的状况。
唐朝是一个大有胡风的时代,一个文武并举的时代。唐兵威之盛,后世望尘莫及,当然,这也有其代价的。这却要从制度上说起。唐实行府兵制,这也是杜牧口中盛赞的“一时治武”。直接一点说,府兵制便是有些人平时是农民,打仗时是士兵,农闲时操练。而最明显的特点是,在正常情况下,府兵制不会另外招募兵源,因而不会扰民。这也是与募兵制相对的。
按照传统儒学的观点,府兵制远优于募兵制。府兵制是世袭兵役制度,父亲是士兵,儿子接着做士兵;而且农时耕作,闲时操练。遇有战争,走向战场。而且免除了募兵制扰民的大弊端。所以,正统王朝一般都会使用世袭兵役。明朝是卫所制,设有专门的军户;而清朝,便是八旗制,八旗世代继承。实行募兵制的宋朝,却弱于军旅。
一个朝代总有一两件事情导致其走向衰败——盛唐是安史之乱,宋是靖康之耻,明是萨尔浒之战。清朝走向衰败的标志是甲午战争,不过之前的太平天国、之后的八国侵华,都直接或间接的导致了清朝的衰亡。而真正促使清朝灭亡的,是操练新军;是军旅的强大,导致了它的直接死亡;这点与唐朝倒是很像。

Saturday, March 23, 2013

听姥姥说故事


我听过一个理论,说父母生子女之时,母亲会给子女智慧、理性的基因,而父亲更侧重于身体健康。每当我想到姥姥时,便深以为然;这深以为然的同时,又觉得这理论似乎有谬误,否则我不是太过骄傲了吗?


——有一个小的出世的时候,他不哭。医生当然是要抢救,这小孩爸便拉住医生,“算了!”
 ——算了?这小孩后来怎么样了呢?
想听故事的人,一般都会问对方,后来怎么样了,虽然有时候并不需要问,因为叙说者比你还要感兴趣。这种事情便经常发生在我和姥姥之间。人常说上了年纪的人比较啰嗦,而且说话不讨喜,因为说的肯定都是历史;甚至于当一个人开始怀旧的时候,便是她老了的象征。
我大舅在四五十岁的时候,便是个啰嗦的人,或者叫迂。身为其母,姥姥年轻的时候,却话并不多;她似乎是行在言先者,即事情在说之前,便已经做完了。当她七十岁的时候,也就是我十岁的时候,她曾经发过感慨,“我感觉不到自己已经年老”。当你投身到某些事情中时,岁月会在你身畔悄悄溜走;虽然这只是一些琐事。当然,比之他们,我在二十岁的时候,就已经是一个迂腐的人了。高谈阔论者,往往怯于行动。
我对我姥的了解,几乎全部来自于她的话。因为不像小时候会很长时间待在她身边,所以我并不讨厌她向我灌输历史。现代人,在物质匮乏的问题得到解决之后,更侧重的应该是精神上的乐观、开朗。虽然她有时候不小心会把一个几年前的问题又说了一遍,但这只代表我现在的记忆比她现在的要好;大概十年前,当我有事情需要提醒的时候,我会告诉她。
姥姥曾经是家里的小小姐,当然她家并不是大地主;但她自己也没有小家碧玉的觉悟,虽然她名字叫家玉。她上过一年私塾,这私塾的教习便是自己的爷爷。女人也可以读书吗?可以,不过除了读三字经、百家姓之外,便是女论语之类的东西了。我不知道她读过多少,但我知道她读了一年,因为不久日军就杀了过来。其时姥姥只有七周岁多。虽然只是读了这一年,姥姥却是识字的。所以我很佩服她的记忆力。
日军来了之后,姥姥一家便参与到了跑鬼反中,她裹了一半的脚,也无以为继。跑鬼反对于姥姥印象如此之深,以至于是我听过最多的。姥姥的爷爷在跑鬼反之前,将家里的八十亩地完全变卖,换成洋钱之后缝在了姥姥的衣服里。跑鬼反有什么意义呢?在当时的中国,每当日军攻向一地时,当地居民便会逃难;主要原因是日军后方供给实在是太烂;长途攻袭之时一定会有抢掠发生,而抢掠不果,自然便是杀人。躲过鬼子的锋芒,时局稳定之时,便可以回家了。
姥姥喜欢说,解放前红军便经常住在她家里;反正是共产党的部队,叫什么都一样。想来她对于朱毛应该没有什么好印象才对,每当她提起解放后,却很少有恶言恶语。姥姥的姐姐,在解放前夕,好像是上吊自尽了,但原因并非是共产党,虽然她家是大地主,不过原因好像是因为自己小脚摔死了孩子;姥姥的爷爷,在土改之时,按照姥姥的说法,最喜欢在家里念叨“杀猪拔毛”,而且应该是土改没多久就故去了。姥姥的母亲死于解放前夕,不过是病死的——当时姥姥十七八岁;姥姥每每想到六十多前的这件事,便道“当时我娘说到,如今前途难测,你不如跟我去了吧……”共产党纲领如何且不论,许家大难将临是肯定的了。
姥姥说自己小时候曾经有过一个玩伴,是自己家里的小丫环。这位小女孩大概是十岁左右来到姥姥家,比姥姥大点;按照她的观点,这位女孩子在十六岁左右,被姥姥家以还债的名义给了一户姓陶的人家。过去的丫环,一般都是十一二岁左右。年龄稍微大点就应该许配人家,小了呢,什么都做不了;应该不是像当今的电视剧里放的,二十多岁的丫环在那里摆着。按照姥姥的记忆,这个女孩当然是去作妾;其实这陶家败落,这位蛮丫头做妾做妻都无所谓了。解放后,这位南方姑娘去了“山北”,说白了,今淮南市境内。我听到这个故事的时候,便很想问姥姥,“土改之后你有没有去见过这位当年的姐姐呢,见到之后会怎样呢?如果你去见她,会不会被她一顿批斗,毕竟人家如今翻身做主了啊?”我当然是不会问,不过可以猜到事实绝非如此;对于平和的人家来说,一个丫环,跟普通家人,在生活上差别应该不是很大。
姥姥有四个侄儿,其中两个都一生未婚。姥姥几乎是一手把他们拉扯大。不过到了解放后,曾经的娃娃亲不再做数,所以她大侄儿、二侄儿便只能光棍了。而她大侄儿,好像已经过世几年了吧。曾经饥荒年代,有过童养媳这个词;我曾经很猥琐的纳闷过这个问题——她家不是有丫环吗?
其实童养媳主要是在六十年代初,而且童养媳是一个很别扭的存在。当时安徽是饥荒重灾区,淮河湾里,饿殍遍野。曾经六七岁的孩子讨饭,会问你——“可以给我一碗洗碗水吗?”姥姥父亲便是在这个时代饿死了,姥姥会叹息,“解放前那么多的战乱都过去了,却在解放后死了;放在解放前,怎么也不会想到会被饿死。”姥姥家并不富裕,但是再不济,放着八十亩地,再懒也不至于被饿死。姥姥很少提起自己的父亲,因为她爷爷很有才。而到了姥姥父亲管理家事时,家已经没了。
姥姥在低标准时期也过的很艰辛。她说及自己有一次,看到桑树上有叶子,便摘了几片,回家喝了碗汤。至于后来吃到险些丧命,所以桑树叶子要少吃。
姥姥的性格并不讨喜。当她听说自己的曾孙女叫“雨成”时,便觉得很没有学问。我便问她可有好名,她道,女孩子要稳当,叫稳就不错。我点头说,好名字。想想如果自己的侄女叫“王稳”或者“王某稳”……
姥姥有时候也会很迂。我四婶曾经念叨过自己的女儿,说她长得丑,不够端庄,做不到“行不回头,笑不露齿”。这件事情被姥姥说了很多遍,以至于每次说都会笑;有因为孩子长得丑而责怪她的吗?其实想到开头的那句话,说不定她的责怪也有一定道理——不过还是很好笑。