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

如何解答

  •  
  •   codists ·
    codists · 2022-06-04 11:53:53 +08:00 · 2289 次点击
    这是一个创建于 894 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一、缘由

    “如何提问”的文章很多,这里想谈一下“如何解答”这个问题。之所以写这篇文章内,源于我的两个提问:

    提问 1:求助,执行字节码指令时栈的具体变化是怎么样的?

    提问 2: Python array 文档里面的 machine values 具体指的是什么?

    看完提问 1 的解答,我感觉心情舒畅;看完提问 2 的解答,我感觉整个人心情都不好了。

    所以想借此谈谈一些个人观点,希望下次回答我的问题的大佬能先看下这篇文章。当然了,你我若无任何交集,那看不看这篇文章都无所谓。同时也是为了营造一个更好的中文提问与解答社区。

    二、tips

    下面具体谈谈“如何回答”。

    2.1 可以解决的问题

    如果知道怎么解决,那么直接提供解决方案,并尽可能提供参考资料。

    例如提问 1 里面的解答:

    6, 10 画错了。
    两个都是要先出栈两次。只是 10 的 TOS1 如果支持 inplace ,等同于出栈一次。
    

    这类解答是最让人感到舒服的 ,直接指出问题,并提供解决方案。如果再提供一些参考资料,那么可以说相当令人满意。

    2.2 不可以解决的问题

    对于无法解决的问题,那么最好提供具体的建议

    例如提问 1 里面的解答:

    我自己画出来的也不对,不过能确定你地址 6 、10 的地方画错了,6 的那里要出栈两个再写入( Binary operations remove the top of the stack (TOS) and the second top-most stack item (TOS1) from the stack. They perform the operation, and put the result back on the stack.),10 是 inplace 的操作,你 append 了。咱俩可以讨论一下
    

    这类解答可以看出解答者也是真的去验证了。

    三、不好的解答

    看下提问 2 里面的解答:

    建议学一下 C 语言 /剩下的你该去学 C 语言了 / 所以楼上让你学 C 语言还真说对了
    
    合着你知道”machine value“不是一个常见的用法?这本来就不算是一个专业术语,我们帮你推测验证它的具体含义,然后你说没有给出定义?要饭要的这么理直气壮的吗?
    
    “计算机科学与技术”专业毕业的人不知道内存表示和补码不是一码事?不会 C 语言? CSAPP 没看过?毕业挺好,下次不要毕业了。
    
    我看合着大家回答没啥问题啊,但是整个就一网络喷子的作风,其实我还是比较赞同你说的 machine value 为内存表示了,不同机器 /大小端,不同平台表示也可能不同。
    

    看到三个大佬“建议学 C 语言”之类的回答,我不能说有错,我只能说:私以为这样的回答和不回答貌似也没有多大差别。以及所谓的“要饭的”,“网络喷子”之类的回答就让人感到莫名其妙。

    对于提问 2 里面的谁对谁错的问题,本帖无意再讨论,里面很多人的回答都是“前面的人回答没有问题”——如果你也要来重复这句话,那么就没有必要了,因为你偏离了解答问题的初衷——解答问题的最终目的是为了让提问者明白,而不是解答者之间互相认同。

    三、总结

    之所以写这边文章,只是希望下次回答我的问题的大佬能先看下这篇文章,我不希望看到像提问 2 里面那样的回答。当然了,你我若无任何交集,那看不看这篇文章都无所谓。

    同时也是为了营造一个更好的中文提问与解答社区。

    13 条回复    2022-06-05 02:22:24 +08:00
    lscho
        1
    lscho  
       2022-06-04 12:01:07 +08:00   ❤️ 10
    那您有没有意识到是您在提问 2 中 #3 的回复过于不友善导致的呢?前两楼正儿八经的回答,您来个“听君一席话 如听一席话”、“请问你和一楼的大佬真的看懂问题了吗?”、“说话带点逻辑吧。ball ball 你们了!”

    问问题就摆正心态,可以带着质疑问题的态度回复,但是不能带着质疑回答问题者的态度回复。
    pcbl
        2
    pcbl  
       2022-06-04 12:05:02 +08:00 via Android
    只要对方的回答是有用的,他骂我一顿我都能接受。
    最受不了洋洋洒洒几百上千字都是废话的回答。
    jackyin
        3
    jackyin  
       2022-06-04 12:16:28 +08:00   ❤️ 5
    提问时,是自己来求答案的,自然要把问题写清楚,态度也要好,不然怎求的到答案?
    回答时,我想怎么答就怎么答,我甚至可以说说风凉话,阴阳怪气一下,反正我又不有求于人。除非你给钱,自然就多多的人认真回答了,因为求财啊。

    所以呢,面对所谓的不好的解答略过就行,无需在意,甚至面对你觉得不好的解答也要表达谢意,也许有人看到你的谦逊的态度,会给你更好的答案。如果你的态度是高高在上,不耻下问,谁愿意再给你更好的答案呢?
    wunonglin
        4
    wunonglin  
       2022-06-04 12:28:47 +08:00
    如果回答者回复的不是你期望的答案,那么你忽视即可。
    jackyin
        5
    jackyin  
       2022-06-04 12:31:51 +08:00   ❤️ 4
    刚看了下链接,认真回答的人都要被你怼死了,一楼那大哥回答的那么认真还要被这样怼。
    我本以为人家只扔下一句“建议学一下 C 语言”,原来是人家给了详细答案,然后给的建议。
    难怪网上各种小作文,只要剪辑下内容,意思就完全变了。

    我看了下别人回答,都比较认真,并且也没带阴阳怪气的语气,你的回复尽是阴阳怪气,不断的用反问来怼。
    learningman
        6
    learningman  
       2022-06-04 12:33:12 +08:00   ❤️ 2
    回答你问题还要被阴阳,回复你就是欠了你的是吧

    https://www.v2ex.com/t/854656?p=1#r_11698464
    https://www.v2ex.com/t/854656?p=1#r_11698578
    liprais
        8
    liprais  
       2022-06-04 12:42:39 +08:00
    看了下回复楼主老阴阳师了。
    nailuoGG
        9
    nailuoGG  
       2022-06-04 13:01:56 +08:00   ❤️ 1
    刚开始以为是楼主被羞辱了,点开回复一看好像是反过来了。

    问问题应该是和回复者一起来解决问题,但是你这样的回复会让人觉得在考校别人

    你直接忽略没用的回复就好了,减少中文社区的戾气从自己做起
    GeruzoniAnsasu
        10
    GeruzoniAnsasu  
       2022-06-04 18:26:08 +08:00
    in fact, people reply but not answer

    期望每个人都是以解答问题的心态点进来的,这种想法本来就不可取



    其实你可以观察下「解答」退化成「回复」的分界线在哪
    GeruzoniAnsasu
        11
    GeruzoniAnsasu  
       2022-06-04 18:34:45 +08:00
    看了下原帖


    ------

    >
    # 这里的 string 是指字节串(bytes)而不是字符串(str)。
    # machine values 就是值(例如 int 、float 等)的机器表示(内存表示)。
    # 内存里面每个位有 0 和 1 两种状态,通常每 8 位组成 1 个字节,每个字节取值 0~255 。
    # 同一块内存可以按不同的方式来解释。

    >
    value (值)是指整数值(1, 2, 3 ...),实数值(0.1, 1.0, 10.0, ...)、布尔值(true, false)等。
    值都有对应的类型,类型可以看做值的集合。

    machine value (机器值)是指机器(计算机 CPU)能够直接处理的值。

    machine value 可以简单的用几个字节表示,例如:
    无符号整数(8 位,16 位,32 位,64 位等),采用原码表示。32 位无符号整数取值范围为 0 到 2**32-1 。
    有符号整数(8 位,16 位,32 位,64 位等),采用补码表示。32 位有符号整数取值范围为 -2**31 到 2**31-1 。
    浮点数(32 位,64 位等),按 IEEE 754 标准规定的方法表示。32 位浮点数取值范围大约为 -3.4028235e+38 到 3.4028235e+38 ,以及 3 个特殊值。

    machine value 的基本运算(加减乘除等)通常就是一条机器指令,这些运算与数学上的运算有些差异,有溢出、误差等情况。

    详细可以参考 CSAPP 的第二章。

    与 machine value 对应的就是高级语言里的值。
    例如 python 里面的 int ,可以表示很大的整数(取决于内存大小)。
    每个 int 占用的内存不固定,绝对值越大占用内存越多。
    对应的运算也是一个复杂的函数,最终需要很多条机器指令。


    是好解答还是坏解答?以你的定义
    documentzhangx66
        12
    documentzhangx66  
       2022-06-04 20:49:14 +08:00
    还是我来吧。

    1.提问 2 的第二问,作者进行 because 解释的原因其实是错的,因为它拿 array 对比 list ,这两者的差异只是存储上只是是否连续以及是否有指针的区别。但作者原话却说到机器数值上去了,牛头不对马嘴。我本以为作者会讲内存压缩的高级话题,我去翻了下 pdf 原文,结果根本不是这回事,这作者只是单纯的讲错了而已。

    https://raw.githubusercontent.com/hiddenJuliet/pythondocument/master/Fluent%20Python.pdf
    P.48

    2.并不是每个回答者,都是顶尖高手,都敢质疑原文的作者是否出错。那个贴的 1 楼与 2 楼已经觉察到不对劲,但他们因实力没达到顶尖高手的地步,没自信说原作者写错了,但他们也给你指出了一条正确的路子,让你去学 C 语言,去对比 array 与 list 的差异。解决思路与方向是对的。

    3.当你不懂时,别人能花费时间给你回答,无论是否答对,你都应该感谢别人,而不是因为别人答错了,去讥讽别人。当然,如果你达到我这种级别,去喷喷这些回答者,那是他们的荣幸。
    l00t
        13
    l00t  
       2022-06-05 02:22:24 +08:00
    @documentzhangx66 一个都是同一类型,一个支持不同类型,这个才是本质区别好不好。其他都是由此带来的表现罢了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1311 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 17:51 · PVG 01:51 · LAX 09:51 · JFK 12:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.