Author Archives: wangleheng

怎么学计算机

  有人带着上高中的孩子来问我,怎么学计算机。

  这是很宽泛的话题,简单来说“学计算机”有两种意思,一层是学会“用”计算机;另一个层是学计算机专业技术,例如会开发软件或设计硬件。

  这事对于非专业人士很难一两句话说清楚。推荐老妈在深圳上计算机课时对学生们说的经典语录。

  对于第一种意义的学:“教育局的教材简直是微软产品说明书,毫无意义;拿这些内容来考试,更是荒唐(想想看,如果津巴布韦拿QQ使用方法作为考试内容)。等你们工作了,这些软件早就过时了,关键是学会思维。”

  对于第二种意义的学:“计算机是很笨的机器,要和笨蛋打交道,就必须非常周到,方方面面都考虑清楚。”

  高中生想报考计算机、通讯或自控类的大学专业,家里有台计算机未必有什么正面作用(大多都成了高级游戏机)。报班去学五笔字型,更是浪费金钱和生命(还不如报班学好标准普通话,语音输入软件已经很普通,我们组里的研究生就可以给你写一个)。中学阶段,学好数学和英语两门基础课才是最有效的准备。

  其实对年轻人来说,更重要的问题是确定到底适不适合IT行业,是否真正愿意把它当作终生事业。我见到太多基础和天赋都不错的人,上了几年大学后,甚至得到很令人羡慕的工作职位后,才发现对自己做的事没激情,陷入迷茫和焦虑。

  有些孩子又得说了,我怎么知道自己适合做什么呢。全部精力都用来对付高考了。很少接触社会。

  OK,提供一些未必科学的判断方法。你的父母家庭都从事什么工作?你自己的性格呢?喜欢折腾仪器吗,比如拿着家里的单反数码相机爱不释手,把大小功能都踅摸一遍?组装过,或希望组装半导体收音机吗?对魔方、乐高玩具、围棋、筛子这些游戏着迷吗?愿意对着枯燥的证明题绞尽脑汁一坐就是几个小时,证不出来就睡不着觉吗?学习逻辑和中英文语法规则的时候,是不是很轻松?对线条和空间方位敏感吗?

  如果仅仅为了钱,为了光鲜虚荣,从事一个行业,没有一点本能的兴趣的话,会很苦。

技术报告:pFind研发中的工程问题

  上周领导推荐我参加一线科研骨干的公开报告。其他报告人都是博士,讲的都是高深的学术题目。而我分享的是pFind开发中的工程问题,很浅显。听众反应似乎还不错,大概正是由于简单,大伙都能听得懂吧。

  很多人向我要slides,索性共享在学术主页让大家下载。报告分两部分,前一半是关于计算蛋白质组学的背景介绍,不关心的话,可以直接跳到后面软件工程和架构部分。因为是连夜准备的,排版有些粗糙,有时间我会继续修改完善,不好意思。

蓝色宝石俱乐部聚会归来

  今天跟着蓝色宝石朋友们去蟒山公园爬山,回来以后到新疆驻京办事处吃烤肉,庆祝蓝色宝石成立9周年。

  9年前的11月6日,蓝色宝石网站建立起来。最初是几个计算机系学生为创业组建的,然后逐渐加入了更多同学、同事和网友。在2000年左右的互联网泡沫阶段,北京的大学里到处都是我们这种不安分的小团伙:参与技术讲座,做兼职项目,报名创业沙龙和创业大赛,接触风险投资。

  创业无果而终,朋友们一届届毕业,各自继续自己的生活事业,但保留了BBS发帖和每年聚会的习惯。大学时代,总是开玩笑说我们自己是“二十出头,奔三十的一帮人”。一起成长,现在真的逐渐到三十,各自在北京买车买房,扎下根来。

  按惯例聚会还是不喝酒。这次见到了传说中首款“蓝色宝石2.0”产品,可爱的小姑娘。lace和jojoe一向走在大家前面,当年就是他们首先申请建立BBS双人板,现在又第一个变成带“*3”标签,哈。

  本年度遭到严重崇拜的是sparc。大家都听说他在汶川大地震发生后,从工作了很多年的外企辞职,接受慈善基金会的委派,到四川绵竹担任项目经理。dance斑竹bridge大美女充分发挥记者的本能和专业技巧,帮着大伙刨根问底,逼sparc交代了不少内幕信息:

  • 原来sparc是生于唐山的;
  • sparc在四川水土不服带病工作,病倒了送到医院去,还碰到强烈余震;
  • 除了tutu以外sparc其他家人到现在还对他做的事情一无所知;
  • sparc回到北京后又直接去以前的公司部门上班了(这个老板还算不错)

  sparc大虾是俺们的骄傲和榜样。据说rainbow也在定期参与公益活动,这个习惯低调的家伙,从来都不在别人面前提。kick myself,前两天只顾加班,实在不好。

  1299级台阶也证明俺滑雪骨折的伤彻底好了,可以和宅男生活说Bye了。不过体能严重下降,气喘吁吁。

  OK,站聚作文写完了。交作业。

  BTW:站队真的很重要。俺独具慧眼,回来选luli的车,走八达岭高速经四环走学院路,首先到达。等rainbow最后到的时候,俺们都点了两轮菜了。rainbow晃点老婆,说是回去要罚跪CPU。(参考rainbow的BLOG,哈)

美国程序员和政治

  干完了正事,就有时间看看BLOG,八卦些闲话了。

  我订阅的程序员和技术专栏的rss种子,以往基本都和政治绝缘。这两天居然有如此多的人在自己BLOG上谈论美国大选,实在罕见。当然,一面倒都支持Obama。

  比如Linux操作系统内核之父Linus,前些日子发了篇《Black and white》,把大选话题和Linux kernel为什么不采用GPLv3开源协议掺乎在一块儿讲,那是相当有哲学深度,“行业黑话”又多,估计不是程序员都看不出如何好玩。

  还是Guido van Rossum的文字像他的Python语法一样简明:《Vote for Obama, No on California Prop 8》,上来就说,他自己不是美国人所以没投票权,但他老婆已经注册了,大伙儿赶紧去投票。看老大那口气,你不去都不好意思腆着脸下载Python 3.0新版了。

  Google的著名华裔女程序员王忻(Niniane Wang)也在BLOG里分析CNN关于8号法案的民意调查数据

  至于某些身处特殊位置的人,比如在微软领导VC++开发的前C++委员会主席Herb Sutter,还有自己开软件公司的Joel Spolsky,其实都在BLOG里委婉表达过政治立场,只不过不像开源阵营那么自由火爆。估计还是担心影响公司的生意。Big G倒是不怕暴露倾向,反正人家是世界首富,从这个视频就能看出来,他同时给民主党两位候选人捐款。

  都说这次大选是主流和非主流的对抗,McCain受社会主流支持:白人、30岁以上的成人、男人、教徒、农场主、机械能源和军工行业;而Obama尽管声势很大,但支持者都是那些边缘的、不关心政治的、投票率较低的人群:有色人种、18-30岁年轻人、女人、非基督徒、移民、好莱坞和硅谷。这几个月电视里的分析人士不断在说,如果Obama能把那些以往不太热心投票的人都吸引到投票站,他就赢定了。从我订阅的rss管窥IT书呆子们的反应来看,民主党的确做到了。

pFind 2.2 Alpha 1诞生

  刚和瓶子对鉴定结果进行了检查,发了邮件,正在往SVN里check in。比原定deadline推迟了3天。

  2.2版内核不仅在功能上有革命性的加强,还重构了遗留的山寨代码。这次迭代出的6号发车流程,在架构方面让我很满意。浩哥即将在此基础上,进一步演进开发下一代流程。

  现在语无伦次中,心脏怦怦跳,骨头里都在冒泡。

  这10天的双人编程是一次令人激动的经历。每晚22点我去赶末班地铁,大伙儿留下来继续煎熬。昨天他们折腾到接近1点,直到Boss H看着手表勒令所有人回去睡觉。提一下新人吴美女,一周多搞定两种谱图索引算法,消灭了整个11月的todo list,战斗力之强悍超出男生们的想象。

  待会儿要和浩哥进行code review。先去饭饭。

《寻羊冒险记》和C++0x

  这两天和瓶子哥进行双人编程,对pFind内核进行新一轮的重构迭代。好久没有经历这么高强度的编程了。今晚10点回来的地铁里,脑袋都木了,发呆,差点儿坐过站。

  今天的todo list里规定必须写blog,所以就打开Firefox,登录上来开始敲字。但说实在的,累,脑袋里没找到特别鲜明的主题,罗列点杂七杂八的流水帐。不好意思:)

  前天到清华参加AKA的linux kernel会议路上,顺便到光合作用买了村上春树的《寻羊冒险记》卡特琳娜·哈克的《空房间》。非常喜欢《寻羊冒险记》,觉得比《挪威的森林》更好玩。

    

  Herb Sutter刚刚在他的BLOG上给出了C++0x的最新进展。像6月Sophia Antipolis会议预计的一样,C++委员会在San Francisco会议上投票通过了草案,正式进入ISO标准公示阶段,点击这里下载C++0x草案文本。另外,Herb Sutter结束了长达10年的C++委员会的主席任期,由P. J. Plauger接任。

AKA Linux内核开发者大会和pFind Team

  刚刚参加了AKA的Linux kernel开发者大会,主要关心的是多核并行和oprofile性能分析。近期pFind内核优化开始深入,需要用些更专业的优化技巧了。

  我在会上提了个问题:未来一段时间,多核和集群的性能瓶颈或编程难点在哪里?主讲人崔岩认为传统的系统总线在众核体系下已成为瓶颈。章峰老大补充说,他认为NUMA体系结构是方向。这种体系结构可以看作是多核和集群的混血杂交。按照Intel的Roadmap,到2013年家用电脑的CPU大约为256核。到时传统软硬件架构都要经受重大挑战。

  顺便也听了其他讲座。重温内核领域的很多技术,感觉好像见到老朋友。一个小细节是,讲座幻灯用是一台装了ubuntu的龙芯笔记本。

  回忆起大三时代,每周跑去听AKA的Linux系列技术讲座。有一讲的内容是阅读Linux kernel2.4的内存page管理部分,是在中关村附近一栋小破楼里讲的。当时四环没通,花了好多功夫摸过来。这次讲座激起了我阅读Linux内核的兴趣,可以说是“joyfire Linux笔记”的缘起吧。后来才知道这栋小楼就是计算所的老北楼。

  顺便贴一张俺们pFind帮派的全家福。在计算所新楼的11层拍的。

《史记》里的巴菲特

  昨晚睡得很早,半夜醒来,饿了,煮面吃,等在炉子边上时,翻《史记》。

  秦末汉初时有两个韩信,都是刘邦的开国功臣,一起被封为异姓王,都没什么好下场:名气更响的大将军韩信,深受猜忌,成也萧何败也萧何,死在吕后手里;另一个韩信垫在北方当炮灰,逼急了只好投降匈奴,但人家骑兵袭扰长城以内时,反过来又用他打头阵,“亡匿山谷闲,旦暮乞贷蛮夷”,真是毫无前途,最终兵败身死。

  《白起王翦列传》,印象深刻的不仅仅是秦国众多善战的名将。国家机器的令行禁止赏罚分明,才是军队如狼似虎的原因。像白起这种人,从基层军官开始,能依靠一次次战争中的功劳,逐渐上升到位列三公的地位;而同时代的其他六国,主角都是平原、孟尝、信陵、春申这样的家伙,出生名门财大气粗,养着三千门客,把自己的名声看得比什么都重要。有时候会想,如果秦朝不那么短命,走法家的不论亲疏、依法治国路线,而不是儒家的人际关系、纲常伦理路线,历史会怎样?另外,以前提过,中国的史书对战争的描述都很肤浅

  《南越列传》和《朝鲜列传》名气似乎一直不大,其实很好看。尤其是秦朝的南方军队封闭所有北上道路,自立国家,拒绝回救咸阳那一段。据说清朝嘉庆时就是因为《史记》里的掌故,所以拒绝以此赐国名,而改赐“越南”,以防后世有变,利用历史纠缠染指我们的“桂林、南海、象郡”。

  以前没看过《货殖列传》,大概是世上最早倡导自由主义市场经济的论文吧,写得实在太经典了。里面那个大富豪白圭,简直就是那个时代的巴菲特。巴菲特说:“在别人贪婪的时候恐惧,在别人恐惧的时候贪婪”,而白圭的投资哲学是:“人弃我取,人取我与”,连日常生活习惯都很像,“薄饮食,忍嗜欲,节衣服”,但是一旦决定逢低吸纳,“趋时若猛兽挚鸟之发”。

  白圭,周人也。当魏文侯时,李克务尽地力,而白圭乐观时变,故人弃我取,人取我与。夫岁孰取谷,予之丝漆;茧出取帛絮,予之食。太阴在卯,穰;明岁衰恶。至午,旱;明岁美。至酉,穰;明岁衰恶。至子,大旱;明岁美,有水。至卯,积著率岁倍。欲长钱,取下谷;长石斗,取上种。能薄饮食,忍嗜欲,节衣服,与用事僮仆同苦乐,趋时若猛兽挚鸟之发。故曰:“吾治生产,犹伊尹、吕尚之谋,孙吴用兵,商鞅行法是也。是故其智不足与权变,勇不足以决断,仁不能以取予,彊不能有所守,虽欲学吾术,终不告之矣。”盖天下言治生祖白圭。白圭其有所试矣,能试有所长,非苟而已也。

软件中的隐喻(Metaphors)

  引子:老妈从深圳带来的《代码大全》,一直没看,不喜欢太厚的书(更喜欢作者早期的《Software Project Survival Guide》小册子,微软开发三部曲还是我大一第一学期花5块钱从地摊上淘来的)。今晚又犯病睡不着,索性听着音乐,找出来翻。的确把软件开发的事情都说完了。看到“隐喻”这一章有所感,上来敲点东西。

    

  隐喻(Metaphors)是XP编程的12个实践里很重要的一个,但是一直不像双人编程(Pair Programming)、重构(Refactoring)和持续集成(Continuous Integration)那么广为人知。

  其实这个概念是软件开发里最常见的现象和思维方式。《代码大全》里这样举例:

  计算机科学领域中有着所有学科中最为丰富多彩的语言。你走进一间安全严密、温度精确控制在20℃的房间,并在里面发现了virus(病毒)、Trojan horse(木马)、worm(蠕虫)、bug(臭虫)、bomb(逻辑炸弹)、crash(崩溃)、flame(口水战)、twisted sex changer(双绞线转换头)、fatal error(致命错误)……在其他领域里,你能遇得到这些吗?

  软件是一种看不见摸不着的抽象产品。因此我们不得不大量借用实体世界里的概念进行类比。例如在软件工程领域,随处可见各种建筑学的隐喻:architecture、scaffolding、construction;另一种常见的隐喻,是把软件项目当作生命体:incremental、iterative、adaptive和evolutionary。

  我们组内其实也在使用自己的隐喻体系。比如用“发车”和“跳”来形容pFind引擎的两种不同的搜索流程。

  其实,区分老手还是菜鸟很重要的标准,就是看他了解多少“行业黑话”。最初我在组内汇报到处写“bug”和“crash”这些词时,BOSS H很紧张、困惑,甚至有些愤怒。后来他就习惯了,明白这是工程开发中令人不快、但不可缺少的主题:某种意义下,编程的主要内容就是在有限成本条件下,尽可能有效地大量试错(胡思乱想:似乎创业也同样)。

  XP之所以强调重视隐喻,就是希望项目内建立统一清晰的概念词汇表。当提到某个词汇,在所有人脑子里都代表同样的逻辑概念。很多青涩的项目经理以为这种统一是理所当然的,他们错了。大量误会都源于鸡同鸭讲。

  对于我们生物信息这样的交叉学科,隐喻更是特别重要。生化学者和程序员简直就像不同的星球上的文明,需要很长时间才能彻底理解对方的意思。一个真实的例子:关于buffer这个词,在程序员世界里是一块预先申请好的内存区域,而对于生化领域来说,这表示做实验的缓冲溶液,我是在前线陪着生物学家杀老鼠做实验,花了三天时间才弄明白他嘴里的buffer不是我心里的buffer。有时不同的词汇又代表相同的意思,例如,生物学家喜欢说“高通量”,经过一段时间以后,我才能确认这就是计算机领域的“高吞吐”的绝对同义词。

  类似的,从事金融软件开发的哥们嘴里充斥着“期货”、“杠杆”、“抵押”、“融资融券”这种神秘密码。

  为了交流和思考,你必须把面对的专业领域里的术语迷宫搞清楚。对于传统行业,这种事也许只需要经历一次。对程序员来说,每个软件项目都是全新的思想历险,所以你要随时准备更新自己的隐喻词典。

  很多生物专业出身的学者学习能力都很强。他们要完成自己的研究,就必须对截然不同的众多领域都有所了解:从培养植物动物微生物,到临床小分子药物代谢,到遗传学和环境学,到化学试剂和各种分子式,到物理和精密机械领域的各种泵、质谱、磁场、超导题的原理,最后到Perl语言写软件处理大量信息……这就导致他们视野很宽,思维方式很全面。最关键的是,人不可能天生就是通才,出色的生物学者大多都善于跨领域交流和学习

  BTW 1:前面BLOG提过,程序员大都很着迷电影Matrix。因为这部电影把软件领域的隐喻反过来又映射到实体世界。电影名字本身就是一个很精彩的隐喻,Matrix在数学领域是“矩阵”的意思,在虚拟现实领域大量应用矩阵运算,比如《精品飞车》里的光影效果;而Matrix的另外一个意思是子宫,暗示电影里所有的人类都被放在那个黏糊糊的囊里养殖起来,以为自己生活在21世纪的地球,其实被接入了一个巨大的在线游戏,终其一生处在一个梦境,而Architect,那个机器,那个高等存在,控制着我们,随时以上帝的形象改变我们的命运,甚至kill掉我们的process(进程)。

  BTW 2:如果一个人开始仅仅守着自己的一亩三分地,不敢尝试未知领域,没勇气让Metaphors和外界进行碰撞的那一天,大概也就是他衰老的开始吧。

论文的Comment和程序员的艺术细胞

  今天下午轮到我做Paper Reading,讲了Journal of Parallel and Distributed Computing的这篇与生物信息有关的论文这期是bioinformatics专刊,还有更多其他的生物信息领域的分布式并行计算的论文)。我提到对这篇论文的两个质疑,cliu建议不妨写个Comment。的确,这样显得俺们中国人民不那么好糊弄。前两天北邮牛人还在大战Science灌水文章

  晚上难得按时下班,跑到五道口去泡光合作用,买到一本陈丹青的《纽约琐记》,还有这一期的《读书》杂志。

  

  缺少艺术细胞。制作网页、软件界面和PPT时,只会从别人帮忙配好的色系里选一套,这些颜色搭配对我而言只是神秘的RGB整数序列,敲进代码里就好了,如果你让我自己选择,那就像上刑了;音乐方面也是,本科时跟着wch哥学吉他,尽管会了《爱的罗曼斯》和《绿袖子》,可死活搞不定最基本的事:调琴弦,因为耳朵无论如何分不清音调。

  国内程序员和算法研究者大多都缺乏这种能力。周围很多朋友,包括组内的大多数人,PPT的字体颜色搭配和软件界面安排,实在难看。还算靠谱的,大概就剩下秀哥了,他作的pFind系列启动界面,很好很强大,受到广泛好评。

  梦想捡到一个艺术系美女,看画展听音乐会。给俺培训培训基础的鉴赏能力

  补:吃完晚饭,一大家子人抢WII。老妈的马里奥赛车已经接近专家级;而我的网球却沦落到人见人灭的地步了