[TL][编程语言]编程是否越来越文学化?

5 views
Skip to first unread message

jun lin

unread,
Dec 26, 2009, 11:12:38 PM12/26/09
to pon...@googlegroups.com
dear all forks:

个人经验,随着自己代码量的增加,写程序,越来越变得literature,越来越偏向于定义式的。
比如,我要写一个界面程序,
我会去思考,这个界面完成什么目的,要显示什么,做什么操作,
然后我就会写代码:
class 定制界面(标准界面):
    def 显示内容():
        图形 = 标准图形()
        输入名字 = 标准输入框()

然后写一个方法或者一个自动转换的程序,自动把这些定义的内容转换为实现。
感觉这是经典的语言->编译/解释->实际运行的代码 过程。

问题来了:
这样的程序往往非常的动态,像以往静态语言能够做的格式检查,
IDE提供的代码洞察,自动跳转都非常难做到(或者可以做到,而我不知道)。
现在写代码,大多是靠看文档和记忆力来完成这些工作。
(我用emacs,python代码洞察没有配好。。补全是察本文件内部的字符串)
请问大家是否遇到同样的状况?以后编程发展,是否有同样的趋势?

jun lin

unread,
Dec 26, 2009, 11:16:33 PM12/26/09
to pon...@googlegroups.com
还有一点,这样先定义,后实现的开发方法,
个人感觉用动态语言来做还好,
静态语言试过,代码量多得痛苦无比,要考虑内存动态分配,runtime library,获取变量名称等。。
而用预编译技术实现的话感觉又不爽。
大家觉得有什么问题没有?

2009/12/27 jun lin <linjun...@gmail.com>

est

unread,
Dec 27, 2009, 1:17:31 AM12/27/09
to pon...@googlegroups.com
从广义上来说,码农其实是个文科。

很简单,其实码农做的事情,本质就是把碳文明的想法翻译成硅文明的。

:)

2009/12/27 jun lin <linjun...@gmail.com>:

est

unread,
Dec 27, 2009, 1:18:18 AM12/27/09
to pon...@googlegroups.com
算法其实是一种文学素养。。。。囧。。。我不发挥了。。。。低调匿了。。。

2009/12/27 est <electr...@gmail.com>:

OxFAN

unread,
Dec 27, 2009, 1:25:03 AM12/27/09
to pon...@googlegroups.com
个人觉得标题上面应该加个[OT] :)...

2009/12/27 est <electr...@gmail.com>

jun lin

unread,
Dec 27, 2009, 5:06:20 AM12/27/09
to pon...@googlegroups.com
我问的问题很具体啊,大家不看内容吗?

2009/12/27 OxFAN <oday...@gmail.com>

jun lin

unread,
Dec 27, 2009, 5:07:11 AM12/27/09
to pon...@googlegroups.com
第一个,这个问题很top,看趋势。
第二个,这个问题是关于language的。
不觉得离题。

2009/12/27 jun lin <linjun...@gmail.com>

jun lin

unread,
Dec 27, 2009, 5:20:44 AM12/27/09
to pon...@googlegroups.com
以前学习过scheme语言,里面有非常强大的宏支持,
一个quote,可以很容易地把语言进行扩展。
这样做之后,程序只有在运行时才能知道到底在做什么事情。
那么,以后编程更加依赖程序员的素养和开发过程的管控?

2009/12/27 jun lin <linjun...@gmail.com>

Fei Yan

unread,
Dec 27, 2009, 5:30:02 AM12/27/09
to pon...@googlegroups.com
一点小小的疑问,为什么你会认为按照你自己感觉得来经验,会成为整个行业的发展趋势?
有没有更深入具体的论证或者分析、思考?

如果是搞投票,我并不同意你的观点;说实话,我也同意这个讨论属于OT
因为从你前边的描述来看,我感觉你想说的是设计问题;后半部分来看,又感觉是讨论工具和传统静态语言的弱点。
整体来看我不太明白您想表达的究竟是什么观点

弱弱的问一句,能够评断代码发展趋势的话,能否透漏下你为什么会这么看?
自己动手写过的优秀代码有多少?如果超过20w+ LOC (估计超过这个的不多吧),讲讲过程和经验也很不错。。。



2009/12/27 jun lin <linjun...@gmail.com>

jun lin

unread,
Dec 27, 2009, 6:14:58 AM12/27/09
to pon...@googlegroups.com
首先说一下,我的水平很菜,非科班出身,没有写出过什么能摆出台面的代码出来。
最近几年接触到了scheme,python,惊为天人,然后走上了不归路。。
然后自己自学和在工作中用到了一些,写了点代码,上万但是没有上10万(python),都是脚本,非工程应用。

从我个人的眼界来看,世界上的编程语言还是分为3类:
硬件逻辑,把非常常用的信息处理方式用硬件实现,比如ALU,DSP。
汇编/C,负责数据的处理,把bit操作抽象成结构和函数。
领域语言,描述和处理业务。

上面我说了,我在工作的时候,写代码往往采用描述的方式,
而这样的描述之后,还需要对代码来做解析,到真正可以运行的程度。而这样的开发方式,有点像我上面写的,对编程语言的分类的方式。

而这样做,如果用动态语言来完成,很多时候只有编程人员自己才知道,划分的边界在哪里,要用什么样的方式来写代码。

我的问题是2个:
1:上面这样的开发方式,大家是否用得比较多?还是大多数还是命令式导向?
2:如果大家用过这样的开发方式,是否是靠工具,还是靠软件工程的方式来管控代码不写偏掉?

2009/12/27 Fei Yan <skyscr...@gmail.com>

机械唯物主义

unread,
Dec 27, 2009, 6:20:36 AM12/27/09
to TopLanguage
晕,标记符号搞混了,改一下。

On Dec 27, 7:14 pm, jun lin <linjunhal...@gmail.com> wrote:
> 首先说一下,我的水平很菜,非科班出身,没有写出过什么能摆出台面的代码出来。
> 最近几年接触到了scheme,python,惊为天人,然后走上了不归路。。
> 然后自己自学和在工作中用到了一些,写了点代码,上万但是没有上10万(python),都是脚本,非工程应用。
>
> 从我个人的眼界来看,世界上的编程语言还是分为3类:
> 硬件逻辑,把非常常用的信息处理方式用硬件实现,比如ALU,DSP。
> 汇编/C,负责数据的处理,把bit操作抽象成结构和函数。
> 领域语言,描述和处理业务。
>
> 上面我说了,我在工作的时候,写代码往往采用描述的方式,
> 而这样的描述之后,还需要对代码来做解析,到真正可以运行的程度。而这样的开发方式,有点像我上面写的,对编程语言的分类的方式。
>
> 而这样做,如果用动态语言来完成,很多时候只有编程人员自己才知道,划分的边界在哪里,要用什么样的方式来写代码。
>
> 我的问题是2个:
> 1:上面这样的开发方式,大家是否用得比较多?还是大多数还是命令式导向?
> 2:如果大家用过这样的开发方式,是否是靠工具,还是靠软件工程的方式来管控代码不写偏掉?
>

> 2009/12/27 Fei Yan <skyscribe...@gmail.com>


>
> > 一点小小的疑问,为什么你会认为按照你自己感觉得来经验,会成为整个行业的发展趋势?
> > 有没有更深入具体的论证或者分析、思考?
>
> > 如果是搞投票,我并不同意你的观点;说实话,我也同意这个讨论属于OT
> > 因为从你前边的描述来看,我感觉你想说的是设计问题;后半部分来看,又感觉是讨论工具和传统静态语言的弱点。
> > 整体来看我不太明白您想表达的究竟是什么观点
>
> > 弱弱的问一句,能够评断代码发展趋势的话,能否透漏下你为什么会这么看?
> > 自己动手写过的优秀代码有多少?如果超过20w+ LOC (估计超过这个的不多吧),讲讲过程和经验也很不错。。。
>

> > 2009/12/27 jun lin <linjunhal...@gmail.com>


>
> >> 第一个,这个问题很top,看趋势。
> >> 第二个,这个问题是关于language的。
> >> 不觉得离题。
>

> >> 2009/12/27 jun lin <linjunhal...@gmail.com>
>
> >>> 我问的问题很具体啊,大家不看内容吗?
>
> >>> 2009/12/27 OxFAN <odayf...@gmail.com>
>
> >>> 个人觉得标题上面应该加个[OT] :)...
>
> >>>> 2009/12/27 est <electronix...@gmail.com>
>
> >>>>> 算法其实是一种文学素养。。。。囧。。。我不发挥了。。。。低调匿了。。。
>
> >>>>> 2009/12/27 est <electronix...@gmail.com>:


> >>>>> > 从广义上来说,码农其实是个文科。
>
> >>>>> > 很简单,其实码农做的事情,本质就是把碳文明的想法翻译成硅文明的。
>
> >>>>> > :)
>

> >>>>> > 2009/12/27 jun lin <linjunhal...@gmail.com>:

居振梁

unread,
Dec 27, 2009, 8:05:21 AM12/27/09
to pon...@googlegroups.com


2009/12/27 jun lin <linjun...@gmail.com>

然后我就会写代码:
class 定制界面(标准界面):
    def 显示内容():
        图形 = 标准图形()
        输入名字 = 标准输入框()

然后写一个方法或者一个自动转换的程序,自动把这些定义的内容转换为实现。
感觉这是经典的语言->编译/解释->实际运行的代码 过程。


能给个具体的例子吗?能够区分哪里是“伪代码”,哪里是“可编译代码”的那种。


--
御剑乘风来,除魔天地间。有酒乐逍遥,无酒我亦颠。
http://wargrey.blogspot.com [黑客精神;团队精神;清心寡欲;像孩子一样思考]
http://juzhenliang.blogspot.com [中文译出]
一饮尽江河,再饮吞日月。千杯醉不倒,唯我酒剑仙。

Shuo Chen

unread,
Dec 27, 2009, 8:29:08 AM12/27/09
to TopLanguage
同意,我也没看懂究竟想说什么。

另外,对于"文学化"这个命题,回答"是"和"不是"有什么区别吗?会对写程序造成什么影响吗?

On Dec 27, 6:30 pm, Fei Yan <skyscribe...@gmail.com> wrote:
> 一点小小的疑问,为什么你会认为按照你自己感觉得来经验,会成为整个行业的发展趋势?
> 有没有更深入具体的论证或者分析、思考?
>
> 如果是搞投票,我并不同意你的观点;说实话,我也同意这个讨论属于OT
> 因为从你前边的描述来看,我感觉你想说的是设计问题;后半部分来看,又感觉是讨论工具和传统静态语言的弱点。
> 整体来看我不太明白您想表达的究竟是什么观点
>
> 弱弱的问一句,能够评断代码发展趋势的话,能否透漏下你为什么会这么看?
> 自己动手写过的优秀代码有多少?如果超过20w+ LOC (估计超过这个的不多吧),讲讲过程和经验也很不错。。。
>

> 2009/12/27 jun lin <linjunhal...@gmail.com>


>
> > 第一个,这个问题很top,看趋势。
> > 第二个,这个问题是关于language的。
> > 不觉得离题。
>

> > 2009/12/27 jun lin <linjunhal...@gmail.com>
>
> >> 我问的问题很具体啊,大家不看内容吗?
>
> >> 2009/12/27 OxFAN <odayf...@gmail.com>
>

> >> 个人觉得标题上面应该加个[OT] :)...
>
> >>> 2009/12/27 est <electronix...@gmail.com>
>
> >>>> 算法其实是一种文学素养。。。。囧。。。我不发挥了。。。。低调匿了。。。
>
> >>>> 2009/12/27 est <electronix...@gmail.com>:


> >>>> > 从广义上来说,码农其实是个文科。
>
> >>>> > 很简单,其实码农做的事情,本质就是把碳文明的想法翻译成硅文明的。
>
> >>>> > :)
>

> >>>> > 2009/12/27 jun lin <linjunhal...@gmail.com>:

Tinyfool

unread,
Dec 27, 2009, 8:31:49 AM12/27/09
to pon...@googlegroups.com
好吧,作为万年OT王,我也冒出来OT一下,楼主的主题跟Knuth的literate programming有关系么?

jun lin

unread,
Dec 27, 2009, 8:37:58 AM12/27/09
to pon...@googlegroups.com
恩,看起来我没有解释清楚。
就是一份代码描述逻辑,一份代码把这个逻辑转成具体的实现。
比如我要做一个界面,我先想,这个界面上面有一个输入name和data的窗体,于是:
描述性质代码:
def Form():
    name = LineEdit()
    data = TextEdit()

描述完了,要把这个描述转变为具体的实现。
实现代码:
def  createForm(form):
    for name in dir(form):
        if isinstance(name,LineEdit):
             placeLineEdit(form, name)
         ......

就是类似这种方式的编程。

2009/12/27 Shuo Chen <gian...@gmail.com>

jun lin

unread,
Dec 27, 2009, 8:38:37 AM12/27/09
to pon...@googlegroups.com
听到这个名称,就拿来用了。。

2009/12/27 Tinyfool <tiny...@gmail.com>

Tinyfool

unread,
Dec 27, 2009, 8:40:22 AM12/27/09
to pon...@googlegroups.com
看来所有的OT伟大概念都是万能的筐,有什么都可以往里面放嘛

2009/12/27 jun lin <linjun...@gmail.com>

听到这个名称,就拿来用了。。

2009/12/27 Tinyfool <tiny...@gmail.com>

好吧,作为万年OT王,我也冒出来OT一下,楼主的主题跟Knuth的literate programming有关系么?




--
Tinyfool的开发日记 http://www.tinydust.net/dev/
代码中国网 http://www.codechina.org
myTwitter: http://twitter.com/tinyfool

Shuo Chen

unread,
Dec 27, 2009, 9:08:28 AM12/27/09
to TopLanguage
非文学的版本怎么写?有什么不同?

On Dec 27, 9:37 pm, jun lin <linjunhal...@gmail.com> wrote:
> 恩,看起来我没有解释清楚。
> 就是一份代码描述逻辑,一份代码把这个逻辑转成具体的实现。
> 比如我要做一个界面,我先想,这个界面上面有一个输入name和data的窗体,于是:
> 描述性质代码:
> def Form():
> name = LineEdit()
> data = TextEdit()
>
> 描述完了,要把这个描述转变为具体的实现。
> 实现代码:
> def createForm(form):
> for name in dir(form):
> if isinstance(name,LineEdit):
> placeLineEdit(form, name)
> ......
>
> 就是类似这种方式的编程。
>

> 2009/12/27 Shuo Chen <giantc...@gmail.com>

居振梁

unread,
Dec 27, 2009, 9:10:35 AM12/27/09
to pon...@googlegroups.com
这个方式是很常见的啊,我是个非常懒的人,最讨厌的编码行为就是写一砣流水仗式的。
所以会想一切可能的方法来动态生成,比如用反射、(弱类型语言)Dictionary等手段。

我觉得写代码和写作是差不多的活动,但是“美化”的侧重点不是如何单纯的功能实现,
而是在实现的前提下,如何写出看起来更舒服的代码(也包括设计方面)。

不能算是一种趋势,而应该是伴随经验积累的理所当然……直到发现新的方案或由此造成的损失太大。
不过美学层次上的优化是可选的。

PS:我没说我这里的“美化”就是你说得“文学化”。

2009/12/27 jun lin <linjun...@gmail.com>

def Form():
    name = LineEdit()
    data = TextEdit()

描述完了,要把这个描述转变为具体的实现。
实现代码:
def  createForm(form):
    for name in dir(form):
        if isinstance(name,LineEdit):
             placeLineEdit(form, name)
         ......

jun lin

unread,
Dec 27, 2009, 9:33:20 AM12/27/09
to pon...@googlegroups.com
查了下资料,正规的文学化,
是代码的组织形式,一份给人看,一份给机器看。

2009/12/27 居振梁 <juzhe...@gmail.com>

Fei Yan

unread,
Dec 27, 2009, 9:45:42 AM12/27/09
to pon...@googlegroups.com
根据我的理解,高爷爷的literate是指代更接近人类表达方式的一些实现方法(更多被翻译成“字面编程”,‘文学编程’倒是第一次听到),譬如:
      有含义的变量名称
      良好组织的模块
      符合知觉的逻辑流程
      。。。

这些东西我觉得都是为了降低软件本身的附加复杂度(side-effect),不能解决根本的complexity(逻辑业务本身)。
从我的浅薄的理解来看,您的方法似乎有增加前一个非本质复杂度的嫌疑。

2009/12/27 jun lin <linjun...@gmail.com>

Tinyfool

unread,
Dec 27, 2009, 10:09:29 AM12/27/09
to pon...@googlegroups.com
我倒不觉得字面编程这个翻译有多好,文学编程貌似都更好些,文章化编程感觉都更好些。

2009/12/27 Fei Yan <skyscr...@gmail.com>

Yihan SONG

unread,
Dec 27, 2009, 10:46:16 AM12/27/09
to pon...@googlegroups.com
literature programming不是类似TeX的dtx模板、javadoc之类...

Sent from Shanghai, China


2009/12/27 Tinyfool <tiny...@gmail.com>

张慧聪

unread,
Dec 27, 2009, 12:12:14 PM12/27/09
to pon...@googlegroups.com
最近研究一些GNU项目的代码,是C语言程序,很多情况下你直接把代码读出声来,做的事情就清楚了。好代码就是这样。举个不太典型的手边例子:
#if TIME_WITH_SYS_TIME
# include <sys/time.h>
# include <time.h>
#else
# if HAVE_SYS_TIME_H
#  include <sys/time.h>
# else
#  include <time.h>
# endif
#endif


-- 
----文艺型程序员+围棋偶饭+SC剩菜饭+前科幻迷+数学习饭

xxmplus

unread,
Dec 27, 2009, 7:10:27 PM12/27/09
to pon...@googlegroups.com
《重构》里提到的坏味道:如果代码需要大量注释来解释才能读懂,那么它就需要重构。

2009/12/28 张慧聪 <zhcfr...@gmail.com>:

--
Any complex technology which doesn’t come with documentation must be the best
available.

Simon Liu

unread,
Dec 27, 2009, 11:14:15 PM12/27/09
to pon...@googlegroups.com
那个不是“注释”,另外重构里面讲的情况大多是适用于OO的,虽然OP也有需要重构的,但楼上举的例子显然不适用于此。

2009/12/28 xxmplus <xxm...@gmail.com>



--
Simon Liu
Email/MSN/GTalk: yuntao.liu#gmail.com

xxmplus

unread,
Dec 27, 2009, 11:20:19 PM12/27/09
to pon...@googlegroups.com
我知道那不是注释,我之所以把这句话拿出来是因为它们背后的思想是一致的:让代码自己来说话。

2009/12/28 Simon Liu <yunta...@gmail.com>:

Sent from Sydney, Nsw, Australia

raymond

unread,
Dec 28, 2009, 6:09:34 AM12/28/09
to TopLanguage
http://www.literateprogramming.com/
http://www.cs.toronto.edu/~yijun/work/lp/lp.pdf
我没看完,但是如果你看完了,然后再这里给出感想那一定是很有意义的。
literature是人能读懂理解东西,programming 语言是计算能读懂理解的东西,随着抽象层次越来越高,人们必然想让计算机开始理解经
过约束的人类语言,各种领域语言都是如此,比如电子商务标记语言,各个行业标准的基于XML的通信标准,比如你自己写了个界面生成语言,这些抽象的东西
最终要交给计算机去执行,所以在写这种抽象的领域语言的时候,好像我们写文章一样,目的就是让别人尽快理解。编程会不会向这个方向发展我不敢说,什么时
候计算机能帮助我们阅读并且告诉我们文章的意义呢?这个问题恐怕不好回答。

Zhiming G

unread,
Dec 28, 2009, 9:10:05 AM12/28/09
to pon...@googlegroups.com
用cweb写过小工程,我觉得文学编程和通常意义的编程(比如c/c++)的区别是,文学编程的主线是“文档”,代码嵌入在文档中,改代码就是改文档;而通常意义的编程是以计算机运行的顺序为主线,文档(注释)嵌入代码中,文档是为代码服务的。老K推广文学编成就是希望按照人的思考方式来写程序。这个愿景很好,但是想写出好东西,门槛也非常高,至少两条主线都要熟练,能随意转换才行~
2009/12/28 raymond <shiq...@gmail.com>
Reply all
Reply to author
Forward
0 new messages