大明官员的晋升标准

几年来,一直给儿子讲中国历史当做睡前故事。最近讲到明末,又是一个波澜壮阔的时代。明朝灭亡的原因太多了,它的经济、军事、政治等等全都腐朽不堪。其中一些弊病,在现今的公司企业中依然非常常见,比如明朝官员的晋升标准跟现在公司的晋升标准也很有类比性:

大明的开国时期就好比是公司的创业期,这时候官员升迁的主要依据是战功,英语叫 Impact。消灭了多少敌人,抢了多少战利品,圈了多少土地,都是容易量化的指标。所以这时候的升迁标准还是比较客观透明的,员工们的积极性也最高。

等明朝坐稳了江山,就好像一个公司已经占满了市场份额,很难再有攻城略地的机会了。再要建功立业,只能自己创造伪需求,比如养寇自重。公司也是一样,很多客户反馈的问题,改几行代码就能修好的,但会干活的领导是不会直接解决问题的,今天研究研究这里吹一吹;明天那里吹一吹,都是 Impact。当所有主要的量化指标都无法再提高,功劳大小就完全靠领导的主观判断。员工最重要的能力也不再是干活,而是吹牛,能吹到领导信服的就是业绩。甚至可以更直接一点:拍领导马屁。明朝吹牛的主要形式是写文章,青词宰相严嵩是这方面最杰出的代表;现代企业不流行写文章了,更看重把 PPT 讲好。其实这时期也还好,能吹的不见得就不能干,吹牛上位的人中也会出现个把带领国家中兴的牛人。

等大明王朝再进一步发展,所有重要的位置都已经被那些善于吹牛的人占据了,下面的人再想靠吹牛拍马晋升都没门了。唯一出路只能是把别人搞掉,这之后,大家拼的就是给别人挑刺的能力了。于是多做多错,少做少错,凡是想真正做事的人都会被对手揪住小辫子干掉。再也不会出现力挽狂澜的人了。

广告

美国的小学

儿子今年小学毕业了,在他就读小学期间,我对美国的小学教育也有了更深入的了解。这篇文章记录了我的一些感受,主要是对比了我儿子的小学阶段和我的小学阶段的一些差异。

十年前,我决定搬到美国。当时这个决定并不容易做,因为我已经在国内工作了十多年,年龄也相对较大。与刚毕业的学生相比,我出国不仅面临的困难更多,机会成本也更高。我当时认真权衡了很久,其中一个促使我下定决心搬到美国的原因就是儿子的教育问题。那时儿子才刚刚出生,但已经可以看出来他的性格有很多方面与我很相似。回顾过去,虽然童年记忆总是那么美好,但我对自己的中小学也有一些不满意的地方。

在我的学生时期,我最不满意的两点是:一是我觉得老师普遍倾向于在成绩优秀的学生身上投入大量精力,对待学习较差的学生常常只有粗暴的批评。我作为后者,没有得到足够的关心和帮助,而且在批评打击下形成了自卑的性格。第二点是,当我上大学之后,通过阅读各种书籍资料,了解了更多历史细节后,发现我小时候的教科书中居然还有很多谎言。这两点,都是我希望可以避免发生在自己孩子身上的。

到儿子出生时,我对国内中小学教育又多了个新的担忧:内卷的太厉害了。为了上一所好大学,就必须进入重点高中;为了上重点高中,就必须进入最好的初中、小学;为了上好的小学,幼儿园就要学会小学的授课内容;而且还必须多才多艺,参加各种辅导班和竞赛才有希望。看着周围朋友的孩子,在这么小的年纪就几乎没有时间和小朋友一起玩耍了。我既不忍心鸡娃,又很担心儿子被淘汰,只能考虑带他离开这个环境。

儿子出生前,我来美国出差过几次,断断续续住了也有一年时间。虽然那时候没太关心教育问题,但多少从同事那里听说了一些美国的教育方式,感觉美国的教育体系更符合我的理念。所以我还是决定让儿子来美国接受教育。

学制

美国实行的是 13 年义务教育;中国是 9 年制义务教育。美国的中小学一共包括十三个年级,被简称为 K12。其中 K 是 kindergarten(学前班)的缩写,是义务教育的第一年,后面 1 ~ 12 每个数字代表一个年级。在美国,小学和中学的划分并不统一,每个镇都可以自己决定。最常见的分法是小学包括 K ~ 5 年级,初中包括 6 ~ 8 年级,高中包括 9 ~ 12 年级。美国小朋友一般是 5 周岁开始上 K,中国小朋友一般是 6 周岁开始上一年级,中国的六年制的小学基本上就对应美国的 1 ~ 6 年级,初中对应美国的 7 ~ 9 年级。

国内学校通常每学年包括两个学期,学期之间有寒假暑假两个长假。美国这边也会把一学年划分成两三个学期,但是由于没有寒假,或者说没有很长的寒假,学期之间的界限不那么明显。我所在的美国东北部地区,新学年的开学时间与国内比较接近,一般在八月底九月初。圣诞节和元旦之间会有一段约 10 天的节日休假,大多数学校还会在二月至四月之间放一到两个为期一周的冬假或春假。美国的暑假比较长,能有两三个月。

美国学校的班级安排方式也与国内很不一样。首先,国内的班级都比较大,最新的要求是每班不超过 45 人,但我上学的时候,每个班级都有 60 多人。美国小学的班级一般只有20人左右。其次,在国内,一个班级,如果没有特殊情况是不会被打乱的。整个小学阶段任课老师和同班同学基本上是稳定的。儿子上的小学,不但班主任老师每年换,同学也要每年全部打乱再重新分班。儿子所在的年级有将近一百个小朋友,六年小学过后,几乎每个小朋友都曾经同班过了。这是我非常满意的一点。小朋友不但可以接触到更多的老师和同学,而且不用担心遇上一个不喜欢的老师要忍受整个六年。另外还有一个很大的不同点,美国的小学除了音乐艺术体育图书馆这些专业科目之外的所有课程(阅读、写作、数学、科学、社会学等)都是班主任老师一个人教的。儿子进入初中后,班级的概念跟国内差别就更大了,因为已经没有固定教室了。每个学生要根据自己所选的课程,去到不同的教室里上课,跟大学比较类似。因为没有固定教室,美国中学的走廊里摆满了储物柜,给同学们存放物品,这也成了影视作品里美国中学的一大特色。

国内这种稳定的班级也有好处,同学之间的关系比较亲近。尤其是同桌之间,每天坐在一起,感情比一般同学更好。美国这边没有同桌的概念了,每个小朋友都有一个独立的小桌子。老师常常会把几张小桌围成一圈,方便同学分组讨论问题。这种小组也不稳定,会经常变动。

私立学校

虽然公立中小学都是免费的,但还是有很多人会优先考虑收费的私立学校。美国从幼儿园到大学都有私立和公立之分。儿子上了镇上的公立小学,所以我对私校了解有限,只能大致介绍一下。一般来说在同一区域内的私立学校在软硬件各个方面都会优于公立学校。这也好理解,私立学校是要直接从学生那儿收取学费的,如果办不好,那学生们还不如去免费的公立学校。美国的大学不属于义务教育范畴,即便是公立大学也要收学费,所以大学的私立公立之间的差距反而还小一点。但即便是中小学,也只能说同一学区内的私校会好于公校。很多好学区的公立学校,比一般学区的私立学校还要好的多。

私立学校有很多不同类型和档次的。最高级的,是一些俗称的“贵族学校”,每年学费要六万美金以上,而且还需要家长、校友和社会各界的大量捐款。顶级私校常常也不是交钱就能进的,私立中学的申请录取与大学非常类似,需要准备标准化考试,申请文书以及面试等。学校不仅要面试学生本人,还要面试家长,挑选符合学校教育理念的家庭的学生。普通私校,如果是走读的,学费可以便宜很多,一般在每年两万以上。更便宜一些的是教会办的学校,主要由教会出资,也算是私校。但是在这种学校里,难免会接触传教,无信仰或者有不同信仰的家庭可能不愿意把孩子送到教会学校。

中国私立学校相对来说占比要低的多。国内比较好的私校主要是为外国人或者为准备出国的学生开办的。中国人一项重视教育,舍得为教育花钱,在中国开办私立学校是不愁没有市场的。不过,在国内,教育的最主要目是为了维护政权稳定,为了宣传意识形态。国家是绝对不会放松对教育领域的控制的。国家一直不太鼓励私人办校。我听说近几年,政府开始要求上海不错的私立学校统一教学大纲,放弃入学选拔而改为抽签等等。这些政策都是不利于私立学校发展的。

公立学校

公立学校不但没有学费,也没有书本费,因为美国学校一般没有教科书。学生可以在图书馆借阅参考书。说句题外话,美国的图书馆系统真的很发达,每个镇每所学校都有自己的图书馆,而且是全免费的,多个图书馆联成网络互通有无,可以借到无穷无尽的书。美国的教育对阅读非常重视,小学生可以没有书面作业,但阅读却是每天必须要有的,因此这边孩子的阅读量普遍要比国内大的多。儿子从幼儿园到现在读了很多书,全是得益于便利的图书馆。这也是我对美国最满意的方面之一。

公立学校虽然便宜,但教学质量真的是良莠不齐。美国跟中国一样,学区之间差异巨大,好学区房也是贵的要死。美国对于中小学,有一套评分机制,从 1 分 到 10 分,这是华人买房的重要参考指标。很多华人非常执着的要选 10-10-10 学区,也就是小学、初中、高中都是 10 分的学区。就算没那么执着的,也很少有人会选择去一两分的学区定居。曾经听某个有经验的同事讲过,在 1、2 分的小学里,老师的主要任务是防止男生违法犯罪、女生意外怀孕。按我的标准,7 分以上的学校就算是好学校了。

我所居住的马萨诸塞州波士顿地区,历来是美国教育最好的地区。国内可能只知道这里的哈佛和麻省理工,但其实不止大学,麻州的中小学教育在美国也是最好的。我在儿子上学前又特意搬到了一个比较好的学区定居:莱克星顿。这可能是唯一一个在中国也极具知名度的美国小镇。在我上中学的年代,有一篇课文叫做《莱克星顿的枪声》,讲述了美国独立战争是如何从这个小镇开启的。莱克星顿是个华裔比例非常高的社区。就整个美国来说,华裔人口比例只占 1%;但儿子学校的同学中已经有将近 ¼ 的华人了。镇上的居民,不论是作为新移民的亚裔还是已经在此生活了几十年的白人,对孩子教育都非常重视。

这种学区概念,表面上中美两国非常相似,但实际上有个本质区别:学校的钱从哪来。公立学校当然是国家出钱,但在美国,这些钱是有确切的出处的:中小学经费主要来自于学区当地的物业税。我所在的镇上,房屋售价的中位数超过一百万美金,物业税的年税率大约是房价的 1.5% 左右。也就是说在镇上花一百万买房的话,每年还要在缴纳 1.5 万左右的物业税。这些钱中很大一部分都被用于教育了。我有一次看到镇上公布的财政数据,镇里每年要为每个小学生投入 1.8 万美金。这个钱数已经跟主流的私立学校的学费差不多了。

中国目前还没有物业税,学校的花费由国家统筹拨款。理论上,国家统筹应该比每个学区自己收税的制度更容易调节贫富差距,比如可以把更多的钱给拨给贫困地区的学校。但实际上,中国教育资源的集中度反而更高。那些有权分配资源的人,一定会把资源优先分配到对自己最有利的地方。

我小时候,学校总是会提:要把学生培养成“德智体美劳”全面发展的人才。现在可能有新口号了吧,不过我还是按照这五个传统的方向来比较一下中美两国的区别吧。

规范孩子品行、树立三观等都可以归为德育教育,中美在这方面都非常重视,都会把品德排在各个教育方面之首。两个国家都很强调一些传统的美德,比如热爱祖国、扶助弱小、维护集体荣誉等等。我主要介绍一些不太一样的地方。

之前,我以为美国推崇自由,对孩子的行为应该会更放任一些。但后来从儿子以及周围朋友孩子的经历来看,美国学校对学生行为的要求,在某些方面甚至比国内更严格,比如是否听从指令、能不能集中注意力、对待同学是否友善等等。老师的观察还是挺仔细的,有一次老师发邮件说观察到儿子频繁使用消毒液擦桌子,问我们是不是儿子对于新冠病毒太过紧张了。我开始还有点纳闷,儿子一向不怕脏,怎么可能担心病毒。问了他才知道,这个熊孩子在课桌上发现了一个小洞,想试试看能不能用消毒液把洞堵上。儿子还有收集废品的习惯,比如在家里,有时候,他会把玩具、食物等的包装盒、塑料袋等都收藏起来,不许我们扔。老师也发现他在学校收集了很多回形针、便签条之类的小物品,告诉了我们。儿子跟我们说他收集的都是别人用过后扔掉的物品,但我们还是让他改掉了这个毛病,否则被老师误以为是在浪费公共物品就不好了。

我小时候开家长会,都是整个班级的学生家长在一起开的,老师会公开表扬一些学生,也会公开批评一些学生,主要依据就是学习成绩。好学生的父母去家长会就会特别有面子,而我妈跟我说,她非常讨厌去给我开家长会,因为老师从来不给她好脸色看。在美国就会比较重视隐私,家长会都是老师跟每个学生的家长单独开的。一般每学期一次,每次二十分钟。

除了家长会,如果孩子做了“坏事”,美国的老师也是会直接跟家长告状的。儿子的老师也跟我们告过状,我印象比较深的有几次:

有一次上课使用电脑,儿子没听老师的指令,打开了一个不相关的网页。并不是什么不好内容的网页,但老师还是非常重视,不但告诉了家长,还告诉了校长,儿子给校长写了检讨书。还有两次是因为儿子在教室的墙上、地上乱涂乱画。

儿子虽然调皮,但脾气还算好,老师每次批评,他都乖乖认错,所以老师一般只是通过电子邮件告状。儿子班级里也有小朋友不服老师管教的,比如被老师批评后,把文具摔到地上。遇到这种情况,老师会把家长叫到学校,当面交流。甚至还会让家长把学生领回家,反省几天。

美国学校也有要求比较低的行为,比如我小时候上课的时候是要求手背在后面,笔直坐着的。但美国上课没什么要求,怎么坐都行。

上面提到的都是对个人行为的要求,在思想教育方面,美国美国宣扬的价值观和中国的还是很不一样的,比如,美国特别强调社会的多样性。多样性体现在很多方面,比如种族、性别、是否残疾等等。

美国社会经常被人诟病的一点是种族歧视,这是事实。但实际上中国在反对歧视方面做的还不如美国,中国的地域歧视就一点都不比美国的种族歧视轻。在中国,招聘广告中经常会看到比如:“男性、四十岁以下、城镇户口、四肢健全、五官端正、口齿清楚”之类的要求,大家习以为常,但这些在美国都属于歧视,如果那个公司在招聘广告里提了这些要求,是会被起诉的。

美国学校提倡的多元性不仅只是口说,也会用实际行动来教育学生。比如种族多样性这一条,我居住的镇上的居民中,主要是白人,近六成,和亚裔,超过四成。其它族裔的人口非常少。为了让学校学生的种族更多元,学委会特地去非洲裔集中的学区找了一些愿意来我们这里上学的非洲裔学生。镇里有免费的校车接送这些学生。

中国一般学校里几乎看不到有残疾的学生,他们需要去专为残疾人开设的学校。美国这边,残疾学生通常与普通小学生同校上学。我所在的镇有六所小学,他们之间有一些分工,比如有的学校负责聋哑学生,有的负责肢体残疾,有的负责智力发育缺陷学生等。儿子上学期间有几年跟两名有先天发育缺陷的同学在同一个班,那两名同学无法行走,平时只能坐在轮椅上,与人交流也非常困难。那期间,班级里除了班主任老师,还有另外两位老师专门负责照顾两名有缺陷的同学。

这样的学校环境对于培养儿子正确价值观是非常有利的,他曾经跟我说过,班级里有一些同学和他多数其他同学都不太一样,但是不应该因为他们不一样就排斥他们。儿子跟其中一名有缺陷的同学还成为了好朋友,经常一起玩。

这是我唯一觉得国内教育优于美国的方面。虽说我不太赞成国内的鸡娃做法,但是美国这边的要求也确实是太低了。

我小时候特别讨厌上学,总是盼着放假,甚至有时候生病了,想到可以不去上学都觉得不那么难受了;但是儿子非常喜欢上学,有时候我们想安排个长途旅行,如果耽误了儿子上学,都会被他否决。一个重要的原因是,儿子在学校里没有感受任何压力。整个小学阶段,都没有家庭作业,也几乎没有考试。偶尔有一些考试,考试成绩也是隐私,不可以用来给学生排名。比如麻州每年有一次标准化考试,这个考试成绩是给学校评分的重要参考。考试的成绩由考试机构直接寄送到每个学生的家里的。每个人可以看到自己的成绩,但老师和其它同学是无法得知自己的成绩的。有一些考试必须要有排名的,比如学校要搞一个竞赛之类的东西,这时候,学校会让每个学生给自己起一个只有自己知道的代号,然后用这个代号公布成绩,没有真实姓名。这样每个人也还是只能知道自己的成绩和排名。

美国的班级因为学生少,相对来说,每个学生都可以得到更多的老师的关注。不过一般来说,老师会花更多时间在学习比较差的学生身上。儿子经常跟我说,他学习非常好,所以老师不太管他,很多时候让他在图书馆找书看。而班级里有几个同学单词还拼不出来,加减法还算不明白的,老师就每天盯着他们。

儿子的学习嘛,就算是跟美国同学比也并不算特别好。但是在美国这里,一向以鼓励教育为主,不管是什么简单问题,如果答出来,老师都会“太厉害了”,“真能干”之类的一通夸,再加上没有考试排名,搞得每个小朋友都自信心爆棚,都觉得自己是班级里最好的学生。

这种可能是有好有坏吧。好处是童年真的很幸福,也有利于树立自信心。我作为国内培养的差生,是被老师骂大的,容易自卑。但儿子却超级自信,觉得自己什么都能干。

当然,缺点也是非常明显。来美国之后,我才意识到,即便我带儿子离开了鸡娃的环境,也无法令我摆脱对他未来的担忧。我非常担心内卷会不会被输出,将来美国社会竞争也会越来越激烈。儿子现在生活的这么安逸,将来适应不了竞争的环境可怎么办?听着夸奖长大的小孩,如果在社会上得不到认同,会不会心理落差太大,产生心理问题呢?总之,我也是个非常矛盾的人:如果儿子课业重,就担心他不快乐;如果他很安逸,就有担心他将来不快乐。

上面说的是我儿子小学的情况,但是美国是一个非常多元化的国家。我儿子的学校有一定代表性,却不能代表所有学校。我来美国之前,我以为美国所有的学校都这么轻松的,接触的多了才发现并不是的。也有一些学校,尤其是私立学校,对学业的要求是非常严格,他们的作业量和竞争程度都不亚于国内学校。另外,美国社会对儿童格外的宽容和照顾,但随着孩子年龄增加,社会对他们的期望会迅速增加。别看小学这么轻松,等到了中学,即便是公立学校,也都开始有作业和考试了。顶尖的高中和中国的高中内卷程度也没太大差别,很多最好的公立中学也要考试择优录取(比如波士顿地区最好的公立中学:拉丁中学)。听一个朋友说他的侄女考上了加州一所非常好的高中,之后不论节假日,每天学习到凌晨两三点才睡,即便如此也只是保持住在班里排名中等的学习成绩。

在美国,如果只考虑比较好的学校,那么从小学到大学,学习负担是逐级加重的。在中国,我当年上学的时候,对于大多数同学来说是高中最累,大学最轻松。

体育教育方面,美国做的远远好于中国。在美国,多数小朋友们除了上体育课,还会参加一两个运动队。美国的体育运动类型丰富多彩,很多国内十分小众的运动这边都非常普及,比如滑雪、高尔夫、击剑等等。不过,美国最最流行的也还是常见的几大球运动。我儿子上学之后尝试了各种体育运动,最后选择了冰球,成了持续时间最长的体育项目。我觉得具体玩哪一项体育运动并不重要,重要的是两点:第一,养成终身体育锻炼的习惯,身体是革命的本钱,要是没有健康,其它的就都不重要了。第二是可以通过集体活动培养与人相处和团队合作的能力。  

相比起来,中国学生太缺乏体质方面的锻炼了,身体素质跟美国小朋友完全无法相提并论。时常会听说一些年轻人过劳死的事件,这一方面是因为在中国很多企业里压力太大,另一方面也是因为太多人缺乏锻炼,身体素质不行。

对于我自己的儿子,我也是觉得身体健康远比学业成功更重要。所以,尽管我觉得他数学太差,但还是宁愿让他花更多的时间参加体育运动而不是做题。

这一类包括所有艺术相关的教育,主要有美术、音乐、戏剧等。我个人觉得艺术的重要性远没有体育那么重要。一个人要想身体强壮,只看看别人比赛绝对不行,必须亲身参加锻炼。但是艺术吗,这世界绝大数人不会作曲,不会绘画,不懂戏曲,但是对生活没有任何影响。除非将来从事相关专业,否则好一点,坏一点,都没有太大影响。我儿子对于艺术也确实没什么兴趣,所以除了学校的相关课程,我就没有给他报名任何其它活动了。美国小学在艺术方面的教育也比国内好很多。尤其值得一提的是儿子学校里的音乐课,儿子比较幸运,遇到了一位非常优秀的音乐老师:不但专业水平极高,还对待教育事业充满了热情。他的老师有一年还差一点获得了全国的格莱美音乐奖教育奖。学校每年都要组织一次合唱会给家长听,我每次都去。儿子他们每次唱的都是老师自己作曲的歌,非常好听。学校里还会教授几种乐器,儿子毕业时,已经可以用大提琴拉一些简单乐曲了。想我当年在小学最多也就碰过三角铁之类的乐器。

国内现在很多家庭也开始卷艺术和体育了,但多数人都是出于升学加分的目,没有太多考虑孩子兴趣,功利性还是太强了。 

无论中国还是美国,小学阶段的劳动都不算多,主要也就是给教室打扫卫生之类的。上中学之后可能才会多一些。

我上中学的时候,学校安排了一些额外的体力劳动。当时学校种葡萄,冬天需要盖树叶防冻,于是满大街收集落叶就成了每个学生秋季的固定任务。我当时在黑龙江,收树叶的时候,经常地上的水都已经上冻了。那时候没有除雪车,我们也要负责清理学校附近道路上的积雪。这些劳动对于学生来说都是非常好的锻炼,但是不知道现在国内的学生还有没有这些劳动项目了。

在美国,小学生通常不需要什么劳动。但是,当他们升入中学后,就需要参加更多的社区活动,这是申请大学的必要条件之一。中学生最常见的劳动项目包括:组织更小的小朋友们的集体活动、通过清洁车辆或销售商品等方式为学校和公益基金筹款等。我小时候学校组织的劳动,是直接为学校或社会做贡献的,不会涉及到钱的问题。美国学生的劳动虽然也是公益性质,但通常需要先换算成钱,在把钱捐赠给相关机构。比如擦车,学生们为客户擦车,收取客户的佣金,再把佣金捐赠给学校。学生们在这一过程中还同时了解了劳动和钱的关系,也是一段非常宝贵的经验。

《我和 LabVIEW》更新总结

大约去年这个时候,我把《我和 LabVIEW》这本书做成电子书发布在了网站上。当时已经计划每年会做一些更新,今天回顾了一下这一年来的改动,实际上改进的内容比我预估的还更多一些。

刚开始做准备的时候,我担心我的 LabVIEW 编程技术已经忘光了,也担心这十年来 LabVIEW 变化太大,打开之后都不认识了。但后来发现,我开始的预计都有些太悲观了。我的编程技术确实退化了,但基本的方法都还记得,恢复的很快;LabVIEW 也并没有太大变化,基本操作几乎一模一样。

变化比较大的是网上的中文资料。10 年前网上关于 LabVIEW 的中文资料少得可怜。但现在,无论哪一方面都能搜到一大堆资料,而且很多资料的质量也是相当高的。这些年也有不少关于 LabVIEW 的中文书籍出版,网上评价也不错。如果我在国内的话,肯定当时就买来看看了,不过现在人在国外考虑到运费,嗯,还是等下回回国再说吧。

再有,就是近几年视频逐步崛起,成了网上最重要的知识分享方式。但是考虑到我个人还是会继续以文字加图片的方式分享自己的编程经验。这主要是因为视频制作要花费更多的精力,如果我有时间,还是倾向于增添更多的内容。另外,就是我分享的很多东西也不是太成熟的,发布后还会经常改来改去。文字改起来非常容易,视频要改其中部分内容就麻烦多了。

在搜索 LabVIEW 中文内容的过程中,我还特意尝试用了很多国内的搜索引擎,结果大失所望。百度是国内市场占有率最大的搜索引擎了,先不说它垃圾广告的问题,单说搜索质量也是十分差劲。搜索一些技术内容,返回的常常都是灌水文,最后只能换回 Google。

相比起写纸质书,我还是更喜欢这种类似博客的电子书发布方式的。最主要的原因是可以及时和读者交流。从读者的反馈和问题可以直接了解到自己那里写的不清楚,甚至写错了,然后可以及时纠正。除了读者留言,我还使用了网站统计工具来查看这本书被阅读的情况,工具可能并不精确,但大致可以反应读者的分布。

首先让我觉得比较吃惊的是,这本书最大的流量来源是 Google,尽管在国内无法直接访问 Google。这一说明了搜索引擎对一个网站的流量作用极大,可惜的是,国内的一众搜索引擎都不能搜索我的网站,可能是歧视我没钱买关键词吧。唯一一个我发现能搜索我的网站的国产搜索引擎是 https://fsoufsou.com/ 。也试了一下用这个网站搜索技术文章,比百度的结果好太多了。可惜它的用户量太少,几乎可以忽略不计。希望这个搜索引擎能继续坚持做下去。

除了 Google,比较多的来源网站是知乎和微信。知乎上网友的推荐贴给本书带来了不少流量。微信的对话和群都是封闭的,而我又不在任何群里,就无法得知网友们都在讨论啥了。

再有就是发现绝大多数读者关注的还是基础内容,而不是 LabVIEW 一些高级用法。除首页外,访问量前五的章节是《数值和布尔数据》,《Hello World 程序》,《图形化显示数据》,《什么是 LabVIEW》,《数组和循环》。除首页外,Google 点击页面的前五分别是:《图形化显示数据》,《界面设计实例》,《什么是 LabVIEW》,《安装 LabVIEW》,《事件结构和程序界面》。深入一些的内容比如性能优化,面向对象等访问量比起基础内容零头都不到。我想想也是有道理的,那些比较高级的用法,可能并不是看看书就会用的,最好还是要有交流,有个专门的人来指导一下。相反写书的话更适合介绍一些基础知识。所以我也调整了自己的更新维护计划。今年上半年的时候,我重写了整个面向对象一章,也是为了让零基础读者能更容易理解。后来,就把主要时间用来从头更新那些基础章节了。

AI 的梦境 1 – 绘画流派

我喜欢让 AI 自由发挥,胡乱画一些东西,画一些现实中不存在的,甚至完全没有的东西。当然,大多数这类画作都是模糊一团,但也有一些挺有意思的。我把他们大致归类了一下,贴出来。

这个帖子里的画作都还不算太远离真实世界。它们看上去更像是某种艺术流派的作品,我对绘画艺术一窍不通,都不知道有哪些流派,只是感觉这些 AI 画作类似某些艺术作品。

我很喜欢这个创意:把头发和烟雾融合在了一起
这算是近视眼流派
直线画不直派
这个有点海报的感觉
降临派?
小镇街角
老城区
健身房
旧时代

查理十世

旅法学者赵越胜对兰西国王查理十世的一段评价:

我们在历史中见过不少领导人,他的知识结构、文化水平、政治判断力和价值选择,会停留在青少年时期的某一阶段。然后不管他活多久,也不管世上发生多少变化,他都表现为某一时刻的僵尸。如果有某个机缘,让他登上大位,他一定会从他智力、知识发展过程中停止的那个时刻去寻找资源,构造他的政治理念、价值选择和治国方略。这种人的性格一般都执拗、偏执,并且愚蠢地自信,愚而自用,以为他捍卫了某种价值,能开辟国家发展的新方向。其实,他们往往穿着古代的戏装,却在现代舞台上表演,像坟墓中的幽灵突然出现在光天化日之下,人人都知道他是幽灵,他却以为自己是真神。但是,他选择的理念,推行的政策,无一不是发霉的旧货。

AI 生成的一些图片

这几天在电脑上运行了 Stable Diffusion 玩了玩。这是我正的测试页面:https://qizhen.xyz/genimg

这个模型比 Dall.E 的小很多,所以才能在配置不高的个人电脑上跑。而且,我的电脑也只能勉强生成 512*512 的照片。虽然效果可能不如专业网站用的大模型,但有些作品已经很逼真了。我主要试试了生成真实人像以及和二次元人像之间的转化。Diffusion 模型不太擅长逼真的人像,程序生成的人像使用 GFPGAN 改善过的。在人像中,个人感觉这个模型最擅长生成白人年轻女性的照片。我也尝试了让它生成一些中国人的照片,但感觉都不是那么美,实际上多数生成的中国人照片都看起来比较别扭。很可能是因为它的训练集中就有比较多的白人年轻女性照片,或者也可能是因为我生长在中国,对中国人的面貌更敏感,更容易发觉异常。

先贴两张 AI 生成的仿旧照片,看起来还真挺像真的:

接下来几组图片,都是首先生成了左边的真实照片风格的图片,再根据照片转换成了右边二次元图片:

下面这两组图片是先生成的左边的二次元风格图片,再根据它生成右侧的真实照片风格图片:

可以明显感觉到,生成真实照片要困难很多。可能是因为人脑对所谓“真实”照片更挑剔吧。

下面两组是风景图片,感觉两种风格生成出来的图片区别远没有人像的区别那么大

权力的毒瘾

“于是废先王之道,燔百家之言,以愚黔首;隳名城,杀豪俊,收天下之兵,聚之咸阳,销锋铸鐻,以为金人十二,以弱天下之民。然后践华为城,因河为池,据亿丈之城,临不测之渊以为固。良将劲弩,守要害之处;信臣精卒,陈利兵而谁何!天下已定,始皇之心,自以为关中之固,金城千里,子孙帝王万世之业也。”

秦二世而亡的时候,大家就意识到了,始皇帝这套制度不那么灵验。本来计划是千秋万代的,结果却是断子绝孙。但是,之后的两千年里,各朝各代的君王们还是不由自主的采用了秦制。这在中国接触到西方现代文明之前,也还可以理解:秦制就算不好,也没见过更好的制度啊。没办法,只能那他来修修补补继续用吧。修补妥当,可以有两百多年国运;修补不好,可能比秦朝还短。

两百年前,中国人终于开始意识到世界上还有其他文明的存在,还可以有更好的政治制度。然而,这之后的领袖们依然还是摆脱不了秦始皇的魔咒,处心积虑还是想登基。有人在野的时候,说起民主自由来,比唱的还好听。一旦掌权,焚书坑儒、专职独裁有过之而无不及。我不禁想起了宋美龄评价政敌的一句话:“他们还没有尝过权力的滋味”。这么看起来,权力和毒品倒是挺像的,即便是原本有美好理想和追求的青年,一旦尝过了无上的权利,这世间的一切都立刻就变得索然无味了。唯一能安抚内心躁动的,就只有更大剂量的权力。

《独行月球》

我有一阵子没看电影了,今天比较空闲,看了这部《独行月球》。电影非常一般,不过我发现我有一点跟男主人公一样:我的保险也是在齐齐哈尔上的。

沈腾马丽的巅峰是《夏洛特烦恼》,据说拍成电影之前,这部话剧他们已经表演过无数次了,细节都打磨的恰到好处。估计他们再也不会有动力在一部戏里花费这么大的精力了吧。相比起来,这部《独行月球》基本上没什么好笑的地方。幽默最好是贴近大众生活的,把主场景放到月球上,本身就比较难以让观众共情,又还把主角跟别人都分开了。马丽在戏里饰演冷血严肃的指挥官,完全没有可以幽默的余地。

最后这段炸小行星的情节实在是太烂了,在电影里,只要是个关键炸药包,就肯定没法远程引爆,必须要主角或者配角去手动引爆。我第一次看到这类情节还是在《董存瑞》的故事里面,初次读到确实震撼,感动了好几天。但是再震撼的情节多了也会审美疲劳啊,同样的炸小行星,几十年前就在美国大片里看过了,之后炸地心,炸外星飞船,炸火山,炸月亮…… 数都数不过来,怎么还要用这么烂的梗呢?

Scratch 编程语言 2

很早之前,大约是两千零几年的时候,我曾经看别人演示过 LabVIEW 专为儿童教育,以及乐高玩具开发的特别版本。对于少年儿童来说,图形化编程比文本编程要更有吸引力。可惜的是,LabVIEW 起个大早,赶个晚集。现在再提起儿童教育或玩具领域的图形化编程语言,多数人只会想到 Scratch。

Scratch 是 2003 年才诞生的一个新语言。它能够一出现就挤掉 LabVIEW,迅速占领整个儿童教育领域,主要因为具有以下一些优点:

  • 开源。Scratch 是由 MIT 开发的,它从一开始就采用了开源的策略。儿童使用的编程语言,一个重要的功能是控制各种玩具。反过来说,能被玩具厂商广泛采纳的编程语言,会更容易被推广开来。玩具厂商想把自己的产品与 LabVIEW 结合,甚至直接发布一个定制版的 LabVIEW 成本是非常高的。即便是在工业界,LabVIEW 具有统治地位的测试测量领域,LabVIEW 也主要是与 NI 公司自己的硬件结合使用。玩具行业的利润更低,厂商们自然倾向于便宜的软件。更何况 Scratch 还是开源的,可以很方便的就对其进行改造以适应自己的产品。现在,除了最著名的乐高,很多中国厂商的玩具搭配的也是 Scratch 编程语言,比如小米的玩具。
  • 语法简单。Scratch 的语法与 LabVIEW 有着非常大的不同,它隐藏了更多的编程细节,让初学者可以更容易的入手。LabVIEW 虽然也号称容易入门,但相比比起来, Scratch 才真正算得上是“傻瓜”型编程语言。
  • 采用了更主流的技术。Scratch 是采用了 HTML 5 标准,使用 JavaScript 作为开发语言。LabVIEW 也曾经有过网页版,尽管当时已经可以明显看出 HTML 5 是发展趋势,LabVIEW 却采用了 SilverLight 作为开发平台。后来微软彻底抛弃了 SilverLight ,肯定也会对 LabVIEW 的开发推广造成影响的。

下面是一个具体的示例程序:

这段代码中的积木(一种颜色的近似长方形的一个条形块)分成了三堆,这三堆之间是并行的关系。每一堆积木都从一个事件开始。左边这一大堆是主线程,当接受到用户点击绿色旗帜的事件时开始运行,它在运行过程中会发出一些事件,去启动另外两堆积木。这段程序的主要功能是运行一个循环“repeat 20”,在循环内调用“move”功能,让屏幕上的一只小狐狸(绘制在“costume”里面)向前移动一段距离。同时还让小狐狸发出“喵呜”的声音。

从上面这段程序可以看出来,虽然也是图形化编程语言,Scratch 相比与 LabVIEW 还是有一些明显不同的。

  • Scratch 图形化方面没有 LabVIEW 彻底,它借鉴一些文本编程语言的编程方式,同时在编程时也更依赖文本。编写 LabVIEW 的程序更像是绘图,而编写 Scratch 程序更像是搭积木。
  • LabVIEW 中的基本功能模块多以函数和 VI 的形式存在,它们的外观看上去是一个个的正方形方块。LabVIEW 中的结构的外观会更复杂一些,像是尺寸可变的框架。在 Scratch 中,函数和结构都被称作 block(翻译成模块或者积木),它们看上去都是一个个长条。
  • Scratch 中由于每个积木长得都一样(或者十分类似),它只能用来文字区分不同功能的积木。LabVIEW 中推荐给每个子 VI 都绘制一个有意义的图标,这看起来当然是比 Scratch 的代码美观的多。但是,也有很多程序员非常讨厌这个规范,他们宁可把时间用于改进程序的逻辑,而不是美观程度。
  • 对于程序流程的控制,LabVIEW 使用数据线来控制,按照数据在数据线上的流动顺序来控制程序运行顺序。Scratch 没有数据线。凡是挨在一起的积木,它就是按照顺序从上至下执行每一个积木。没有粘连在一起的积木是可以并行执行的。
  • 因为没有数据线,Scratch 只能使用全局变量来传递数据。
  • 积木使用不同颜色表示不同的功能分类,比如浅黄色的用于发送接收事件;深黄色的用于控制程序流程(比如循环结构,条件结构等);紫红色的用于控制声音,蓝色的控制运动等等。
  • 用不同形状表示不同数据类型,比如数值类型数据放在一个两侧是圆弧的长条里;而布尔型数据放在两侧是尖角的长条里。这保证了程序具有一定的数据类型安全,比如某个积木上有一个两侧尖角的长条凹槽,那么在这个凹槽里就只能嵌入布尔型数据(相当于一个函数,具有一个布尔型的输入参数)。

Scheme 编程语言

Scheme 是第一门我真正系统学习过的函数式编程语言。Scheme 语言的标志是一个 Lambda 字符“λ”,一眼就可以看出这门语言的出处。Scheme 是 LISP 语言的两大方言之一,而 LISP 又是人类开发出的第二款高级编程语言(第一个是 FORTRAN)。

因为太古老,Scheme 的编程思路和现在常见的语言差距还是非常大的。我刚开始接触 Scheme 时的困惑不亚于刚接触 LabVIEW。Scheme 的语法定义是比较简单的,比时下流行的编程语言都简单得多,但毕竟也是一门完整编程语言,不可能写一小段就介绍全面,这里就只能介绍一些最基本功能了。

Scheme 直观上最明显的特点是括号多,它的所有数据(比如列表)和程序结构(比如函数、判断语句)等都被包裹在括号内,因此,一段代码里会有数不清的层层括号。在编程思想上的最大特点就是函数式编程。再 Scheme 程序中,一切都是函数。

在 Scheme 中写 Hello, world 的代码如下: (display "Hello, World!")

在这段中 display 是一个函数,用于在屏幕上打印文字,而后面的字符串则是 display 的参数。单这一句,与常见编程语言的用法差距也不算太大。

在 Scheme 语句中,函数名总是要放在参数之前,运算符也是一个函数。所以,如果要计算 “2+3”,写出来的程序是这样的: (+ 2 3) 。 Scheme 的函数很多是可以跟多个参数的,比如 (max 2 6 3) 或者 (+ 6 4 8) 等等。如果是一组数据,比如一个 list,那么就在括号前加个单引号,比如 ‘(a b c d),这就不再是函数调用,而是一个列表了。

函数的定义一般类似如下:(lambda (x) (+ x 2))。lambda 是关键字,后面跟着函数参数,在后面是函数体。在 Scheme 语句中使用关键字 define 给常量命名,使用关键字 let 给变量命名。函数也可以是一种变量,比如下面的语句就给了新定义的函数一个名字“square”:

(define square (lambda (n) (* n n)) )

Scheme 语言还有一特点就是没有循环,所有需要循环的地方都要使用递归来完成。这和早期的 LabVIEW 正相反,早期的 LabVIEW 不支持递归,所有要用到递归的地方都必须转换成循环。比如,在 Scheme 中计算阶乘,只能采用递归的形式:

(define factorial (lambda (n) (if (= n 0) 1 (* n (factorial (- n 1))))))

我在学习 Scheme 的过程中,最大的收获是把递归彻底弄清楚了。递归有时候还是比较容易绕的,比如把一个列表从头开始归并,和从尾开始归并要采用不同的递归策略。以前都没有深入考虑过,学习了 Scheme 才真正系统的研究清楚了。

Lambda Calculus 编程语言

我刚成为程序员的时候,有一次调试一段 C 语言代码。我一层一层的进入到被调用的子函数中去,想看看一个数据到底是怎么产生的。终于在遇到一个库函数的时候,调试器无法再跟踪进去了。C 语言程序通常会调用很多已经编译好的库函数,程序员只知道这些函数的接口,但看不到它们的实现代码。我知道这是处于效率的考虑,但还是忍不住想,一种编程语言,可不可以不调用任何编译好的库,所有功能都以源代码的形式提供给程序员,方便学习啊。后来进而又想,也许很多关键字,运算符都不是必须提前编译好的,有没有编程语言可以以源代码的形式提供这些关键字,运算符呢?

这些问题,当时也只是一想,没有去研究。多年之后,我在帮老婆做编程作业的时候发现,她们在课上居然学到了这样一种编程语言,叫做 Lambda Calculus。

Lambda Calculus 是一类非常精简的编程语言中的代表。这类语言中还包含 SKI,Iota 和 Jot 等,不过 Lambda Calculus 还是最经典的。Lambda Calculus 小到什么程度呢?只需要用几行文字就可以把 Lambda Calculus 的全部语法描述的清清楚楚,所以这里就介绍一下:

  • Lambda Calculus 中用到的全部字符包括:小写英文字母,英文句号,小括号和一个希腊字母 lambda “λ”。
  • 名字 name:由单个英文小写字母构成,格式为 <name>。 比如 x,y,a 等;
  • 函数定义 function:由“λ”字符跟一个变量名,跟一个英文句号,在跟一个函数体构成,结构为 λ<name>.<expression>。比如 λx.x,这个函数写成数学形式是 f(x) = x;
  • 函数调用 application:由函数定义加另一段表达式构成,格式<function><expression>。比如: (λx.x)a,这表示,把 a 作为参数传递给前面那个函数,运算结果就是 a。
  • name, function, application 又被统称为 expression。
  • 括号用于控制计算的优先级。有时代码里也会加入空格方便阅读。

以上就是这个编程语言的全部语法了。当时的要求是给这个语言编写一个编译器,其中最核心的部分只用了十来行代码就实现了,恐怕很难有比这更简单的编程语言了。可以直观的看出,这个编程语言的一些简单运算规则:

  • λx.x 与 λy.y 是完全等价的,或者可以写成 λx.x ≡ λy.y
  • (λx.x)a 可以简化成 a,或者写成 (λx.x)a = a
  • (λx.y)a = y
  • (λx.(λy.x))a = λy.a

大家已经发现了,这个语言,连循环、判断等结构都没有,对了,这些都要自己编程实现;甚至连数字也没有,加减法也没有,这些也通通都要自己定义和实现。下面就介绍一下如何使用 Lambda Calculus 编写一些基本的功能。

  • 实现多参数函数,这个方法有个专用名叫函数柯里化。比如实现函数f(x, y, z) = ((x, y), z) 可以使用如下的代码: λx.λy.λz.xyz
  • 逻辑运算中的“真”被定义为:TRUE ≡ λx.λy.x。这里对于“真”的定义是:输入两个参数,返回第一个。推算一下 TRUE a b ≡ (λx.λy.x) a b = (λy.a) b = a
  • 逻辑运算中的“假”被定义为:FALSE ≡ λx.λy.y。推算一下 FALSE a b ≡ (λx.λy.y) a b = (λy.y) b = b
  • 判断语句 if,假设我们需要当变量 b 为 真时,返回 t;b 为假时返回 f。那么可以定义 IF b t f ≡ λb.b t f 。 推算一下 IF TRUE t f ≡ ((λb.b) (λx.λy.x)) t f = (λx.λy.x) t f = t ; IF FALSE b t f ≡ (λb.b t f) (λx.λy.y) = (λx.λy.y) t f = f
  • 有了以上的基础,逻辑运算的定义就简单多了,比如:AND a b ≡ IF a b FALSE; OR a b ≡ IF a TRUE b; NOT a ≡ IF a FALSE TRUE
  • 定义数字:
    • 0 ≡ λf.λx.x 可发现 0 ≡ FALSE
    • 1 ≡ λf.λx.f x
    • 2 ≡ λf.λx.f (f x)
    • 3 ≡ λf.λx.f (f (f x) x)
  • 为了方便数字运算还要先定义一个辅助的“后继函数”:S = λn.λf.λx.f((n f) x) 。调用这个函数会得到输出参数的下一个数,比如 S4 = 5。我们可以试一下:S 0 ≡ (λn.λf.λx.f((n f) x)) (λf.λx.x) = λf.λx.f(λx.x f) x) = λf.λx.f x ≡ 1
  • 加法就可以定义为: ADD ≡ λa λb.(a S) b 。 拭一下:ADD 2 3 = (λa λb.(a S) b) 2 3 = 2 S 3 ≡ (λf.λx.f (f x)) S 3 = λx. S (S x) 3 = S (S 3) = S 4 = 5.

以上是 Lambda Calculus 一些最基本的功能,作为一个图灵完全的语言,它能做的远不止这些,其它编程语言能做的,它基本也都可以做。但是我们也发现了,如果一个语言什么预先定义都没有,一切都需要开发者自己从头做起,那么在实际应用中就效率太低了。

Lambda Calculus 的发明人是 Alonzo Church,他有个大名鼎鼎的学生,图灵。Lambda Calculus 对于后来编程语言的发展产生了深远的影响。函数式编程就是受此启发而来。如今,Lambda 函数更是成了主流编程语言的标配。