旧书重读

有段时间了,我开启了一个单独的进程,或听或看,或缩写本或连环画,把以前读过或者只看过简介的名著重读一遍。包括不限于《世界文学名著连环画:欧美卷》《床头灯系列》《牛津书虫系列》。最初,我也以为这些都是小孩儿看的,只是质量较高,所以准备拿来休闲,拿来回忆。

但是,我读出了不同的东西。

微信图片_2018121320451218

虽然也知道这个原理,在不同的年龄段,读同一部伟大的作品会有不同的收获和感受,但是原以为只有经典专业书籍才会如此,因为随着水平进步会有更多收获,原来读不懂的有了新的理解。并没有想到切身体会是这样的,来自儿童读物。

微信图片_201812132045123

1. 复杂情感

年齿渐长,有时候能够更耐心听完别人的提示,才越来越知道自己情商之低下的程度。渐渐知道,智商正常并不意味着情商也不低下。人类的动机,远远比自然规则要复杂得多。更何况,人类还会掩饰。学校里没有这样的专业训练,所以即使读了大学,也是白扯。

以上是背景。你可以想像基本二傻子状态的我,在如此喧嚣的世界里是如何挣扎的。而且,你可能不知道,像我一样的同学,并不是少数。我知道这一点,是因为我在午餐时给同事们讲了段文学解析,居然有好几个人说"哇,原来是这样啊。"我给研究生同学们也讲了一遍,有的同学的反应是"我们居然跟了情商如此低下的导师,他能活到这时候真不容易"。有的同学故作镇定,但是能看出来他的惊慌,我第一次读这一段时也是如此。

微信图片_2018121320451214

这段文学解析很经典,是红楼梦里的一段。一干人等吃饭喝酒,贾宝玉想喝冷酒。林黛玉劝他,他不听。读这一段时,我还没有到年龄,一次酒也没有喝过,除了用白酒送服云南白药,所以此处不懂。然后换薛宝钗劝,她说,你把酒喝到肚子里,还要用胃肠去暖它,多么赔本啊。这不是重点。过了一会,是雪雁还是什么娟,总之林姑娘的丫鬟来送东西。林姑娘就问,谁让你送来的啊。这位丫鬟答,是某某姐姐让送来的。林怒道: 我平时让你干啥啥,你就不听,别人让你送东西你马骝就来了啊。

文学解析那段告诉我们,林姑娘是在借训丫鬟讽刺贾宝玉,你看你不听我的听薛宝钗的。

微信图片_2018121320451212

那年读到这段,非常震撼。原来这么复杂啊,是假的吧,如果如此艰难,这还让不让人活了。说到此处,有几位同学给了我一个"你活到此刻当真不易"的表情。

后来,有些同事解读日常对话,我才逐渐明白,现实世界原来果真如此。第一次读到这文学解析,我还想,"应该努力一下,了解这个世界的运行规律。"后来这样的难题一多,就像一个模考总不及格的同学,我对于上清北这种事,再也不放在心上。如果对话实在艰难,我就干脆缴械,告诉对方,"我是真不明白你说的意思,你还是直说了吧,不然你白浪费时间。"

在这样的背景下,有一天我突然发现,我能从影视文学作品里读到另一面了。你能理解我的狂喜——进步了么,还有怅然。

微信图片_2018121320451213
跟二猫和二猫妈一起看《龙猫》。故事展开得很流畅,背景交待和设定不露痕迹。农村生活,忙碌的父亲,住院的母亲,一个姐姐带着妹妹。故乡的风景一样,我开始代入。当看到妹妹跑丢的时候,我还想到,我小时候也跑丢过一次,哥没看住,我一个人穿过了半个通化市区。当然,后来被找到了。

但是影片里连续几个镜头讲述父亲、姐姐找妹妹,后来村里人都发动起来,打着火把在黑夜里喊。想起以前看过的后面奇幻的情节,我的头发突然竖起来。我看看二猫聚精会神的,想跟二猫妈讨论却把话咽了下去。我觉得,导演想说的是——那个妹妹死了。后面所有的一切都是假的。就像姐妹俩意识不到那位陪他们玩的邻居奶奶其实是来照看他们的,因为父亲意识到了危险,我们也没有意识到,至少我在前几次看《龙猫》时没有意识到,那个妹妹应该是死了。后面的情节,那么浪漫,那么瑰丽的,都是姐姐独自一人的想像。

微信图片_201812132045124

一直看到影片结束,也无法推翻我的假设,虽然也并无确切的证据证实。但是那些故事在我的眼里不再和以前一样,我提心吊胆地看着,生怕坐实了我的胡思乱想。就像当年读《神雕》的时候,我认定郭襄对杨过那就是纯洁的友谊。似乎有那么一点不同,不过是完全可以忽略的噪点。所以,对于黄蓉的各种担心,我的感觉就是"她有毛病吧""真是莫名其妙啊"。直到有天我说,"郭襄是不是有一点喜欢杨过啊"。二猫妈说,"当然,难道还有别的可能"。从那以后,我再读到黄蓉,就不再是"她有毛病",而是"我有毛病"。

故事还是那个故事,变的不过是我而已。

微信图片_201812132045125微信图片_2018121320451224

我仍然读不懂《小王子》《彼得.潘》《柳林风声》《爱丽斯漫游奇境记》,那些角色都没有逻辑。他们说的话做的事,书上的文字我都认识,可是连不成段落。就像一次,我坐出租车听司机和押车的女子的对话,不仅没有段落,连他俩之间的句子都没有关系。后一个人接着前一个人的话,却完全不是在回答,至少我听不出来回答的是哪个点。我学给包师弟关师姐等人,他们犹豫了一会儿哈哈大笑,给我解释一番,中心思想是这俩家伙在调情。我听到的不过是结论,也看不出来他们几位怎么就知道。

微信图片_2018121320451211

这些童话我仍然读不懂,但是我开始关心《龙猫》除了能看的懂的故事以外的东西。其他的可能性。看《了不起的狐狸爸爸》,到最后,声称自己怕狼的狐狸爸爸遇到了狼。他对着远山上的狼,像狼一样嚎叫了一声,却流下了一滴泪。二猫嘟哝一句,"怎么回事"。我说,"我看懂了,以后再给你讲。"

读《歌剧院的幽灵》,二猫纠结了很久,最后那个波斯人到底死了没有。她给我讲最后的情节,我找来又听了一遍。在大火里,波斯人放走了主角那个女孩,然后不知所踪。我想说,孩子,波斯人死没死并不是重点啊。但是想起一直以来我也一样只纠结真实,而对于此刻我认为的重点忽略不计,我想,谁知道哪个才是重点呢。所以我说,孩子,我也不知道,真是奇怪啊。

微信图片_2018121320451216

2. 看到残忍

锻炼的时候听喜马拉雅里的《骆驼祥子》。是因为先听了《四世同堂》,改变了以前对这部作品的猜测。《四世同堂》电视剧里先是一顿大鼓还是邦子,让我误人为是弘扬传统文化的呢。小说听得我抑郁得很,是抗日战争,大潮中的沙子如何努力求生、悲惨坠落的故事。几乎看不到什么希望。坏人害好人,然后坏人也落难。每晚锻炼完,浑身是汗,把《四世同堂》停了,发半晌呆。想在那样的情况下,自己最好能表现成什么样,会坏成什么样。心下惨然。也困惑,能写出这么惨淡的世界,老舍先生怎么可能跳湖呢。在这些作品里,他死过很多次了吧。难道人间,比他的这么黯淡的虚构世界,更不值得么?

微信图片_2018121320451221

后来就听《骆驼祥子》,我开始怀疑自己的记忆。不对啊,祥子和虎妞不是纯洁的爱情么,我怎么听出来买卖,甚至还有逼良为"娼"的意味呢。《骆驼祥子》,还有《城南旧事》,我都没有看过电影,听的是收音机里的录音剪辑。所以我不知道他们长什么样,但是声音很熟悉。虎妞,怎么会是这样的呢。祥子,也超出我想像的有心眼儿。我非常诧异,那感觉就像电影电视里被兄弟捅了一刀,然后握着刀柄瞪着眼睛,"怎么会是……你"

后来在网上查了,电影对原著有巨大修改。我小时候听的是电影,此刻听的是原著。幸亏,我先听的是电影,那是更积极温情一点儿的版本。原著里,祥子面临的问题是无解的,只能越陷越深。我想,并不适合少年儿童阅读吧,即使是情商低下的儿童也过于刺激了。

微信图片_201812132045129

祥子眼里的虎妞又黑又老又丑,身材高大人又霸道。但是他既用了虎妞的钱买车,又在虎妞生孩子难产的关键时刻放弃了救治。太不讲究了。他后来终于过得好些了,准备去找他喜欢的女子小福子。老舍的安排,小福子死了。我松了一口气。

原著的《骆驼祥子》,在我看来就像对电影版的解读,揭开温情浪漫后面的残忍世界。我又看了电影《胭脂扣》和《半生缘》,感受也是,"他们怎么能这样呢。"边庆幸,幸亏,不是在更年轻的时候就看了这些片子。

我想起第一次看主角不是正面英雄的片子《无腿先生》。那还是少年儿童时期,小学三年级或更早。非常困惑,他也不是好人啊。看祥子,还有胭脂扣里的张国荣、半生缘里的黎明,我同样感慨,他们怎么能这样呢。二猫妈解说,看张恨水张爱玲等人的作品,那个年代的人们就是这样的。

这是生活的本来面貌?

微信图片_201812132045121

我能接受的是另一种认知,读《汤姆.索亚历险记》。改编的电影我小时候看过,在黑白电视上。当时我有多小呢,我觉得里面的演员都是比我大很多的大哥哥大姐姐,尤其对于里面女演员的大奔楼印象深刻。骗小孩刷白墙,还有他俩被困在石洞里,我都记得很清楚。正是《那些年我们一起追的女孩》里总结的那样,汤姆是个小孩子,生瓜蛋子,可以一起玩的大哥哥,而女主角已经是大半个成年人了。而这次阅读,我读到的是汤姆家生活惨淡,日子过得非常艰难。读表现那个时期,还有更早的作品,比如《黄昏清兵卫》,我都一下子就关注到了这一点,他们过得都非常苦。缺衣少穿,成天挨饿,最需要和最经常考虑的就是怎么才能吃饱饭。青年人充满雄心壮志反对旧世界的时候,我的第一反应就是,"能吃饱饭么"。《玩偶之家》那拉出走时,我的第一反应也是,"吃啥?"然后我就想起了鲁迅的《伤逝》。

微信图片_2018121320451227

这些生活艰难,以及由此带来的求生欲望,是我能够理解的。但是,另一些,我难以接受,读起来如鲠在喉。现在,可以安慰自己,作者是想揭露这些吧。不过揭露得真是隐晦啊。我跟WG同学当年争论《上海宝贝》。他说,作者是在批判。我说,我看不出来一点批判,看到的都是洋洋得意、羡慕、向往。他说,那结局怎么解释?我说,结局是希望有更妙的结果,而不是反悔。说到此时,正经过图书馆门口,当时尚无"斯文在兹"大石头在。然后我俩恨恨地分开了,正好不必再争。

最近又看了些连环画名著,我对当年的看法犹豫了。《飘》《卡门》《玩偶之家》《爱情与金钱》《高老头》《吝啬鬼》《三个火枪手》,里面的角色做的事情就是单纯的坏,他们就是单纯地为了利益欺骗,而不是为了生存。如果更早一些读,也许读不了几页我就会扔到一边去。现在则是边读边期盼,会有个公正的结局吧。看到最后,发现我想多了,因果报应不仅在现世,在故事里也不见得会有。

微信图片_201812132045127

我已经能够接受哲学意义上的人在觉醒时首先表现出人性的恶,而不是善,像《飘》,像《卡门》,像《驴得水》。但是一味展示如何作恶的技巧,甚至有点炫技的感觉,让我觉得角色们洋洋得意,不由得怀念雨果的《九三年》。

那一段读得我很郁闷。有天提了个故事的开头,二猫妈打断说,"那个时代的作品里的价值观好像都有点问题。"正是如此,看得郁闷。二猫妈说,"看点快意恩仇的吧。"

也许世界就是如此,但是不只是如此吧。

微信图片_201812132045122

3. 英雄主义

从别的角度解读同样的故事,比如毕飞宇解读《项链》。玛蒂尔德.卢瓦泽尔夫人花了十来年的时候给人家洗衣服,终于还清了丢项链的赔款。书上写着,这是表现资产阶段虚伪虚荣什么的。借项链是虚荣可也,毕飞宇指出,女主人公就没有想过耍赖不还,没有想过什么取巧的方法,没有想过还个假的。甚至没有想过去问问项链是不是真的,值多少钱。他分析说,这表明契约精神深入人心,无论是角色还是读者,都不能想像还有别的可能,除了遵守契约。

微信图片_201812132045126

这就是一个典型,从另一个角度看待同一个事件。

在《远大前程》《了不起的盖茨比》《简爱》里,最终解决问题的方案,仍然归结为钱的解决。任雄心壮志也好,温情无限也好,最终都是靠钱解决了问题。区别只在于钱从哪里来,是从没钱到有钱,还是正好反过来。但是也有钱以外的信念存在,《杀手之王》为了道义,《白鲸记》里为了复仇。《当幸福来敲门》《风雨哈佛路》,表面上最终是钱的问题,而实质上是抛弃现世追求未来的态度。

这种区别在麦基的《故事》中归结为A类故事或B类故事。B类故事的主角,或者迷惑,或者屈服,或者因为偶然而成功。这不是英雄,无论结局如何。A类故事是英雄主义的。英雄主义并非想成为英雄,有英雄的结局或者符合功利的结尾。对于形而上的英雄主义的追求,就是想要的全部。与世界斗争 (或妥协)的过程,根据主观的愿望认识、改变世界,也包括受世界打击的过程,是英雄主义的全部内容。

微信图片_2018121320451215

《狗十三》里,小女孩最终溶入了这个世界,由一个反抗的不懂事的孩子成长为一个淡然的成年人,所有的情感都隐藏起来,所有的意愿都腐烂掉,只剩下光滑的外表,和自以为丰富的内心。

他们不再相信英雄,也不去做英雄。既然没有结果,就放弃追求,因为追求的过程本来也不是他们想要的。金庸去世了,他们哀悼,失去了一个时代。其实,金庸停笔,已经是多少年之前的事情了。又某某去世,他们又失去了一份回忆。童年不再,少年不再,值得怀念的人都走了。值得你怀念和珍惜的人不止他们几个,就在你身边,等着过几年失去的时候被你怀念呢。

微信图片_2018121320451225

你,为他们做了些什么。你,为你所珍惜怀念的那么美好的一切,除了享受感受,还做了些什么。除了B类故事,你是不是也主动地试着做过英雄。

英雄当然艰苦,这正也英雄稀缺的原因,也正是英雄的价值所在。不要,不要只是站在那里观赏玩味,"啊,那真是很好""看着很好,但是并不想真地去那样生活"。去做英雄们做过的事,去亲身体验刀割火烧贫困而不改其节。

喜欢金庸吗,喜欢梵高吗?他没有死,而就继续活在你的身体里,你可以去做他做过的那些令你感动的事情。不要一味絮叨他如何影响了你,而是像他们那样去影响别人,就像他们曾经这样影响过你。拿起笔,拿起画板,像你所喜欢的人那样生活。

如何怀念你所钟爱的那个人,答案就是: 成为他。

微信图片_2018121320451226

------------------------------------------------------

博客会手工同步到以下地址:

[zhuanlan.zhihu.com/youn]

[younggift.net/]

//[blog.csdn.net/younggift]

//[giftdotyoung.blogspot.com]

锻炼10年(4)群

很久以来,我一直坚定地相信,所有的努力最终都归结为个人,而不可能是集体活动。如果没有这样坚定的信念,脱离了人群和环境的支持,很多人都不会有足够坚定的意志持续行动吧。

sdr

由人群这种外在力量支撑的决定,容易在表现不再光鲜或者支撑不够坚决的时候放弃。当我们计划放弃的时候,我们第一时间为自己开脱,找各种借口,让自己有足够的理由放弃,并且不会因此而质疑我们一如既往的完美。所有借口中,最容易的是当初的目标是错误的,不切实际的,或者整体的路线就是错的。比如,挺着大肚子,生活得也挺好的,或者,贴子说了,人类是要保持一定的体脂率才是健康的。比如,熬夜也不错啊,只要能保证充足睡眠。至于我们没有实现当初的承诺,因为承诺都是不必要的,因为整个技术路线都是错的,所以当然不必兑现。更重要的,我们不需要因为没有兑现而怀疑自己。当我们的努力不再坚定时,在人群中,也很容易找到支持放弃和反对继续努力的依据,因为所见所闻不过是我们希望的。

所以,我一直警惕人群,也警惕自己。我当然知道人群的正面作用,虽然并没有经常亲身感受。我警惕人们的原因,是因为如果他们有资格正面评论你,你因为他们的正面评论而感动而努力,他们当然也就有了负面评论你的资格,你也可能因为失去外在的支持而放弃。就像女性在职业工作中拒绝男性评论自己的容貌,不论对方的评论是漂亮还是丑都是一种冒犯,因为评论本身表明具有这种资格。而职业工作不涉及容貌这一属性,因此不应谈及。

在锻炼10年之中,当然有负面的评论,甚至早于10年之前的史前时代就有很多。不过,本文只想谈谈那些具有正面促进作用的,以此表达感谢之情。
paint_wall
我初中的时候跑步,我妈就负面评价过。那个时候我就开始表现出不需要那么多睡眠,晚上十点十一点睡,早晨四五点起床,沿着公路开始跑。回家以后在墙上垫本书,咣咣用拳头砸。当时我坚信电影和书上杂志上说的,有志者事竟成,功夫不负苦心人。夏练三伏,练螳螂拳把膝盖跪青过。冬练三久,苦心所收获的痕迹,至今还在,两手的中指末节肌健与骨节分离。那就是用拳头打墙上的书造成的,当时还不明白拳头硬人家不让你打也是白扯。不记得我妈对我打墙的差评是不是这个道理了,不过她反对我进行这项训练我记得。因为她说,"早晨四点,你就把墙砸得咣咣响,让不让人睡了。"我嘴上说,"墙这么不结实么",心中窃喜。后来手疼得实在不行,我姥已经开始要给我找仙人掌还是芦荟之类的粘上了,功夫就此作罢。

锻炼中的差评总有,有些有道理,有些没道理。有些看似没道理,但是训练的伤害可是真实可信的。不过,深入研究以前,你也不知道哪些有道理哪些是瞎扯的。不相信私教,也是这个原因。有些私教,可能还不如你知道得广泛和准确呢。如果有两三好友能够深入的讨论一下,可能更好。
tree1
(1)线下

邦哥。

邦哥以前是我的学生,现在成了我的师弟,仍有合作。他健身已经很久了,极有可能在我认识他以前就开始了。不过,我观察人一向马虎,一直没有觉察到。我观察人马虎的程度,早些年的时候看老师给一位胖姑娘让座,我还以为她只是胖。老师夫妇说,真是孩子啊,那一看就是怀孕了。

我确定知道邦哥健身是看到他吃东西。他吃酸奶、麦片、香蕉什么的。我说,"邦哥,你不用这么折磨自己吧。"他讲了一堆道理,然后说,"你们不懂。"他吃的这些,我现在也吃。

邦哥举铁,实验室也放了些装备,也可能是包师弟的。有哑铃、拉力器、俯卧撑架,还有个支不起来的引体向上架子。邦哥听说我训练以后提出过有几项我应该如何练。我指着他的胸肌说,"我老婆不希望我练成你这样。"邦哥掩饰着藐视,说,"老师,你想多了,你练不成这样。"实践表明他说得对。

邦哥长期举铁,有丰富经验。后来我练肩的时候就是他带我去买了哑铃,给我弹力带,教我侧平举的注意事项,压着我的肩膀告诉我不要耸肩。

邦哥听说我做自重训练,俯卧撑什么的。他说,你撑几十下也赶不上卧推一次啊,练那些没用。我说我练不了那些。"邦哥的意思是,男人么,怎么可能。关同学插话,邦哥你知道啥,杨老师那样的不坐轮椅就不错了。我做俯卧撑、练倒立,一概受到关同学的否定。这位关同学,也反对过我长跑。当我提到1000米达标是每个同学必须完成的时,关同学说,"老师你达标多大岁数?"
light_tower
XL同学。

XL同学和我同一个办公室,他买了一堆健身设备。引体向上架子、俯卧撑架子、跳绳。还有啥,反正不少。互怼累了的时候,可以锻炼一会,颇有比试的意思。

他只跟我比那些不那么打击我自信心的项目。我见识过他的灵活敏捷,叹为观止。某次吃烧烤喝啤酒,我听到大家喊。等我转头看的时候,看到XL同学沿着旁边的块护坡刷刷就游上去了。那护坡立陡,基本垂直。我后来试了试静力缓慢上升,踩落脚点站起来以后,脸就贴在石头上。

他做乌鸦,还有L支撑,第一次就顺利完成了。这两项我都是练了很久才成功的。
warmhouse
zhumao同学。

zhumao同学偶尔来喝咖啡,来了就要求比试俯卧撑。在之前他的俯卧撑还挺弱,从一个两个开始的,现在已经相当有战斗力了。喝几口咖啡,轮流撑架子上来十几二十向个俯卧撑,对我很是有鼓舞的效果。尤其对方是平时可以在技术上互怼的同学。

技术上互怼的同学能一起锻炼,也是幸事。某次间隔很久的卡拉OK,大家唱歌,男同学们轮流各式俯卧撑。就是那天,我第一次看到夏同学单后俯卧撑。是我看到的第一个活的演示。另一位能做到的,是翟老师。他对我如何做俯卧撑也教益不少。他能单手我不能,正朝他的方向努力。
tree4
还有李记者和典同学。李记者除了技术以外,还有油画、机器人、小说,典同学除了技术以外,还有潜水、洞穴、啤酒、帆船。典同学自己抱怨过,很多人不知道的他的一项重要爱好,我单独提出来,读书。当他抱怨时,我说,因为你交友不慎,都是些你不能与他们谈起读书的人。我们三人常交流以上各项。因为爱好重叠并不广泛,经常由讨论演变为一人说,口若悬河,其他两人听着,心向往之。风大先生也徒步,主要靠每天上下班,keep的级别比我还高。我们也讨论健身之道和动作的诀窍。

图书馆的同事们还有YMH都打羽毛球,他们也都对我发出过热情的邀请。但是考虑到我的腰和膝盖,还有传说中几根断裂的跟腱,我都毫不委婉坚定地拒绝了。他们纷纷说,只要你热身充分,并且不要争强好盛,就一定不会有问题。我想跟腱断了的几位,一定比我还明白这个道理。所以只听他们讲,绝不参与。

tree3
还有师兄CXR的天天向上群,我们天天打卡。

师兄ZGP跑马拉松,他和我讨论过平板撑哪疼。最近他还在跑。师兄GSY当年每天4000米,如果因事耽误了,第二天就要跑8000。不知道他现在是不是还在跑。同学JJ练过跆拳道,是有段位的,蓝带或者黑带。同学ZG也跑马拉松,以前的学生GY跑半马。我只徒步,可以几小时十几公里地走而不疲劳。二猫妈一向有不错的速度,不至于拖得我太累。是的,如果徒步,而跟你一起走的人速度慢,会特别疲劳。这在我小时候跟我妈买东西的时候就发现了。二猫现在的速度也相当不错,必要时可以一路小跑而不喘。她们二位还担任我的陪练,包括替我对练后背的项目拍照摄影,指示肌肉发力的情况。也兼任负重,公主抱以后深蹲,目前重量还算适合。
tree2
(2) 群

我一向不喜欢成队训练,从军训到早操。还有体育课前的热身跑,一点也不觉得在这些项目起到了任何作用,除了组织纪律的表现有所提高。俯卧撑和keep的时候,我经常在午夜以后,练完再来杯咖啡。

在《构建之法:现代软件工程》群里,我忘记什么契机提到过规律健身。事实上,接触这本书,以至后来参与教学团队,最初的原因,就是在网上教案节选里,我看到了作者邹欣老师提到的师生关系,应该是教练与学员的关系。除非学员自己锻炼,否则绝不会长肌肉。深以为然,并且这是我一直想说而没有找到表现方法的深刻比喻。当时折服,就买了书看。

后来叶卡编辑提议,你建个群吧,把教师和助教位拉进来。

我建了群,拉了些人,没几个理我。叶卡编辑发了群二维码,哗哗来了好多人。这个故事启发我,一是方法很重要,二维码邀请比发出邀请友好多了,二是带头人很重要。

这个群是冷淡风,既没有规矩,也没有约定。我甚是喜欢。有不少同学经常打卡。LJP、ZR、YK、NXX、LS、ZD、CB、LHT、DS、FH。我们对打卡既不赞颂,也不喝彩,没有鼓掌,甚少评论。大异不少微信群里热情(或虚假?)的氛围。我们就是沉默地锻炼,然后打卡说一声。偶尔的玩笑,固定节目,是过一段就有人问,ZD老师你最近又游泳了没?
rain
还有位同学,谁来着,发过他跑步的心率。我感叹,如果我这么高的心率,估计已经死了吧。他说,这还真得看年龄啊。我才意识到,虽然同在群中,其实个体差异甚大。原本的基础、年龄,各自不同。那以后,我才第一次注意我在心率140以上有时会心率不齐,开始注意控制运动强度。群里的专家告诉我熬夜、睡眠不足与心率不齐的关系。以前只是以为有点难受而已,一直掉以轻心。现在知道这些,说不定真的因此可以避免几次过劳死,可以多活一些年呢。

在建群以前,原本我也几乎每天锻炼,锻炼项目和感受也是当天日志的一部分。就顺手把这部分日志发到群里。所以我打卡的笔记比较详细,里面有时有我的困惑。惊喜地发现,还有专家指点。你哪哪练得是不是有问题啊,哪哪要小心一些容易受伤,某个动作前的热身是这样的。在练背,以及避免引体向上和深蹲的伤痛,还有长途徒步中的肩痛,都令我受益匪浅。这是意外的收获。
lake
这些专家是Zack,Milo,彻明哲,陈彦吉,宋延琨。他们都长期训练、科学训练,知识结构完整,细节清楚,而且积累了一大堆视频和图文资料。

我有些学生也加入了这些群,断断续续的。有的是自己提出的,有的是同学推荐的,有的是看到了我在同学们的群里发的二维码,看到了我在朋友圈里显摆训练了多少分钟。WC同学提到过,是不是把L哥也拉进来。我拒绝了,L哥知道这个群的存在,当时他特别忙拒绝过加入,如果我再拉他,就是暗示应该加入,在我看来是一种强迫。后来忘了谁拉的,反正L哥也在其中了。

有位以前的学生GY,断更了相当长时间,也没有人催促也没有人问。后来她回来打卡,有人说,好久不见啊,怎么这么久没来。她说,我刚生了孩子啊。我们这个群的风格大抵如此。

君子群而不党。松散地聚焦,不以利益,而以兴趣。
running
(3) 训炼效果

前年体验的时候,说是有脂肪肝。去年说是减轻了,只能算脂肪沉积了。这两年,血脂都略高于上限。我看起来一直不胖,骨架细所以体重也轻,脂肪肝的时候BMI也在正常范围内,全身的那点脂肪可能都长在内脏上了。

silent_moon_winter
群里专家告诉我,熬夜会提高血脂。我的在打卡中加一句"午夜前完成训练",有督促效果,虽然并非每次午夜前完成训练都能接着就睡。

silent_moon_spring
我还调整饮食。中午的麦当劳还是要继续吃的,不然饿太快,不到上班点就开始饿得不行。食堂的伙食实在不适合我,肉的密度太低。教工食堂自己打菜,如果我只挑肉,大家会另眼看我吧。我每次去教工食堂,打饭菜都堆起个鼓包,是一般同事的三倍左右。当时很撑,下午还是饿。我调整了半夜那顿,也就是第四顿的内容。由完全的正餐,改为酸奶、麦片、咖啡。后来还在二猫妈的大力鼓动下加了一勺蛋白粉,据说是一个鸡蛋的量。
silent_moon
前一段感觉自己瘦了,去抽血,血脂已降低到远低于上限。脂肪肝,估计不会有了。

抽血的时候医生开玩笑说,你是运动健将吧。我一向瘦弱,而且喜欢穿肥大的衣服,以前甚少有人说我壮。锻炼以后逐渐有人指出训练在我身上留下的痕迹,比如长久不见的亲戚朋友。我偶尔露出肱三头肌的时候,不少人指出过,这是肌肉长反了吧。大家印象里发达的都应该是肱二头肌。大哥指着我的大臂问过,你这是骨头折过接上了,还是肌肉。我说,这当然是折了,你见过谁的肌肉长这样。他很释然的样子。我大笑,是肌肉,你看这边也是这样,总不能是两边都折了吧。再见他的朋友时,他怂恿我,整一个,让他看看那块肌肉。其实别的肌肉都不明显,肱三头肌明显是长期俯卧撑并且跟手摆放的位置有关。

训练在身体可见的,以及不可见的心肺上所产生的效果,都并不是最大的影响。我初中长跑,还有高中半夜失眠体育老师指导长跑,都告诉我这样的道理: 只要努力,最终所有的艰难都会过去,成为回忆。长途徒步、俯卧撑训练、keep都告诉我,只有分散任务,长久的努力才成为可能。在一天内比别人多徒步3万步非常困难,如果分布在一周之间,就容易多了。同样地,如果有一天没有徒步,第二天想回来,工作量则十分巨大。
walls
所有的训练都告诉我一件事,能做到这个动作并不是最重要的,最重要的是做这个动作本身。终点,从来不应该是目的,过程才是。而仅仅明白这个道理,不去做,是不会有任何效果的。
lake
------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

//[http://blog.csdn.net/younggift]

//[http://giftdotyoung.blogspot.com]

锻炼10年(3)keep

锻炼10年(3)keep

3. keep

2016年8月17日,约2年前,我的偶像YMH向我推荐了keep。那天我的日志这样写,"中午,研究生同学吃饭,8个人凑齐。YMH瘦多了,胸肌腹肌俱佳,比我瘦,他推荐KEEP。"他本来是个白胖子,那天居然比我还瘦。他更早一些曾经说过,"我其实腹肌挺发达的,就是有点肉你们看不出来。"我作为除他以外唯一的男同学代表上去摸了摸,验证了他的话。腹肌,尤其胸骨以下第一块,发达的程度可以用惊人形容。问他咋整的,他说,我在练。到了这一天,他推荐我试一下keep这个app。腹肌撕裂什么的。我当时已经相信瘦一定是全身的,而不是局部的,所以对于腹肌撕裂不以为然。我说,"更何况,我还有腰突,不敢做这些。"

当年天晚,我的日志写道: "安装keep,试了进阶胸肌,不能完整做完,后几组最后都趴地下。"

那时,我正在努力从只能做40个俯卧撑的阴影里走出来,每天恢复性加量之中,又不太敢。keep的胸肌进阶说,适合25到40个俯卧撑的男性。一试之下,比连续40个还要累。才相信了,经过设计的间歇性训练甚至比持续较多数量还要累人。

escape

到现在,徒手胸肌进阶训练,我一共练了53次。身体状态不好时,练徒手胸肌初级训练,11次。更难的徒手胸肌强化训练,13次。每次都不足半小时。

2年才做这么几次,是不是觉得数量挺少,甚至少得可怜?一个方面,当然是连续得不够好,第一年里有些时间有间断,还有生病的时候。不过,另一方面,如果每周做一次的话,一年也只有52周而已,能做52次。

每天都做?每天都做胸肌训练,真是挺难的。因为如果训练的量适合,那天第二天第三天的时候肌肉还在酸痛。同一个部分,第二天再来一次,挺折磨的。而且容易受伤。再据说还不利于肌肉生长,虽然我也不确定。

我以星期为单位,每天做不同的训练。有个excel,每天向下延伸,记录这一天练了 胸、手臂、背、核心、肩、腿、心肺哪一项。最初没有心肺和手臂,每周有两天可以休整,后来越加越多到了7项。再后来,偶尔一天两项,其中一项可能并不在keep中。从2017-3-29开始记录,加上每周的表头,一共580行,72个星期。

excel

这个布局,大部分是从《囚徒健身》和《囚徒健身2》里学来的。我读的时候想像着,有一天为了理想被关起来了,但是心灵仍然保持自由,每天就练囚徒健身。事实上,是因为只有自重训练,我才能保持下来,换成其他的运动,早就停了。我见到了不少游泳、健身房举铁、跑步的朋友,有的确实坚持下去了。不过,我显然没有那样的意志。HY老师曾经评论我俯卧撑,说,想不到你真的坚持住了。我心想,除非是它,估计坚持不住。结伴练习,以伙伴练习作为条件,但是有伙伴比你还懒的时候。去健身房,刮风了下雨了下雪了太阳太毒,阴天心情不好。还有满坐椅和杠铃上别人的汗水。游泳?想想每次练习半小时需要再额外半小时或者更长搭在路上,我就觉得人生短暂,不如喝可乐。

tiger

自重训练可以骗我。豆瓣阿卡纳很好地描述了我此时的心情: 好吧,假如我只练20分钟,就20分钟。说练就能练,没有任何延迟能缓解或降低你的冲动。你看,淘宝和京东的付款是不是做得非常方便,只要延迟半分钟才能成功,不知营业额要降低多少呢。

(1) 胸肌,我就练俯卧撑。除了keep里的以外,偶尔花样变化。

(2) 手臂,是最近才加入的。发现肱二头肌在引体向上中有一定作用,并且想发挥手头的6.5kg*2哑铃,又刚好发现有这么个训练种类。在这之前,做哑铃弯举20一组,做三四组。现在看,训练量或重量不够。keep的钢铁手臂训练的前半部分就是哑铃弯举和降阶训练。不累,很快就上手了,钢铁二字主要是广告效果,并不真难。视觉效果明显。以前我的胳膊只有肱三头肌明显,现在终于有点二头肌了。从一般人的眼光看,二头肌才是标识,所以效果主要在视觉上。引体向上,仍然不够。

这个开始得晚,才10次。

(3) 背,有keep背部塑形。后来加了keep背部发力感知,做了几组本来以为可以了,又多做一些时发现,再做,还有新的心得。所以keep背部发力感知虽然简单,保持了一段时间了,打算继续。背部塑形,原来特别难,像TW伸展、毛巾/弹力带俯身划船,刚开始甚至难以标准地完成要求的组数。后来习惯了,虽然每次仍然一身汗,但是动作标准并且发力不成问题了。

特别是Zack教我后夹肩以后,不仅体态看着更挺拔了,而且解决了另一项训练的问题。我以前长途徒步的时候肩会疼,一直以为只是没有挥起。在 nordic hike拄着登山杖的时候要好一些,但是时间长以后也疼。在练习Zack的各种后夹肩以后,在走路时我也注意不弯腰,并且肩后夹而不是垂在身前,避免背部过度拉伸,在长途徒步中的肩疼也好转了。

pre_walk

那是2017年8月3日,大约一年前的讨论。那天我的日志写道,"Zack推荐视频讲引体向上的,要求1.悬垂训练肩胛肌肉向后夹紧,2.引体向上至嘴与手同高,向前、保持、向后展开背阔肌 (从视频看,同时夹紧肩胛即斜方肌用力)。准备试试 (看来悬垂耸肩不太对,因为悬挂以后斜着脚向前,所以这时不是耸肩,拉起时会是向后和向下的,而不是单纯向下,我可能太竖直了),也发给了CXR。[http://www.bilibili.com/video/av10662403/]"

那天,Milo推荐解剖学一本,《骨骼肌肉功能解剖学》。我现在还没有看完,有疑问的时候就去查查,肩背的部分看得最细。

背部训练做的时候看不到肌肉的形态变化,所以我有时请二猫妈和二猫帮我看,或者为我录视频,我再反复研究。有时录一次,纠正动作一次,再录,再纠正。到后来,就力竭了。

XL同学引体向上以后高兴地对我说,我现在能做几个几个了。我说,"是么",然后坏笑着说,"你做一次我看"。背部真是容易疲劳啊。

cars

keep背部塑形,完成70次了,背部发力感知83次。

(4) 核心

核心在keep以前就练背桥,但是不常练。我还试过 wall walking,是个挺酷的动作。最初的时候不敢做,快到底的时候害怕了,伸手转身支地,拉伤了左肩,隐痛持续了好几年。后来力量够了,演示显摆居多,用来训练 wall walking 倒是不多,背桥多一些。

核心的前面,腹肌,我本来的基础应该就不错。没有腰突以前,还能一次做满100个仰卧起坐,彼时还没有听说这个动作伤腰。还能在练体操或者压腿的那种胁木上,把脚挂在一个以上的高处,头朝下做仰卧起坐。这是跟电影里的成龙学的,他师父让他把下面的酒一杯杯移到上面,再一杯杯移下来。我演示显摆过几次。其中一次出差在北京外国语学院,给同学LH和偶像夫人看,结果聚来一群小孩。我正高兴,其中一个小男孩说,"快看,这儿有个疯子。"我差点笑出来,赶紧集中精力免得一头栽下去。

situp

还有《囚徒健身》里的悬垂举腿。网上也有人说,这个和单臂引休向上比,难度低很多。我有同感,练了没多久keep就可以了悬垂举腿保持了。甚至可以做到V字举腿,还有L支撑,手在地面支撑,直腿抬起保持。

读《八步治背痛》和《核心基础训练》才注意到,我的核心后链非常弱,这也是肩痛、背疼、腰疼的来源。

V

pushup

books

keep的核心功能进阶和改造,都是同K3级别的,难度差别可不小。进阶我做得轻松,改造刚开始累得不行。可能因为设计练得全面,前后两侧,总有你弱的地方。HZL和风大先生分别问过我关于核心训练的问题,我的建议都是针对性训练,都有效。

keep核心改造,完成了63次,核心功能进阶89次。

(5) 肩

我的肩很弱,以前总疼也与此有关。到二猫学舞蹈练下腰的时候,我也才明白。我背桥时胳膊不能完全撑起,不止是柔韧度,跟肩的力量太弱关系非常密切。随着练肩,背桥比以前标准一些了。

练keep以前,肩的训练试过倒立,这也是《囚徒健身》中的一章。学到能双手靠墙倒立。起始姿势是头朝向墙,然后脚踢起,完成时保持的姿势是后背对着墙,脚在墙上。

练习倒立最难的地方是场地,因为室内训练需要一块较大的空间,家里到处都是东西,这样的空地不太容易找。如果不穿鞋,脚跟磕墙上挺疼的,所以得准备一双室内的运动鞋专用。

我曾经试过在空间不大的地方练习,很多次都没有问题。前后空间1米多,左右空间1米,似乎就够了。但是有一次倒立起来以后向左歪倒,却没有空间,左大腿磕在书架一层的棱上。当时感觉很疼,一看大腿,不是折了吧?凹进去一条,像被狠狠打了一棍。走了两圈,瘸,但是好在没断。第二天,凹进去那条变了颜色,好几个月,记得是半年以上,颜色才完全褪净。

upsidedonw

keep对肩的训练柔和很多,不过违背了自重训练的原则,用了一对哑铃,3kg*2。参见引体向上一文中邦哥说的,不必太重。

keep里的哑铃肩部塑形训练,完成64次了。

(6)腿

大学及以前,50米刚及格或不及格,1000米达标。腿并不强。不过我左右都能做单腿蹲起,5个。彼时并不知道,这个动作非常伤害膝盖。

一次在四食堂社团纳新宣传那儿,看到一位同学试着单腿蹲起,失败了好几次。我还颠巅地过去交流了一下经验。他给我展示了练铁沙掌的成果,一只手的手背上肌肉发达,比我手心的肉都要厚。

腿的后链发力我现在做得仍然较差,面对墙蹲下去做不到完美,偶尔还有较大的退步。最初意识到后链发力有两个场景。一次是看电影的时候,用脚蹭剧场的地面。往后蹭的时候注意到大腿和小腿后侧都在发力。应该是这个感觉。另一次是有一天半夜做早安式体前屈,突然发现屁股往后坐的时候有后链发力的感觉。有些人在日常生活中的姿势就很好,所以避免了很伤痛,训练的效率也高。像我这样资质较差的,就得先感觉到,然后才是训练。这个观念学自《八步治背痛》和《城市就是健身房》。

keep下肢能力训练,完成90次了。

对了,我的肌四头肌会动。胸肌也会。羞于演示,各位自行脑补和搜索吧。

(7) 心肺

心肺的训练强度不大。长途徒步,有时某项训练之前加1.5分钟 burpees,有时骑动感单车。都是一身大汗。keep里的心肺功能训练,感觉都只是肌肉累,心肺没啥感觉,练了两次就放弃了。

walk

总的训练量,本来有个目标,达到8000分钟的时候可以进到K10还是K9等级。我每天练的时候都看看,还差多少。结果还没有等我练到这个级别,keep说现有等级体系不合理,换成了G系列。我顿时觉得挺虚无,还有被骗的感觉。你说不合理就不合理,那我觉得合理,继续练还不行么。为之努力的汗水,一下子都不那么值钱了。

至今 总运动19551分钟,共607天,当前连续195天。

10k

邦哥反对keep。尤其我遇到伤痛或者困难的时候,他说过不止一次,keep不能面对面专门针对你指导,不知道你的情况。不过,于我而言,这已经是能找到的最好方法了。

并且,我确有收获。网上有人说,健身是怕死,没有别的理由了。这是玩笑,只是想表达,如果不让说真话,那就没有什么可以说了。健身不能避免死亡,甚至不能延长生命。但是锻炼能让生活质量更高,这也是我keep的原因。

[2017-02-19 Sun],我在北京出差,绊在马路牙子上直挺挺地向前摔到。这也是我提到视力差远比不少同学想像得严重和危险。除非你遇到同样的困难,大家通常很难想像遇到困难会是什么感觉。你可能觉得腰突只是疼,却难以想像可以疼到生不死。那次摔倒是整个平扑在硬路面上,手里的手机被我拍在路面上屏碎了,整个手机机身弯曲。但是我的另一只手和膝盖都仅有轻微擦伤,全身骨头关节和肌肉都没有任何其他损伤。我初中时练过一个武术动作,叫做"前倾跌",又名"栽碑",据说是侦察员必练的动作。就是这样直挺挺前扑,不过是用前臂而不是手掌接触地面。后来摔碎了一副眼镜,不练了,也可能因此保住了视网膜。北京这一次,不是前倾跌的功劳,而是长期俯卧撑训练,习惯了与地面平行和摔倒的姿势吧。

eyesight

------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

//[http://blog.csdn.net/younggift]

//[http://giftdotyoung.blogspot.com]

锻炼10年(2)引体向上

初中开始,体育达标有引体向上。刚开始一个能达标的也没有,绝大多数一个人也拉不上去。大家的感受跟现在很多人一样,说,"有劲,不知道怎么使。"不过后来练到达标的,没有人说是"会使劲了"或者"使对劲了"。不要被假象迷惑,你并不是不知道如何用力,而是真的压根就没有力量。

cof

引体向上需要后背的力量,还需要肩稳定两臂。大多数人的后背弱得不得,即使经常健身的人,很多也只是前面能看到的胸肌和醒目的肱二头肌发达,后背也并不强。另一个原因是体重,只有够轻才能把自己拎起来,据说施瓦辛格引体向上也做不了几个,因为他自重太大了(已蒙两位网友指出,施瓦辛格能做不少引体向上,所以仅“据说”两字不足以表达道听途说的含义,特此再跳出来强调)。引体向上所需要相对力量也比俯卧撑要大得多。俯卧撑的时候,推起的体重不到自重的一半(蒙网友指出并再次实验,是体重的2/3。体型存在个体差异,你的比例自己测吧。),而引体向上是足斤足两的整个体重。下蹲能做到,是因为腿平时就支撑整个体重,已经得到了充分锻炼。而引体向上这个动作,平时没有机会做。这也是引体向上为什么必须得有器械,不能单靠无器械的自重训练。

初中的时候,男生们只有一部分一只脚踏进了青春期,浑身都没有肌肉。初中老师帮我们想办法,要求课间做游戏"一步一点"。你挂在单杠上,向外悠荡,撤手落在地上,然后再向前跳一小步。另一位同学如法炮制,落地,不向前跳。如果后一位同学能摸到前一位同学,那么就胜了。摸不到,前一位还得再能一下子跳回到杠上去。这个游戏只有男生玩儿,女生没有引体向上达标,课间只玩皮筋。男生负责对玩皮筋的女同学捣乱。我能立定起跳从高度在腋下的皮筋上面跳过而不碰到皮筋。那是我弹跳的极限,以后再也没有达到过。

回来说一步一点。这个游戏看起来一点也没有训练背阔肌和肱二头肌,老师也说了,与引体向上无关,不过会有效的。学期末的时候,大部分同学都能拔起来几个了。肌肉也有了一点点,我的双上臂外侧靠近肘部,多了一块肌肉,既不是肱二头也不是肱三头的位置。当时同学们都瘦,没有体重大的问题。像我这样骨架细的,稍微有点力量,很容易就能优秀。

高中和大学,也是这么达标的,靠体重轻。毕业以后,再也不达标了,也就不做引体向上了。
微信图片_20180806160410
接下来是貎似与引体相上无关的一段,不过草蛇灰线,里面是紧密相连的。因为视力不好,我用计算机的时候脸离显示器格外近,不到20cm。在没有外接显示器支架的时候,就向前靠近,呈现非常难拿的姿势。就是你在网上看到类人猿到人类进化的最终阶段那样。这对腰和颈的压力都非常大。我的脖子首先报警了。事实上,那个时候腰也报警了,但是年轻还不懂。

脖子疼,左右晃的时候咔咔响,响完以后才不那么疼。二猫妈用手揉颈椎一个关节,她说里面像是一包水,我的感觉她的手指上长了刺。我非常不喜欢别人靠近我,这个习惯在坐公交车的时候本来可以把头挪开一点避一避,现在这种避让也成了一种酷刑。头固定在某个角度时间稍微长点就是折磨。

很多年以后我知道,疼的是脖子,但是问题并不出在脖子上。当时的方案歪打正着,解决了脖子疼,不过腰疼留下了隐患。将近20年以后,腰终于突出了。

说回脖子。当时我发现做蕙兰瑜珈的展臂功以后,脖子感觉不错。脖子一疼,做了就好一些,于是就坚持下来了。频繁的时候,一段时间里每天都做几次。有不少脖子疼的同学,我都推荐过这个动作,不过通常都哈哈一笑,过几年以后仍然喊脖子疼。我就先讲一遍当初脖子严重到什么程度,然后再推荐一次。

展臂功拉伸的是肩,脖子疼的原因也正在于肩部紧张。后来发现我除了脖子,左右肩也分别疼痛,而且由于不同原因。右肩由于前伸拿鼠标,左肩由于左肘架在桌子上而扭曲。这两个最近也在好转,纠正方法很简单,就是不要前伸。

引体向上在大学毕业以后停练,仅展臂功这样的轻微训练,长时间也会留下训练痕迹。李记者和WJY同学分别指出过我的肩前侧和斜方肌比不训练的要发达一些。

仅仅断断续续展臂功一个动作,一直到了三年前。三年前,提起腰突的时候,XL同学说,你可以练练引体向上啊,挂在杠上,腰后面能放松一些。我一想有道理,这不就是拉伸理疗么,于是尝试。

我只能拉起来3个了。不过,并不像俯卧撑数量下降那么悲哀,毕竟我也没有付出过多大的代价,只是老师要求就练而已。

路过单杠就练两组,能拉几个就几个。这时发现校园的里的单杠真少。整个校园原本有3组单杠,后来只剩了两组。其中一组下面经常停着车,如果不踩在车顶上是摸不到杠的。消失的一组单杠原来旁边还有训练飞行员转大圈的装置,在那里二三十年了吧,一起没了。改建成了与小区里老头老太们健身一模一样的器械。是年轻人的体力下降到这种程度了么?网上见过一位体育老师说,提高男生引体向上的成绩非常简单,说服领导到处装单杠。那么可以想像拆除单杠的结果。

没事拉单杠也小有提高。这时高中同学聚会,PGW同学说,武警评职称的时候要求拉单杠。我问数量,他说七个 (?) 。我当时刚好可以拉到七个,高兴得不得了,觉得自己还挺有希望的。我还在网上查了现役军人应该能做多少个俯卧撑什么的,查到长跑想想膝盖,挺沮丧的。

dig

被别人发现了一个不小的变化。我很久以来手腕疼,尤其天气稍冷的时候。后来不太在乎外人眼光以后,长年戴着护腕保暖。即使偶尔正装的时候也不摘掉,还被规劝过。我之所以敢于不顾别人的眼光,一直戴着护腕,是向一位师兄CXR学习。他大学的时候头疼,总戴着半个紧箍咒一样的半环,在后脑勺绕着。这并不影响他成为系队足球守门员,能打横飞起来扑球,霹雳舞跳得还特别好。我戴护腕大约从1998年持续到2013年,很多同事认识我的时候我就戴着护腕,大家已经习惯我这个形象了。2013年的时候,有些同事发现我几天没戴护腕,还问。我说,可能因为这两天太热吧,出汗就摘了。后来有同事说,你很久没戴了。是的,也没能疼。引体向上一段时间以后,很可能由于握力等增强,手腕附近的肌肉和肌腱得到锻炼和保护,手腕极少再疼过,护腕也就不戴了。

引体向上达到七个以后,很长时间没有进步。马上就要秋天然后冬天了,穿得会越来越多。引体向上对自重敏感,预计冬天会有不小的退步。此时,在微信上找到了那位半个紧箍咒的师兄CXR,他已经不戴金箍了,我也不戴护腕了。不过他的张扬仍然是老样子,我很高兴。他在家里攒了一地哑铃,各种大小,在墙上支了引体向上架子。我俩建了个群,叫做天天向上,准备比赛谁先达到引体向上20个。

CXR进步飞快,到元旦的时候,他达标了。他告诉我,就是干,使劲冲。我每次冲锋,肩膀就受伤休养好几个星期。再冲,又受伤。二猫妈说,你是不是忘了个事实,人家在大学的时候就是运动员啊。其间又跟翟老师去了一趟学校的健身房,设备齐全,高位下位、蝴蝶机、引体向上、很多哑铃,什么都有。回来肩就又拉伤啊。

于是,我决定缓步前进,保护为主,进步作为次要目标。

既然肩最容易受伤,那就先让肩牢固一些吧。后面会再次提到,有个依托《构建之法:现代软件工程》教学团队的教师和助教建的健身打止群,里面有专家给各种建议。后来,我开始肩稳定性训练,做Keep的肩部发力感知、背部发力感知,完全避免过度用力。这个期间,我还发现了左右肩分别疼痛的原因,通过避免过度前伸缓解不少。Zack先生提到的jeff的几个训练让我受益匪浅,因为肩背向后,整个人比以前感觉挺拔不少。这又与《八步治背痛》里所说的暗合。

nor

肩稳定性训练:

弹力带外旋左右各15,弹力带内旋左右各15。 (腋下夹毛巾,旋

转大臂,用小臂和手带动弹力带)。 参见

[https://mp.weixin.qq.com/s/QsC1Y999moyXT6sOnpH8EQ]。

哑铃侧平举的要领,陈彦吉和邦哥指出的:

1.小指一侧用力,食指一侧用力较少;

2.哑铃靠近虎口;

3.大臂略微向前,与身体不在同一平面;

4.想像配重在肘上;

5.向远处伸展的感觉;

还有虽然不是肩背,也对我很有帮助的。

ZACK热身

1. 尺蠖 10 ;

2. 90/90伸展 每侧5次;

3. 十字架翻转 每侧5次;

4. 撑体翻身 每侧5次;

5. 三方向的弓步伸展 每个方向5次;

6. 腿后腱弓步伸展 每侧10次;

7. 腿后腱直腿伸展 每侧10次;

8. 开缺罐器 每侧10次;

9. 肩膀摆荡 每侧10次;

10. 脚踝伸展 每侧10次。

[http://www.bilibili.com/video/av15580349/]

Jeff减轻深蹲时膝盖疼痛的热身动作

1. 迷你深蹲 10

2. 左右跨步 10

3. 左右后转1/4跨步 10

4. 迷你开合跳 10

宋延琨推荐

[https://www.bilibili.com/video/av14404549/]

回到引体向上这个话题。因为肩背的力量没有办法纯靠自重训练,所以得准备器械。

肩部训练,我按keep小哑铃肩部塑形练。小哑铃是邦哥带我去迪卡农买的,他告诉我,举几次不费劲的就行。我只能举动3kg的,他说也行,肩的训练需要少量多次。能一下子举起很重的,一般是姿势不正确。这对小哑铃举了快一年了,仍然并不轻松。

nor

在这对小哑铃之前,是6.5kg的两个哑铃,中空的,所以看起来特别大。每当有人要试把一下的时候,我都要提醒,小心呐,非常轻,别闪到。这是XL同学毕业的时候,通过柳园BBS发布卖旧货,我收购的。他一定不要钱,我一定要给钱,最后以如果他不收钱我就不要了结束,10元或20元象征性付了款。哑铃到手以后,落灰长达10余年,现在练keep钢铁手臂塑形的时候用。曾经试过练肩,太难,而且俯身侧平举的时候差点把腰突压犯了。

nor

引体向上本身靠哑铃还是不行,需要引体向上架子。去户外练,有违我懒惰的本性。如果去健身房或者游泳,我估计早就不练了。所以,需要就近,我的身边,就能引体向上。

办公桌可以。下面能整个穿进去人的那种,可以潜进去,脸朝上,做反向划船。你以为简单,一般划不了两个就完。后背和腰的压力都不小。也有人说,我就是手指勾不住了。引体向上十几个以后,手指也是个瓶颈。

我还用门框做。最开始用门框是计算机系办公室的门框,上面是玻璃上晾那种。当时能做个三个。后来有一段租房子是老破小,往厨房和卫生间去的门也有玻璃上晾。我把玻璃拆了,戴手套做引体向上,拔起来的时候呼气,刚好喷到玻璃上,很多灰。

也在小区里的木头架子上做。需要跳起来一点,扣住木框架。还要先确保上面没有木刺,或者戴手套。带手套对手指的力量要求格外高一些,这是后来跟同事玩的时候注意到的。我和同事试着用办公室的柜子和门框引体向上,不少人提到太碦手指,而我感觉不明显。后来发现,如果手指有力,末节能够勾回来一些,而不是把手指贴在木楞上,就不怎么疼了。不过,不经训练,手指通常勾不住。

cof

手指勾不住还有个副作用,就是茧子。或者说,如果手指力量加强,可以避免茧子。我最高峰能做15个引体向上,现在保持10个到13个,双手都没有茧子。秘诀就是: 握住。握住农具干活,也能避免茧子,滑动摩擦是生茧子的最主要原因。另外,不用手掌根,而用手指勾住杠,一个标准就是拇指与其余四指在杠的同侧而不是异侧。如果你需要手再向上一些,用掌根的肉勾住杠,可能还需要再加强一下手指的力量。

我还给同事演示过爬窗户。FCY同学觉得我体格太单薄,叫嚣我能做的动作他都能。我先演示了面对墙蹲下去,再站起来。这个动作跟他显摆还行,我比zhumao和二猫妈都差很多,脚尖和墙需要一点儿空隙。FCY同学没有做到,但是认为能找到理由。然后我在教室里找了个比人高点的窗台,扣住以后,人贴在墙上拉了几个引体向上。FCY同学试了下,放弃了。对手指和后背都有不小的要求。这个动作也在公园的木亭给我妈演示过,我妈认为"还行"吧。我猜她应该没有看到过别人能做。我的偶像YMH也看我做过这个动作,看完赞叹说,这个真不容易。

出差的时候,用毛巾塞住门框和门之间的三角,可以抓住门框做引体向上。身体和门之间的摩擦格外增加了难度。不过大哥说,你要是把门拽下来,咱们得赔不少钱呢。

cof

因为没有好的引体向上架,我把手指练得不错。后来XL同学开始买真正的架子。一个给我在家里钉墙上那种,忘了是XL同学还是二猫妈买的了。我在墙上一顿折腾,各种电钻,还是不稳定。请了一位电钻师傅,用同轴的大家伙才固定好。当时我闻到这位师傅满身酒气,心想,完了,回头我得重返工吧。不过,还好,我见识了用木头片插洞里稳定支架的技术。等师傅走了,支架果然有问题,八个孔不能全对正。我说:"好像人家没有问题,八个孔里有一个和墙面不垂直。"二猫妈说,果然不够精细啊。我补充说,"那个孔,是在师傅来以前我打的。"人家就算喝成那样,也比我钻得要好。

nor

固定完成,我上手一试。把架子从墙壁上拉下来了。幸好检测,尽快失败,避免更大损失。这个架子zhumao拿去,延长部分以后固定在他家墙上,我测试非常牢固。

XL同学还买了固定在门框上的引体向上架。这个东西看似不靠谱,实测非常结实。现在我家里有一个,在用。原本单位门上也固定了一个,单位重新装修以后,门框不如以前结实了。固定的时候向外涨,门框裂了,没有继续。zhumao提议在门框上固定木条,我已做好准备,就等实施。完成以后,就又可以在单位引体向上了。

因为力量不足以完成目标中的引体向上,还想加强背部训练,所以我准备了一些降级的训练器械,需要更小力气的。

在铁书架的一条立柱上挂毛巾,握毛巾立姿水平划船。划完一组以后,手握得快伸不开了。对握力和握力的持久要求太高了。后来用绳子盘了个环,在环里插根短棍,把短棍当成横杠握住,省力得多。二猫妈觉得太不安全,万一绳子折了呢。她买了专业的登山绳给我用。太长,我盘了五圈才够短。并且,我费了不少劲才压制住了顺着绳子下楼的冲动。

我还用八号线铁丝弯了两个挂勾。铁丝看似细软,其实承受一个成年人的体重完全不是问题。我把两个铁钩分别挂在铁书架上,一米多高,然后在铁钩上横过一根木棍,人仰面抓着木棍划船。现在一组最多能做22个,难度介于引体向上和立姿划船之间。

也用6.5kg哑铃做单侧划船。

也用30kg握力圈锻炼指力,最近刚刚从右手无名指劳损中恢复过来。

自从训练到现在,肩几乎没有再像以前那样疼过。工作持续时间长疲劳的时候,稍微拉伸锻炼一会儿就能缓解。从开始注意科学性以后,肩少有受伤,想来后背也在成长吧。

dig

师兄CXR后来又在群里加了两位,有的骑行动辄几十公里,有的天天单双杠。CXR早就达到了20个引体向上,开始负重。我在15个以下徘徊,避免受伤,缓慢稳固。我们各自做不同的训练,群的名字还是"天天向上"。

微信图片_20180806160406

锻炼10年(1)俯卧撑

原计划在keep达到多少多少级别的时候,写一篇博客作为纪念。但是多少多少级别还没有到,keep就取消了那个级别的系列。后来我想到多少多少分钟的时候写吧,时候到了,却没有时间动笔。白驹过隙,一下子就到了今天。那么,不止回顾keep,而是回顾10年来的训练吧。

0. 史前时代

高中和大学上体育课的时候,老师都说过,我教给你们的不过是锻炼的方法,你们不能就指着上课练,得下课自己多练练。当年挺不理解的,课上都累成这样,课后为什么还要练啊。现在我自己作了教师,从10多年前讲C++的时候开始,也常讲这段话,同学们的反应跟我当年差不多。

很多年以后我才知道,课上的训练量是远远不够的,之所以累成那样是体力不足。

体育课上我学到最多的就是跑圈。当年体育课先跑圈,好几十人绕操场扬起不少灰。高中体育课学过几天武术,老师拿我演示擒拿,一下子就把我摁地上了。大学体育课去过两三次游泳馆,我学会了像死尸那样漂着,没有学会换气。大学体育课还有篮球课,我把拇指杵伤了。现在知道了,对于高度近视几乎没有立体视觉的人来说,打过篮球还没有因为冲撞视网膜剥脱导致失明,已经是万幸了。至于技术什么的,完全没有必要考虑。大学体育课冬天还学过滑冰,男同学统统立不起冰刀,女同学有高跟鞋经验的表现尚好。

在滑冰课上,给我印像最深的是一位女同学。大家自由训练的时候,整个冰场得有几百人吧,只有她一个人用非常标准的姿势。就是弯腰,一只手放在腰后面,另一只手荡来荡去。她滑得非常慢,不如说是在走或者蹭。我们大家都私下里嘲笑他,还有人学她的样子。"用得着那么认真么""不用这样吧""这得多笨呐"。真正愚蠢的是我们。到课程结束的时候,她还是这样的姿势,速度已经不错了。而我们,仍然还是老样子。比如我,作为一个东北人,没有表现出任何先天优势,趴着两只脚跟鸭子一样打着楚留滑转了一圈。这故事告诉我,在认真训练和时间面前,所有的先天优势不过是渣。
IMG_6677
在老师教过的所有运动中,除了跑圈,没有什么我感兴趣的。当时感叹,有教各种球类的书,为什么没有教跑步的。家长给孩子们报各种班,说是锻炼身体,为啥不跑步呢。这些后来都有了答案,答案最主要的部分是时候未到。不过,我的膝盖早早完蛋了。虽然我至今没有去查,但是糟糕的阶段夏天最湿冷的时候连上厕所都蹲不下去,(不用膑骨带)骑动感单车这种程度的运动膝盖也会疼。前10年左右跟过一次1000米,膝盖疼了两三天。我感叹当年人人能跑,这是达标项目啊。关同学说,"老师你当年达标的时候多大年龄?"算了算了,跑不了啦。所幸还能徒步,并且气侯适合的时候还走。

仅仅徒步,运动量远远不够。
IMG_6763
大学的时候不少同学告诉过我,踢足球、打篮球可以交不少朋友。可是,我不想交朋友,更不想以交朋友的目的实锻炼之实,也不想以锻炼作为手段达到交朋友的目的。直至今天,我仍然困惑,为什么要为了交朋友而做什么事呢,如果你也喜欢我也喜欢某件事,我们自然就会成果朋友。这是结果,怎么会是动机,简直罪恶。

除此以外,足球和篮球我不能练的原因还有。医生在我小学时就告诉我,由于高度近视,要特别注意避免撞击。我知道不少同学读文至此,一定有不少嗤之以鼻的,"你不能全信。"可是,如果每位医生为你检查完眼睛以后都这么说呢,你也还是不信么?如果是这样,我也只能佩服你的勇气。

游泳?我得戴近视镜,没有试过外面套一层护目镜。而且水凉的话,腰突就快犯了。水热的话,那就是温泉,我很喜欢。

乒乓球呢?乒乓球还能锻炼眼睛呢。这种锻炼的效果,类似于我得吃一头鲸的肝才能补够眼睛。因为矫正视力差,光线稍微差的时候,我很难看清乒乓球。这么说也许你能理解得更好一些。我们坐对面吃饭,你的表情我看不太清楚,十有八九还要猜一猜。在大商场上厕所,我要比别人多跑几倍的路,因为看不清标牌,需要走近了才能识别。不是?退回来重走,跟老鼠走迷宫一样。
IMG_6749
1. 俯卧撑

各种运动,让我想起了Randy Pausch在最后一课里说的,"(大意)关于胰腺癌的治法和偏法,各位就不要建议了,你们可能还不如我知道得多呢。"然后他为了表明和大家想得根本不一样,当场做了几个俯卧撑。

对,就是俯卧撑。俯卧撑随时能练,不像游泳和跑步需要场地,也不像球类需要朋友,而且不需要器械。简直随时想练就能练一会儿。你也不用特别担心时间,能连续做上几分钟,就已经喘得不行了。是的,徒手俯卧撑是耐力训练,而不是力量训练。而且练全身,绝不单纯是胸肌,如果你初来乍练,首先不行的十有八九是腰。

除了俯卧撑以外,我的主要训练也主要集中在 自重训练 上。就是不用器械,靠自身的重力作为负重锻炼。保持特定的姿势,或者达到一定的次数,仅仅自重,也能把人累够呛,而且鲜有肌肉练习不到。仅仅近一年左右,我才加了哑铃练手臂肱二头肌和小哑铃练肩,公主抱二猫妈和二猫作为深蹲的负重。

最初开始练俯卧撑,是在10年前。本文就从那时开始回顾。
微信图片_20180806160416
写博士毕业论文期间,盛夏似火,就是今年的这个感觉。不写代码,只写文字只画图,难受得我够呛。工期又紧,心态浮噪,只想大喊两声宣泄一下。此时还没有想到锻炼。

又一日下楼的时候,蹬蹬蹬往下跑,突然感觉不对。我的胸和肚子在抖。我停下来再跑,蹬蹬蹬,突突突。我当时心中大叫一声"不好!我要变成女人!"这可是不得了的大事,要知道当时我头顶还没有现在这么秃,还时常误认为自己只有十几二十岁。怎么可能发生这样不幸的事情,居然会降临到我的身上。难以想像,同学拍着我的肚子 (当然,现在老同学见面已经习惯如此,跟握手一样,摸摸彼此的肚子),他一拍我的肚子一颤。

是可忍, 孰不可忍。枉我连大豆都因为里面有雌性激素而不咋吃,怎么就会成了女人。练。

写几页难受了,就去做俯卧撑。第一次卯足了劲,歪歪扭扭的,5个。再去写,再做一两个。

我做的不是通常的俯卧撑,称为 印度俯卧撑,从Matt Furey的视频里学的。他推崇三个动作,称为皇家的,一个就是印度俯卧撑,另一个是印度深蹲,还有一个是背桥。印度俯卧撑动作类似于"铁牛耕地",动作的起点和终点都撅屁股,下的时候头划过的是曲线扎下去,然后再抬起来。这个动作看似简单,其实比俯卧撑更累,而且对腰的要求更高一些。可能,我后来腰突与快速做这个动作有关,各位有兴趣的请多加小心。
IMG_6690
做一周,加5个。大概这样。等到能做到20几个的时候,我开始明白力量并不是最重要的,更重要的是——呼吸。

HXL同学当年做俯卧撑与我探讨过,他做到20个左右的时候就卡住了。我当时给出的建议就是我做到20个左右的时候的体悟。呼吸。一定不能憋气。俯卧撑相当耗费体力,是不可能憋气做几十个的。所以,要保证每次起落都要呼吸,要有意深呼吸。当ZHUMAO和我交替一人多少个俯卧撑的时候,我听到到沉重呼吸,断言,你现在确实是会做了,能做不少。不过后来包师弟也提醒我,HXL同学自重比我大很多,所以我不可一概而论。

从20几个到几十个,不过就是慢慢上升的过程。每周增加,如果艰难就再保持一周原有数量。每天都做。

后来有一天,是85个的时候,心情不佳,做着做着决定今天加到100。汗水在脸下面聚了一小洼,但是这是常态。没有任何夸张的音效特效,突然就达到了100。第二天,想想,还是100吧。起初的几天很艰难,慢慢就习惯了。这样,就坚持下来,每天都100个。

出差的时候也要做,当天特别累的时候也要做。如果预计到这一天特别艰难,那么,先把100个俯卧撑完成了,否则预留这些体力不太容易估算。假期回家的时候,我妈看我汗珠子噼里啪啦往下掉,做得这么艰难,挺心疼。我哥说,也不用这么为难自己吧。其实也没感觉困难,如果每天如此。后来又一次,我妈提起看电视里谁谁能做俯卧撑,后背背儿直,一点也不佝偻,老羡慕了。我想妈已经忘记当初见过我的努力了。我说,那个挺容易啊,我能做得更好。演示了几个常规的和花样的俯卧撑。我告诉妈,你以为瘦出来的肋巴骨,那不是骨头,是肋间肌肉,叫什么鲨鱼线子弹线。等我再锻炼的时候,我妈非常支持,说,你把那个小被子铺地上吧。

跟韩师姐坐船去斯德哥尔摩的时候,我俩心疼钱没有下船,坐着免费购物船又原路返回。所以半夜在船上过。我说,韩师姐别吓着你,我每天100个俯卧撑,这个不能耽误,现在要开始了。掀开铺位,下面的空间大小刚好够我伸开。

我对宾馆房间大小的评价就分成两种,一种是能做俯卧撑的,另一种是太小,俯卧撑抻不开。床上地方通常够大,不过不能做俯卧撑,因为手腕压力太大,需要一块硬地。
IMG_0018
从20几个到100个,这个期间我正在芬兰。所以很多同学没有看到我成长的过程,除了李记者等几位我给发了视频。当时能做80多个,他开玩笑说你是不是视频片断循环的。有的同学说也在做俯卧撑,我也没有亲见,比如DHD同学。他说能做50了,我回来就去他办公室请他做给我看。他只胳膊弯一弯,肩膀伸缩,我大笑,这也能笑么。丁同学说,那你整两个我看看。我降下去,胸口虚贴地面,说"这样",然后再起来。他说,可以了可以了。
IMG_3554
就这样,到了2012年底,我第一次腰间盘突出,在床上躺了一周,只能侧卧,吃喝拉撒都成问题。后来终于能爬起来去了医院,骨科,在一群坐着轮椅的患者中间给医生表演,"你看,就是这个动作,对腰有没有影响?"医生问,"你腿麻不麻?"这是个经典问题,后来我常问别人,每每命中。

还做俯卧撑,当时觉得,还是要坚持。是的,没有想到科学什么事。第二次腰突犯病,正在出差。像张海迪那样用胳膊肘支在椅子扶手上完成出差任务,买钢板护腰的时候手扶着柜台不然站不起来。又躺了一周,然后俯卧撑停了。

然后,是漫长的岁月。等我再次做俯卧撑的时候,计划50个,但是只做到了40。实在推不动了,感到人生无望。完成最后一个,跪坐了半天。第二天,肱三头肌疼得抻展困难。我想起来在台湾一个综艺节目里,有位健身男说,他受伤痊愈以后照镜子看到胸肌没了,嚎啕大哭。我看节目的时候乐得不行,硬汉大哭这种违和感真的好笑,而且是因为胸肌这种外在的东西。等自己只能撑到40的时候,我对他感同身受。得难失易,曾经多么努力才拥有的,如此短暂,转瞬即逝。
IMG_1196
后来我慢慢提高俯卧撑的数量。并不每天都做,最高也只敢到50个。提起健身的目标,我连续几年,就只有一个————不要腰突。

我能做拍手的俯卧撑,那是腰突前最后一个阶段训练爆发力的效果。有些同学看到过,模仿不易。后来,我还见过夏同学和翟老师做单手俯卧撑,也很羡慕。也努力了一下尝试,能够一只手伸展开,另一只手撑起。但是也就到这种程度。最近一两个月,才开始尝试翟老师说的,把伸展的手向腰的方向移动。

最初是包师弟,后来XL同学在办公室准备了俯卧撑架,现在我、zhumao同学有时轮流做上一番,已经能累积100个了。XL同学也经常撑。我在家里也准备了同样的架子,每周俯卧撑日都会用到。

nor

我还想过做俄罗斯俯卧撑。据说某级运动员能分腿做,国家级还是省级运动员才能并腿。原来打算慢慢练的。我指着路上齐小腿高的横杠说,我打算练俄罗斯俯卧撑,姿势这样这样。得先练这个那个。二猫问,你啥时候能练成。我说,这个得慢慢练。二猫又问,你啥时候开始练。

徐徐图之。目标还在,努力是点滴的,从周边开始,慢慢接近。所做的每一次撑起,都是朝向那些伟大的目标,而不是为了此时此刻。白马走得慢,终也会到江南。

构建之法2017年秋(3) 价值观 & (4)教师改进的方向

  1. 价值观

在构建之法课程群中,大多数同学都会吵着说“时间不够”“作业太多”,还有“评分太苛刻”。同样的抱怨在高考时可能也有,不过教师并不响应的。对于本课程中同学们的这些反馈,教师的回应也不见得应该是关爱。

对于同学们的困惑,教师们(以及教师的领导们)也持有不同的观点,估且称之为价值观。以下是我的价值观。

3.1 尊重

在课程中,教师中对该对学生保有善意。但是善意有很多种,并不一定是宠爱,尊重也是一种善意。尊重不必一定帮助你做各种事,扶着你搀着你,替你端水斟酒,好像你是残疾人一样。尊重是视你平等为人。

尊重不是违心的肯定,无论你做得够不够好,而是认为自己的学生与其他人一样优秀,也可以完成学业,通过规定的考核。做得到底好不好,是有客观标准的,不以我对你的感情而发生任何变化。尊重甚至也不是鞭策,而是如实地向学生传达信息,传达身为教练根据经验和理论观察到的事实。尊重也不是面子,而是公开的否定和肯定。所有的作业成绩都是公开展示的,就像作业要求也是公开展示的。教师有多么差,学生们在教师这么差的情况下还完成了这么优秀的作品,这是我们期待的。学生有什么缺点,我们都(对外人?)掩盖起来,假装不存在,免得自暴其短,这不是我们期待的。

尊重基于你完成了契约约定的工作,我兑现我所承诺的每项工作的分值。而不是当工作不能完成的时候,才开始抱怨工作或者考核方法本身就是不合理的。这是借口和解释,而不是争论。在工作中也是一样,如果老板付了糟糕的工资,我们不应该少做工作以保证对等,而是应该换一家公司。契约是这个世界上少有的神圣之物,当你给出承诺,就置命运与他人之手。以任何借口破坏契约,都是把自己再次交到对方手上,任人宰割。所以,要么不承诺,要么努力去完成。只是,大家对于什么是“努力”的标准区别甚大。

经常有同学本着中华传统文化说,“对不起,老师,这次的作业如何如何,我以后会努力的。”我通常也会礼貌地回答,“没有关系,没有关系,反正分数我已经扣了。”我不会原谅你,因为你并需要我原谅,这是你的工作不是我的。千万别以为作业完成得不够好是对教师的冒犯,怎么会呢。你不完成自己的工作,我为什么要生气。

总之,尊重基于平等、公开、契约。

还有完全不同的一种尊重,不是甚至平等,而是基于仰视的。源于一个传说。据说西班牙人离间印弟安人,问,“你在你的部落有什么权利?”印弟安战士回答说,“我有冲锋在前的权利。”

flame

3.2 作弊

作弊之所以是个严重问题,首先因为这是软件工程职业教育的一部分。不少同学认为作弊是无所谓的,到了真正的工作中自然就会变好。只怕在职场中,不作弊的决心是有的,不作弊的能力则不见得同时就具备。此外,确实有不少同学对于什么是作弊并不清楚,需要实践经验。

抄袭代码和抄袭文字一般明确认为作弊,但是有相当多的同学认为复制再修改就没有问题。有相当多的同学坚定地认为在博客或论文中复制图片是“出于教学和科研的原因”,是不需要授权的。也有同学认为自己作弊不会被抓到。

有同学认为“抄代码也挺费劲的”。确实是这样,就像小偷偷东西也挺费劲,不过这并不能改变盗窃的认定。做假药的也挺费劲,你因为这就觉得有情可原了?

团队作业要求每日立会,拍照为证。上一届尹同学以学长身份发言时指出,他们都是一次立会,照出一星期的照片来。为什么作弊需要负出额外的代价,这就是原因。要想避免尹同学团队作弊,方法很多,比如要求全程录音或录像,并且发布。反正每次只有半小时而已,录音录像也并没有多大的障碍。这显然为其他诚实团队的带来了不必要的工作量,除非这些录音录像有教师或助教分析,或有同学互评。并且,这也将教师引入了狱警囚徒模式。我们花更多的时间避免违背作业本意的投机取巧,而不是把有限的精力花费在更有效的教学上。

所以,不必考虑道德,这里也有成本问题。

三次教学中,发现过文字抄袭的,照片作假的,当次作业负分。发现过一次团队代码抄袭。那一次全班整体成绩较高,在这一背景下,降整个团队分数为61分,队长60分。

作弊是一种例外,而不是常规教学的一部分。所有的检测都有些假设。我们假设学生提交的作业并不是作弊的,在此基础上开展教学,而不是先假设学生们都会骗人。验尿的设备假设提交的样品是尿液,记者把绿茶倒进检查,由于绿茶碎屑与红细胞大小相似,在仪器中查为血尿是合理结论。处理作弊,也并不一定每次都有事先规定的条款可以遵循,因为并不希望师生是狱警囚徒模式。每次处理作弊的原则是保证教学整体不受影响,其他同学不会效仿或认为不公平。同时,不必对作弊的同学动怒,也不必在他的身上花费过多的时间。道德教育是公民教育的一部分,并非软件工程课程的重点。

river

3.3 对同学们感受的回应

(1)时间少,工作量

“作业量太大了”“做不完啊”“我还有啥啥别的正事呢。”

同学们将在三两年后走向工作岗位,成为一个用工资养家糊口的人。据我所知,大部分人由于能力所限,只能从事每天8小时工作。同时据我所知,现在不少同学每日学习时间不过1小时。从1小时到8小时的过渡是怎么完成的呢?

作业量大不大,可以根据完成时间来判断。大叫着工作量太大的同学们,PSP记录表明平均每周约9小时工作量。各位同学的导师认为,每周9小时工作量太小了。同时导师们指出,同学们经常对导师说,“杨老师的课作业非常多,所以您的工作要放一放”,各位也是这样对我说的,“我导师布置的任务特别急,所以作业完成不了啊。”各位同学不太清楚我和你们的导师互相认识,还常见面吧。

(2)我还有别的正事呢

兄弟院校有同学提到,我还有某某MOOC的课要上,这也是正事吧。我的学生不太跟我说这个,因为我的回答一般是,“是正事,应该好好学,只是跟我有什么关系,为什么要跟我说这个。”你恋爱了失恋了心情不好心情太好,天太冷天太热,这对你的人生都非常重要,是很了不起的感受,不过,我一点儿也不想你分享给我。我只想评价你的作业。

A

为什么MOOC能投入时间,而软件工程课则不能呢。因为(很多)MOOC没有考核。没有考核不做度量的课程,都是耍流氓。你真以为真了几届世界杯以后踢球就能功力大进?是的,研习他山之玉是不可或缺的,不过,这是充分条件么?我对你有别的什么本事,又学了什么新的技能一点也不感兴趣,我只想评价你的作业。

(3) 嘴硬

同学们还喜欢用言辞证明,我的就是好,就是符合要求的。我想说,工程不是辩论,徒以牙尖嘴利是挣不到工资的。不过有时候,对这种态度确实挺失望的,所以连这句话也懒得说。

如果你是真心不懂,那么这是教学。如果你懂,只是想来辩论,那么就超出教学范围了。

这里本来举了一些例子,自己读了一遍,顿时兴致索然,全删了。

fish

(4) 我不会啊

我也想对上级和领导说“我不会啊”,他们会换个人来完成这个任务的。

同学们说“我不会”的时候,有时是求救,希望能越过这个障碍继续完成任务。有时,解决障碍本身的答案并不重要,而寻找答案的方法才是更重要的。以下是一例,当时在微信中答同学问。

--引文开始----

有两位同学在遍历目录时出现了类似的问题。以下是解决的建议,不是单独外对这一特定问题,而是"我不会","我基础差",出现类似的"莫明其妙"的问题该怎么办。

方法1. 读手册

[https://msdn.microsoft.com/en-us/library/system.io.directoryinfo.directoryinfo(v=vs.110).aspx]

MSDN说DirectoryInfo需要catch 3类异常。

我查了代码,你没有捕获,在调用的时候,在调用的函数外面,都没有。这就跟调用函数的时候缺了三个参数一样。

不知道如何写捕获异常是吧,这应归结为知识结构不够完整。知识结构不完整是不可能自行解决的,要么补知识结构,需要较长的时间,要么借助外界力量,这个比较快。

方法2.  问同学,看同学代码,看别人如何解决。

不要说,“这个实现不了。”谁也实现不了,才是实现不了,你实现不了,就只是你实现不了。

有人能实现,去请教。如果你连查一遍博客找谁和你用了相同的语言的时间都不想花,那就只好等别人主动帮助你了。

别人没有责任给你讲怎么办?死皮赖脸地求,请TA吃饭求,给他买各种礼物求,给他男朋友女朋友买礼物求。在芬兰有位中国小伙儿问我,没有实验经验怎么办。我说直接找个感兴趣的实验室。他说,人家根本不给没经验的人活儿干。我说,去给他们扫地,然后再说呗。我学计算机,是从给老师打字开始的,就为了能摸到键盘。

方法3. 搜索引擎

搜索,随便找了个链接进去,然后就知道应该怎么写了(bing现在有了代码示例,更加友好),这样就能得到异常被抛出的原因。在这之前,神仙也不能确认就是什么原因,这也是远程诊断和听你描述特别难以提供帮助的原因——必须先能看到展示的信息,然后才能判断。

此外,我发完消息才发现漏了一点。

我不会在有技术效果不能确认的时候,就写下那么长的核心代码。一定先把没用过的技术都试用一遍,然后再写核心代码。如果技术手段不行,核心代码不必写,因为跑不起来。

写那么长的核心代码,长达72行,却从来没有调试运行过。

这就像写了 main(){,然后就开始写代码,写了800行,再写最后一个 }。

善良的老师会说,你的匹配能力还真强呢。

不要相信这位老师,他想的就是,“不要这么做。”只是受教育理论要求,才必须友善。

--引文结束----

(5) 我费了这么长时间做,为什么得分少?

这是典型的"没有功劳还没有苦劳么"心理。分数判定是按spec来的,就像高考就像托福机试一下。你顶烈日冒大雨前来考试,也一样可能不通过。你的努力是成绩的必要条件,不是充分条件。

事实上,同学们甚少跟我就这一点讨价还价。我听说了有些学校的同学这样做,那是因为同学们觉得跟仁慈的老师讨论可能有效益,跟我讨论这一点纯粹是浪费时间。

(6) 为什么算法实现了,却扣我分这么多?

这涉及到 核心算法与符合规范 间的分值分配。凡是参加过ACM比赛的同学和有过工作经验的同学并不存在这种疑惑,因为工作业绩是以结果度量的,而不是以什么“核心”或者任何不可见的部分声称完成来领工资的。科学、技术、工程都以可见的指标衡量,凡不能度量的,就是不存在的。

此外,本课程作业中的算法过于简单(并且不是算法课),大部分工作也是如此,此时合规是工程的基本要求。需要由外在检验符合需求,而不是你会了就行。比如作业要求是命令行参数,那么不能用scanf实现。即使你觉得命令行参数不好而scanf更好(而不是只会scanf),也需要按规范实现。

4. 教师改进的方向

B

(1)及时反馈

如果当周作为不能评出分数,一方面学生会迅速忘记当时是怎么考虑的,不利于学习,另一方面学生可能在此后没评分的几周里再次犯下相同的错误。所以快速反馈,至少下次作业以前,是必要的。

一旦有出差,批作业就非常成问题。完全不出差,又难以实现。此问题估且搁置。

(2) 避免不教而诛

初学时,学生经常陷入无所适从,做的各种事情都是错的,这样的感觉。这种感觉不利于学生建立信心和继续努力,会得出结论“我不适合学习某某学科”。理工科普遍有这种不够友好的倾向,下马威一百杀威棒能让不少同学望而却步。

有些办法能减少学生完成作业以后的挫败感(罗列条目细致会增加作业前的畏难,再讨论)。

如,在学生互评时,原则是"不得有相同分数的",这在执行时,不如"排序,不得存在并列名次"操作起来容易。这个案例想说明,原则执行起来要比具体措施困难,虽然原则更接近动机。在部置作业时,需要考虑二者的妥协。

再如,代码参考和文档模板。邹老师提议过写一个词频统计的代码,低效能,同时代码风格较好,供学生在此基础上修改。这个还没有做。文档模板,FFL老师给出的两篇作业 软件产品案例分析 遵循了相同的模板,

要求清晰,

能够帮助学生把握回答的脉络。

引用如下。

----FFL引文开始----

[http://www.cnblogs.com/orzyt/p/6013963.html]

[http://www.cnblogs.com/dasusu/p/4896863.html]

大纲如下

第一部分 调研,评测

第二部分 分析

第三部分 建议和规划

细节如下

第一部分 调研,评测

评测:

软件的bug,功能评测,黑箱测试

1、下载并使用,描述最简单直观的个人第一次上手体验

2、按照描述的bug定义,找出几个功能性的比较严重的bug(至少两个)。用专业的语言描述(每个bug 不少于 40字),如有必要,可以配图

采访:

1、介绍采访对象的背景和需求(他们有没有用过这个APP或类似的APP,除了现有的功能还有别的需求么)

2、让采访对象使用10-30分钟K米的功能(请上传照片证明用户的确正在使用,远程采访的同学请让别人帮忙照相)

3、描述用户使用这个产品的过程, 用户的问题解决了么?软件在数据量/界面/功能/准确度上各有什么优缺点?用户体验方面有问题么?

4、用户对产品有什么改进意见

5、结论:经过这么多工作,你一定有充分的理由给这个软件下一个评价,请选择一个结论:

第二部分 分析

1、使用此软件的大部分功能,联系第二部分的分析,估计这个项目做到这个程度大约需要多少时间(团队人数6人左右,计算机大学毕业生,并有专业UI 支持)

此处应参照教材WSB表格

2、分析这个软件目前的优劣(和类似软件相比),并推理出团队在软件工程方面可以提高的一个重要部分(具体建议)

3、根据理解和体验,画出整个软件所有功能逻辑框图,根据重要度标识出各模块的重要度、完成度、出发点及效果

4、针对不同的维度评分,对用户体验方面、UI界面美观度、核心功能,分别打分(总100分)

第三部分 建议和规划

1、如果你是项目经理,如何提高从而在竞争中胜出?

此处应根据NABCD或“根据《构建之法》8.5小节的内容”

2、目前市场上有什么样的产品了?

3、你要设计什么样的功能?

4、为何要做这个功能,而不是其他功能?

5、为什么用户会用你的产品/功能?

6、你的创新在哪里?可以用 NABCD 分析

7、如果你来领导这个团队,会有什么不一样?

8、如果你的团队有5个人,4个月的时间,你作为项目经理,应该如何配置角色(开发,测试,美工等等)?

9、描述你的团队在16 周期间每周都要做什么,才能在第16周如期发布软件,大小里程碑绩点设定

10、作为用户,你或你们最喜欢其中什么功能?(列表123,最多选择三种,说明理由) 你或你们可能会为哪些功能付费?(说明理由)

----FFL引文结束----

又如,有同学在todolist、燃尽图、PSP、WBS中的功能点不对应。这不是主观故意,而是因为对工程管理缺乏了解,所以教师应该在课堂或作业中提出明确要求,而不是见了作业以后感觉“这你也不懂”。

又如,控制台和命令行参数,各个学校不止一届同学表达了困惑,应该单独撰文发贴说明这些概念,并作为作业的附件。一味指责同学们基础不好,连这个也不会,于事无补。

最后,有同学提出希望有更详细的判分依据。我曾经以ACM不公布测试用例为据否定了同学的提议。如果假设同学们是诚实的,不会直接输出测试用例期待的结果,那么详尽的判分依据对同学们更快掌握和进步会有帮助。应详尽到对文件名的要求这样的程度。我尝试了给出pull脚本,既帮助同学们检验自己的git repository是不是可以拉下来,也帮助同学们拉别人的工程参考和互评。

(3) git

git每学期都在改进,不过还是要注意 要从开始就保持检查,作为强制要求,不提交倒扣分。应对团队项目也执行这一要求。下学期我准备写个脚本每天pull一次,然后diff,把团队项目的log发到作业评分里。在教师机器本地的部署执行,实施方案还在考虑中,会重视,但是难以兑现。目前检查的措施是要求学生对演示录屏,要求学生实现快速部署对于学生经验要求高,对教师机器要求高。

(4) 整理和积累

FFL博士建议过作业加标签,还没有做,逐渐意识到必要性了。

示范和模板,积累不够。

点评同学们的作业,都留在了微信中,在博客里和作业里看不到。这样的好处是,1.节省时间,2.实时交互,3.避免同学们置之不理,4.同学们能注意到这是单独对他本人所说的,而不是拿出对别人说的话再对他说一次,感觉到被尊重。坏处是,不利于教学成果的积累。下学期,整理对话吧,仅dump记录还不够。

(5) 课堂知识结构组织需要更有条理

使用邹老师提供的PPT讲了一节,教室投影不清楚,学生休验不好; 内容太多,取舍难。按我自己拉的大纲讲,经常某一项超出计划时间很多,到最后只好后面的讲不完了,下课了之。得刻意控制一下每点的时间花费。

微信图片_20180803182614

------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

//[http://blog.csdn.net/younggift]

//[http://giftdotyoung.blogspot.com]

构建之法2017年秋(2) 对工程管理的训练

  1. 对工程管理的训练

吴军先生曾经提到,读大学的一大收获,是亲身经历在大师身边的过程,那些最重要的观点,往往不是在论文、材材、讲座里,而是在不经意地沟通之中。在计算机与数学在同一座楼里的时候,林老师在走廊拐角对我的教诲实证了这一点。林老师所说大意是,计算机根本不是一个独立的学科,它的核心是数学,硬件是物理,还剩下工程的部分,那是管理学。管理学?我当时还喃喃地重复了一遍。老师的话,在经典书里我后来又再次一读到,正是因为老师提到过所以格外注意。而且,当时林老师的话不啻惊雷。

我那么喜欢的计算机,居然是管理么。管理,在我的印象中,是人统治人的手段,是厚黑学,是政治和权术,总之就是骗人的。计算机这么神圣的名词的背后,也隐藏着管理这么阴暗的存在么?这个疑问保持了很多年。

微信图片_20180803182618

2.1 沟通

确实,在工程中不全是求真,也有利益相关人士、有人与人之间的关系,还有说服和角力。最近还有两三拨好友发起话题讨论如何与SB同事沟通,说着说着,网上就开始盛传产品经理与研发因为手机壳颜色能否识别动手打架,还有女职员用咖啡泼上级应该如何处理。不过这些,长久以来在我的眼中,都是肮脏低级无奈无聊的事情,怎么会与纯洁的计算机挂上勾呢。正如LY同学所说,我就想好好写个程序,为什么要摊上这样的人呢,纯粹浪费时间。这也长期是我的心态。

林老师指出了管理是计算机的一部分,而我花了很多年才体会到,管理也是科学,而不仅是政治和艺术。在软件工程课程中,同样也应该包含对工程管理的训练,比如沟通。这里的沟通不是指政治,更不是办公室政治,甚至不是如何说服别人(你怎么确信你就是对的?),而是指如何充分揭示事实,如何展示观点,还有如何对在共同利益的框架下分配责任和利益达成一致。

保持友善的沟通,在交流中少掺杂个人感情和对人的评价,而只基于共同认可的基础知识,用逻辑推理预测可能的结果。对于结果不确定的那些,由(任命或民主产生)授权的权威决策,大家服从或者反对直至退出团队。

微信图片_20180803182623

杠精怎么解决?杠精的目的可能只在于刷存在感,反对一切。杠精所指出的那些点,可能确实存在,比如当年据说有人指出赫胥黎认为昆虫与哺乳动物的相似太牵强了。那么,这些点可以视为我们继续改进加强的出发点,也可能是我们愿望承担的冒险的部分。杠精总不能被说服怎么办?方舟子有云,吵架的目的不是说服对方,而是展示给大家看。只要说服了大家,那么吵架/沟通的目的就实现了。在利益当前的时候,鲜有成年人承认自己错了的。杠精希望望证明自己一贯优秀,这也是利益所在。不过,大家认同,项目继续,也就完成了沟通的任务。沟通的任务并不是大家团结一致携手前行,而是大家合力打怪坐地分赃,然后和平分手各奔东西才是。

微信图片_20180803182620 以上这些人与人之间关系的训练,在课程中,贯穿了始终。在作业、作业点评、作业评分规则讨论、领跑衫发放办法讨论中,特别是在微信群里和在班级现场,是普遍存在的。所不足的是,从作业和回顾来看,同学们大多仍然认为沟通的结果才是课程的目的,而没有充分认识到沟通本身才是训练的任务,结果只是顺便产生的。同学们有这样的误解的原因,是因为作业并不考虑沟通本身,而是考核沟通的产物也就是作业和软件。所以,沟通被忽视了。

在现实中其他领域也普遍存在这种情况,本末倒置。选择这门课程,选择作为助教,选择作为教师,自信满满、信誓旦旦。我们期待的是同学们火热的激情,挥汗如雨地工作,大家收获满满。结果,甚至中间就发现,完全不是这样,原来的假设是一厢情愿。所以,退缩,畏难,怀疑当初的动机。事实上,你所看到的全部,本身就是收获。经历本身就是收获,而经历中所考核的那些,我们斤斤计较的那些,全都并不重要。

我在人事处工作的时候曾经有个疑问,政策一变再变,教师按旧规定努力的成果,在新规定中不算数,这让教师何去何从?很多年以后,我逐渐明白这个道理,原本就写在经典著作之中,只是我们并未当真。人,不应该接受来自人的评判。评判和考核的标准,甚至此行的目的,是我们自己决定的,而不是由他人规定的。当我们质疑他人的规定,对他人的评论如此认真地哭喊的时候,已经忘记了这一点。

如果能够在课程中考核沟通的过程而不仅仅结果,或者帮助同学们认识到这一点,也许课程对同学们的帮助会更大一些。

微信图片_20180803182609

2.2 进度

高效能的工程师和团队,应该是方差较小,能够稳定输出的单位。就像与GYB同学的讨论中提到的,“不听老人言吃亏在眼前”,是经验表明哪些方法会导致失败。工程技术手段的目的之一,是尽最大的可能降低失败的几率,虽然对于创新和提高成功的几率并无确切的承诺。

稳定输出要么来自信誉和经验,你一直以来就总是非常有非常优秀的成果。有些同学需要注意,这里说的是成果,而不是你认为自己优秀。凡不可度量的,就是主观的或者不存在的。你每次总是差那么一点点达到优秀,按理工科度量的铁律,就是不优秀。没有什么差一点点,更不是总差那么一点点。

稳定输出,要么来自频繁测量,在快速迭代中及时调整任务和期望。这需要使用工程管理工具,展示测量的结果,展示当前进度与期望间的差异,展示无论项目成功与否的当前收获。靠人工记忆,靠“我不会忘的”,就是依赖个人和艺术了。应该这样的假设,如果你明天就死了,那么此刻留下的中间产物,就是大家认识你工作的全部依据。你脑袋里像花儿一样美好的设想,并不存在,从不存在。

在课程中,同学们使用的工具包括 PSP表格、燃尽图、功能清单(及更新)、SCRUM站立会议报告、WBS表格及时间预估、NABCD、进度条、代码量和博客字数。这些内容迟至每周,快至每日需要更新。

与沟通类似,同学们执着于这些工具所制造出的产品——要发布的软件,而经常忽视工程管理训练本身是课程的重要目的。特别是当有些同学以“我的程序设计基础不够好”为借口的时候,他们假设的就是程序设计的结果在衡量成绩中占有重要比重。教师有意降低了程序设计难度在分值中的比重,希望同学们能够注意到及时合规的作业本身有很多分数、项目管理的中间产物,如同结果一样重要,甚至更重要。一个例子是燃尽图,在大家初次使用时,不太可能一下子学会如何划分功能点。教师赞同和鼓励在本周内修改功能点,以真实反应进度作为第一要务。项目管理工具是不是帮助项目做得更好,或者说项目是不是做得更好,并不重要。项目管理工具确实会帮助项目更好,但是项目更好依赖于很多其他因素,更多考虑那些因素不利于同学们对管理本身的价值建立起信心。

并且,教师一再地多次强调,工程管理本身是作业成绩的采分点,软件产品有多好,是一个独立的问题。这两部分是分别度量的,不会因为软件产品差而影响工程管理部分的成绩。在关注过程控制的作业中,工程管理部分的成绩比重,远比软件产品的难度带来的分数要高。对于程序设计基础不好的同学,教师特意援引以往沈柏杉同学组的例子。他们用web做了一个礼物推荐系统,功能简单,代码也不难,他们甚至拒绝了大家建议的所有稍微有点难度的特色功能。但是因为满足了有用这一特性,并且有特色、展示清楚,所以各组互评时一直排名靠前。计算机系普遍存在更难的就是更有价值这样的看法,需要一次次强调产品与科研和学习的差异,降低大家对于难度的价值认同。

微信图片_20180803182607为了帮助同学们更好的适应从更具有商务意义而不是记忆的角度掌握进度管理工具,教师在正式开发之前加了一周内容。这一周的内容表面上是选题,同学们要依据NABCD等介绍本团队希望研发的产品的优秀特性,实质的教学目的是迫使同学们开始使用上述进度管理工具开始工作。在这一迭代中,因为不涉及程序设计这样艰难可怕的知识点,而只涉及到文案、图示、视频这样不需要特殊技能的工作,同学们不那么恐惧,对要求在产生这些中间产物的过程中使用的进度管理工具也掌握得更好。

当我们介绍新的知识和技能的时候,在学生既有的知识结构基础上开始,通常效果更好。不过看起来,认为计算机系同学的知识结构基础是程序设计,是个错误的假设。他们的程序设计基础让他们自己害怕,文字、截图画图、做视频,更得心应手一些。也许,作为管理知识的引入,从这里开始更好。

微信图片_20180803182625

------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

//[http://blog.csdn.net/younggift]

//[http://giftdotyoung.blogspot.com]

构建之法2017年秋季学期总结(1) 工具

2017年秋,第三次使用邹欣老师的《构建之法:现代软件工程》作为教材,授课对象是计算机系研究生一年级学生。班级在这里[https://edu.cnblogs.com/campus/nenu/SWE2017FALL]。

在本轮授课中,有以下几方面印象较为深刻。

1. 工具

工欲善其事,必先利其器。

在课程中我们要求学生使用特定的工具,不仅希望这些工具能减少重复工作,更重要的是约束学生的操作,通过操作传授软件工程概念的组织结构和流程,好工具同时也是好的过程的示范。这些工具包括 GUI原型工具 墨刀、进度管理中看板和燃尽图工具 leangoo、版本控制工具git、tortoisegit。PSP中也应该包括时间记录工具atimelogger(toggl也不错,最近被墙了)。

1.0 原则

在软件工程的教学中,教师和助教也应该注意工具使用。

原则一 DRY[https://en.wikipedia.org/wiki/Don%27t_repeat_yourself]。

这是我们经常在课程中灌输给学生的,教师本身也应该以身作责,不然是件很人格分裂的事情。凡是通过profile发现占用大块时间的,特别是其中有重复工作的,应该优化这一部分。

原则二 过早优化是万恶之源。不熟悉的工作不应该写脚本或者做系统,妄图提高工作效率。在重复若干次以前,不应该盲目尝试创新。需要多次尝试,总结规律,然后写脚本。如果能熟悉大家的工作习惯,还应该写出软件来供大家用。

在本学期中,我完善和使用了一些半成品的脚本工具自用,用以提高工作效率。

目前仍需改进的是,手写的这些脚本仍然只是工具而不是工程,更不是产品,有不少硬编码和对环境的要求,不易为他人所用。好的工具还应该约束用户的行为,向用户指出设计者的意图(组织结构、流程),并且避免反复操作中的失误甚至避免反复操作本身。

1.1 投票统计-邮件AHK脚本

在课程中有同学们投票的活动,如在选题、alpha发布、beta发布、final发布中,有全体同学对作品投票排名次的要求。

为减少同学们投票的顾虑,采用匿名制。以往的学期中,曾经对投票人匿名,但是类似于唱票,公布过所有投票内容。但是教师低估了人性的聪明,同学们居然能猜出哪个票是谁投的。大致的原理是利益相关,会如何投票。这一原理导致不能公布所有投票,只能假设同学们可以信任教师可以保护匿名,由教师统计和发布。

要求投票的内容与一般问卷系统不同,是作品的名次(并且不得有并列),以确保分值差异化,或者人名,用于投票领跑黄衫获得者,既非多选,也非单选。所以目前没有找到适合的软件系统,由同学用电子邮件投票,发送给教师。没有用微信私聊,是因为不应假设所有同学都希望加教师为好友。

邮件有格式要求,比如下面这个。

本作业截止前每位同学向教师 ([email protected]) 发送1封邮件投票,
作为投票者的一次成绩5分。不投票或投票不符合要求 (包括不限于标题错误、
正文格式不符、小组名字写错) 的,视为未提交,倒扣分数。

 投票 1名 你最感谢的同学。

收到感谢最多的同学将获颁“感谢多”黄色领跑衫。如果王超同学收到感谢最多,则由收到感谢第二多的同学获得。

 -------邮件样例开始------------------

邮件标题为: 我最感谢的同学
邮件正文为:
姓名:杨贵福
邹欣
-------邮件样例结束------------------

这次投票结果

收到投票34份,废票1张,重复投票1张,有效票共32票。

教师收到的邮件,比如下面这张截图。“姓名”之后是投票者的姓名,教师要用来登记完成投票这一作业的分数并避免重复投票,“排序”之后是这位投票者给出的各团队名次。

1我对了件主题过滤,运行AHK写的脚本,遍历所有投票邮件,把每封邮件的正文复制添加到excel里。在excel中统一字体格式然后统计。

因为投票这一作业规定了截止期限,所以,AHK脚本在截止期限后运行。此后收到的邮件不必手工处理,而是丢弃。

邮件的正文在作业中有格式要求,凡是不符合格式要求的,作业不计分,投票视为废票。在实际操作中,有拼写错误、大小写错误、冒号半角全角错误的,一概按不符合格式要求处理,即使教师手动发现了这张投票。所以不需要处理更多的容错,同时这也是对同学们训练合规的一个机会。

不少地方非常粗糙,使得脚本仍然只是小工具,而不是适合更多人使用的软件。这本身有违软件工程的精神,不过符合重复次数不够多的情况下暂勿抽象的原则。比如,遍历邮件的个数是硬编码的;每封邮件打开以后停留一下,以保证正文载入完成。没有用中断/回调之类的机制,就只是等待;点击“下一封”按钮的位置与屏幕分辨率有关,也是硬编码的。

脚本如下。

; precodition:
;    web邮箱录,搜索""选题 视频展示投票""结果页,打开第一封邮件,AHK脚本会循环开始下一封
;    excel打开,光标置于左上


MsgBox, 4,, "Press Yes to go on if you have setup the env." (press Yes or No)
IfMsgBox Yes
    dump()
else
    return


dump()
{

SplashTextOn,,, "Working, please standby.".
sleep 2000
SplashTextOff

Loop, 31
{
    ; 复制邮件正文
    MouseClick, left, 299, 421
    Send ^{a}
    Send ^{c}
    
    ; 切换到excel
    IfWinExist, ahk_class XLMAIN
        WinActivate ; use the window found above
    else
        MsgBox Please run Excel.
    
    ; 右移一列
    Send {Right}
    
    ; 粘贴邮件正文
    Send ^{v}

    ; 切换到firefox
    IfWinExist, ahk_class MozillaWindowClass
        WinActivate ; use the window found above
    else
        MsgBox Firefox lost.
    
    ; 下一封
    ;MouseClick, left, 1839, 226 ; home
    MouseClick, left, 1833, 212 ; xxhb
    sleep 2000 ; 等网页载入完毕
    

}
}

Escape:: 
ExitApp 
Return

上学期一共统计投票200余次,每次30余张票,节省了不少时间。

统计得票时,分别统计某一团队名次第1、名次第2、名次第3、名次第4的票数,然后求得平均名次。最下一行的27,是用于交叉检验的。

2

1.2 pull脚本

单人任务和结对编程两个项目,需要把同学的代码成批从 coding.net中获取到教师机编译运行检查结果。这也是检验同学们是否能够正确使用版本控制工具的时机。

我写了shell脚本为每位同学分别建立目录和pull代码。还有脚本用于批量执行和对比,效果不佳,因为同学们普遍地没有按作业的spec要求放置文件。此处略。

以下是pull脚本。第一次作业时有相当数量的同学git不符合要求,执行扣分,以后的作业有所好转。

#mkdir     翟宇豪
#cd     翟宇豪
#git init
#git pull https://git.coding.net/Rio56/wf.git master



declare -A map=(["冉华"]="https://git.coding.net/Dawnfox/wf4_2.git"
        ["刘淑霞"]="https://git.coding.net/liusx0303/CountWords__standardinput.git"
        ["胡佑蓉"]="https://coding.net/u/huyr000/p/countWords/git"
        ["王超"]="https://git.coding.net/SuperCodingChao/wfProject.git"
        ["高远博"]="https://coding.net/u/Rainbows/p/wc/git" #old
        ["陈建宇"]=" https://coding.net/u/MR__Chen/p/Demo/git" #old
        ["代秋彤"]="https://git.coding.net/a284617374/soft.git"
        ["方铭"]="https://coding.net/u/MingZi-/p/cipingtongji/git"
        ["葛美义"]="https://coding.net/u/gmyznb/p/wordcount1/git"  
        ["黄泽宇"]="https://coding.net/u/huangzy_95/p/wf/git"
        ["贾男男"]="git://git.coding.net/lynlynyess/wf.git"
        ["贾雅杰"]="https://git.coding.net/jyj5951/wf.git"
        ["姜珊"]="https://git.coding.net/js2017102865/wf_c.git" 
        ["阚博文"]="https://git.coding.net/zbwd666/zbwd.git" # old
        ["李传康"]="https://git.coding.net/lick468/wf.git"
        ["李圆圆"]="https://git.coding.net/lyy181/count.git" #old
        ["蔺依铭"]="https://git.coding.net/Hitagi123/word-count.git"
        ["刘成志"]="https://git.coding.net/liuchengzhi0944/wf.git"
#        ["刘耀泽"]="https://coding.net/u/liuyz349/p/word_count/git" # 未交作业
        ["米赫"]="https://git.coding.net/immixiaomi/wf.git" #old
        ["苗威"]="https://git.coding.net/Vrocker/wf.git"
        ["任思佳"]="https://coding.net/u/rensijia/p/count-words/git"
        ["邵朔"]="https://git.coding.net/ss505072461/wf.git" 
        ["宋雨"]="https://git.coding.net/songyuu/wf.git"
        ["田继平"]="https://git.coding.net/tianjiping/11111.git" #old
        ["王航"]="https://git.coding.net/wangh013/wf.git"
        ["王磊"]="https://git.coding.net/137911934/SE20170914.git"  
        ["王伟东"]="https://git.coding.net/wangwd/SecondAssignment.git"
        ["王玉玲"]="https://coding.net/u/tutu123/p/tutu1234/git" #old
        ["吴雨丹"]="https://git.coding.net/clairewyd/wf.git"
        ["徐劭斌"]="https://git.coding.net/xushaobin/xushaobin_gongneng_4_2.git"
        ["杨梓瑞"]="https://git.coding.net/Vector121/homework.git" #old
        ["袁玥"]="https://coding.net/u/yuanyue2017102885/p/wf-part420170926/git"
        ["翟宇豪"]="https://git.coding.net/Rio56/wf.git" #old
        ["张恩聚"]="https://git.coding.net/ZhangEJ/wf.git"
        ["邹双黛"]="https://git.coding.net/szjzsd/123.git"   #old
        )
        
for key in ${!map[@]} ; do
    mkdir $key
    cd     $key
    git init
    git pull ${map[$key]} master
    cd .. 
done  


#echo ${!map[@]}
#
#echo ${map[@]}
#
# for key in ${!map[@]} ; do
#     #    echo ${map[$key]}
#     echo $key;
# done  
# 语法学习自 [https://coding.net/u/ZhangEJ/p/wf/git/tree/master/wf11]

1.3 excel

我用excel计算每周的作业成绩。函数lookup和vlookup在作业计算中起了重要作用,用于查 某作品被投票的分数、某同学的团队归属(以便累加团队得分)、某团队的单项作业得分等。

例如,在冉华同学的团队一列中,“王者荣耀交流协会”的取值,来自另一个名为“归属”的工作表。不hardcode有利于alpha阶段后换人。

又如冉华同学的视频展示得分,来自所在团队的“final视频”单项得分,查找自另一工作表“scrum+todolist+burndown”第14列匹配团队名“王者荣耀交流协会”。

5

6

除vlookup以外,在统计得票时countif、sum等也常用,match也有用到。

1.4 excel导出成markdown格式

构建之法课程群统一在cnblogs.com上发布成绩,该网站支持markdown格式。幻飞龙博士开发有exceltk[http://www.cnblogs.com/math/p/exceltk.html]可以完成excel导出成markdown格式,大大方便了这一工作。极其方便,强烈推荐,非常感谢。

1.5 仍存在的困难

在算分时常犯错误,被同学们纠正过几次。1.本周成绩没有累积到总成绩,2.修正学生得分时担心错,3.使用错误的sheet,因此排序错误(数据没错)。这些都应可以通过数据检验或交叉检验完成,不过仍未找到可行的方法。

------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

//[http://blog.csdn.net/younggift]

//[http://giftdotyoung.blogspot.com]

一次失败的抛物线正等测投影变换,以及什么情况下才能放弃

1.问题

1.1 跳一跳

技术训练只有通过实践中才能完成,仅仅看书做习题是不够的。学生训练技术,有真实的项目当然最好。不过研究生一年级的同学一时还不能在项目中做出足够贡献,加中培训和管理上的开销,提后腿也极有可能。所以,我们找个小项目“跳一跳”模仿一下,提高代码量。

跳一跳中涉及一个可以从代码中抽离出来的问题,剥离出来交给了GYB同学完成,锻炼数学模型应用、工程管理中的项目进度跟踪和控制,以及技术文档写作。

跳一跳是个伪3D游戏,观察者固定在斜上45度,视角不能旋转。涉及到的具体问题是,三维空间中的抛物线如何在二维屏幕中绘制出来。

01

1.2 绕过问题

在解决跳一跳中的这个问题过程中,我再次发现同学们的一个不良习惯,就是绕过问题。

很多年来,我发现同学们在没有确定否定论证的情况下,习惯于”绕过问题”。你如果问,能”确定解决么”,他说“不能”。你如果问,“确定不能解决么”,他也说“不能”。就是打算换条路,在这条路还没有走到死胡同的情况下。“也许另一条路行吧”,这样的心理,伴随着“也许这条路不行吧”做出绕路的决定。在大一点的颗粒度中如此,在以几分钟为单位的任务中,也是这样。这些小任务中的犹豫、模棱两可,导致不敢怼人,被怼时也只有情绪没有反击的逻辑。

在一起工作时,我经常希望同学们能有”断然的决心”去做实验,或者去否定。”不知道”的状态不可取,在”不知道”的情况下冒然决定退出,就和冒然决定进攻,一样地不负责任。

什么情况下能确定可以退出这条技术路线呢?花了足够的时间,或者所剩时间不多,有时是可接受的理由。这是出于项目的时间成本和截止期限考虑。

还有时同学们对导师、专家、上级工程师的否定非常恼火,”你怎么就知道不行”。这个问题的答案和决定退出某条技术践线的答案是相同的。就是 技术可行性。当确认技术没有可行性时,就是放弃的时机。如果在开始之前就论证了技术不可行,那么就没有必要开始,也就避免了浪费时间。

所谓技术不可行,不是具体的“你”做不出来,而是要说明沿着这条技术路线,任何人也做不出来。这就是要证明导师、上级工程师部署的技术路线是错的。至于任务本身,永远是正确的。

在本次作业中,我感到有必要用一个实例展示,什么样的才是技术不可行,以及在失败的任务中,我们能留下些什么。

2.涉及的概念

2.1 投影

有同学认为,抛物线,画出来不就完了么。水平初速度不变,垂直方向上有重力加速度。那是现实世界,在软件实现中还需要计算机图形学。

如下图,现实世界三维空间中一只真实的手把一张纸按在一本真实的书上。从书的近大远小中我们可以看出,整张照片存在透视失真,所以纸张也是近大远小的,抛物线当然也是。

02但是人类可以借由脑补想像出这张纸上画了一条抛物线,不是近大远小的,而是如下图这样。

03

这是三维空间中抛物线做俯视投影的结果。

投影是三维空间到二维间空的运算,需要借由机器来完成,而不由人脑负责。投影在计算机图形学和程序设计实现中,使用矩阵乘法来完成。下文有对于矩阵乘法稍微详细一点的解释。

2.2 正等测

正等测,是把如上的抛物线投影成下面这张照片的样子。同时,图中把右手系XYZ三个轴也做了正等测投影。

04

你可能仍然觉得这是三维空间的图形。下图是我从上图描出的,去除了无关细节。图中三个坐标轴,把360度均分为3等份,用量角器容易测出,每份120度。也就是说,原来垂直90度的三个坐标轴,在变换后是平面内的120度。以这样的思路观察,下图中的“抛物线”则更明显是二维平面(你的显示器)中的一条曲线,它的顶点并不在起点和终点的正中间,与原来的抛物线不同。甚至不能一眼就看出来是不是抛物线。

05根据正等测的定义[https://en.wikipedia.org/wiki/Isometric_projection],对抛物线的每个点做如下操作: (1)先绕y轴旋转 45度,(2)然后绕x轴35.264度,(3)最后向xy平面投影。35.264度这个有零有整的数字,是因为arcsin(tan 30°)大约是这个角度,目的是原来的坐标轴完成两次旋转后,刚好与原本的正方体不在同一表面上的两个顶点(下图中的红线连接的两个顶点)重合。也就是说,正等测是从这两个顶点的连线的角度,即这两个顶点看起来刚好是重合的。

06

上图的立方体正等测以后看起来如下图(来自wikipedia)。立方体共8个顶点,图中可以看到7个,其中一个在正中间(也是标注120度角的顶点),另外6个投影后是六边形的6个顶点。有一个顶点看不到,在正中间顶点的后面,在视线中与正中间的顶点重合。

07

2.3 变换矩阵

《计算机图形学》教材上提到,二维/三维图形的平移、旋转、扭转、错切等变换,都可以通过对空间中的点的齐次坐标做矩阵乘法完成。

我手头的教材是下图这本,在豆瓣和京东上都查不到,我怀疑我买了本假书。

08

2.3.1 点的变换

设置点的齐次坐标为
(x y z 1),以下矩阵乘法能完成关于 Z 轴进行对称变换。

09得到的结果如下。

10使用矩阵的好处是所有变换运算都是矩阵乘法,不必每个单独考虑,需要哪个变换就用对应的矩阵。

2.3.2 隐函数形式曲线的变换

曲线的变换,方法1,可以先采样,即把模拟、连续的曲线离散化,然后对每个采样点做变换。曲线的采样的变换,等价于曲线的变换的采样(什么原理?)。

曲线的变换的另一种方法,方法2,先对曲线变换后再采样。在孙家广老师的教材中,是“7.3.3 参数图形的几何变换”。这里的参数图形,当指由参数控制形状的图形,而不是参数方程。

例如,隐函数形式的特定抛物线方程,如下。

11这一方程可以表示为矩阵乘法的形式,下面3个矩阵相乘的结果就是上式的等号左侧,x^2-y。

12
参见[https://en.wikipedia.org/wiki/Matrix_representation_of_conic_sections]

因为z值是任意的,所以方程形成一个抛物面,如下图中橙色曲面所示。蓝色平面是z==0,即XOY平面,用于帮助我们读图。

13

抛物面沿X轴向左平移1,得到下图。橙色是抛物面,蓝色是没有参与旋转的XOY平面,用于帮助读图定位。

14沿x轴平移使用了本节提到的方法2,如下。

15

式中第2个矩阵与采样点沿x轴平移的变换矩阵是相同的,第4个矩阵是这一变换矩阵的转置,第1、3、5个矩阵是方程x^2-y的矩阵表示形式。

以下这段是矩阵及矩阵转置连乘的几何意义,不熟悉mathematica语法的读者请跳过。熟悉这些知识的同学,以下我的猜测,没有找到依据,如果您发现有错,恳请能告诉我。

(1) 三维齐次坐标 矩阵和方程间的转换

In[19]:= A =
 {{a, b/2, d/2, h/2}, {b/2, c, e/2, j/2}, {d/2, e/2, g,  k/2}, {h/2, j/2, k/2, f}}
 Out[19]= {{a, b/2, d/2, h/2}, {b/2, c, e/2, j/2}, {d/2, e/2, g, k/2}, {h/2, j/2, k/2, f}}
In[21]:= Expand[L.A.R]
Out[21]= {{f + h x + a x^2 + j y + b x y + c y^2 + k z + d x z + e y z + g z^2}}

(2)矩阵及矩阵转置连乘的几何意义

第一

L.RZ.A.Transpose[RZ].Transpose[L]

L是{x,y,z,1},几何意义是任意一个点。

L.RZ 得到 {x',y',z',1},是这个点的变换。

以上是几何变换中常用的。

Transpose[RZ].Transpose[L],Transpose[L]左乘RZ的转置,几何上等价于于Transpose[L]右乘RZ,得到{x',y',z',1}的转置。

L.RZ.A.Transpose[RZ].R

变成

 {x',y',z',1}.A.Transpose[{x',y',z',1}]

第二

{x',y',z',1}.A.Transpose[{x',y',z',1}]与L.A.R的形式相同,

其中{x',y',z',1}是{x,y,z,1}的变换。

 

L.A.R,根据矩阵乘法得到 f(x,y,z)。

In[19]:= A =
 {{a, b/2, d/2, h/2}, {b/2, c, e/2, j/2}, {d/2, e/2, g, k/2}, {h/2, j/2, k/2, f}}
 Out[19]= {{a, b/2, d/2, h/2}, {b/2, c, e/2, j/2}, {d/2, e/2, g, k/2}, {h/2, j/2, k/2, f}}
In[21]:= Expand[L.A.R]
Out[21]= {{f + h x + a x^2 + j y + b x y + c y^2 + k z + d x z + e y z + g z^2}}

2.3.3 参数方程形式曲线的变换

抛物线x^2-y==0的参数方程为

16

17正等测变换矩阵为

18

在Mathematica中,参数方程表示为

tf = {t, t^2, 0, 1}

变换矩阵表示为

T = {{0.7071, 0, -0.4082, 0}, {-0.7071, 0, -0.4082, 0}, {0, 0, 0.8165,0}, {0, 0, 0, 1}}

对参数方程做正等测变换

tf.T

得到

{0.7071 t - 0.7071 t^2, 0, 0. - 0.4082 t - 0.4082 t^2, 1}

即参数方程

1920注:参数方程的方法是由典同学提供的。在请教他以前,我把“参数图表”误读为参数方程,已尝试了9个小时以上。典同学花了20分钟不到,给出了上述方案,这20分钟还包括学习正等测是什么,以及复杂mathematica语法的时间。没有他的指导,我还在隐函数的沼泽挣扎。事实上,我又花了10小时以上,想找到隐函数的可行之路,直到认定这条技术路线不可能。所以,才有了这篇博客,目的是给出失败的过程,以及说明在什么情况下才能认定可以放弃。

2.3.3 Mathemathica

本文中的运算和推导使用了数学工具Mathematica做符号计算和矩阵运算,这一工具由典同学再三推荐多次。的确非常有力而精美。

3. 技术路线

求三维空间中的正等测投影,计划分成以下几个步骤。

(1)三维空间中的抛物线ab0是抛物面a0与平面b0的交线。特别的,在跳一跳中,是z值任意的抛物面a1与z==0平面即XOY平面b1的交线。

21

(2)对抛物面a1做正等测(前两步,绕轴旋转不投影)变换得到a2; 对XOY平面b1做正等测(前两步,绕轴旋转不投影)变换得到b2。

(3)把a2与b2的交线投影到XOY平面,所得曲线ab3为a0与b0的交线的正等测投影。

40

涉及到的技术包括: 抛物面的隐函数和矩阵表示、平面的隐函数和矩阵表示、正等测投影的矩阵乘法、隐函数的旋转、复合变换、代表交线的方程组、投影。

4.技术路线实施过程

实施过程记录的原则包括利(1) 原理及对原理的实验验证,(2)为方便实验重现而应公开的技术手段,包括依赖的原理(模式)、预期的实验结果、实验条件、实验中每一步的方法、每一步的结果,结合原理对实验结果的解释,(3)实验成功还是失败,或者说,不使用成功或失败这样的表达方法,而是描述为实验符合预期、实验结果与预期不符。

实验的目是的旁证或证伪猜测,而不是为了探索。所以实验的结果一定是有预期的,实验结果要么符合预期,说明猜测不是错的(也不见得是对的),要么不符合预期,则证伪了猜测。

4.1 抛物面

L={{x,y,z,1}}
R={{x},{y},{z},{1}}
A={{a,b/2,0,d/2},{b/2,c,0,e/2},{0,0,0,0},{d/2,e/2,0,f}}
a=1;b=0;c=0;d=0;e=-1;f=0
ContourPlot3D[{L.A.R==0},{x,-2,2},{y,-2,2},{z,-2,2},AxesLabel->{X,Y,Z}]

其中L.A.R是抛物线隐函数形式的矩阵表示。

24

4.2 XOY平面

Z={{0,0,0,0},{0,0,0,0},{0,0,0,1/2},{0,0,1/2,0}}
ContourPlot3D[{L.Z.R==0},{x,-2,2},{y,-2,2},{z,-2,2},AxesLabel->{X,Y,Z}]

其中L.A.R是XOY平面的隐函数形式的矩阵表示。

25画出的图形如下。

264.3 抛物面与平面相交的几何直观

ContourPlot3D[{L.Z.R==0,L.A.R==0},{x,-2,2},{y,-2,2},{z,-2,2},AxesLabel->{X,Y,Z}]

如下图所示,方程组{L.Z.R==0,L.A.R==0}即{x^2-y==0,z==0}的几何含义是平面与抛物面的交线。

27

4.4 验证矩阵乘法实现平移变换

以上验证了隐函数的矩阵表示。如果画出的图形与期待的不一致,那么隐函数的矩阵表示就是错的。如果画出的图形与期待的完全一致,并不增加任何信息,只是旁证。Mathematica以及设计实验动手的价值,在于尽力证伪某个观点。在这个案例中,被检验的观点是 隐函数的矩阵表示是正确的。

接下来验证用矩阵乘法点的平移变换,作为矩阵乘法实现变换的特例。如果矩阵乘法变换的结果并非平移,那么矩阵乘法与变换间就不是等价的。

点(x,y,z)的齐次坐标形式,沿Y轴平移0.5。

28在Mathematica中,输入如下代码,等价于上面的矩阵相乘。

29所得结果{{x, 0.5 + y, z, 1}}表明,纵坐标数值增加0.5,即偏移0.5。实验结果旁证用矩阵乘法与平移是等价的。

4.5 隐函数的变换

具有隐函数形式的图形的变换,先变换后采样,相比先采样后变换,性能更高。因为先变换后采样矩阵乘法只做1次,时间复杂度是O(1); 先采样后变换涉及矩阵乘法的次数随采样点增加而增加,时间复杂度是O(n)。

设隐函数的矩阵表示形式为 L.A.R, 要做变换的矩阵为T,那么隐函数变换为 L.T.A.T的转置.R。

In[90]:= MX = {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {2, 0, 0, 1}}
Out[90]= {{1, 0, 0, 0}, {0, 1, 0, 0}, {0, 0, 1, 0}, {2, 0, 0, 1}}
In[70]:= L.A.Transpose[L]
Out[70]= {{x^2 - y}}
In[102]:= Expand[L.MX.A.Transpose[MX].Transpose[L]]
Out[102]= {{4 + 4 x + x^2 - y}}

变换前的原图(用[https://www.wolframalpha.com/]绘制)为

30

31变换矩阵为

32变换后即(用[https://www.wolframalpha.com/]绘制)

3334

4.6 隐函数的变换的复合

假设知道什么“基本”运算,我们发现对于隐函数表示的图形A,当可以表示为下述形式时

L.A.R

对A所做的“基本”运算可以以如下形式表示。

L.T.A.Traspose[T].R

其中Traspose[T]是T的转置。

在教材中查到的基本运算包括平移、旋转、放大缩小等。绕X轴或Y轴或Z轴旋转,不是基本运算,需要分解为(1)平移至轴M1,(2)绕轴旋转RX,(3)平移回原位M2。这三步运算的复合表示为如下形式。

L.M1.RX.M2.A.Traspose[M2]. Traspose[RX].Traspose[M1].R

(我不知道什么是“基本”运算,求助。)

4.7 正等测变换矩阵分解

正等测变换矩阵为

35代码形式MatrixForm[{{0.7071, 0, -0.4082, 0}, {-0.7071, 0, -0.4082, 0}, {0, 0, 0.8165, 0}, {0, 0, 0, 1}}]。

分解为绕Z轴旋转、绕X轴旋转、向XOY投影。观察角度不同,所以与本文中此前引用的wikipedia中的不同。

RZ = {{1/Sqrt[2], 1/Sqrt[2], 0, 0}, {-(1/Sqrt[2]), 1/Sqrt[2], 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}}

RX  = {{1, 0, 0, 0}, {0, Sqrt[2/3], -(1/Sqrt[3]), 0}, {0, 1/Sqrt[3], Sqrt[2/3], 0}, {0, 0, 0, 1}}

PXY = {{1, 0, 0, 0}, {0, 0, 0, 0}, {0, 0, 1, 0}, {0, 0, 0, 1}}

N[MatrixForm[RZ.RX.PXY]]

36因此,两矩阵相同,因此正等测变换可以分解为三个运算的复合。

顺便一提,正等测变换矩阵的精确解为

37

4.8 正等测变换矩阵实例

(1)原始图形为抛物面与XOY平面。

ContourPlot3D[{L.A.Transpose[L]==0, L.Z.Transpose[L]==0},{x,-2,2},{y,-2,2},{z,-2,2},AxesLabel->{X,Y,Z}]

38(2) 绕Z轴(图中为纵轴)旋转45度。

ContourPlot3D[{L.RZ.A.Transpose[RZ].Transpose[L]==0, L.RZ.Z.Transpose[RZ].Transpose[L]==0},{x,-2,2},{y,-2,2},{z,-2,2},AxesLabel->{X,Y,Z}]

39我们注意到XOY平面相对Z旋转时,变换结果与原图相同。XOY平面与抛物面交线所得抛物线的轴由原图中的平行于Y轴旋转为穿过图中(2,2,0),转过45度。

(2)绕X轴(图中为横轴) 旋转arcsin(tan 30°)约合264度。

ContourPlot3D[{L.RZ.RX.A.Transpose[RX].Transpose[RZ].Transpose[L]==0, L.RZ.RX.Z.Transpose[RX].Transpose[RZ].Transpose[L]==0},{x,-2,2},{y,-2,2},{z,-2,2},AxesLabel->{X,Y,Z}]

40我们注意到原图中蓝色的XOY平面穿过右上角顶点(2,2,2)和(-2,-2,-2)。从对角线(2,2,2)到(-2,-2,-2)看去,蓝色平面是一条直线。下图为上图手动旋转变换视角,可以看到蓝色平面看起来是右上到左下的直线。

41下图中的绿线是手动标注的,从这个视角看,得到抛物面和蓝色原XOY平面的的交线在XOZ平面的投影。这一投影即原图中抛物线 y=x^2 在正等测结果。42

4.9 交线方程组的矩阵表示

Z平面做正等测前两步(两次旋转,不含投影到XOY)得到矩阵可以表达为方程(我们称为a)。

抛物面做正等测前两步(两次旋转,不含投影到XOY)得到矩阵可以表达为方程(我们称为b)。

方程a与方程b联立的方程组如果可以表达为矩阵形式,就可以再利用隐函数(矩阵形式)变换的方法向XOY平面投影,从而完成正等测运算。这时我们遇到了解决不了的困难,是找不到方法把方程组表达为矩阵形式。形如L.A.R的形式似乎是方程所特有的,方程组并不能用。

这是本文最主要的写作目的: 在什么情况下我们可以停下来——当我们走投无路,理论(或者我们再无办法)。判定可以停下来的出口条件包括,能够清楚描述遇到的障碍,并且能够说明面对这一障碍时我们作了哪些尝试(以及这些尝试的理论来源)、结果。

这样,一旦幸运地遇到位高手,他就会知道这些这些这些我们都已了解到了,因为资料的开放,他容易判断出在某某处我们推导错了,或者某某情况我们没有考虑到,因此得到了错误的结果。或者他根据我们开放的资料也做出相同的结论,即这个方法是不可行的。不会出现那样的情况,高手说,其实你那么试一下估计就行了,你说“我试过了,只是报告里没有提到”,浪费了高手的时间。或者更糟糕的,你所说的“我试过了”由于表达粗糙,加之对高手给出的方案理解错误,所以错失了可行的手段。你以为不行,是因为你没有理解高手的路线。详尽地披露实验过程,有利于接受质询和指导。在我们的文化中,习惯于隐藏以获得信息不对称带来的利益,比如避免丢脸。但是技术问题是科学问题,不会因我们的隐藏而放过我们,当别人能实现我们声称做不到的工作时,才是更丢脸的时候。

对于方程组的矩阵表示我作了如下尝试。

(1)方程两侧分别相减、相乘

这种方法也是教材和网上一些资料中提到的。如果方程左右两边分别相减,按右侧为0的表达方法,右侧仍然是0。这一方法的理论来源应该是高斯消元。不过在左右相减的过程中,把方程a和方程b的左边都为0退化为方程a或方程b的左边任何一个为0,条件弱化了。所以,得到的结果不是抛物面与平面的交线,而是抛物面以及平面的组合。

(2)解出每个方程的根,然后令这些根之间相等

这种方法是典同学给出的。比如,每个方程都假设y是已知量,用y表示x。解出x以后,两个方程的x相等。这在几何上的意义就是两个方程的x和x、y和y一一对应的分别相等。

这一方法的实施,即下文提到的“引入参数方程”。

(3)换个维度

如果从线性代数的角度看,所有的方程组都是更高维度的方程。这是数据与统计学院LBH老师在去北京的夜车上听完我的问题,第二天肯德基早餐时给出的方案。这一方案不适合于我的原因是,这样的高维方程不能写成三维齐次坐标系的矩阵形式。

(4)引入参数方程

教材和网上不少贴子都提到,把其中一个面写成参数方程形式,然后把x,y,z代入另一个方程。参数形式与隐函数形式联立的含义,相当于两个方程联立,解出一个方程。在方程1中的(x1,y1,z1)与方程2中的(x2,y2,z2),具有关系 x1==x2 && y1==y2  && y1==y2。

这一方案的问题是,在这时我已经得到了典同学给出的对“抛物线的正等测投影解析解”的答案,是用参数方程。他的方法从最开始就用参数方程表示抛物线,然后把抛物线乘以正等测变换矩阵。如果从一开始我就用了参数方程,就不会绕路走这么复杂的隐函数路线。走隐函数路线的一个原因,正是希望不用参数方程得到解析式——或者证明这条路线是不可行的。如果再回到参数方程,就相当于此路不通,不过从头就用参数方程。

(5)各种交线投影

网上不少资料,如[https://www.wesiedu.com/zuoye/6686898241.html],把投影视为一种特殊的运算。这时,不必给出方程组的矩阵形式,接下来也不用矩阵表示变换。这些投影的特殊之处在于,只需要把某个坐标的值改为0。比如向XOY投影,就是Z值变为0。这一方案的问题在于,违背了我们最初的一个动机,希望得到更一般的形式。GYB同学的方法,用四点表达圆锥曲线,我希望作为单独的路线,原因也在于此。因为GYB同学的方法只特别的对圆椎曲线有效,就像投影的方法只对投影有效,不具有更一般的意义。从工程的角度,对于跳一跳,数值解查表法足够了,并不需要解析解。

(6)只画线,不求解方程组

网上不少资料给出了画线的方法,但是并不解方程组。接下来原本的计划是想用矩阵形式表达方程,然后用矩阵做变换。只画线而不得到方程,不满足要求。

这样的资料如[https://mathematica.stackexchange.com/questions/5968/plotting-implicitly-defined-space-curves],

以及[https://www.zhihu.com/question/27820638]。

4.10 投影

这一小节,是从计划时就给了的,就像小学老师要求写作文时列大纲。只是因为上一步无法完成,这一步就无法抵达。

仍然保留这一小节的意义,是希望展示 技术路线的实施是以计划为前提的,而不是走一步看一步,走到哪算到哪。

5. 障碍小结

RH同学提到过某个项目非常快的失败了,挺遗憾的感觉。在我看来,项目能快点失败是件好事,避免消耗更多的资源,如果最终仍然会失败的话。工程是以逐利为目的,这是工程上纯功利的看法。如果会失败,请尽快。除此以外,失败的项目才是主流,大多数项目都或多或少失败了,而完成成功的非常少。这些失败带给我们的教益,远比成功要大。即使你按成功的项目的方法再来一次,也不见得成功。但是你按失败的方法再来一次,一定失败。所以对于失败的认识非常可靠,可靠地指导我们未来的实践。

因此,知道卡在哪里,因何而失败,需要解除哪些障碍才能继续。这些总结非常重要。

5.1 隐函数变换的结果是0==0

这是典同学否定隐函数的第二个原因。第一个原因是他不喜欢。

如果变换是不可逆的,在变换中会出现变换结果为方程左右两边都是0,从而方程不再是对未知量的约束。这种情况下,变换的结果不再是方程,所以就做不下去了。我通过改变旋转方程绕过这个问题。即为变换做了特定的参数约束,保证可以继续推算。

5.2 变换所得2个曲面的交线是方程组,不能得到隐函数据的矩阵表示

这个障碍我没有绕过。除非使用参数方程,我无法得到隐函数的矩阵表示。因为我打算只使用隐函数解决这一问题,如果使用参数方程就证明我的路线不行,所以这一路线就此搁浅。

6. 致谢

刘典先生

没有他的帮助,我们极大可能无法解决这一问题。后来,我们沿着他指导的路线继续,放弃了本文尝试的方法。

GYB同学

他具体尝试了我的错误路线和刘典的参数方程路线。他告诉我需要更多了解卡住的细节、进度,以及在沟通方面我仍需努力。

DQT同学

她描述需求,给出需求对问题的约束,还提供了棋子小人翻着跟头在正等测空间中划出的抛物线。

LDT同学

他尝试给出垂直平面的直角坐标系上的二维分解,使我明白三维视角、正等测视角的解释是个艰难的问题。

7. 参考资料

[1]孙家广: 计算机图形学(第三版),清华大学出版社

本文中所有“教材”二字,均指此书。

[2]GYB同学分别给出的数值解和解析解求法

[https://www.cnblogs.com/gaoyb348/p/9032907.html]

[https://www.cnblogs.com/gaoyb348/p/9042867.html]

[https://www.cnblogs.com/gaoyb348/p/9074304.html]

[3]当你说不行时,你应该说些什么:以Android播放midi为例
[https://blog.csdn.net/younggift/article/details/6922905]

[4]郭绍仲.轴测投影变换矩阵的研究[J].工程图学学报,1989,(2):17-24.

[5 ]计算机图形学 学习笔记(八):三维图形变换:三维几何变换,投影变换(平行/ 透视 投影)
[https://blog.csdn.net/jurbo/article/details/75041230]

------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

//[http://blog.csdn.net/younggift]

//[http://giftdotyoung.blogspot.com]