program design : an alternative approach

g
guvest
楼主 (未名空间)

抛除语义,数学定理的证明,就是一个符合逻辑语法的长句子。句子一端是已知布尔值为1的公理,定理,或者引理。另一端是预期的结果:命题X 为 1。
软件的一端是已知可用的类库和资源。另一端是预期的结果。
连接这两端,用的也是逻辑规则或者说是形式化的逻辑语法。
解决这两种问题,绝大多数人都是在脑子里用搜索的办法。

软件的设计过程,和寻找数学定理的证明过程非常类似。找一张纸,架构师写出来计
划用的tool chain。另一张纸,应用支持工程师,写出来预期看到的软件的行为的描述。
连接这两张纸的,就是设计工作。一般情况下,搜索逻辑链条的难度不会超过中学数学。理想计算机中,对一般的任务,中学生就可以找到很多可行的,连接两端的逻辑链条。设计的难点在于在这些可行的逻辑链条中,找到真实可行的,甚至最优的。这需要对实际的计算机的资源,以及各种其他不完美的行为有所了解。所以這種活動一般叫做設計,而不叫尋找。

如何了解这个途径的软件设计办法的不同之处?最好的途径是练习写定理及其证明的程序,或者符号计算的程序(这两者是一回事)。

假如一个读者看到这里,还没有疑问或者疑义。那麼應該可以同意,程序语言的设计過程,和寻找数学定理的证明過程也是一样的。

可以写出来和本文同样的,以程序语
言的设计的另類approach為題的另一个短文。

m
minquan
2 楼

你这是不考虑性能、安全、容灾的角度
l
lsunspot
3 楼

这种明确结论找过程的很适合机器学习

g
guvest
4 楼

“设计的难点在于在这些可行的逻辑链条中,找到真实可行的,甚至最优的。这
需要对
实际的计算机的资源,以及各种其他不完美的行为有所了解。所以這種活動一般叫做設計,而不叫尋找。”

Those point had been addressed. 我略微具體的解釋下。
=====

(1)打開一個網頁,找到John的電話號碼
(2)4秒內打開一個網頁,找到John的電話號碼

這兩個句子,都可以作為逻辑链的end point。后者难一点。但不是因为技术难度。
而是因为后者需要一些和实际系统相关的知识。这些知识在学校里一般都不教。例如一个數據從美國到北京要大概多久,不同層的內存的速度等等。工作后的人,要很久才能自己摸索出来,所以往往誤會這是‘經驗’。但這些其實也是知識。
學校里不教這些,是因為學術圈沿著paper knowlwdge瞎整,容易名利雙收。写本学生
爱看的似是而非的垃圾讲义,几千人每人几十刀去買,sure money。

所以計算機工程行業的一些黑科技的关键,其實是在於具体系统的非常具体的一些可以量化出来的部分。很多都和硬件软件同时相关。

【 在 minquan(三民主义) 的大作中提到: 】
<br>: 你这是不考虑性能、安全、容灾的角度
<br>

m
minquan
5 楼

不仅不教,而且实际应用远比这复杂

给你一个概念“零信任安全级别”

目前大多数的系统都做不到
也就是存在监守自盗的可能

【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: “设计的难点在于在这些可行的逻辑链条中,找到真实可行的,甚至最优的。这
: 需要对
: 实际的计算机的资源,以及各种其他不完美的行为有所了解。所以這種活動一般叫做設
: 計,而不叫尋找。”
: Those point had been addressed. 我略微具體的解釋下。
: =====
: (1)打開一個網頁,找到John的電話號碼
: (2)4秒內打開一個網頁,找到John的電話號碼
: 這兩個句子,都可以作為逻辑链的end point。后者难一点。但不是因为技术难度。
: 而是因为后者需要一些和实际系统相关的知识。这些知识在学校里一般都不教。例如一
: ...................