以前我写过自己学手风琴的爱恨情仇,也写过我在上海的手风琴老师(教师节,忆夏老师)。没想到,几十年后,异国他乡,自己刚上小学的孩子仍然选择了学习手风琴。比较他的学琴经历和我的学琴体验,还是有不少感慨,既能重温孩子学琴的兴奋和厌倦,也能体会家长送孩子学琴的不易与纠结。 以下,记录了我的若干感慨。 Yurii · 云宫讯音_手风琴版本 一 一开始,我并没有希望小孩去学手风琴,甚至都没有强烈希望他“学一门乐器”,只是希望他对音乐有些兴趣。 生活经历告诉我,与其他人的交流,尤其是与来自不同文化和国度的人的交流,语言固然重要,但不是唯一重要。许多时候,爱好和趣味反而更加重要,能突破语言的藩篱,迅速构建起友谊的桥梁。体育是这样,音乐也是这样。所以,对音乐有兴趣,是很好也很重要的。 但是家长也都知道,要让孩子对音乐“有兴趣”,并不是一回容易的事情。小朋友可能愿意跟着歌曲唱唱跳跳,但也仅此而已了。如果要更进一步,往往兴趣就会迅速退场。 该怎么办呢?大概可以从跟小朋友一起玩开始。 在德国,似乎到处都有音乐学校。就拿本市来说,市中心有大名鼎鼎的巴赫音乐学院、门德尔松音乐学院,但全市各地都有小的音乐学校。许多学校名为“学校(schule)”,其实并没有围墙也没有院子,只是在楼房里租用了几间小的教室而已。老师也未必都“技艺精湛”,起码也是持证上岗,专业素质有保障。而且,许多课程本来就是入门级别的,未必要那么“高精尖”。 距离我家走路五分钟的地方,就有一所音乐学校。我在网上看了他们提供的课程,又实地看了学校的环境,决定签约Instrumentenkarussell课程。不要被德语长长的单词吓倒,其实它也只是两个单词的组合,前面是Instrumenten,“乐器”的复数,后面是Karussell,也就是“旋转木马”。合起来的意思,就是让让小朋友“玩遍各种乐器”。 具体安排是,在6个月的时间里,每周上45分钟课程,每两三周由一位专门的老师带领小朋友尝试一种乐器。键盘乐、弦乐、管乐、打击乐的典型乐器都有涉及。费用是每月40欧元,相当实惠。 很快我就发现,对小朋友来说,这是相当有趣的事情。一方面,老师的任务并不是一本正经地“教”,而是带孩子对乐器形成感性认识,所以除了演示,还有相当多的时间是在跟小朋友互动。另一方面,能跟小伙伴一起玩,对小朋友来说是非常快乐的事情。男孩子们很快就发现,Posaunen(英语的trombone,长号)是一种很好玩的东西,因为它的声音听起来“像放屁”——在调皮这一点上,世界各地的小朋友似乎都差不多。 能先玩遍各种乐器,再决定要不要继续学,学什么乐器,对孩子来说,是充满了快乐的安排。 (more…)
前几天参加了公司每年一度强制执行的员工安全培训,内容包括各种安全事宜,如何逃生,如何救火,公司的保险覆盖哪些范围等等。其中有一节是“如何心理健康”,里面讲到:为保持心理健康,请大家不要长时间工作,保证给自己的生活留出足够的时间…… 跟朋友谈起这件事,许多人都觉得好笑,甚至不可思议。 回头想想,我找现在这份工作的时候,同时拿了两个offer,一家德国公司,一家美国公司。美国公司开的薪水比德国公司高20%,但感觉德国公司的面试官(也就是后来的直属领导)跟我挺聊得来,所以我在做最后选择之前,也坦诚跟他聊了聊。 他告诉我:如果你想多赚钱,当然去美国公司。但是你技术还可以,会说德语,又在德国生活,为什么不体验一下德国公司呢?我们开不了那么多钱,但是你看你两个小孩都还小,肯定需要很多时间去陪伴,那么我们公司更合适你…… 最终我就听从了他的意见,这几年体验下来,也确实发现德国公司有些挺有趣的地方。下面我挑几个自己觉得最有趣的点,简单做个介绍。 (more…)
二十多年前,有一部根据真实事件改编的电视剧《犯罪升级》,给我留下了非常深刻的印象。 这部电视剧讲的是东北“鹤岭市南岗矿区“的工资抢劫案。那时候发工资还不是从银行转账,而是发现金。矿上很长时间没有发工资,欠下职工一大笔钱。好不容易押运来了110万元工资,还没有来得及发放,就被劫匪持枪劫走。此事引起公安机关高度重视,上级派驻了精兵强将,要求此重大案件必须侦破。 据参与枪战的保卫科干事回忆,劫匪一定是有备而来,才在抢劫完之后还能不慌不忙放火焚毁现场。而且大家都认定,有一名劫匪是女性。“女劫匪”是比较显著的特征,应当可以作为切入口,但拉网式的大范围摸排无论如何也找不到任何线索,侦破工作陷入了僵局。 (more…)
我已向Wired付费获得授权,翻译文章版权为译者本人所有,未经许可,不得转载。 1 Russel Guy怀抱着装满25万美元的公文包,来到爱沙尼亚的塔林市附近的直升机坪时,一架军用直升机已经停在那里了。Guy感觉不太自在,这里怎么看也不像军事基地,但是旁边站着的一看就是军人,而且带着枪。 这是1989年。苏联行将崩溃,部分军官正忙于出卖物资。Guy走近直升机坪的时候,大多数物资已经从直升机上卸下来,瓜分完毕。Guy想要的东西正是剩下的那些大箱子。他打开一个箱盖看货,闻到浓重的松树味。箱子里装的是另一个箱子,箱子之间垫着松针。Guy想,装货的人以前一定对付过缉毒犬,不过现在,他要的货可不是毒品。 苏联军方秘密制作了全世界的地图,但是迄今为止,只有少数外人见过这些地图。 这些箱子里都是地图,有几千张之多。每张地图的右上角都印着红色的俄文секрет,意为“机密”。 (more…)
按:今天在网上看到阮一峰推荐的《Hype Driven Development》,忍俊不禁,联想到工作中的很多经历又百感交集。趁春节假期翻译出来(练练手),与大家共享。 软件开发团队所做的软件架构或技术栈的决策,很多并没有经过踏实的研究和对目标成果的认真思考,而是不准确的意见、社交媒体的信息,或者就些是“热闹”的玩意。我称这种作派为“热闹驱动开发(Hype Driven Development,HDD)”,眼见它的危害,我赞成更专业的做法,就是“脚踏实地的软件工程”。下面我们一起看看HDD的来龙去脉,想想能如何改进。 (more…)
按:这段时间为了办理异地验车手续,费了不少力气折腾,而且发现网络上的许多答案都不准确,所以把我的流程贴在blog上,希望可以帮到大家。 北京车牌异地验车委托书开具流程 申请时间:在行使证有效期到期前的2个月(60天内)内。 申请资料:车辆行使证或者机动车登记证书的原件,最好带上一份复印件(在车管所复印需要排队、花钱)。 申请费用:无。 前提条件:车辆无违章信息(可在北京市交管局网站查询,目前已经全国联网,所以异地违章也可能有记录,不过支付宝可以办理一些异地违章)。 受理单位:北京市各车管所和车管分所(网上有说法必须到上牌注册的车管所,这是不对的)。 受理时间:早上9点到下午4点(周六日也可以办理)。 补充说明:超过行使证有效期(逾期)之后,仍然可以开具委托书并在异地验车,不收取任何额外费用,如果车辆在在逾期之后验车之前上路被抓拍,需要缴纳罚款。 拿到开具好的委托书后,加上行使证、登记证书、保险资料(有些地方还要求提供当年的车船税年票,请提前咨询),到所在地车辆检测场按照正常验车流程进行即可。
程序员有哪些职业素养?关于这个话题已经有很多资料,前段时间章显洲和我一起翻译了Uncle Bob的Clean Coder(中文名《程序员的职业素养》),通篇谈的都是程序员的职业素养,而且讲的很在理。不过今天,我想根据自己的经验和观察,谈“程序员的职业素养”的两个方面:克制和放纵。这里说的“克制”,指的是要克制自己敲代码的冲动;而“放纵”,指的是要放纵自己关于程序本身的思考。下面先从克制说起。 许多年前我刚开始学编程时,朋友曾说过一个笑话:差劲的程序员有两种,一种是开始就写main函数的;还有一种是上来就上网找各种类库源代码的。当时我并不能完全理解:编程序,不去找类库源代码,不从main函数开始,还要怎么做呢?后来才逐渐明白,上来就写main函数,或者上来就找类库找源代码,归根到底都是不能克制关于代码的冲动。直接写代码当然很“爽”,很有“成就感”。可是,这样做真的是好事吗? 在现实生活中,我确实看到相当多的程序员写代码的冲动相当强烈,难以克制。这可能是因为任何软件都需要落实为代码,拿到一个任务,直接写代码可以赋予程序员充足甚至全部的成就感。在心里想个明白,在纸上写写画画,反而成了一种难以克制的煎熬。但有经验的人都知道,程序不等于代码,程序的含义和复杂性远远超过代码;没有明晰的需求,没有清楚的头脑,没有良好的规划,写出来的代码就成了无源之水,无本之木,写的越爽,后果可能越严重。 我曾经见过一套系统,其中充满了各种状态码的条件判断,这种情况本来很正常,不幸所有的状态码都是硬编码的数字,整个系统就是一本天书:一会儿判断这里是否等于2,一会儿判断那里是否大于7……究其原因,是程序员觉得这些状态码无非就是“用数字代表状态”,所以随便选些数字就好了:2代表什么,7对应什么,自己记得就好;更重要的是,硬编码的状态码“用起来方便”,敲代码的速度大大提升——不需要查找变量,也不需要输入整个变量名。这种系统的问题相信大家都猜得到,维护和修改起来无比痛苦。所以,尽管写这些程序的程序员已经有了一两年甚至更多的工作经验,但他们身上很难说有“职业素养”。 与此相反,重构的人员采取了完全不同的方法:虽然全部硬编码看起来不爽,用起来更不爽,人人都有立刻动手改掉它的冲动,但重构时首先要做的并不是直接修改代码,而是仔细阅读整个程序,编写了一份所有状态码的图表(并且打印出来供随时查阅),再根据状态码的意义和使用场景,重新设计状态码(因为各个状态之间还存在逻辑关系,所以需要以自定义类型表示状态),最后才动手编码完成重构。事实证明,这种策略是非常成功的:阅读代码、制定图表、重新设计需要三周的时间,真正的重构只用几天就顺利完成了,而且从此以后维护和修改的难度大大降低,真正达到了重构的目的。完成重构工作的程序员,工作经验并不比最初编写程序的人要多,他们没有一开始就写代码,甚至没有花太多时间在代码上,更没有用到高深莫测的技术,但他们身上恰恰体现出了程序员的职业素养。 身为程序员,大概人人都喜欢狂敲代码带来的快感;但身为职业程序员,必须要克制写代码的冲动,在写代码之前花更多时间理解需求,设计系统,制定规划,这样写出来的代码才会更加精炼,整个程序才更有价值。我们甚至可以说,拿到需求就动手敲代码的程序员,无论有多少年经验,仍然不过是楞头青。 说完了克制,下面说放纵。此处的“放纵”其实是一个比较夸张的说法,但依我所见,用“放纵”非常有必要,因为不少程序员写的程序实在太“保守”了,矫枉必须过正。 我刚刚工作时,项目经理分给我的任务是从网络上抓些特定的信息存到数据库。这个任务我花了不少工夫完成,本以为可以赢得项目经理的表扬,结果却是劈头盖脸的苛责:“你当这是学生写程序吗?什么异常情况都没考虑?网络断了怎么办?数据库连不通怎么办?……”虽然在学校写过不少程序,但这些问题我真是没处理过,甚至完全没考虑过。可以说,在那一刻,我才真正开始理解,为什么要有异常,为什么会有强制异常处理。 本来我以为这只是自己经验不足的教训,但后来我逐渐发现,不少程序员对异常处理都相当吝啬,更乐意让自己的程序呆在舒适安逸的温柔乡里,走在万事俱备的康庄大道上——用户的输入永远是符合预期的,程序的计算永远不会出任何误差,网络和数据库连接永远是稳定可靠的……这样做最明显的后果就是,对程序员意料之外的情况,程序做不了任何处理,只能交由它所依赖的类库或者运行平台来显示最原始的错误信息,而这些信息直接暴露给客户——比如明明是网络不通,却提示 “无法解析域名”(对普通人来说,“解析域名”简直就是天书);明明是客户输入有错误,却直接抛出最底层异常(即便大公司也会犯这种错误)。 每次遇到这种情况,用户即便有能力解决问题,也不知所措,只能找程序员本人来处理。如果某人开发的程序发布之后经常需要在线调试、现场维护,开发效率和质量就会大打折扣,我们也很难说哪里体现了“职业素养”。相反,足够职业的程序员,哪怕开发一个非常简单的程序,必然不会局限于正常的逻辑,而会“放纵”自己的时间精力,去考虑各种异常情况,做出合适的处理,他开发的程序就像优秀作家的作品,可以简单,也可以复杂,可以平实,也可以高深,但一定不会轻易倒下。 武侠小说里常见一些顶尖高手,用平凡无奇的招式,轻松击败对手,那是因为比起招式,“功力”和“应对”是更重要的因素,其实程序开发也是这个道理。如果我们把看得见、摸得着的代码比作某种招式,那么程序员越能克制写代码的冲动,花越多的时间思考和设计,此招式的功力就越深厚;另一方面,程序员越能放纵自己对各种意外的考虑和处理,此招式的应对能力就更强。如果成为武林高手必然有深厚的功力,有丰富的应对经验,那么要成为职业程序员,也必然要花大量精力思考代码之外的问题,处理意料之外的情况。
经过各位读者和出版社的辛苦努力,《正则指引》终于上市了,以下是主要的购买链接: 亚马逊:http://www.amazon.cn/%E6%AD%A3%E5%88%99%E6%8C%87%E5%BC%95-%E4%BD%99%E6%99%9F/dp/B007X6O6J0/ 当当:http://product.dangdang.com/product.aspx?product_id=22702127 京东:http://book.360buy.com/10972570.html China-Pub:http://product.china-pub.com/199266 有趣的是,预售阶段就登上了京东的24小时分类畅销榜,感谢大家的厚爱。