【CS演义之三】矩阵妹影

55 views
Skip to first unread message

Nala Ginrut

unread,
Oct 29, 2015, 5:55:11 PM10/29/15
to sz...@googlegroups.com

1、模块化编程

这年头的年轻人们熟练地在Go、Python里使用着import/export,虽然他们对模块
的划分可能是一坨屎,但这不妨碍他们吃烧烤的时候喝着啤酒吹牛逼:派松最好
啦,模块化很优雅!旁桌的妹纸们望着这景象只能躲避三分,生怕被这样的人要微
信——她们宁肯被高富帅在陌陌里摇到。

模块化主要是为了解决代码复用而产生的,它包括两个关键点:信息隐藏,关注点
分离——这基本上就是现代软件架构设计的基石。Wirth或许并没有想到,在编程语
言中首次引入module会对将来的年轻人吃烧烤产生怎样的影响,毕竟他对咖啡可能
更熟悉一些。

但是在最初的module设计中存在一个问题,人们发现想要直接按照设计流程图来划
分模块是很蛋疼的,毕竟适合人的抽象离适合机器的抽象是有一定距离的。于是有
人想到一个办法,把整个流程重新抽象一遍再划分模块,相当于二次建模。在这种
方法论中,如何恰当地隐藏信息是关键。

当Wirth面对着Modula2的设计草案的时候,他或许意识到,这个设计必须足够精巧
优雅,因为模块化或许在未来会流行起来。这使得他不得不开始谨慎地思考起
来......

2、妹影

旧金山的某个犹太家庭有这么个女儿,她酷爱数学和编程,这在当时实在是一件不
可思议的事情,要知道那年头美国还没有哪位女性获得过PhD。正如同历史上杰出
的犹太女性那样,她们总是超越一些传统并且显得尤为出色(而这些所谓传统不过
是人为规定或者单纯是没有人想过要违背而已),她们祖上有以撒的妻子利百加这
样足够强壮能在沙漠里提着大瓶子给一队骆驼饮水的美女(利百加的意思是“以美
动人“),貌似不怎么符合某些民族的传统审美。

后来这个女孩如愿进入UC Berkeley学数学,毕业后她认为自己还没找到读研的感
觉,就跑去做了一份编程的工作。那时候她发现她生来就是写程序的料,她如此入
迷,以至于轻松维护起一大堆机器语言写的项目来。

一段时间以后,她遭遇了瓶颈,技能点不够用了,于是她决定去斯坦福读研深造。
“什么?!Computer Science?我们这儿没这专业!“
她大为惊讶,没有计算机科学专业,这算啥破学校?!

“不过我们有计划开办计算机学院,你可以先交钱”
”我没有钱...“
“......“

她沮丧地走到楼梯,一抬头发现一个怪老头盯着她。
反正也不认识,不如问问吧。
“嗨,你有没有钱,我需要交学费”

喂喂,这样跟陌生人要钱好嘛...

“好啊,你当我助教吧,你叫什么名字?“
”Barbara, 全名Barbara Liskov"
“ 好的,我是John McCarthy,他们都叫我John“

多年以后,SZDIY社区有两个成员为了给自己的女儿取名Barbara以纪念历史上第一
个计算机女博士而争执起来,最后他们达成一致,其中一个用Ada给女儿命名。“但
是我二女儿要叫Grace” “嘿,那是我大女儿的名字“ ......

而多年以后,时任Google技术主管的Peter Norvig在一次研讨会上大谈Python,在
此之前他满怀信心走进Google并跟上司商讨如何推广Lisp,得到的答案是“你说的
都很棒,但没门儿”。这时候一个怪老头颤巍巍地举起手...
"Yes, John?"
老头开始缓缓地说出一大堆话来,简单来说,我们可以翻译成这么一个句子“你凭
良心讲,这个叫做Python的语言配得上称为优雅吗?”
"No, John..."
接下来是全场死一般的沉默,没有人发出一点声音,直到John缓缓地坐下。
这就是计算机科学史上最著名的一次沉默,后来就没有人再吐槽Python了,大家只
是沉默就足够了。

3、Queen of the Types

昨晚SZDIY聚会完毕,一个叫小谢的年轻人跟我一路聊到路口,突然他两眼放光地
告诉我,这两天他总算搞懂了类型推导,我不由得微微一笑,哼哼,Types,年轻
人......

如果你身边突然有年轻人准备当架构师,整天给你絮絮叨叨OO设计五原则,并且还
跟你谈什么李氏替换原则,记得问他:李氏的李是哪个李?

李氏替换原则(Liskov substitution principle)简称LSP,说起来很简单,任何
一个型别(type)出现的位置都可以被其子型别(subtype)替换,并且不影响程序运
行。如果你在进行面向对象设计的时候发现子类无法替换其父类,那么这个类的设
计就是有问题的,一直要改到可以替换为止。
LSP提供了一个方法论让开发者能轻松验证类设计的合理性。

当然,像SZDIY这种FP爱好者云集的地方,谁也不会在乎LSP。如果你擅长写
Lisp/Scheme,那么你所写出来的代码基本上都是违背LSP的。那么为啥LSP还对OO
语言有效呢?有人说,LSP毕竟是前人多年经验积累总结出来的,用了必然没坏处
——如果你真这么想,那么你就是在把科学当玄学,因为你并不是真的确定,而只是
推测。
很简单,因为命令式语言有缺陷,所以在实现OO的时候需要有一些方法甚至提出设
计模式来规避这些缺陷,而FP不存在这些问题。而那些在命令式语言中存在的设计
模式,在FP中也有一大半是不需要的——相关文章网上太多了就不一一列举了。
对于LSP而言,在FP中由于并不存在命令式语言中出现的类继承导致的问题,所以
LSP对于FP毫无意义——请随意违背。

哎呀,这个时候不应该提什么FP啊,否则就无法烘托主角的贡献了,显得好像只是
因为恰好碰上了个有残疾的语言所以做了个拐杖并被认为是成就一样...

所以LSP不提也罢,我们回到Wirth的咖啡桌......

4、Abstract Data Type (ADT)

当Wirth为着模块化设计而发愁的时候,他发现了Liskov所提出的ADT。简单来说,
ADT就是一个符合某种需求的占位符,我们无须关心某个类型具体是什么,只要它
符合某个特性就可以了。比如我们需要类型符合FIFO(先进先出),那么就给它抽
象为名字叫T的符合FIFO的某个类型,至于T具体是什么其实不重要,而T在实现上
可以是数组,可以是链表,可以是树,谁也没规定队列一定要用数组实现对不对?
反正你能想办法实现FIFO就可以。

Wirth发现,如果模块不去考虑export什么样的接口,而是考虑export什么样的
ADT,那么二次建模的问题就可以避免。因为ADT暗中限定了可以export的接口,而
这些接口也由于封装在ADT中不会跟其他模块的export产生冲突。

至此,Modula2已经符合了模块化设计,Wirth为编程语言领域所做的贡献居功至
伟。简单来说,他拿图灵奖,就是因为把现阶段人类能想到的编程语言都几乎都设
计了一遍(设计出所有的语言,让别人没有语言可以设计),是个纯粹的语言设计
天才。如果不是Lisp撑着半壁江山,那Wirth早就统一江湖了。

Wirth喝完最后一杯咖啡,是该歇息了,可惜意犹未尽,那半壁江山始终被Lisp牢
牢占据着,难道就没有办法吗?

算了,江山代有人才出,30年前Lisp占尽优势,30年后,90年代和00年代的计算机
领域,搞不好会是我的语言的子孙独占天下呢,谁知道......



DanDan Zhou

unread,
Oct 29, 2015, 10:44:56 PM10/29/15
to szdiy
cooooool

--
--
You received this message because you are subscribed to the Google
Groups "Shenzhen DIY community" group.
To post to this group, send email to sz...@googlegroups.com
To unsubscribe from this group, send email to
szdiy+un...@googlegroups.com
For more options, visit this group at
http://www.szdiy.org
http://groups.google.com/group/szdiy?hl=zh-CN
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Shenzhen DIY community”群组。
要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到szdiy+un...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/d/optout

jo shlain

unread,
Nov 1, 2015, 8:39:52 PM11/1/15
to Shenzhen DIY community
认真看完之后 重点应该是为了黑某谢

Zoom.Quiet

unread,
Nov 1, 2015, 9:37:26 PM11/1/15
to sz...@googlegroups.com
等等,为什么没有 演义之一?!
> --
> --
> You received this message because you are subscribed to the Google
> Groups "Shenzhen DIY community" group.
> To post to this group, send email to sz...@googlegroups.com
> To unsubscribe from this group, send email to
> szdiy+un...@googlegroups.com
> For more options, visit this group at
> http://www.szdiy.org
> http://groups.google.com/group/szdiy?hl=zh-CN
> ---
> 您收到此邮件是因为您订阅了Google网上论坛上的“Shenzhen DIY community”群组。
>
> 要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到szdiy+un...@googlegroups.com
> 要查看更多选项,请访问https://groups.google.com/d/optout



--
Life's Pathetic, Let's Pythonic! 人生苦短, Python是岸!
俺: http://zoomquiet.io
授: http://creativecommons.org/licenses/by-sa/2.5/cn/
怒: 冗余不做,日子甭过!备份不做,十恶不赦!
KM keep growing environment culture which promoting organization be learnning!
屏幕快照 2015-11-02 10.36.44.png

Atommann

unread,
Nov 1, 2015, 10:00:48 PM11/1/15
to Shenzhen DIY Lab
ZQ,

在 2015年11月2日 上午10:37,Zoom.Quiet <zoom....@gmail.com> 写道:
> 等等,为什么没有 演义之一?!

演义之一在下面这个主题的邮件里:
Niklaus Wirth 2008 年还在玩 PIC MCU

--
Best regards,
Atommann

Zoom.Quiet

unread,
Nov 1, 2015, 11:28:52 PM11/1/15
to sz...@googlegroups.com
2015-11-02 11:00 GMT+08:00 Atommann <atom...@gmail.com>:
> 在 2015年11月2日 上午10:37,Zoom.Quiet <zoom....@gmail.com> 写道:
>> 等等,为什么没有 演义之一?!
>
> 演义之一在下面这个主题的邮件里:
> Niklaus Wirth 2008 年还在玩 PIC MCU
>

got them!

请求授权集结转载!

> --
> Best regards,
> Atommann

Nala Ginrut

unread,
Nov 1, 2015, 11:34:10 PM11/1/15
to sz...@googlegroups.com
里面会夹杂许多SZDIY的八卦(这是我决定的写作风格,是SZDIY的文化塑造之
一),最好只转google groups链接(翻不了墙的人就不用看了)
> --


Zoom.Quiet

unread,
Nov 1, 2015, 11:39:58 PM11/1/15
to sz...@googlegroups.com
2015-11-02 12:34 GMT+08:00 Nala Ginrut <nalag...@gmail.com>:
> 里面会夹杂许多SZDIY的八卦(这是我决定的写作风格,是SZDIY的文化塑造之
> 一),最好只转google groups链接(翻不了墙的人就不用看了)
>

好的, 镇社之宝,内部专享!


> On Mon, 2015-11-02 at 12:28 +0800, Zoom.Quiet wrote:
>> 2015-11-02 11:00 GMT+08:00 Atommann <atom...@gmail.com>:
>> > 在 2015年11月2日 上午10:37,Zoom.Quiet <zoom....@gmail.com> 写道:
>> >> 等等,为什么没有 演义之一?!
>> >
>> > 演义之一在下面这个主题的邮件里:
>> > Niklaus Wirth 2008 年还在玩 PIC MCU
>> >
>>
>> got them!
>>
>> 请求授权集结转载!
>>
>> > --
>> > Best regards,
>> > Atommann
>>
>>
>> --
>> Life's Pathetic, Let's Pythonic! 人生苦短, Python是岸!
>> 俺: http://zoomquiet.io
>> 授: http://creativecommons.org/licenses/by-sa/2.5/cn/
>> 怒: 冗余不做,日子甭过!备份不做,十恶不赦!
>> KM keep growing environment culture which promoting organization be learnning!
>>
>> --
>
>
> --
> --
> You received this message because you are subscribed to the Google
> Groups "Shenzhen DIY community" group.
> To post to this group, send email to sz...@googlegroups.com
> To unsubscribe from this group, send email to
> szdiy+un...@googlegroups.com
> For more options, visit this group at
> http://www.szdiy.org
> http://groups.google.com/group/szdiy?hl=zh-CN
> ---
> 您收到此邮件是因为您订阅了 Google 网上论坛的“Shenzhen DIY community”群组。
> 要退订此群组并停止接收此群组的电子邮件,请发送电子邮件到szdiy+un...@googlegroups.com
> 要查看更多选项,请访问 https://groups.google.com/d/optout



bopjiang

unread,
Nov 16, 2015, 8:31:19 AM11/16/15
to Shenzhen DIY community
承认现在就在用Go吹NB:数万行代码,模块化划分一坨翔,单元测试都没法写,竟然跑了一年多了

现在学习scheme/guile会不会功力不够走火入魔呢?

@Nala  改用vagrant & debian  后,artanis已经在mac上跑起来了~~

bopjiang

在 2015年10月30日星期五 UTC+8上午5:55:11,NalaGinrut写道:

Nala Ginrut

unread,
Nov 16, 2015, 11:06:01 AM11/16/15
to sz...@googlegroups.com
On Mon, 2015-11-16 at 04:30 -0800, bopjiang wrote:
> 承认现在就在用Go吹NB:数万行代码,模块化划分一坨翔,单元测试都没法写,竟然跑了一年多了
>

来,跟我一起念这个口号:“能用就行”,英文“anyway it works”
这就是计算科学和工程最大的不同,如果你跟别人计较这些会引起反感,毕竟大家
都急着回家打PS4呢。我不赞同在有进度压力的工程中过于计较这些东西,如果你
不能在实践当中轻易将一些招数使用出来并且心里有谱,那意味着你还没掌握它,
这样的话宁肯不要用。

如果遇到以上问题,请来SZDIY聚会,这里没人急着回家打PS4,急着打PS4的人都
会被踢出去

> 现在学习scheme/guile会不会功力不够走火入魔呢?
>

你们功力几乎为零的时候不也去学了C和Go吗 #怕个球

> @Nala 改用vagrant & debian 后,artanis已经在mac上跑起来了~~
>

你能自己按照manual玩起来吗?
> --


bopjiang

unread,
Nov 22, 2015, 9:48:44 AM11/22/15
to Shenzhen DIY community
artanis manual的例子都玩了一遍。
使用的SQLite,创建表的SQL有点问题,不应该带innodb参数。下一步准备把artanis的代码看看。

在 2015年11月17日星期二 UTC+8上午12:06:01,NalaGinrut写道:

Nala Ginrut

unread,
Nov 22, 2015, 11:13:43 AM11/22/15
to Shenzhen DIY community

默认是innodb,你需要自己改


bopjiang <bopj...@gmail.com>于2015年11月22日周日 22:48写道:
--
--
You received this message because you are subscribed to the Google
Groups "Shenzhen DIY community" group.
To post to this group, send email to sz...@googlegroups.com
To unsubscribe from this group, send email to
szdiy+un...@googlegroups.com
For more options, visit this group at
http://www.szdiy.org
http://groups.google.com/group/szdiy?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛上的“Shenzhen DIY community”群组。
Reply all
Reply to author
Forward
0 new messages