2013年七月月 发布的文章

毕业九年 – 忆我的大学同学

又是一年毕业季。自从九年前坐车驶出母校大门,我就再也没有回过母校,确是十分怀念,但更是怀念那些一起生活了四年的大学同学们。刚毕业那会儿,与同学们 还都保持着联系。后来大家都有了自己的新圈子,渐渐的联系少了,甚至断了。最初的校友录也荒废了,QQ我早就不用了,于是乎与大家天各一方,各自发展。

上周五去北京开会,会后我的直接领导去见他的大学同学,我也被邀请同去了^_^(要么也是无聊地等火车)。饭桌上两位多年不见的老同学相见甚欢,那场面深深感染了我。在回沈的动车上我就下定决心:一定要找到组织^_^。

在移动互联网如此发达的今天,这件事还真的不难。在微信和微博这样优秀社交工具的帮助下,不出一天,我就顺利找到了组织(微信群),并初步了解到大家的情况。

没有聚会,胜似聚会。对我来说,能在微信群里看到大家,我已经很满足了。一晃9年过去了,同学早已分布在全国各地,至少一半已经结婚生子/ 女。有下一代的,微信的头像多是以下一代的照片(Me, too^_^)。看着群里面一个个微信头像,让我不由得忆起当年的大学生活,点点滴滴,如现眼前。以下对我的同学做逐一的回忆,印象是主观的,并且有些信息可能已经不靠谱了。

班级

哈工大,自动化测试与控制系,测控技术与仪器专业,本科0001110班(2000入学,2004毕业)。

成员

* 田玉博
班长,外号田鸡。哈尔滨本地人,似乎是省重点哈三中毕业的。人长的一副书生样,细高,感觉有些偏瘦弱,带着一副眼镜。入学时被导员任命为代理班长。后经民 选后正式转正,记得当初班级选班长时,我还得了一票,弄得我极其不好意思。大学四年,田同学展现了很好的组织能力,我们班在大一、大二的集体活动还是蛮多 蛮丰富的。大四第一次考研,班长似乎发挥欠佳,后复读重考一举中的。目前在北京某企业工作,发展的相当不错。

* 岳晓帆
学习委员。哈尔滨本地人。据说和我们并不是一届的学生。是上一届实验学院的。后由于不堪实验学院高压,来到我们专业重新来过的。由于岳童鞋基本不住寝室, 所以与他接触不多。体育课让我们大家可以相互了解,因为我们报的都是足球班。平时以聊足球、踢足球为共同嗜好。印象里他的另一嗜好就是看电影了,与我们班 大黄(DVD发烧友)交往慎密。现状不知。

* 毛定涛
我们班最神秘的人。记忆中是来自湖北,他是我们班入学时的最高分。我们见过一面后,他就去新加坡南洋理工做交换生了。此后再无音信,现状未知。

* 方运
外号小方。江西九江人,是我们班年龄最小的童鞋,人长得也是瘦小瘦小的,因此平时是我们重点的欺负对象^_^。但小方的学习成绩却是我班最好的,毕业时因 在系里成绩名列前茅而被保研了。并且似乎是目前我所知班里唯一读到博的。目前刚毕业没几年,在苏州从事显示相关元件的研发工作。小方是我毕业后唯一见过面 的同学,那还是在刚毕业后没几年,小方从沈阳换火车,我们一起吃了顿饭(时间有限)。

* 杨云良
外号:杨老大。至少我们都这么叫,也许是其年龄比我们大点的缘故吧。杨老大让我记忆最深的事情是有一年冬天,老大在滑冰课上门牙摔掉了,那个寒假杨老大没 有回家。我也因某种原因没有回家,于是我们就算是做个伴儿,每天盒饭伺候,也不亦乐乎。杨老大毕业后就去南方工作了。现在在苏州,已成家立业了。结婚那 天,好多在华南、华东一带的同学都参加了老大的婚礼,我远在北方没能见证。

* 林龙
福建人,样子涨的也很福建。让我印象最深的就是他是个聪明孩儿。考研复习其间也是边玩游戏边复习,居然考上上海交大了,自愧差的太远啊。现居上海。

* 姚小勇 ,湖北人,高考成绩在班里也是名列前茅的。但到大学后有些“堕落”,迷于游戏,成为游戏男。毕业后似乎也在华东一带,校友录上他的最新照片显示的是在国电新疆工作

* 黄易廷
浙江人。长像挺“猥琐”^_^。我们都管他叫“大黄”。电影/DVD骨灰粉,零花钱都买DVD了,人家衣柜里都是衣服,他衣柜里都是各种盒装的、纪念版的 DVD。他和前面提到的岳晓帆在这方面很对路。另外他还有一个爱好,那就是听古典音乐。他的床边放着一个音乐播放器,每天他似乎都是伴着贝多芬、肖邦的音 乐入眠的。目前大黄在浙江杭州工作,居然和我是同行,万万没有想到啊。

* 邓立宝
记得没错应该是河北人,我就管他叫“宝哥”。宝哥为人低调,后来做家教时居然处了个本地的女朋友(似乎是我们学姐),让我们着实有些吃惊。印象中比较深刻的是经常和宝哥去打乒乓球。毕业后,宝哥似乎是考上研究生了,目前没有他的信息。

下面七个都是我们寝室的兄弟了。

* 郭朋杰
河南人。大学入学时,第一个遇到的就是他,之后总是一起去吃饭,到街上买东西等。印象中,他喜欢直来直去,而且似乎是急性子。考研复习其间搬出去租房子了。后考上了研究生,毕业后似乎是在成飞,保密单位。目前在成都安家了,也有了孩子。

* 柴保明
河南新乡汉子,身材魁梧。高中时的程序高手。到大学后不知为何不愿在计算机编程方面再做投入了。喜看书。后也上了游戏瘾,玩了一阵。考研期间戒掉。研究生是在复旦读的。毕业后留在上海,在摩根士丹利做开发工程师。现状估计也过得不错吧。

* 胡士杰
外号小木,也是他自己喜欢的昵称。成都人,游戏男。玩游戏,爱游戏,现在在成都创业做游戏,据说有风投。在我看来,他不做游戏就白瞎了。他父母都是工程 师,家境不错,印象中胡士杰也很聪明。不过最深的印象还是他有些小洁癖,如果后半夜你能在洗漱间看到人影,那多半是他。他那双手每天晚上不知道要洗上多少 遍。他的床铺是不允许别人坐的,其实坐了也没告诉他^_^。毕业后他现在山东浪潮软件,后估计就是回老家创业去了。

* 魏陈
外号老木^_^。上海小资男。大三就泡了个mm出去住了,毕业后回了老家,目前工作保密,靠,居然不告诉我。我可是你曾经上铺的兄弟啊。

* 高一鹏
魏陈搬出去后,我的另一个下铺兄弟。阿城人,黑龙江壮男。为人忠厚老实,与人为善,脸上总是挂着笑容。毕业后应该是重新考研了,现在应该还在中兴,至于哪个城市未知。让我感到印象最深的是他的路似乎都是他老爹替他安排好的。

* 庞鸿光
广州斗门人。南方高又帅。对电子产品甚是钻研,我们班唯一参加大学挑战杯电子大赛的。做事十分投入。目前在深圳安家,取妻生女了,在中兴做芯片,也算“投其所好”了。

* 汪海龙
黑龙江伊春人,我管他就叫“龙”。平时十分要好,另外他在计算机系的高中女同学与我在计算机系的高中女同学是一班的,有时候一起活动常见面,再加上我平时 总喜欢旁听计算机系的课程,抬头不见低头见,互相都认识。龙最让我吃惊的是研究生入学考试数学居然考到140以上,一万个没想到啊。现在他定居深圳,服务 于华为。刚刚让老婆怀上宝宝,处于准爸爸角色。

* 张伟峰
吉林长春人。一起踢球喝酒的好兄弟。毕业后回长春了,现在应该是我们班最NB的了吧。自己创业,身价千万。更是没想到啊。

* 许晓明
好像是安徽人。肥头大耳,人长得挺可爱的,胖嘟嘟的,我没事就取笑其为“猪猪”,大二之后也沉溺于游戏。毕业后就工作了,其间到沈阳来过多次,可惜我都出差了。目前上海某工厂做质量保证,估计是个小头头。

* 孙明
江苏人,年纪小,但个头不小。同样也是一个游戏男、盒饭男(玩得没空去食堂吃饭)。毕业后也到华东一带工作了,具体信息不详。

* 许大怀 
体育委员,家是哈尔滨的,长的也很哈尔滨,眼睛很大。穿着时尚。由于经常不住寝室,总见不到人影,因此在大学时接触不多。最深的印象就是听说他姐和姐夫都是哈工大博士,很NB的。毕业后最后一次跟他联系时,他在东莞联通。

* 崔晓萌
同样哈尔滨人,典型的哈尔滨帅锅。接触也不多,也是因为常见不到人影。现状不详。

* 杨栋新
山西人。外号:大猩猩。好像是我给起的。一来新猩两字挺谐音,二来其相貌也神似^_^。这童鞋似乎不那么合群,四年了和我们大家的交流都很少。毕业后就不知去向了。

下面是我们班的8个mm的印象:

* 杜英
陕西人,忘记了是否是米脂的。人长的不错,就是黑了点。说话细声细气儿的。记得我们刚入学金工实习时,我因为总喜欢说“咱们”而被她批评无数次 – 是“我们”,不是“咱们”,不包括我。毕业后去了上海,目前也在上海工作生活。

* 王海霞
敦实的河南妹子,胖乎乎的,笑起来咪咪眼,着实可爱。现在想起来很还亲切呢。她算是当时这几个女同学中和我交流最多的女生了吧。研究生毕业,目前在上海工作。

* 张略
哈市本地美女,长辫子,白净净的。我和她接触很少。毕业后考上了研究生。现状未知。

* 池楠
黑龙江人,我们班的支书。身体魁梧壮实。外语超好,毕业后就去外交部了,工作后发出无数照片(什么迪拜塔等),游览世界各地明胜,让我们这干人羡慕不已。目前依旧在北京外交部某部门。

* 王婧婧
长的挺小巧的,少言寡语的。当初接触也不多。毕业后也考上研究生了,目前在浙江杭州,已当妈了,细节不知。

* 汤珺
广西柳州人,如果不考虑身高,算是个小美女了。如果算上身高,她是我们班最小的人了。很开朗活泼。大学时我们有过很多交流。毕业后应该也考上研究生了。目前定居上海,也已经是当妈的人了。

* 陈亦能
长像略有些粗犷的绍兴人,和鲁迅是同乡。大学时沟通不多,目前她在上海(微信上)。

* 姜岚
黑龙江人。大学时沟通也不多,似乎挺会包饺子的(大一元旦活动)。现状未知。

九年了,就算把这些童鞋的名字想完整也甚是不易。因此把九年后记忆中的同学印象写下来,也算是一种拯救。以后闲遐时回顾一下,偷着乐乐,也别有一番趣味。生活就是如此,去体会去感受才有意义。

也谈代码行统计

一直在纠结要不要就这个话题写点什么,之前梳理过一些思路,但感觉这个题目似乎没什么大意义。不过将东西憋在肚子里的滋味总是不好受的,最终我还是选择写出来一些,即便它真的没有什么意义^_^。

事情缘于近期领导让我负责的一个内部任务:制定组织内的代码行统计标准并实现标准化的工具。就是这个任务促使了我对代码行统计重新做了一番考量。

对代码行统计的理解

代码行统计这个活动不是软件开发过程中的关键路径活动,它对代码质量、开发进度以及软件价格几乎产生不了什么影响,应该算是个可有可无的东西。

就代码行统计这个活动本身而言,我个人的观点是没有代码行统计不表明不能开发出好软件;有了代码行统计,就一定能开发出高质量软件吗?

不过有一种观点认为:世界的本质是数据。通过数据我们可以发现事物运行的规律。代码行统计则是软件工程中对“数据”要求的产物。过程的好坏需要有数据支 撑,因此代码行统计这个活动成为了人们实现“用数据说话”的一柄利器。在“数据为王”的今天,我们无论如何都不能忽视数据的作用。人们通过数据来反映软件 开发过程中的一些规律性的东西本身也没有什么不妥。另外代码是软件开发过程的最重要成果物,因此围绕着代码的性态,我们用工具做诸多分析,期望从得到的数 据中找寻出一些可以指导和改善我们后续工作的蛛丝马迹。代码行统计提供的多是基础数据,在与其他过程基础数据结合分析后,我们能得到更多的信息。

合理地使用场合

个人觉得下面几个场合对代码行统计的需求是合理的:

* 统计代码总规模
   某个项目、某个模块或又某个版本的代码总规模。

* 代码“成分”统计
   统计空行、注释、代码的行数及占比、重复代码行数及占比等。

* 版本间代码变更差异统计
   两个有关联版本的数据对比统计,获取版本间的有效变更数据情况并作为基础数据提供给后续分析。

一些过程质量指标,诸如千行代码缺陷率等均是以上面这些代码行统计输出的基础数据为基础的。

“误用”

有合理的使用,就有“不合理”的使用 – “误用”。之所以加上引号,是因为至今人们对此见仁见智,尚无定论。以下列举两典型的“误用”。

* 通过代码行统计评估进度

有些组织在项目开始初期,就对成果的规模做了估计,比如10w行代码。然后在过程中使用代码统计工具对项目当前已实现的规模进行统计,并用统计出的数据与 初值的比值作为项目进度的评估参考。个人认为这是种典型的误用。盖茨说过:“用代码行数来衡量编程的进度,就如同用航空器零件的重量来衡量航空飞机的制造 进度一样”。且不提初期的估值有多么的不准确,就代码的行数本身而言,也受到各种因素的影响,比如设计方案、实现者的功力以及编码习惯等。同一个功能,A 实现需要100行代码;换成B就需要10行。

* 通过代码行统计评估程序员绩效

在一些外包公司或外包项目里,尤其是日本人的外包项目里,通过编写代码行的多少来评估程序员绩效的作法是很有市场的。我不能完全否定这种方法的正确性,因 为在日本外包项目中变态的日本人对代码的审核极其严格,并且有着苛刻的编码标准和风格,因此一些胡乱堆砌代码或使用奇技淫巧的代码都会被驳回,因此所有项 目开发者的效率似乎被约束到了一个平均线上。在这个前提下,产出的代码越多,似乎的确表明了这个开发者超出了平均效率,或至少牺牲了不少个人时间来完成项 目中的任务,精神可嘉,绩效被评高似乎也是合情合理的。但除此之外,用代码行多寡来评估程序员绩效显然是不受待见的。

考虑这个“误用”时,我也想模仿盖茨的话做个形象且深刻比喻,最初我写下的是这句话:“用代码行数多少来评估程序员的绩效,就好比用曲子的长短来评估音乐 家的水平,或又好比用画幅的大小来衡量画家的水准,或又好比用电影的时长 来掂量导演的功力!”。但仔细揣摩后发现这句话看起来挺像那么回事,但实际上却是不恰当的。什么是水准、水平或功力,这是衡量人的水平高低的;而绩效则是 一段时间范畴内工作成果的评估; 一个是长期的肯定,一个是阶段性的成绩。我显然是将水平和绩效(阶段性成绩)混为一谈了。高水平的开发者不一定每个周期都会取得高绩效,低水平的开发者也 不是无法取得高绩效的。因此这句话似乎应该改成:“用代码行数多少来评估程序员的绩效,就好比用这首曲子的长短来评估音乐家在这个阶段的水平,或又好比用 画幅的大小来衡量画家的这个阶段水准,或又 好比用电影的时长来掂量导演在这部电影上的功力!”。是不是读起来很别扭啊,反正我是这么觉得的。程序员的成果物是代码,代码好坏优劣对程序员绩效有着直 接影响(虽非充分必要条件),我们不妨替换一下本体来换种说法:“用代码行数多少来评估代码实现的好坏,就好比用曲子的长短来评估曲子的优劣,或又好比用 画幅的大小来衡量画作的高低,或又好比用电影的时长来掂量影片的良莠”!

对用代码行数多少来评估程序员绩效这种事情,我是很反感的,但在国内许多公司里,这种现象却又屡见不鲜。但这种行为背后的动机何在呢?传统工厂中,衡量一 个worker的绩效是相对容易量化,也比较客观的,比如制鞋厂可以用制成鞋子的数量来确定 worker绩效;在汽车组装车间,组装汽车的数量可以作为作为工人们的绩效;在炼钢厂,班组炼出的钢铁的吨数可作为班组成员绩效等等。将代码行数作为程 序员绩效的参考指标也许是一个无奈的方法。之所以想用代码行数,是因为程序员工作中能量化的东西不多,代码行数首当其冲。组织为了尽量减少绩效评定时主观 的成分,增加客观的评价,代码行统计从此被误用了。

代码行统计的高效使用

* 标准统一,工具一致

代码行统计工具有很多,因此执行这个活动时会出现不同人使用的代码行统计工具不一致的情况;并且不同工具对一些指标的定义也许有不同,这会导致收集到的数据存在含义不一致,精确度差的问题。因此高效使用代码行统计工具的一个前提就是(统计)标准统一,工具一致。

* 零干扰

一些传统的代码行统计方法是配置负责人收到统计任务时,将任务分发给各个模块的负责人,由各个模块负责人各自统计,然后反馈给配置负责人汇总。这种方式显 然不那么高效,而且容易引起一些对统计任务的反感情绪。高效的代码行统计最好能做到对开发人员“零干扰”。配置负责人可以通过“自动化”的静默方式收集代 码行数据。当然这需要对一些现成的开源工具做一些包装或二次开发才能做到,个人觉得这种投入是值得的,同时也能避免标准不一,工具不一致的情况。

给新手程序员的建议

本文翻译自Dr. Dobb’s杂志主编Andrew Binstock的"Advice to a new programmer"一文

总是有太多的建议摆在新手程序员面前,以致他们难于选择从何处开始。然而,所有这些建议都是建构在下面这五条实践的基础之上的。

每隔几个月,我就会收到一些勤奋有加的新手程序员的求助,他们希望知道如何才能成为一名真正优秀的程序员。在一些程序员论坛上,我也能看到为数不 少的类似问题,这是一个令人鼓舞的趋势。一些最周全的答案往往与我对这个问题的看法相似,这表明在基础的最佳实践上确实存在着某种一致。因此我下 面的建议并非原创,不过也许我的这些补充会提供给你更进一步的理解。

我印象中的新手程序员基本了解编程的原理,写过程序,但大多规模较小且复杂度不一,致力于某个领域的工作或自己或他人个人项目。

编程工作只有一种真正的基础活动,那就是写代码。要想擅于编程,你就必须编写大量的代码。 大量的工作可能成为一种促进你成长的工具,也可能是一些有限技能的重复练习。为了避免成为后者,你应该做到:

阅读大量代码。尤其是阅读大量由卓越程序员编写的代码。记住:不仅读那些坐在大厅里的优秀程序员的代码,更要读那些卓越程序员的。 在开源软件大行其道的今天,做到这些十分容易。当我学习Java时,我读了Tomcat的代码,读了Cruise Control CI服务器的代码。自从那时起,我已经读了大量优秀的代码。

阅读代码时很容易从main函数开始,但这样一来,你很可能会在初始化以及命令行解析代码上花费大量时间。我更喜欢根据源文件名寻找一些令我感兴 趣的功能实现,然后深入阅读这些源文件。理解整个项目或整体设计的来龙去脉并不是关键,做这些会让你感觉筋疲力尽的。阅读代码。查看注释,弄清楚 作者在做什么以及是如何着手做的。

彻底了解你的工具。我认为损耗编程时间最多的不是调试或重写代码,而是因开发人员对其所使用工具的不熟悉而导致的无数碎片时间的损 耗。我所指的工具包括:集成开发环境(IDE)、编程语言、构建系统以及版本控制系统。其中,集成开发环境和编程语言是到目前为止最为重要的。经 过几个星期的练习,你应该知道集成开发环境中的几乎每个按键组合,这样你只有在为了节省按键时间时才使用鼠标。如果你知道按键组合,你就知道了这 些命令。但如果你只使用鼠标,你只会知道菜单,菜单上面有你倾向于点击的相同的一个或两个条目。因此了解集成开发环境是一种不折不扣的纪律。

了解大型编程语言,诸如Java或C++,需要的不仅仅是纪律。它们自身规模庞大,它们的库亦规模庞大。阅读代码是我认为的了解编程语言最好的方式,阅读 那些使用了你所未知特性的代码并寻找机会使用它们。书籍(而不是博客)是另外一个极好的资料来源。了解你目前正在使用的特性的外围,很快你就会发现外围扩 大了。了解版本控制系统和构建系统将让你成为一个理想的团队成员 — 不会因为对重要操作的无知而浪费时间。

动手编码前先规划好你的代码。我认为这是建议列表中最难做的一项,但同时它也可能给你换来最多的益处。我所指的并不是正式的设计 – 在这个阶段正式设计一般不是必要的。不过你确实应该用一种其他方式精心策划一下代码,而不仅仅是将思路放在脑子里。最简单的方法就是编写一个小文档(我经 常使用的是思维导图):代码的需求是什么?你打算如何实现它?还有哪些目前未知的事情需要去了解?我需要或需要创建什么对象?将这些都写出来。只有在这样 之后开始编码,你才会发现代码变得更加容易编写了,更容易形成文档了,也更容易修改了。将你的笔记保存下来 – 它们将是很好的参考资料。

大量编写代码并进行代码评审。如果你那里不做代码评审,那你就自己来做。找出那些最好的程序员,并且你可以通过某种方式听 到和理解他们给你的有用的建议。别做令人讨厌的人,但也不能因为你害羞,忙碌或自负而回避这个过程。代码评审应该成为你编程人生的一部分。要有创造性。试 试在某个下午与比你更牛的程序员一起做结对编程。重要的是你需要反馈,而这些反馈是你自己无法给予自己的。

编码与写测试并驾齐驱。这也许是这里唯一有争议的一条。它并非是对TDD的认可(译注:测试驱动开发)。但这里要认可的是你的代码 在大多数要面对的场合里都是可以工作的。开始单元测试,并用边缘值测试新代码。例如,当传入一个负数或者是整型数最大值时,你的函数是否还能正常工作?如 果不能,你的函数是否抛出了一个信息详实的异常或只是崩溃退出?如果不是异常,你是否使用了断言(assert)来缩小输入的范围?如果这么做了,那就测 试这个断言。利用之前做的规划编写一些模拟(mock)测试,接下来用这些模拟对象去开始测试你的新代码。这将有助于阐明你当前代码中的设计问题以及即将 实现的对象。保存你的测试代码,在每次签入代码前都运行它们,这些测试将成为后续那些破坏你当前代码的新代码的早期预警系统。

还有许多建议和至理名言可以添加到这个列表中。但这本身就是问题的一部分:过多的建议将导致新手难于知道到底从何处开始。因此,我故意将我的建议缩减到仅 剩五点。如果你能勤奋地运用这五点建议实践,你会很快发现两件事情:你将可以逐步应付更大更重要的任务了,并且当你回首翻看你几个月之前编写的代码时,你 会觉得尴尬。

毫无疑问这两种感受都是你进步的标志。祝你好运!




这里是Tony Bai的个人Blog,欢迎访问、订阅和留言!订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:


以太币:


如果您喜欢通过微信App浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:



本站Powered by Digital Ocean VPS。

选择Digital Ocean VPS主机,即可获得10美元现金充值,可免费使用两个月哟!

著名主机提供商Linode 10$优惠码:linode10,在这里注册即可免费获得。

阿里云推荐码:1WFZ0V立享9折!

View Tony Bai's profile on LinkedIn


文章

评论

  • 正在加载...

分类

标签

归档











更多