博客首页|TW首页| 同事录|业界社区
2011-04-30

摘要

本文从生活,工作,技术三个方面对于自己5月起的2011年进行了计划,计划本身尽量保证量化, 可评估,切实,文中也对计划的出发点做了说明。

正文

拖了太久了,和老婆的分工是老婆写2010总结我写2011计划,老婆很早就完成了,我一晃就拖到今天了。 不久前,老婆“挑衅”地问我,五一前是否能够出炉,为此,我今天无论如何也得挣出这点面子来。


2011的4个月也过去了,4月自然是和1月是不同的,特别是我对于一些事情的认识起了变化,这在下面会 简单细说下;当然,这个计划应该符合“量化,可评估,切实”这几个要素。

那么下面就分为几个部分来阐述。

生活相关

去年10月刚刚结婚,如今也刚半年了,每每想起走在一起的老婆,心中还是非常幸福的。美丽的老婆 心中一直有一个愿望,就是特羡慕别人制作的照片MTV,所以今年一个很重要的方面就是素材积累。

曾经自己以为工作就是生活的全部,也在认为努力的付出会有所回报的,当然,而今我依旧相信,只是 开始也在考虑身体健康,不久前就翻译过 程序员常见的健康问题 来对自己的健康有所关注。在过去正式 工作的一年里,身体开始不太适应了,每天晚上回家时总是觉得身体酸痛,打不起精神,再加上不注的加班, 更加恶性循环。所以今年除了工作,健康是非常重要的。

阅读是对抗浮躁最有效的方式,当然我指的是书籍阅读而不是快餐式的阅读,阅读带着思考,再化作文字即是 博客,这即是今年一个很重要的内容,阅读加博客。阅读是为了学习,作者的著述大致总是深入思考过的,所以 阅读是一种捷径式的交谈;博客是反思,对于自己的人生和心态,这样才不至于迷失于浮躁中。

交际,是与同行,是与同志好的人,一起在交流,在学习,在进步。这样,也不至于太过于闭门造车,这样才 能够了解事情的其他方面或者看待事物的其它角度。所以,今年大致可以参加一些技术聚会,演唱会,读书会等等, 以丰富自己的生活。

大致就是上面这些,至于娱乐如电影,话剧等,大致也可归纳到阅读之中,本质也是学习一种思路或者接触一种思考。 为此,我有如下的清单(2012年1月1日前):

  1. 旅游

    • 北京市内:不少于10次
    • 北京市外:不少于2次
    • 拍照:不少于500张
    • 游记:同旅游次数
    • 照片MTV:不少于1次
  2. 健康

    • 医疗开销少于500元
    • 体检不少于1次
    • 购药次数少于5次
    • 体重:70KG内
  3. 阅读

    • 技术类书籍不少于8本
    • 非技术类书籍不少于8本
    • 读书笔记同阅读书籍的数量
  4. 博客

    • 每周平均不少于2篇
    • 总计不少于70篇
  5. 交际

    • 不少于5次
    • 每次的活动会写一篇记要的博客
  6. 娱乐

    • 电影不少于4次(指电影院)
    • 话剧不少于1次
    • 演唱会不少于1次(最好是水木,周杰伦,孙燕姿,许巍或者汪峰)
  7. 每月一次的挑战:即8次挑战,参考 30天“挑战”之2011年4月

工作相关

从去年的5月起正式开始工作(那时研究生还没有毕业),从和老板一起找写字间,一起招聘,到 如今30多人的公司,并且也要搬到更宽敞的上地的新办公室。过去的一年,我已经想写一篇博客 来回顾这一年工作的历程,所谓的创业中的辛酸,当然创业只是老板的事。

这一年里,自己对于工作的态度也起了不小的变化,毕业初始时的一些设想与此刻的现实自是有一段 距离的,不过,问问自己过去这一年自己尽力了吗,我想我可以肯定地回答是。

“创业公司老板不能以创业为借口来要求员工少拿工资,多干事,即使是创业公司,要么给员工合理的期权, 要么给高工资,这些才是员工卖命的合理理由”,记得在微博上看到过大意是这个意思的一条,我深是认同, 创业与员工其实关系不大,特别是在这种没有任何期权或者工资激励的场合下,以创业来说事,我打心眼里 觉得恶。无非两种结果,一种创业失败,那老板和自己都走人,只余感叹过去这些奋斗的岁月;一种创业成功, 老板拿到钱时,就像打下了江山,要论功行赏时,这时员工又有什么话语权,老板的主观在决定着你这些日子的 功劳,倘若老板贪一些,基本上就没你什么事了。

当然,我的建议是,要么拿着高工资,为现金而卖命;要么有合同保证的期权,为未来而卖命。而不要寄希望于 老板的人格,“客观的制约性才是约束人性最有效的办法”。

到这里可能我已经对于这一年的工作持否定的态度,其实不然,初始的想法也没完全就冲着一定成功来的,而是 想完整地参与一个公司的孕育与成长过程,其中的管理的问题和经验,产品的开发与运营等等,当然这一路走来, 自己还是受益匪浅的。记得有2次在火车站的网吧里处理线上游戏的问题,1次大年29晚上2点在处理bug,2次自己在 休息时被电话叫醒处理游戏的问题,还有不计数的加班。这些如今看来,从中更多看到的是经历和经验,并没有 过多的抱怨。同样从微博中看到的一句,“别人不愿意做的,通常才是你成长的来源”。

那么在今年,我有如下的目标:

  1. 产品:

    • 不少于一款自己喜欢的产品(自己真正喜欢)
    • 不少于一款市场上成功的产品(日收入不少于2W欧元)
    • 自己参与的产品不少于一款可以上QQ空间
  2. 收入

    • 年节余不少于4W(除去房贷,装修等等开支)

技术相关

技不压人,我们以技术为生的程序员,修练好自己的内功总是最为重要的。“招之能来,来之能战,战之能胜”,这是 我的目标。无论是对于职业道路上的门票,或者自己创业时技术的把关,技术都在其中起着至关重要的作用。

当然,这一年的工作,有几点是值得一说的。一是技术只是工具,产品和运营才是关键,没有市场的产品所用的技术 再牛B也显得一文不值,当然我们说的是商业领域,所以,无论是开发前端,或者做后端,只要对于产品有益,我不会 拒绝;二是没有难问题,只有怕问题,再难的问题只要足够时间的研究总是能够理出一个思路出来,至少最后可以拍着 胸膛说这个问题不可能;三是很多问题其实领域内的学者已经很好地研究并且给出了最佳实践,而自己通常还在不断地撞墙中 才得出了一些前人的经验,如“程序写简单了难,写复杂了容易”,设计模式,Code Complete中的软件建构等等。

另外,之前有些急,一看见网上大家推荐的好书,就立马下载或者购买,然后便永久地躲在了灰尘中或者电脑硬盘的角落 (当然我的书都在某个“云”上);还有自己有太多的兴趣而都没有太深入,所谓涉猎要宽(知道或者了解)专注要精是当前 最为需要的,也就是在公司或者互联网有某方面的问题是大家一想到你就肯定地认为你能够解决的这种信任。

为此,为想在今年完成下面几个相关的目标:

  1. 语言:

    • Javascript(为HTML5技术做一些储备)
    • Actionscript(公司的需要,语法大同小异,只是在处理细节上,内存管理等方面需要格外注意)
    • Objective C(iOS上的编程,为自己的iPod Touch,iPad编个小软件,为后续的移动智能终端作基础)
    • Java(Android编程,为自己的Samsung手机编个小软件)
  2. 专注:

    • Python
    • Django
    • 数据库(MySql等)
  3. 综合功力

    • 设计模式
    • 编程理念
    • 自动化
  4. 项目管理(如何控制开发进度,降低风险是关注的要点)

  5. 产品和运营(为什么自己不喜欢的产品在市场上能够取得很大的成功?如何运营等?这些都是需要关注的)

社交应用和移动应用是我比较看好的两个方向,在上面的技术学习上也有所体现,当然今年我的主要关注点还是 后端的开发,即Python相关的开发。我想在今年里,通过阅读一些书籍(如Code Complete等),一些源码(如 Django,Sphinx)来了解Python代码的高级处理方式,其它的语言(如Javascript,Java等)来比较和借鉴一些思路。

基于上面的学习,我想在今年做几个自己感兴趣的小项目:

  1. 一个小网站
  2. 与网站可同步的iOS,Android应用(基于HTML5或者原生的应用),并上传至App Store和Google Market
  3. 与网站可同步的QQ应用,360桌面应用
  4. 基于Actionscript的一个游戏框架
  5. 基于HTML5的小游戏

大致就是上面这些,算是对于自己下半年的一些计划,当然与老婆预期的可能有些差距,我猜想老婆可能期待 一个关于家庭的计划。不过,细致至此,我觉得也就达到了计划的目的,至少到年末时可以衡量以评价这一年 哪些做得不错,哪些亟待改进,这也就足够了。

总结

基本上到最后归根结底就是执行力,无论是任何事情的成败。所以,这份清单也可作为警示自己提高执行力的一剂药, 白纸黑字,无论看或是不看,无论前进或者止步,它便永远在那里。

下载原文

可从 此处 查看或者下载。

参考资料

  1. 30天“挑战”之2011年4月
  2. 程序员常见的健康问题

后记

刚刚确认了今年的阅读清单,可以从下面两个链接上找到:
  1. 2011年度阅读书目(非技术类)
  2. 2011年度阅读书目(技术类)
2011-04-28

摘要

本文主要说明我个人对于苹果公司和苹果产品的一些认识的变化过程,以及 简单地预测了下苹果公司的未来。

正文

好久都听说苹果公司,听得比较多的是07年时,那时的 iPod 什么的还是比较火的,到 后来的 iPhone ,我那时的印象就是苹果公司就是一类似于我国的神舟或者oppo这种公司, 再到后来开始入手了一个 iPod Touch ,对于app store有了直观的认识,以及后面的Mac, iPad 等纷纷入手,我开始成为了一个真正的“果粉”。

苹果的“小打小闹”

那时是最初接触到苹果的一些公司和产品信息,也听过Jobs在斯坦福的讲演,感觉是苹果受困于 PC市场的竟争(鉴于微软的垄断性份额,事实上的苹果在这个领域堪称失败),以及软件硬件解决 方案的巨大竞争,所以才开始更加投入到移动终端领域。

那时的移动市场,还只是很初级,老大的诺基亚提供的只是满足大家通信这个基本的需要,通信以外的 它并没有着手关注。而那时,移动播放器也开始大兴其道,记得我的第一个mp3是newman的128M的播放器, 话说那时只有播放功能,还得一个7号的电池。

这时,nano,touch闯入了这个领域,对于我而言,只是认为它是”just another mp3 player”,并没有过多 关注其创新性的东西。即使后面知道苹果在这个领域有多么大的市场份额,也只是觉得这个领域本身意义 不大(相比于微软和intel等)。

那时也听说了iTunes的相关信息,知道这是一种营销模式,但是对于并不是首创的苹果也没带来多少印象上的 改观。

App Store

App Store 的出现才让我如受猛然一击,眼前悄然出现了一个完整的软硬件完美结合的生态系统,参与其中的各个 环节都在有机,自愿地为整个生态系统增添着生机。

研究生时宿舍的哥们买了一个 iPod Touch ,于是我有机会尝试下这款印象并不是太好的产品。还记得第一次打开时, 手指放置其上进行一些触摸操作时,那种感受是许久没有过的。速度与体验的完美,各种有意思的应用等等,于是 我也开始想为自己购置第一款苹果产品。

当然,那时这位哥们已经开始尝试一些苹果应用的开发,从他口中听到的关于应用的赚钱传说也总是很吸引人的。

第一款产品 iPod Touch 入手,兴奋之余,切身体会到了 App Store 给这款硬件产品带来的增值,而如此的增值又反过来 促进了苹果产品的热卖,进而又促进了 App Store 中应用的销售,于是苹果,用户,开发者之间形成了一个供给完备的 生态系统,而在这个生态链上,苹果所扮演的基础设施作用(设备提供,应用开发环境,应用销售环境等)无处不在, 他所在的地方,虽然对于单个其它生态链上的角色的收费不高,但是基数和长尾的作用,让苹果坐收无尽的财富。

iPad横空出世

去年 iPad 出来了,对于苹果不再偏见的我这时已经生出了崇拜出来,也就是开始粉苹果了。经过几个月的出货,去年时 苹果的市值竟然超过了微软(07年时这是我怎么也不会想到的),随着 iPhone4 , iPad2 等热销,整个由苹果创造出的生态系统 模式开始被各个厂家和公司所仿效。君不见,微软和亚马逊对于 App Store 不能专属于苹果的申诉,中移动等公司的应用商店, 平板电脑一夜之间的火暴,各种的苹果山寨产品, iPad2 在中关村的天价出售等。

这里有两件事值得一说。

第一件, iPad2 发布会时业界的关注度是其它公司难以企及的,记得第二天看视频时,看到Jobs的人时,内心竟是非常的感动, 我想对于其它产品我是怎么也生不出这种感情的。Jobs的宗教性质的产品理念看来是已经深入人心。

第二件,去年初,大致是电纸书最为风光的日子,newman,盛大,等等厂商分别介入,当然老大的汉王自是无比风光, 我那时也花了1000大洋买了个,甚至也向好友推荐,不过后来由于体验上的缘故还是用的不多。到了后来,自己入手了 iPad,再去看书时,内心的愉悦与书本身的愉悦相映成趣,电纸书已经好久没再用过了。于是,前几天听到了新闻说 汉王的几个高管减持股票及今年一季度的财务披露所显示的销售和收入的大幅下降,正如新闻中所言,平板电脑的冲击是 巨大的,而其中的开创者和领头者自是苹果的iPad.

后话

随着其它厂家加入苹果所在领域的市场,如HP,Moto等,还有诺基亚与微软的联盟,Google Android操作系统的不断增加的市场份额, 本地化的应用商店的发展,及通信运营商在下游市场的影响,苹果的日子并不会是一直顺风顺水,当然这或许也是好事, 无论是对于用户还是产业而言。我想,只要苹果的创新精神不丢,苹果还会走得更远,我也有理由期待苹果的另一款 革命性的产品。

下载原文

可从 此处 查看或者下载。

2011-04-20

月初制定了 第一期的30天挑战 ,第一期的目标很简单就是阅读林达的近距离看美国系列的第4本 (也是最后一本),即 如彗星划过夜空 - 近距离看美国之四 。延续了林达的质朴的文字,和 较严谨的行文,从这本书上大致能够一窥美国的民主进程,和在这个过程中所遭遇的问题。

读完这本书,林达的这系列书也算是读完了,对于美国的一些了解也加深了许多,如美国的宪政、种族问题、 民主进程等等,这系列的书也有些年代了,如第一本怕是有15年左右的时间了,这15年里,美国和世界都 发生了许多重大的变动,而这些变动对于书中所言说的一些观点也会增加更多的例证或者证伪。例如林达提到 的“五角大楼机密文件”事件,相比于去年的“维基解密”事件,我想对于民主与国家安全的权衡更加有了新 的场景和例证。但是,200多年的美国宪政和民主历程、美国人民的一些思维角度,至今也没有大的更动,还 是基于追求“人人生而平等,都有生命自由和追求幸福的权利”,所以对于机会平台的追求,对于程序公正的 追求,对于国家机器的权利担心,形成了美国人一些处世的哲学和角度。

所以,这一系列的书对于了解美国人民的一些处世思路、价值观等,都会很有益处,当然,存疑地去读书 这是一个基本的读书习惯,林达所讲的是否真正对于美国人普适,或者有多大的美国人现在依旧保持着这种 价值观,这些值得存疑,或许只有某天我们有机会近距离接触到美国人时,才会有更加准确和明确的认识。

关于林达

林达 的相关信息大致可从上面的链接里查到,他并不是一个人,而是一对美籍华人夫妇的合用笔名。细腻的 文字如同当面在你耳边娓娓而谈,让读者如沐春风,而他的文字并不枯燥也不学究气,你大致可把他的文字 当作是一种政治文化的“科普读物”。

在读完他的这系列文章后,我打算再去阅读他别的作品,这些大致可从 这个列表 中找到。

我的所得

书的内容我不打算复述,我只想说说我从这系列书中学习到了哪些知识或者对我的认识的一些影响。

存疑


我想这点是我最大的收获,无论逻辑多么严密、内容多么详实,或者言之凿凿地说着,放在之前,我大致 就会相信这些话,而很开心地觉得自己对于某一点有了自己的取向,可是,事实是自己不目见耳闻的二手或者 N手信息,你大致只能存疑地看过而已,倘若这个信息与自己的关切不大,大致可当作娱乐来看,否则需要 慎重确认后再去下结论。

我想这在而今如此繁复的社会下更显重要,况且所谓“权威”和“专家”泛滥、媒体不独立的当下,自己的 存疑于已于人都是极有益处,于已,不至热血沸腾地去跟风去扼杀异己,于人,大致可减少对于异己的伤害 也能不影响自己能够影响的有限的几个人。

记得当时在 微博 有如下的留言, 大致能代表我当下的观点:

看得东西越多,愈发觉得自己很难去判断事情的真伪,甚至对于自己的观点都更加无法坚定。
譬如,初看某文章时,往往会觉得其言之凿凿,待看完一些评论后,又开始生疑。或许,无论何事,总是需要生疑的,
或者说需要更加全面地去看。上面我说的是http://t.cn/hBJ3zG

权衡


很多时候,一个决策的出现就是若干种利益的权衡,如美国宪法的诞生过程、平权法案的立与废等等,你不能 说这个决策是否公平,因为它总是于某些人是不公平的;你也不能说他是否高效,因为在若干种利益下总是 很难得到最优解的。那么判断一个决策是否合理,应该是看它整体是否进步、是否没有考虑到不同的声音和利益, 当然决策的程序公正也是很关键的。

权衡,意味着妥协,各方利益的妥协,但是权衡的结果是一个可行的、大家认可的方案,据此方案,整个方案的影响 对象是向一个积极方向前进的,我想这就是权衡的意义所在。

这个过程通常显得低效,不会有大刀阔斧地“集中力量干大事”这样的事情,当然也就避免了大的失误的产生,如“文革”, 一小步一小步地向正确的方向前进,我想这就是美国各项事务的整体逻辑。

自由与民主


我已经不再盲目迷信自由与民主了,我现在的观点是,民主自由进程应该与所在社会人民的素质阶段是关联的,只有人民的较高 素质的土壤才能孕育出民主和自由之花,否则,出现的大致会是“多数人的暴政”。

当然,我不同意普适的民主,并不说明我就同意无限期的专制,我想整个机构的建立、整个流程的完善、整个素质的进步,都是 一个深层次不断进化的,至少政府应该有这个意志去分阶段地、正确地引导人民走向民主与自由,所以素质的提高应该是建立在 教育之上的,在基础教育上增加这方面的内容显得非常重要。

当然,看到很多人在微博上说,政府已经不再去考虑长远的事情,而利益所得者只是关切当下,享受既得的利益,我想倘若 真是这样,我们这些对未来充满希望和不断奋斗的人,总是心里很难受的。

这二者不能一蹴而就,但是,只要我们在向这个方向前进,我都是支持你的,无论政府或者当权者。

种族


不能不承认,我自己也存在种族的偏见潜意识,对于其他肤色人种总是有一些异样的感觉,特别是有色人种。所以,看见 他们我也会有更强烈的戒备心理,也会生出唯恐避之不及的念想。

读了林达的这系列文章后,虽然了解了种族问题的诞生和发展及黑人争取自己权利的过程,虽然对于黑人的悲惨遭遇内心充满了 怜悯与同情,可在实际中真正见到时还会有异样的感觉,可见偏见的根深蒂固。

当然,现在的我,会更加客观些,看到他们,短暂的异样后,仍不会因此而做出其它的举动,或者改变自己既有的计划,我想“不 区别对待”这是对于种族歧视宣战的一个开始。在地铁上,我或许还会多看他们几眼,发现并没有不一样的东西(除了肤色)时, 内心更加接纳他们。

当然,中国几千年的历史和民族融合史带给我们一个巨大的财富就是不存在这种因为种族民族不同而生出的问题,当然只有200 多年的美国,我想他们在种族融合中也会走出自己的道路来,最终也会达到一定的合理程度。那时,马丁*路德*金应该会很欣慰。

结语

末了,我想中国的发展和人民素质的提高赖于我们每个人的进步,如果你能看到这里,我想你和我大致算是可以承受这种自由与 民主的人了,那不妨让周边的朋友也来享受林达带来的思维盛筵,或许某天我们能够真正走向民主与自由。

2011-04-18

摘要

本文主要说明在 django 中 schema migration 的两种最常用工具 south 和 evolution, 并且说明二者的差异和为什么要使用 south 作为最主要的 migration 工具。

正文

关于schema migration

无论我们使用何种语言进行web开发,快速开发随之相伴的是需求的不断变动,也就意味着我们要不断 增加或者调整已有的数据库模式(database schema),譬如一个很常见的变动是,我们需要在用户表中 增加一个状态位来标记当前用户是否已经删除,而不是直接从数据库中删除(虽然我不支持这样的保留用户 数据的行为,可是如今大多数的应用即使你要删除自己的账号,其实也不会永久删除的,所以,只要是网上的 信息,大致你可以认为是不会消失的),那么除了应用逻辑的改动外,你需要在数据库上增加一个状态位的 字段。

上面就是一个很常见的应用场景,当然诸如字段的属性更改,增加或者减少字段等等,也都属于这个范畴。

很可惜, django 本身并不支持 schema migration (也就是当你执行 syncdb 时并不会产生任何作用, 增加和删除字段会有效,不过复杂的则不支持,如更改一个字段的属性等),这也就是 evolution 和 south 所要解决的问题。

关于evolution

相比于下面要说明的 south , evolution 出现的比较早,它的主要思路是:在项目初始时会对所有的数据库schema 进行记录(也会存在一个数据库表中),当某个表的schema有更改时,当你执行 syncdb 时, evolution也会与当前记录的 schema进行比较,如果 evolution 认为有更改,则它会进行比较进而生成一个最新schema与上次schema所要做更改的sql,用户可选择执行来进行 schema migration.

相对而言, evolution 很容易集成到自己的项目中,并且也很容易使用,并且 通常 也能很好工作。所以,在我最初的 项目中我基本都是使用 evolution ,但是相比于 south , evolution 的不足有:

  1. 开发并不活跃(写本文时,看到的最近一次更新是2010/11/19)
  2. 没有得到 django 项目核心开发人员的推荐和认可(而 south 是推荐的选项)
  3. 不支持1.2的多数据库
  4. 不支持数据的迁移(只支持表结构本身的迁移)
  5. 不支持rollback到某个schema
  6. 通常需要从项目上线起就开始使用(也就是没有数据时),对于已经有数据的项目则不支持
  7. 跨app的迁移并不支持
  8. migration的code并不能纳入到版本控制工具中(因为 evolution 使用数据库表,而数据库本身是没有状态的)

当然它也有诸如简单易用,学习曲线低,配置较少等优点,当然 south 也并不复杂,并且有更多的优点,请参考下面的说明。

关于south

south 正是因为 evolution 有这么多的问题,作者才开始了这个项目,上面提到的8个问题, south 已经很好 地进行了解决,并且在未来可能加入到 django 的代码库中(其实1.2也差点合并进去,因为 south 作者不建议现在合并 才最终没有成形, 具体可查看 作者的说明 )。

如果你之前没有使用过 south ,那么从现在起开始用 south 会对你受益匪浅; 如果你之前使用的是 evolution ,你会发现 south 更加友好和强大。

那么,不妨从今天起在你的项目中开始使用 south 吧,如何开始,具体可以参考 south的tutorial

另外,你也可以看看 south alternatives 和 south’s design 两篇文章来了解更多。

总结

django 在不断发展,相应的周边的工具也是层出不穷,选择合适高效的工具,对于开发者而言是有很重要的意义的, 而让人头疼的 schema migration 则会因为 south 的出现而得到很好的解决。

下载原文

可从 此处 查看或者下载。

2011-04-16

引入

注:由于网站有文字过滤功能,会将部分文字替换为星号,请读者自行理解,可能过滤的有”运 动“等,也可直接打开这里来查看。

想必如果有人正在看这个博文,其身份不是程序员,也至少是IT相关的,面对电脑,久坐,不好的睡眠等等 都在折磨着我们,可是,我们是否在反思进而求变,还是像作者提到的,只是沉迷在“想成为一个编程牛人”的幻觉 中而用时间不断累积地编码编码,而忽略了“森林”(相较于树木层次)层次的东西,甚至忽略了更为重要的健康。

扪心自问,我们今天所做的一切是在追求什么,我想很多人的回答会是大同小异,大致就是“为了一个有更高品质 的生活”,为了此目标,因为我们的老爸不是李刚,也不是军代表,我们也没有中彩票的运气,我们也没有周鸿祎那样 把握机会的能力,我们也没有如同Mark那样的编程天赋,于是我们很自知地认为只能靠自己的努力来实现我们这样简单的目标, 于是我们在拼命,在透支。


是否每天到了中午就头疼的厉害,想休息,可软件还有bug;是否在晚上下班时全身酸痛,可PM还在摧着进度;是否想 去人间天堂的杭州玩玩,可周六我们还要赶进度。无止休的bug,无止休的加班。而自己呢?

晚上是不是睡得很晚,在看一些技术博客,或者在摆弄一些最新的技术(NoSQL,GO语言,Scala?),或者在读那厚厚的技术书籍, 早上起床时还是觉得累,中午已经不再想下楼吃饭,一坐就是一天,甚至上个厕所都觉得浪费时间。

当偶尔看看微博,看看cnbeta的新闻,看看stackoverflow上的一些有意思的东西,这时才会略显奢侈地会心地微笑。

那不多的工资,那想买个android手机、iPhone、iPad的狂热,那愧疚于老婆的心,于是我们这些资质一般的程序员便在 这样的状态里徜徉,或许一点小进步你会觉得由衷地开心,或许一个产品的数字增长你会乐见其成,但是君不见,那些30岁左右 猝死的IT人恰是我们这样资质普通但又力求上进的程序员!而比上的周鸿祎、李彦宏、马化腾们自是要活到99的,而比下的不求 上进的菜鸟们也能享受知足的快乐。

我们很尴尬,但是我们却懂得反思。

于是,先从健康做起吧,因为这才是本。下面的文章是针对程序员健康的一篇,作者细致地说明了程序员如何避免一些常见的问题, 在自己阅读中发现值得一读,所以我翻译出来和大家一起学习。

文章比较长,我写个摘要:

作者当了多年的兵,也就是所谓的美国大兵,但是职业是程序员,曾经学习和锻炼过很多运动项目,特别是一些武术类型的。 虽然自己也久坐编码或者弹吉他等,但是作者的身体一向很好。

然后作者根据不同类型的程序员可能面对的问题,写出了处理方法。

  1. 手腕疼痛:编码前做一些反转和拉伸等运动。
  2. 视觉疲劳:每天保证户外溜达2个小时
  3. 背部问题:选择合适的椅子,做一些伸展运动
  4. 脱水:尽量保证足够的水摄入,不要喝苏打类饮料
  5. 肠道和尿道问题:及时上厕所
  6. 痔疮和前列腺问题:避免久坐,不要在厕所久呆,及时上厕所
  7. 维他命D缺乏症:多晒太阳
  8. 睡眠紊乱:买一个好床,自我催眠,建议早睡早起
  9. 僵硬与灵活:伸展练习

如果想了解各项的具体内容,请阅读下面的全文。

原文地址见: Common Programmer Health Problems

感谢 老婆 对本文的校对。

正文

我正在完成 Learn Python The Hard Way 的最后几节课, 我想在其中包括一节关于程序员在职业生涯中碰到的一些 常见的健康问题。我发觉在程序员编码过程中,很容易忽略 自己的健康状况, 这大多是因为编码过程中需要高度的集中注意力. 我希望其他人能够通过简单的理解一些健康相关的问题从而对自己 产生益处,而这些问题已经影响了我或者许多我知道的其他程序员, 我也会谈及如何避免这些问题.

我可能不会将本文全文放在LPTHW(译注:也就是上面作者提到的课程的链接)中, 因为这样会显得有些多,但是我会在其中包含一个简略版的。如果 你讨厌或者喜欢本文中的内容,或者你有一些可供参考的材料,你可以 来信。

我的背景和资质

我曾是一名高级美国大兵,并且学习了许多的武术( 译者注: 作者用的是martial arts,意思就是一些强度较大的拳术类的运动,请不要狭义地认为成中国武术 )。近些日子, 我没有像以前一样在外面练习武术,相反我更多地学习瑜伽,沉思, 和简单的运动。当我年青时,我当时可谓是非常强壮和健康,现在 我依旧很强壮,这也是受益于我年青时的习惯和锻炼。

首先我想列出我不同时期学习的一些武术:忍术(Ninjitsu), 合气道(Aikido),柔道(Judo),泰拳(Muay Thai),咏春拳(Wing Tsung), 卡波耶拉(Capoeira),菲律宾拳(Arnis)。当然,其中只有泰拳,我 真正持续的学习了,大致是6年。其它的,大致都是学习了1至2年。因为 我搬迁的比较多,所以在当地什么最合适学习,我就学习什么。

而在美国大兵服役期间,从刚及格到最高分,并且我连续2年保持了 身体素质的最高分。如果我记得不错的话,这样的成绩源于每天大约2个小时的 室外锻炼,这些在军队也并不是很困难,因为在军队实在没别的可以做的。

后来,无论我外出锻炼或者不锻炼, 我的生活中一直保持着几乎相同的体重,灵活性和体力,也就是说我没法 告诉你如何减肥的决窍。能够保持这样,大致不可能是遗传的原因,所以 你可以考虑我的一些适合你生活的建议来改善自己。

我上面已经说过,随着我年龄的增长,我愈加喜欢一些比较柔和的运动形式。 我觉得瑜伽是一项很好的运动,因为它并不是大家所说的那样难。我同样喜欢 普拉提,游泳,舞蹈,以及其它的不能直接影响身体的运动。我特别要小心我的 双手,原因我后面会解释。

好了,说了这些大致能够说明我知道一些东西,但是更重要的是,当我在做这些 运动时,我也同时以写软件为生。在我从军队中退役后,我平均一天在编程和 学习上要花去大约8至16个小时。我也盲打,并且学习吉他,这样我几乎避免了 腕管综合症和其它的重复性压迫性损伤。

我期待我的一些如何保持身体健康的经验能够帮助你增强或者保持你的健康。

程序员需要面对的常见问题

程序员领域是一个让人迷惑但又容易让人受到损害的领域,这部分是因为从表面上 来看你并没有付出许多,也是因为许多程序对于自己健康所持有的态度。你应该 特别注意自己的身体健康,因为当你的身体处于健康状态时,你将会有更多的时间 和心力来投入到重要的事情中,而不是一些令人烦恼的身体上的小问题上。

很明显,大家都在不断强调要适当地饮食、多做一些户外活动、勤做锻炼。我并不会 告诉你如何适当饮食、进行户外活动或者如何进行武术训练来保持自己的身体健康。 如果你对那些事情很有兴趣,你不妨找一个专业人士来帮助你训练。

我真正想要涉及的是在程序员的日常工作中会遇到的一系列问题,这些都是一些简单 明白的事情,但是由于各种原因,程序员却往往不会得到特别重视:

  • 重复性损伤引起的手腕痛
  • 过长时间盯着动态的文字而引起的眼睛问题
  • 错误姿势引起的背部问题,特别是后背的下部和肩膀的上部
  • 没有按时排便和排尿引起的肠道和尿道问题
  • 由于饮用过量咖啡和不足量的水引起的脱水症
  • 男同学由于坐的太多引起的痔疮和前列腺问题。是的,我已经有轻度的症状
  • 缺少阳光引起的维他命D缺乏症
  • 由于睡得过晚和饮用过量咖啡引起的睡眠紊乱
  • 缺少拉伸运动引起的僵直和酸痛

由于编程、吉他或者举重不当,在过去的岁月里,我不时地要与这些问题做斗争。 在面对每种问题时,我都能够保持健康,并且避免它给我后面的生活带来过多的影响, 事实上我偶尔会有出现几个不大的问题。你可能会说,其中的一些问题很蠢,但是, 请相信我,即使你不曾有那些问题,许多的程序员仍然遭受这些问题的困扰。

通常的原因

通常引起这些的问题的原因可归结为过于痴迷编程。正如我一样,你可能非常想 让自己成为很牛的程序员,因此你为了掌握编程的技巧,你放弃了生活中的其它 所有的东西。你不去洗澡,你去参加10小时的编程比赛。你不能保持适当的饮食, 以及所有的对于“真正程序员”的神化了的信仰。

事实上,真正的程序员都是某种傻瓜。他们并不能按时吃饭。他们并不能保持 适度的性生活。他们一跑起来就气喘吁吁。他们身体器官有很大的问题,而这些问题 并不是由于疾病引起。实际上,为了成为某个领域的牛人而要自杀则是很得不偿失的。

所以,当你逐条阅读这些问题及我是如何克服它们时,记住那只是为了让你获得一个平衡的 生活,而不要将自己过多地沉迷于编程或者自己的其它事业上。请相信我, 如果你能够拥有轻松的状态、健康的身体的的话,我敢保证你的生活会更好的。

手腕疼痛

手腕疼痛是影响我最大的一个问题,因为我经常会长时间地编程或者弹奏吉他。 自从我22岁起开始将编程作为我的工作,我的手腕就会周期性地疼痛,但是 我总会做一组合气道(Aikido)来调节我的手腕。

如你所料,合气道(Aikido)所具有的神奇的手腕训练会让你的手腕同时保持强壮 和柔软。日本人发明这些训练来避免在训练中受伤,因为合气道(Aikido)中的 许多技巧都包含着手臂、手腕和肩部的伸展、扭拉和打通关节。

对我而言,这些训练总能够帮助我解决关节错位和疼痛的问题,并且能够帮助我 长时的编程而不致有过多问题。只有当我换一个新的奇怪的布局的键盘时,这个 问题才会又出现,但是如果我能够简单地坚持一周做这个训练,当我再去编码时, 我的手腕又恢复了。

现在,如果你还受手腕疼痛或者别的重复性损伤困扰,在尝试我的建议前请咨询 你的医生。如果你开始尝试这些训练,请一步一步慢慢开始,并且不要让自己有疼痛 感。拉伸不应该有疼痛感,而只是“奇怪地不舒服”而已。如果你感到疼痛,则 最好不要再做这种训练。

你真正需要的是每次拉伸时都感到特别放松。这很难解释,但是在训练时不要强迫 你的关节停留在某个位置,而是让它停在它当前的位置并且想象让它放松或者“让” 它移动一点位置。

熟记这些后,你可以从下面的视频列表中选择一些来做训练,这些视频会教你如何完成 这些训练:

下面说明在你坐下来编程前如何来做这些训练(记得每次都要做呀!):

  1. 首先,你需要热身,向前伸出你的手,尽自己最快的速度来抓住面前的空气, 循环20次。然后抖动你的双手,然后分别逆时针和顺时针旋转你的腕关节各10次
  2. 以你最擅长的训练来开始第一个训练,中速地做5-10次
  3. 顺次来完成每一个训练,但是在每完成一个训练后,抖动你的双手、双肩和 旋转你的手腕来摆正位置。这些训练会让你的手腕中的骨头有一些偏移, 所以抖动会让它们的位置恢复。
  4. 一定不要做的太过量。只要足够让你的手腕感到柔软和放松就成,而“不经历 痛苦不会见彩虹”的谚语只会让你受伤。

每次当你要编程之前和编程之后,都完整地做一遍。完成一遍训练并不会花太多的 时间,经历过初始时的不适,最终你的手腕会适应,而你也会开始感受到舒适。

再重复一次: 在开始训练前一定要咨询医生 。做这些训练时你自己需要承担 风险,所以当你大意而让自己的手腕受伤时,别来找我。这些训练在不同的武术训练 中已经被使用了几千年了,所以我确信它们并不具有危险性,但是每个人都不同。 如果你没有正确地做这些训练,你可能会让自己受伤,所以,如果你感到疼痛, 请停止并且及时咨询医生。

吉他演奏家更加不利

程序员很容易发生重复性压迫损伤,但是相比于吉他手或者贝司手,这根本不值 一提。由于各种很蠢的理由,每个人都觉得要成为一个很牛的音乐家就得“每天 练习8个小时”或者“每天练习16个小时”。因此,吉他手通常会 损伤自己的双手以至于造成不能再弹的窘境。

吉他对于双手而言是一个非常糟糕的乐器,因而一点小伤就可能让你再也弹不了。 我“交了很大的学费”才学习到了这点,在我学习的课堂上,我就像一个傻蛋 一样,我完全相信我的指导老师说的我必须一天练习8个小时的话。我自以为 他所说的就是要我必须每天练习8个小时,然后我就这样坚持了大概一个月,最后 我得了基底动脉性偏头痛(BAM, 译者注:查了半天不太确认BAM指代的是什么, 比较接近的是Basilar Artery Migraine,所以此处取这个意思 )。

我的大拇指生出了一段骨刺,而且我所有的手指都是疼的要死。我的手腕那时仍很强壮, 但是我的手指却很柔弱。如同一个傻蛋一样,我并没有去按照我所熟知的来做——也就是 对于任何的新的练习都应该循序渐进地进行。

我终于通过下面的过程恢复了,而这个过程花去了大概1年半的时间:

  1. 使用那些对我的双手没有伤害的吉他。所谓的“你能弹任何吉他”根本就是费话。 使用不会伤害你的最好的吉他。
  2. 做上面的练习,然后循序渐进地也对手指做这些练习
  3. 通过做一些练习来慢慢地恢复手指和大拇指,来增强它们的力量和灵活性
  4. 即使在弹吉他时,也要一直尝试放松,这样就可以更轻地触摸琴弦
  5. 避免弯曲,因为这样会对双手造成伤害,并且引起受伤
  6. 通过不断地调整位置和弹奏的方式,我可以不用紧握吉他而快速地移动, 这样我的大拇指就可以处于一个比较舒服的位置(吉他的背面)
  7. 调整吉他的高度,这样我的肩膀和弹奏的双手会感到舒服一些
  8. 坚持站立着进行弹奏,尽量避免长时间的坐着弹奏,因为弹奏的位置会比较 难受,如果我非得坐着,我会一直保持同样的位置

通过去年不间断的坚持,我的双手终于感到舒服,也已经恢复。我并没有 好的习惯来防止我伤害自己,所以作为一个不再年轻的我,坚持这些练习是非常重要的, 但是那也同时意味着我无法做一些可能伤害我双手的事情。

现在,我的双手就是我的生命,所以我不会打拳击,卡普瑞拉(一种巴西的舞蹈)和其它的 我非常想学习的运动。由于我每天会大量地使用双手,所以我不会在沙包上让我的双手受损。

视觉疲劳

对我而言,视觉疲劳并不是个大问题,但是你得注意自己的眼睛。我年轻时有近乎完美的视力(20/20 vision), 但是用了几十年的电脑后,我的视力有些退步。我有一个很低度数的矫正眼镜,最近一些日子, 即使我偶尔需要使用眼镜我也会一直佩带着。没有它们整个世界显得有些模糊。

回首过去那些悲惨的日子,我整天都得盯着纯平电脑显示器(CRT),这种显示器很晃眼, 也因此伤害了无数人的视力。近些日子,大多数的液晶显示器不再那样晃眼。多亏了苹果公司的 专利(我可能弄错),电脑在显示字体时不再那样晃眼。虽然一些人认为苹果公司的字体显示 显得有些“模糊”,那可能是因为大家显示器的角度的差别所致。

我通常一天会出去溜达2个小时,以使这2个小时不用面对电脑。同样,在这段时间里我也会做一些 不用太费眼睛的事情,如弹吉他、去散步或者去公园溜达。我可能并不会每次都能够花去完整的 2个小时,但是我会尽量每天不去看电脑屏幕至少达到2个小时。

如果你有头痛的问题,这样同样可以帮助你缓解头痛。通常,有些程序员认为电脑反射到房间里的光线是 引起头痛的原因,其实错误的坐姿、非常差的字体、没有喝足够的水以及连续用电脑太久,这些 才是真正的原因。

大可不必做一些极端的事,如将办公室的所有灯都打开,而是有一个比较良好的光亮并且使用一个适合 你的液晶显示器和房间灯光的显示颜色会更有效。房间的灯光、液晶显示器的亮度、液晶显示器的质量、 字体及你的颜色设置这些因素的合理组合才能让你觉得更舒服些。

而最为重要的是,休息休息下吧。

背部问题

在我过往的岁月里,我很幸运有一个很健康和强壮的背部。即使在那些岁月里我需要大量的时间坐在椅子上, 我依旧拥有一个良好和非常灵活强壮的背部。

对我而言,问题主要出在我的上背、脖子和肩部。我经常弓着背,所以不得不强制自己坐端正。事实上,当我 正在写当前这段文字时,我发现我没有坐直,所以我不得不纠正下。

现在,对于坐椅的选择显得很重要,我更加喜欢有结实踏凳的铝合金椅子或者长椅。我当下非常喜欢我的50美元的 小琴凳,在这个小琴凳上,我曾经练习过钢琴。椅子并不需要一个后背,这样就会使我能够保持一个端正的坐姿, 保持主要的肌肉(腹部和背部的肌肉)处于正常的状态。

但是我的肩部通常非常疲劳。当我非常集中精力而引起我的上背部疼痛时,我经常会“伸伸”肩膀,并且将 疼痛传递到脖子和头部,直到消失。通常当我连续弹吉他很长时间时,这种疼痛更加强烈。

我发现能够最大缓解这种问题的办法是拉伸上臂和做俯卧撑。伸展上臂非常简单,就像开门一样,抓住,然后 向不同方向拉伸双臂。当你觉得上臂僵硬时,你可以尝试下面的方法:

  1. 用你的一只手臂抓住一个门框,这样你的手掌正对着你的身体,然后将你的肩膀向外拉,这样你就可以拉伸你的 胸部以及前肩。
  2. 用你的一只手臂抓住一个门框,这样你的手臂穿过你的身体,同样这时手掌正对着你的身体(有些向后),这样 你的肩膀的后部就得以拉伸。
  3. 将你的双臂都放在你前面正对头顶的门框上,稍微向外站一点,这样你可以向下斜侧,向上和向后拉伸你的双臂。

如果你同时也转动自己的双肩,晃动自己的身体,你就会觉得好了很多。也许你可以在你每天工作前,结合手腕训练 一起来进行训练。

另一个具有很大帮助的训练是俯卧撑。我并不会在工作期间或者工作前做,因为这样会让我很累以致于很难工作。 我通常是在睡前做10个就可以了。别小看10个俯卧撑,它可以对你的胸部、背部、手腕及脖子带来很大的好处。 不要做的太快,而是要慢慢地做,并且当你做时,一定注意保持身体平衡。

脱水

这个很容易理解,而我也经常受害于此。我发现我喝了大量的咖啡,正是因为这样,我必须确保我也喝了一些水。 如果我不喝水,我就会感到有些头痛并且感到非常不舒服。脱水的问题是,当你发现你受此困扰时,已经太晚了。

我的建议是(并且我也已经开始),当你喝一瓶其它的非水的饮料时,你也喝一瓶水。我也建议你放弃喝苏打饮料。 这些苏打饮料只是一些糟糕的冒牌的糖水,而它们会让你发胖和患上糖尿病,并且也不会达到补水的效果。如果 你真想喝一些饮料,那么普通的黑咖啡就很好了,但是记得也同时喝些水啊。

肠道和尿道问题

好吧,下面要谈到的两点显得有些粗,所以我并不会详细地说明发生在我身上的细节,但是,我还是要说:

当你有这个需要时,一定要立即去该死的洗手间。千万别等。

你可能不知道这条建议有多么重要,我是多么希望在我年轻时,有人能够告诉我这些。 因为我想成为一个“真正的程序员”而不停地在写代码,甚至我都放弃了上洗手间的时间,以至于 憋的太久。而与肠道有关的问题是,你的身体不会再告知你是时候上大厕所的时候了,然后不断 地恶化。

最终你会得上便秘,而且会破坏你的健康。对于泌尿系统,可能引起的问题相对较小,但是 你可能会尿道感染,或者患上别的奇怪的问题。

如果你已经有类似的问题,你最好找一些纤维素片,并且随身携带,最好能够呆在家里, 因为这些问题引起的可能会很恶心。

所以,当你感到有吁吁的需要时,赶紧站起来去洗手间。我要告诉你,当你吁吁完了,你的 思路会更加清晰。

痔疮和前列腺健康问题

当你需要上洗手间而没有及时上,还会引起另外的问题是痔疮。是的,是的,我知道这显得有些粗鲁, 我保证这是我唯一一次提到这些。但是,许多程序员确实患有痔疮,只是羞于谈及这些,或者 知道怎么会引起这个问题,所以我将这个问题留给你们自己。我确实也曾经做过下面的行为,但是 只是一次或者两次:

  1. 久坐
  2. 没有使用合适的设备而举过重的东西
  3. 当需要上大厕所时,却没有
  4. 当你不需要上大厕所时,却强迫自己去上
  5. 最糟糕的一条是:坐在马桶上阅读

我要告诉你,上面的最后一条是致命的。如果你不需要上厕所,你就不要坐在马桶上呆着。 如果你这样做,就会让你身体和肠道的所有重量都施加到可能已经损害的直肠上,然后使劲 地拉出来。很恶心。那样也会引起痔疮,因为压力会损害你的血管。

这些都很恶心,但是也具有潜在的危害性。是的,你可能严重到流血,那么赶紧去看医生来 处理。如果你需要手术那么就做吧。我没有严重到那一步,不过,哥们我曾经也差不了多少。 那一年,我练习举重,在一个仓库工作,不停止地编码,并且没有上洗手间。

是的,我是个傻蛋,所以,哥们,你可别向我学习。你可以通过做下面的三件事来保持自己 屁股的健康:

  1. 经常吃蔬菜,也吃些纤维素
  2. 当你需要上厕所时,及时去上
  3. 别让自己长时间蹲着

如果你不注意,这些同样可能损害你的前列腺,但是通常前列腺问题是由于久坐引起的。 只要你能够站起来,走走,或者休息会儿,那么通常这些问题都能够解决。如果你发现, 你的前列腺充血,或者你吁吁时有问题,赶紧去看医生,因为这可能会比较严重。 如果你吁吁的特别多,这同样可能有问题,这时最好去看医生。

维他命D缺乏症

维他命D很奇怪。你只能从阳光中获取,但是你并不需要太多直接的阳光来获取。 根据阳光强度的不同,可能会需要5-30分钟。这个同样受到你的钙水平及磷酸盐的影响, 当然如果你按时吃饭,并且经常会食用一些土豆片以外的食物,那么应该问题不大。

维他命D缺乏症可能会引起忧郁,牙齿问题,可能会引起奇怪部位的疼痛,如肩膀的骨头, 肌肉抽筋,或者只是感觉要上大厕所。如果你的症状很严重,你最好去让医生给你开个处方, 当然通常你只需要当太阳高照时你能够出去晒30分钟。

事实上,我以为这是当下硅谷一些提供午餐的创业公司中存在的问题之一。因为你更易于一直呆在 办公室吃东西,而许多办公室的采光通常很差,而当你下班时,太阳已经落山。再加上 缺乏好的睡眠,你会在不知不觉中出现维他命D缺乏的问题。

简单地说,你只要别在办公室吃午餐,而是在中午出去吃饭,这样的好处常常会超出你的预期。 而且,出去吃的食物通常更好。

当我住在温哥华和西雅图时,我患上了轻度的维他命D缺乏症。归根结底,还是因为你没有接受足够的 阳光照射,对于我而言,那是致命的原因。一些人能够应付,但是对于像我这样小时生活在热带岛屿的 人而言,那是相当的致命。

所以,当太阳高照时,你不妨出去晒晒太阳。

睡眠紊乱

我的睡眠通常很灵活,主要是根据季节和所在的地区来调整。在一些地区,我通常是个夜猫子,在晚上 喜欢做一些事情直到很晚的时候才开始休息。后来,我搬到旧金山时,我开始早睡早起,并且每天我 更加有精神。

有时,不知道什么原因,当我听着音乐,在午夜或者凌晨编码时,觉得效率特别高。我想那是因为我依旧处于 疲惫状态,所以我的大脑很放松。我也相信,那是因为很安静,我可以毫无打扰地畅想。

无论哪一个,这都需要我起得很早或者睡得很晚,而这样会破坏我的睡眠习惯。我发现随着我的年龄不断增长, 我更加喜欢早起。这样的一天,我感到非常清醒和放松。如果我睡得很晚,我通常会感到很疲惫并且会觉得 头有些疼。

如果你有睡眠问题,我有一个我用了多年的简单的沉思的方法来帮助你休息。那需要一些练习,但是它很有效 并且会很快见效。

首先,买一个你能承受的最好的床。一个好床值2000+美元并不算太贵。我在一个泰普尔的床上花了2200多美元,但是 以我看来非常值。

现在,你有了很棒的床,那么让我们来看你如何为了更好的睡眠来开始练习。其实有点像一个自我催眠的把戏:

  1. 保证你关掉了你卧室中所有的声音和光源
  2. 平躺在床上,将你的双手放在你觉得舒服的身上某处,或者你身体的边上
  3. 深深地、缓慢地呼吸,在你呼吸时,想像你能够看见这些空气正在从你的身体里呼入呼出
  4. 一旦你可以看见你的呼吸,想像你正在从一个窗户向外眺望,外面是一片广阔、巨大的星空
  5. 你呼吸时,想像你漂出了窗户,漂向了星空,而这些星星都柔和地包围着你
  6. 保持这样的状态,然后想像让这种漂浮充满整个卧室,包围着你,直到什么都消失了

你可能需要4次或者5次就能够睡着,但是不要只是躺着,而是让自己尝试着飘浮和溶化,直到你能够自如掌握。

如果你有严重的失眠症,一定要去找医生看看,但是你不妨也尝试下上面的练习方法。当然一天做 1-2个小时的大剂量运动也是很好的办法。运动肯定能够让你睡得很香。

僵硬与灵活

如果你最近一直感到“僵硬”,或者不能很好地移动,那么你可能就需要一些伸展运动。事实上最好的办法是 你每周去做一次瑜伽,然后尝试做一些自己喜欢的运动。如果你条件不允许,去书店或者图书馆找一些关于 伸展的书籍。你所需要的只是一本简单的书,真的很容易做到。

我想如果你在睡前能够做5-6个大的拉伸练习,你肯定会感到非常放松,也会切身感受到你身体的好转。

通过拉伸练习来放松身体,也同样会放松你的身心。所以,提高自己创造力和激发自己想法的很好的办法 就是30分钟的瑜伽或者拉伸练习,做完后洗个澡。和一些沉思练习结合起来,你会切实感受到在自己的心理 适应性上有大的进步,开始发现自己已经不曾想到会有的创意。

我不知道为什么会这样,但是放松的心态对于自发的创造力和创意至关重要。

简单的第一步

对于一个人而言,这些信息可能显得有些多,但是我还是希望你并没有文中提到的问题。如果你没有这些问题, 我仍然建议你尽量避免这些问题。如果你开始出现这些问题的苗头,你可能会需要适应一个“编码前的热身”练习, 然后在你编码前来完成这些练习。

下面是我在坐下编码前,在弹吉他前,或者任何会让我身体僵硬需要休息的活动前,我都会坐下面的活动:

  1. 通过活动你的手腕、手臂、脖子、臀部来让你的全身关节得到活动。向一个方向转5圈,然后另一个方向5圈
  2. 对手腕做少量的练习,在每个练习中晃动你的手腕
  3. 尽可能高地向你的头顶拉伸你的手臂,然后向后拉伸,然后向你的身体前面拉伸
  4. 最后,用你的手将你的头向右、左、前和后小心地拉一拉

一旦你能够做这些,你会避免大多数的编码所带来的损伤。因为编码并不是那样的消耗体力, 所以相对很容易避免可能的损伤,所以你所要做的就是这些。

但是,如果你有特别的问题,最好还是看医生,如果医生觉得可以,你也可以尝试我提到的一些练习方法。 我在文中提到的没有一个是奇怪和怪异的,仅仅是一些基本练习和常识,所以,应该所有的医生都不会反对。 一定记得要提前咨询医生,因为我可不想被起诉。

希望,这些建议能够帮到你,如果还没有起到效果,你大可先记住它们,因为某一天你可能会用到。 如果你没有我提到的任何一个问题,那说明你足够幸运,但是,我认识的程序员都或多或少地存在至少 一个问题。

除了我文中提到的问题外,如果你还有别的问题,你可以给我 写信 ,我可以回信告诉你我的一些建议。

保重。

在各个系统下都习惯了 vim 这个编辑器,但是基于win下的gvim的默认字体是 fixedsys,显示中文时实在是磕碜的不行,而直接在vimrc中写入中文名的 字体配置又不行(如新宋体),经过确认要么将encoding设置为cp936,要么 使用中文字体的英文名称,还好有一篇博文有详细的记录,参考: 常见系统中文字体的英文名, 简单摘录如下:

Mac OS的一些:

华文细黑:STHeiti Light [STXihei]
华文黑体:STHeiti
华文楷体:STKaiti
华文宋体:STSong
华文仿宋:STFangsong
儷黑 Pro:LiHei Pro Medium
儷宋 Pro:LiSong Pro Light
標楷體:BiauKai
蘋果儷中黑:Apple LiGothic Medium
蘋果儷細宋:Apple LiSung Light

Windows的一些:

新細明體:PMingLiU
細明體:MingLiU
標楷體:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微軟正黑體:Microsoft JhengHei
微软雅黑体:Microsoft YaHei

装Office会生出来的一些

隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei

所以我在vimrc中将guifont配置为”NSimSun”即可(新宋体)。

2011-04-05

因为工作需要,最近也开始学习和使用 pureMVC , 之前也写过一个 pureMVC Hello World教程, 算是开始入门这个框架和AS这种语言.经过两周多的学习和使用,生出了几个疑问, 和公司的做AS的同事 沟通时,发觉他也并不能清楚地说出所以然来,所以决定自行研究这些问题,并尝试给出解答.

问题大致有下面几个:

  1. 如果一个notification有多个订阅者,那么这多个订阅者之前的执行顺序是怎么样的?
  2. 一段代码在执行时,如果发出一个notification,是等待相应的notification订阅者处理结束再继续呢,还是 直接继续,相应的notification订阅者异步地执行?
  3. 一个notification的多个订阅者之间的执行是异步的,还是顺序执行的?
  4. 是否可能出现notification死循环的问题? (即notification A的订阅者X发出notification B,B的订阅者 又发出notification A,形成一个没有出口的循环)

研究和解决上述问题

为了准确研究出上述的问题和答案,我采用的方法包括两种: 实验和源代码阅读(其实只要阅读源代码即可).

实验

相关的代码可从 TestPureMVC 下载.

这个程序主要是如下的流程:

Startup -> StartUpCommand -> registerMediator(AMediator, BMediator, CMediator) -> sendNotification(Test) -> CMediator(Test) -> sendNotification(Second) ->CMediator(Second) ->sendNotification(Test)

从而形成了一个循环,另外,也可简单地在StartUpCommand类中更改来测试其它的情况.

从代码中能够说明(对应于本文最初的4个问题):

  1. notification的多个订阅者的执行顺序是按照其注册的顺序执行的,也就是全局的view中维护的mediator数组中的顺序
  2. 因为AS中没有类似于sleep的方法,所以无法确定2(具体结果参考下文,代码分析部分)
  3. 同2
  4. 会出现死循环,最终会出现栈溢出的错误

源代码分析

因为Command和Mediator都可以处理和发送notification,所以这里只以Mediator的处理为例来说明.

我们先看notification是如何通知的:

// org.puremvc.as3.core.Views.as
public function notifyObservers( notification:INotification ) : void
{
    if( observerMap[ notification.getName() ] != null ) {

        // Get a reference to the observers list for this notification name
        // 获得这个notification的所有订阅者数组
        var observers_ref:Array = observerMap[ notification.getName() ] as Array;

        // Copy observers from reference array to working array,
        // since the reference array may change during the notification loop
        //  notification的循环中可能增加新的订阅者,所以这里深度拷贝一份
        // 注意顺序并没有更改
        var observers:Array = new Array();
        var observer:IObserver;
        for (var i:Number = 0; i < observers_ref.length; i++) {
            observer = observers_ref[ i ] as IObserver;
            observers.push( observer );
        }

        // Notify Observers from the working array
        // 根据数组中的顺序依次来通知相应的订阅者
        // 注意这里是顺序执行的
        for (i = 0; i < observers.length; i++) {
            observer = observers[ i ] as IObserver;
            observer.notifyObserver( notification );
        }
    }
}

接着来看事件是如何注册的,从而形成订阅者的数组:

// org.puremvc.as3.core.Views.as
public function registerMediator( mediator:IMediator ) : void
{
    // do not allow re-registration (you must to removeMediator fist)
    if ( mediatorMap[ mediator.getMediatorName() ] != null ) return;

    // Register the Mediator for retrieval by name
    mediatorMap[ mediator.getMediatorName() ] = mediator;

    // Get Notification interests, if any.
    var interests:Array = mediator.listNotificationInterests();

    // Register Mediator as an observer for each of its notification interests
    if ( interests.length > 0 )
    {
        // Create Observer referencing this mediator's handlNotification method
        var observer:Observer = new Observer( mediator.handleNotification, mediator );

        // Register Mediator as Observer for its list of Notification interests
        for ( var i:Number=0;  i<interests.length; i++ ) {
            // 注意: 这里是根据Mediator有兴趣的notification来分别加入到对应的订阅者数组中
            // 而加入的次序正好是根据这个Mediator的注册顺序
            registerObserver( interests[i],  observer );
        }
    }

    // alert the mediator that it has been registered
    mediator.onRegister();

}

// registerObserver的具体实现
public function registerObserver ( notificationName:String, observer:IObserver ) : void
{
    var observers:Array = observerMap[ notificationName ];
    if( observers ) {
        // 顺序加入到对应的订阅者数组中
        observers.push( observer );
    } else {
        observerMap[ notificationName ] = [ observer ];
    }
}

我们再看通知给订阅者时的处理逻辑:

public function notifyObserver( notification:INotification ):void
{
    // 根据notification传过来的上下文来执行相应的处理逻辑
    this.getNotifyMethod().apply(this.getNotifyContext(),[notification]);
}

到此,从我们对源代码的分析上,我们就可以完整的回答本文初始的4个问题:

  1. 如果一个notification有多个订阅者,那么多个订阅者之间是按照注册的顺序来执行的
  2. 在AS中不存在异步的执行,所以,当前的代码的执行会等待所有的notification按照1中 的顺序执行完成后,才开始继续执行当前的代码(相当于调用一个函数)
  3. 一个notification的多个订阅者之间是顺序执行的,顺序是按照1中的说明
  4. 存在死循环的可能,因为如2中说明,sendNotification相当于根据注册的顺序来顺序执行 相应的处理逻辑,如果在处理逻辑中又包含触发sendNotification的事件,则整个执行 会成为一个死循环,从而导致栈溢出

总结

通过对本文开始4个问题的分析,弄清楚了 pureMVC 核心的notification机制的几个 核心问题,对于后续的工作和学习都是很有益处的.

每日的生活大致分为三个部分即: 锻炼, 阅读和工作。

锻炼我也想分为两部分, 一部分是室外的锻炼,一个是室内的锻炼。 前者的最佳时间 也许不是早上 但是早晨通常是比较容易坚持的,所以锻炼的时间我还是选择在 早餐前的时间。 室内的是在休息前的锻炼,如做几十个仰卧起坐。这样即使不能减肥, 应该也能保持体重。

阅读,无论是阅读电子书,或者纸质书,通常都能让人平静下心来,不至为社会的浮躁 而累,看书时内心通常是比较安静地,能够与作者一起徜徉在思想,故事,行走之中, 聆听作者反思或者研究后的著述,总之这个过程都是你在静静地聆听,正如我们日常的 聆听一样,聆听总是能够让人安静,反思与更加有耐心的。 我的阅读时间分为两段,一段是技术类的阅读, 这想这个大致可放在晚上晚餐后的时间, 另一段是非技术类的阅读,如文学,哲学,管理等方面,这个大致可在午餐后的时间完成。 两段阅读时间正好作为上,下午两段工作时间的调剂。

再就是工作, 每日大多数的时间会隶属于这一类, 而编程相对比较耗费精力,容易累, 所以需要调剂好整个工作计划和执行过程。 事无巨细, 总是要按照优先级来确定执行的 顺序,而今天要做的事情,通常在昨天已经确定,至少80%已经确定。 数量不要太多, 以能够完整地完成为最重要的目标,这样的循环也能让人更加自信于这样的工作流程。

整个的工作计划与执行,我将会采用ticket的方式来管理,基本的流程如下:

  1. 第一天晚上根据当天ticket的完成情况来制定第二天的工作计划与安排
  2. 第二根据上面的工作计划来执行
  3. 第二天晚上对当天的工作进行总结
  4. 第二天晚上临下班前制定出第三天的工作计划与安排,回到1

总之,需要达到的一个目标是, 能够比较好地完成既定的工作计划与安排, 不把工作 带回家(将生活和工作能够有效区分), 不至于太过受到社会浮躁的影响,能够较好地 保持一个平静的心。

具体的安排为:

关于上图的注解:

  1. 时间结点都是事件结束的时间
  2. 上述的生活和工作安排是针对工作日
  3. 休息日的流程大致会与这个图表相同,只是会在工作量和工作内容的安排上有所调整

检验

无法检验结果的计划根本就称不上计划,那么我的这个工作计划如何来检验呢? 我想主要 还是通过两个方面:

  1. 自检(这是最主要的检验方式,确认自己每日计划的执行情况)
  2. 他检(希望老婆也能够监督)
2011-04-03

缘由

订阅了 Matt Cutts 的博客,在多次的阅读后,喜欢上了他的 30天挑战系列,例如他自己过去的几个挑战就包括:


Matt Cutts 是Google的webspam组的头,他的一些反思和每月的挑战系列 对于我们来说是很有借鉴意义的,至少这种方式对我们也是具有很好的参考价值.

所以从本月起,我也决定效仿 Matt Cutts 的方法,也做出自己的30日挑战,并且 在30日后,对这30日的完成情况做出结果的更新.

个人觉得,这种方法至少有下面几种益处:

  1. 提高自己的意志力(个人觉得很多时候,一个人的成败就取决于意志力是否坚定)
  2. 涉猎更多有意思的事物
  3. 让生活更加有序,精彩,提高生活质量
  4. 反思(这样才不至于迷失自己,直到无法回头)

4月的30日挑战

本次是我的第一次挑战,所以希望能够顺利和完整的得以实现,经过老婆的建议后,我的 挑战是:

阅读完林达的《近距离看美国之四-如彗星划过夜空》

P.S

最终在4月20日完成了阅读,相关的总结可见 这里.