V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Feiox
V2EX  ›  编程

你怎么看待“文学编程”?

  •  
  •   Feiox · 2015-08-12 19:32:27 +08:00 · 7259 次点击
    这是一个创建于 3378 天前的主题,其中的信息可能已经有所发展或是发生改变。

    文学编程 wiki

    另外,你怎么看待向 Python 这种弱化对符号的运用,转而使用英语单词来作为程序的主要组成部分,例如
    yield from
    a if b else c
    if key in myset:
    if var is False
    with Abc as abc:
    for k,v in itervalue.iteritems() 等。

    LZ 的观点是非常喜爱,最近挺流行的 semantic-ui 也是使用了大量非常英语化的词汇。

    39 条回复    2015-08-13 22:49:27 +08:00
    blacktulip
        1
    blacktulip  
       2015-08-12 19:43:08 +08:00
    ObjC 是典型范例不?
    DaCong
        2
    DaCong  
       2015-08-12 19:46:36 +08:00
    对于我这种因为noip而从pascal->C的人来说,总感觉用这么多词汇写东西有点不舒服,也许习惯了会好用吧
    JamesRuan
        3
    JamesRuan  
       2015-08-12 19:48:35 +08:00 via Android
    不看好,因为英语是自然语言。人工语言长得像自然语言会让人产生在用自然语言的错觉。 除了在减低入门门槛上有好处,其他方面则没有什么好处。

    比R里面有in 又搞出了个%in%,有&,又搞出了个&&,实际上缺反应了类型推导系统很弱。
    bismarck
        4
    bismarck  
       2015-08-12 19:51:07 +08:00
    @JamesRuan 可以一定程度上提高可读性
    sunyang
        5
    sunyang  
       2015-08-12 19:52:08 +08:00
    奇点到来以后会成为主流,现在还是幼生期
    JamesRuan
        6
    JamesRuan  
       2015-08-12 19:55:51 +08:00
    @bismarck 反例很容易举出来啊,去看看haskell的代码,几乎没有符号(很多还是自己造的运算符,比如>>=这种),可读性很高吗?反之,很多情况下,简洁的符号就可以提高可读性(支持运算符重载的一个作用)。
    bismarck
        7
    bismarck  
       2015-08-12 20:00:33 +08:00
    @JamesRuan 我觉得racket的代码就很好读,我没有说需要累赘的代码,简洁,直接的代码最好。我很欣赏对命名讲究的语言设计。
    pepsin
        8
    pepsin  
       2015-08-12 20:22:23 +08:00
    Ruby 爱好者们据说已经下了这座山啦
    Feiox
        9
    Feiox  
    OP
       2015-08-12 20:22:46 +08:00
    @bismarck 除了 racket 还有那些你觉得符合语法(或语言倡导)层面符合自然语言写法的编程语言呢?你对它们是如何评价的呢?
    ffffwh
        10
    ffffwh  
       2015-08-12 20:25:40 +08:00
    反过来还差不多,以编程的方式来写作
    bismarck
        11
    bismarck  
       2015-08-12 20:41:39 +08:00
    @Feiox 我觉得Python,Ruby, Scala, F#等等也不错的,这些不一定是以“文学编程”为未来标准,但都显得很友好和很大程度顺应人的直觉。当然了,关键是在编程的时候,把实现写正确,遵循最佳实践。我的观点只是倾向于应尽力写出有表达力的代码和“笨”代码,减少注释成本和以后的维护成本。(并不绝对,视场景而定
    imn1
        12
    imn1  
       2015-08-12 20:44:50 +08:00
    COBOL语言?
    msg7086
        13
    msg7086  
       2015-08-12 21:27:32 +08:00
    不同符号混着用多了本来就会产生反效果。

    PS: a if b else c 其实可读性并不好。

    Ruby里可以用one line if,像 x if a,也可以用one line else,像 if a then x else y end,比上述更不容易读错。
    SoloCompany
        14
    SoloCompany  
       2015-08-12 21:39:46 +08:00
    AppleScript 笑而不语
    oska874
        15
    oska874  
       2015-08-12 22:05:44 +08:00
    自然语言要变成编程语言,最基本的是去掉二义性
    nkssai
        16
    nkssai  
       2015-08-12 23:16:31 +08:00
    @JamesRuan haskell本身写dsl的能力也很强,从另一方面也可以撸出来倾向于自然语言的库。
    qw7692336
        17
    qw7692336  
       2015-08-12 23:20:28 +08:00
    coffee script怎么看
    notcome
        18
    notcome  
       2015-08-13 03:19:58 +08:00 via iPhone
    文学编程是这个意思吗?天啦……

    文学编程是指把文档和代码写在一起,用不同的编译器选项输出文档和源代码。链接里讲的很清楚。

    至于文学编程的应用……估计是死光了,目前比较主流的是像 Haskell 或者 Agda 之类的那样,发论文写书用。
    sinxccc
        19
    sinxccc  
       2015-08-13 04:26:57 +08:00
    @notcome TeX 还没死… 从头看到尾感觉就你是在说文学编程,其他人都在热烈讨论什么我表示完全看不懂=_=
    notcome
        20
    notcome  
       2015-08-13 04:30:18 +08:00 via iPhone
    @sinxccc 我估计是题主干的,他说的跟文学编程没关系。

    不对,为什么是「题主」,逃)

    我不太清楚 TeX,但似乎只有核心部分是文学编程整的吧,XeTeX LuaTeX 什么的也是用那个 WEB 写的吗?

    而且我觉得这种东西吧,其实是与现代的模块化理论背道而行的,所以估计没什么前途。
    aivier
        21
    aivier  
       2015-08-13 09:13:44 +08:00
    其实看到文章开头代码的第一眼,我还以为那是乱码....
    cbsw
        22
    cbsw  
       2015-08-13 09:26:48 +08:00
    http://orgmode.org/features.html#sec-8 早就说过 Emacs 是最强大的编辑器,org-mode 8.3.1 前几天已经出来了
    CodingMonkey
        23
    CodingMonkey  
       2015-08-13 09:32:13 +08:00
    我觉得没有符号一点都不酷
    justjavac
        24
    justjavac  
       2015-08-13 09:40:34 +08:00
    难道楼主没有听说过 perl 吗?

    #!/usr/bin/perl

    listen(please,please);

    open yourself,wide;
    join(you,me),
    connect(us,together),

    tell me.

    do something if distressed;

    @dawn,dance;

    @evening,sing;
    read(books,$poems,stories) until peaceful;
    study if able;

    write me if-you-please;

    sort your feelings,reset goals,seek(friends,family,anyone);

    do*not*die(like this)
    if sin abounds;
    keys (hidden),open(locks,doors),tell secrets;
    do not, I-beg-you, close them,yet.

    accept(yourself,changes),
    bind(grief,despair);

    require truth,goodness if-you-will,each moment;

    select(always),length(of-days)
    tcdw
        25
    tcdw  
       2015-08-13 10:24:45 +08:00 via Android
    我并不是非常喜欢。
    反复的使用一堆英语单词,在编程过程中实在是啰嗦又麻烦,而且至少源代码会消耗大量磁盘空间。
    我认为掌握那些符号的使用更实在。
    banri
        26
    banri  
       2015-08-13 10:54:39 +08:00
    喜欢,毕竟文科狗
    Agromania
        27
    Agromania  
       2015-08-13 11:05:15 +08:00
    我更喜欢 a ? b : c
    robertlyc
        28
    robertlyc  
       2015-08-13 15:26:48 +08:00
    我猜楼主一定不知道DSL
    Feiox
        29
    Feiox  
    OP
       2015-08-13 16:07:49 +08:00
    @robertlyc 倒不是,我们在项目中使用了很多、各种语意化的自实现的 DSL,因为团队里用的是 Python
    @tcdw 额,要写多少代码才会多占用 1M 的空间呢?
    @notcome @sinxccc 我知道文学编程,我提问中谈到语意化语法元素的时候,说了 “另外” 然后大家都只聊到了“另外”里的内容 ~ 不过,我到是觉得 TeX 是反语义化的代表 ~
    @Agromania 但据说 a if b else c 是很符合英语的风格 ~
    robertlyc
        30
    robertlyc  
       2015-08-13 16:14:51 +08:00
    @Feiox 错怪lz了 应该说是大部分的答题者不懂
    Tomilay
        31
    Tomilay  
       2015-08-13 16:16:18 +08:00
    我觉得写Perl的时候才是爽歪歪~~
    shawngao
        32
    shawngao  
       2015-08-13 16:20:57 +08:00
    你们咋没人提到Apple Script
    kkurs
        33
    kkurs  
       2015-08-13 16:24:24 +08:00
    @notcome
    +1, 楼主举得这几个例子根本不是literature programming
    Feiox
        34
    Feiox  
    OP
       2015-08-13 16:30:59 +08:00
    @robertlyc @kkurs 哈哈,我的错,我错把两个概念相近的问题放在了一起,成功的使大多数人都没有意识到 “另外” 二字后面是另一个问题。。。。。
    @robertlyc wiki 上讲到了利用宏,将原始程序掩盖起来,我觉得这和近年来流行的 DSL 很像。我们项目内部也有很多自实现的声明式 DSL 来将业务逻辑分离成 定义 和 操作 两个部分,这和高老说的 “使用WEB编程后,我意识到不必在自顶向下和自底向上之间艰难抉择” 异曲同工。
    notcome
        35
    notcome  
       2015-08-13 19:29:41 +08:00 via iPhone
    @Feiox TeX 是反语义化的代表?哈哈哈兄弟率直我喜欢。我觉得世界上最搞笑的一件事,就是 TeX 的宏系统没有对命令和文本有什么明显的区分,TeX 用户却经常标榜自己是样式与内容分离的典范,哈哈哈。我最喜欢黑 TeX了。

    不过可悲的是竟然没有比 TeX 好很多的产品可以用。
    notcome
        36
    notcome  
       2015-08-13 19:40:23 +08:00 via iPhone
    @JamesRuan
    > 反例很容易举出来啊,去看看haskell的代码,几乎没有符号(很多还是自己造的运算符,比如>>=这种),可读性很高吗?反之,很多情况下,简洁的符号就可以提高可读性(支持运算符重载的一个作用)。

    你能解释一下为什么你说 Haskell 没有符号,却同时说 Haskell 有很多自造的运算符吗?很多常用的代码里(又在黑 parser,逃)我看到的就是 Applicative Monad Arrow 满天飞啊,什么 a *> b <* c 看到萌死掉了。

    可读性这个问题其实跟采取哪种方式没有关联,更主要还是看库的设计。就比如 Haskell 吧,它确实符号满天飞,很多初学者看到 Applicative 那套,肯定疯了,觉得故意炫技,不适合工程。可同时我们必须意识到,Haskell 的抽象概念比别的语言要多那么一点,符号虽然多了,但定义的很好,熟悉起来用着一样飞快。

    类似的,用自然语言也是一个样子,库本身很重要。要是你遇到个风格自相矛盾的库,肯定会骂人。至于多打几个字,我真不觉得是大问题。
    qqqppp9998
        37
    qqqppp9998  
       2015-08-13 20:37:09 +08:00
    个人挺喜欢
    RqPS6rhmP3Nyn3Tm
        38
    RqPS6rhmP3Nyn3Tm  
       2015-08-13 21:24:37 +08:00 via iPad
    各位不知道莎士比亚语言吗?

    The Infamous Hello World Program.

    Romeo, a young man with a remarkable patience.
    Juliet, a likewise young woman of remarkable grace.
    Ophelia, a remarkable woman much in dispute with Hamlet.
    Hamlet, the flatterer of Andersen Insulting A/S.


    Act I: Hamlet's insults and flattery.

    Scene I: The insulting of Romeo.

    [Enter Hamlet and Romeo]

    Hamlet:
    You lying stupidfatherless big smelly half-witted coward!
    You are as stupidas the difference between a handsome rich brave
    hero and thyself!Speak your mind!

    You are as braveas the sum of your fat little stuffed misused dusty
    old rotten codpiece and a beautiful fair warm peaceful sunny summer's
    day. You are ashealthy as the difference between the sum of the
    sweetest reddestrose and my father and yourself! Speak your mind!

    You are ascowardly as the sum of yourself and the difference
    between a bigmighty proud kingdom and a horse. Speak your mind.

    Speak your mind!

    [Exit Romeo]

    Scene II: The praising of Juliet.

    [Enter Juliet]

    Hamlet:
    Thou art as sweetas the sum of the sum of Romeo and his horse and his
    black cat! Speakthy mind!

    [Exit Juliet]

    Scene III: The praising of Ophelia.

    [Enter Ophelia]

    Hamlet:
    Thou art as lovelyas the product of a large rural town and my amazing
    bottomless embroidered purse. Speak thy mind!

    Thou art as lovingas the product of the bluest clearest sweetest sky
    and the sum of asquirrel and a white horse. Thou art as beautiful as
    the difference between Juliet and thyself. Speak thy mind!

    [Exeunt Ophelia and Hamlet]


    Act II: Behind Hamlet's back.

    Scene I: Romeo and Juliet's conversation.

    [Enter Romeo and Juliet]

    Romeo:
    Speak your mind.You are as worried as the sum of yourself and the
    difference betweenmy small smooth hamster and my nose. Speak your
    mind!

    Juliet:
    Speak YOUR mind!You are as bad as Hamlet! You are as small as the
    difference between the square of the difference between my little pony
    and your big hairyhound and the cube of your sorry little
    codpiece. Speakyour mind!

    [Exit Romeo]

    Scene II: Juliet and Ophelia's conversation.

    [Enter Ophelia]

    Juliet:
    Thou art as goodas the quotient between Romeo and the sum of a small
    furry animal and aleech. Speak your mind!

    Ophelia:
    Thou art asdisgusting as the quotient between Romeo and twice the
    difference betweena mistletoe and an oozing infected blister! Speak
    your mind!

    [Exeunt]

    此段代码的作用是打印"Hello World!"
    endrollex
        39
    endrollex  
       2015-08-13 22:49:27 +08:00
    还是用符号把逻辑和变量分开比较可读
    符号的特点就比文字更抽象简洁,而且数学符号很难弃用
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3504 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:20 · PVG 19:20 · LAX 03:20 · JFK 06:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.