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

我与某人因是否应该记住代码而发生挣执[The conflict between me and somebody over whether to remember codes]

  •  
  •   mascteen ·
    janegwaww · 2022-10-31 10:12:19 +08:00 · 2125 次点击
    这是一个创建于 540 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Table of Contents

    1. 事情是这样的:
    2. English Version

    事情是这样的:

    许久之前,我更新了一条状态,建议刚入行的新人如何快速上手代码,其中有一条这样写到“多去看别人写的代码如果有必要可以把一些优秀的代码背下来”,然后冲突就发生了。我认为做为一个新人,如果他人把一个逻辑用一段非常优秀的代码实现了,那记住这段代码是一个正确的学习方法,就如同我们也会经常背诵优美的句子。而某人认为这是无稽之谈误人子弟,写代码主要是靠不断的练习和实践,哪有去背诵代码的。大家是怎么认为的呢?

    English Version

    There's the thing:

    Some days ago, I push a tweet, suggesting how newbie coder get quickly start handy coding. One of mine advises was said, "Learn code from career programmer and memorize some excellent code if necessary", then somebody not agree with that. I think if someone implements a logic with a good design pattern, then remember this code is a good way to learning, just like we appreciate beautiful sentences. But somebody just think this is redicules and misleading the newbie. Mastering code is mainly continuous practice and experience, and remember code always not a good way to learn. What do you think?

    iLoveSS
        1
    iLoveSS  
       2022-10-31 10:26:36 +08:00
    open stackoverflow, then ctrl+c, ctrl+v.
    AS4694lAS4808
        2
    AS4694lAS4808  
       2022-10-31 10:32:58 +08:00
    背完过了三天,框架更新函数 deprecated 怎么办?
    xinshoushanglu
        3
    xinshoushanglu  
       2022-10-31 10:44:32 +08:00
    写代码记了没用,只有真正的理解流程 然后反复实操,这个东西只要当时弄明白了,即使背不出来你依然记得。
    相反如果靠背下来的,那很可能是机械的记忆,稍微变换个形式就懵逼了,这是完全错误的方式
    yaphets666
        4
    yaphets666  
       2022-10-31 11:05:53 +08:00   ❤️ 2
    背是没有问题的。
    刷算法题不也是背的过程吗?
    只不过很多人不愿意承认罢了
    misaka
        5
    misaka  
       2022-10-31 11:06:26 +08:00
    在英文社区就写英文,在中文社区就写中文,看到第二个逗号过去式都不会用,都不知道弄个 English Version 是要干嘛
    misaka
        6
    misaka  
       2022-10-31 11:06:55 +08:00
    而且 push a tweet 是什么鬼
    RainCats
        7
    RainCats  
       2022-10-31 11:07:55 +08:00
    背代码是事半功倍,我见过真的有人去背代码,甚至能在纸上默写出来,但是稍微换个形式的需求他就完全没法写,因为他真的是背的,不理解为什么这样写。
    interim
        8
    interim  
       2022-10-31 11:32:44 +08:00
    中文社区你整个 english version? 黑人问号?
    另外是 post a tweet 而不是 push a tweet
    StevenRCE0
        9
    StevenRCE0  
       2022-10-31 11:40:01 +08:00 via iPhone
    看疗效呗,默写代码也比写不出来好👌
    learningman
        10
    learningman  
       2022-10-31 12:28:38 +08:00
    算法竞赛要背板子,CRUD 你背啥,随时都可能变的东西
    LnTrx
        11
    LnTrx  
       2022-10-31 14:20:00 +08:00
    机械背诵是方法而不是目的。而且只是方法之一,是可选项,不是必选项。
    seekmyduck
        12
    seekmyduck  
       2022-10-31 15:40:32 +08:00
    我觉得吧,理解加记忆是最好的方案,这也是上学时候老师强调的最多的。
    要是理解不了,那就强行背,不至于一点进展都没有。
    mascteen
        13
    mascteen  
    OP
       2022-10-31 15:59:18 +08:00
    @misaka 学习英文,可能有外国友人
    @interim
    weivi
        14
    weivi  
       2022-10-31 16:16:58 +08:00
    不用非得背的话,可以写在笔记里,需要参考的时候打开笔记看一眼,减少大脑的负担。
    mijazz
        15
    mijazz  
       2022-10-31 16:57:26 +08:00
    Remembering **the code** is not just remembering the code/text itself.

    Remembering **the code** (which implements a logic with an elegant design pattern, according to your description) is always about remembering the elegant design pattern behind it.

    After that, implement that exact logic, with the elegant design pattern in your head, but in your way, and in your code. That’s "remembering the code".
    FrankHB
        16
    FrankHB  
       2022-10-31 21:18:08 +08:00
    @yaphets666 比起 OP 的背景问题,你拿刷算法给“背是没有问题的”背书倒是更加让人细思极恐。

    共通的问题是:
    有想过谁是下达“背”的指令的甲方爸爸吗?
    在自己都不清楚收益的情况下,这样的甲方会给你的“背”多少回报?
    这样的甲方爸爸值得舔吗?
    FrankHB
        17
    FrankHB  
       2022-10-31 21:20:56 +08:00
    @misaka @interim 语感正常的话应该 tweet 直接做动词吧。
    mascteen
        18
    mascteen  
    OP
       2022-10-31 21:58:32 +08:00 via Android
    @FrankHB 小弟不材见笑了
    junwind
        19
    junwind  
       2022-11-01 09:18:10 +08:00
    赞同 “理解+记忆”
    yaphets666
        20
    yaphets666  
       2022-11-01 09:58:23 +08:00
    @FrankHB 你搞不搞得清收益,进大厂还能不刷算法题?算法题是世界码农通行实力评价体系。
    FrankHB
        21
    FrankHB  
       2022-11-02 21:03:19 +08:00
    @yaphets666 是你对力量体系一无所知。
    进大厂的,就算只看技术线,难道还都是量产型码农了?就算真是码农,一开始就放弃技术专长和项目经验直接比做题经验了?就算应届的,没 paper 没会议成果好拿出来水的,再次也提提 GPA 啊参赛获奖啥的啊……直接就直奔刷题了,给 reviewr 感官通常也就是这要 low 到啥层次了只能看刷题了啊。
    再者所谓刷题这种形式跟进厂能有多大关系?像 PAT 之类的本来也就是给人交作业用的。(虽然当年我早刷腻 ZOJ 都没兴趣碰了,反正本来也就是建议给外专业同学玩的,本专业不做硬性要求。)就算你想认为刷的这些所谓题能说明点能力问题,好歹也得划个难度层次的吧?(然而这种层次基本是看履历……包括算法竞赛。)然后你何德何能有底气确信对大厂有意义的门槛以上的题,里面是有几个用背代码能确保解决的?

    然后稍微可能离点题的题外话,这里最需要婊的其实就是“算法”题这种形式,不管背不背什么东西。
    我不是说题,是说所谓的“算法”在这里挂羊头卖狗肉。
    如果能顺利解题(不背),的确是有掌握具体解题方式的可能性的。但非要管这叫“算法”,那还就是有点心智问题了。因为就算没背下来,会自主写出来的这些套路,撑死就是“算法实现”,还是具体到对码农工作都难以利用的那种。
    做题的过程中除了熟悉具体语言的使用,对码农有点意义的经验就是选型。不幸的是,这些题的条件跟码农的真实工作环境差太远了。决策失败的后果也和实际工作相当不同。
    码农和不那么码农的工程师相比,除了默认不那么需要了解工程文档和背锅(看工作环境而异),在使用语言实现算法的工作上可能确实要求经常相差不远。但那就是 happy path 。合格的工程师还需要面对不可预期的规格错误,乃至推着 PM 不合理需求的甲方爸爸扯皮。在没有足够多工程师顶包的情况下,水平层次不同的码农都会被视为这个角色。而做题对这方面的能力毫无帮助,甚至不会增长背锅抗压能力。(虽说 ICPC 训练队友之间甩锅熟练性的可能性微存。)
    真实码农的工作往往需要独自处理切换 Plan A 到 Plan B (再菜也可能遇到,区别就是 plan 和锅的大小)。而对刷题党来讲,切换只存在于错估(是否做得出来)之后重新选题的投机,在原题上继续重试的无法用合乎工程范式的标准判分,因此刷题选手会不重视这点。这导致实际上再会做题的选手也是被高估的。再无敌的码农,实际工作中也不可能什么问题都一次性解对而不需要试错,所以处理错误路径的熟练性其实相当重要,但这在做题乃至竞赛中都基本无法体现。
    另一方面,训练算法题恰恰架空了什么是“算法”的内涵。
    算法分析这样的最重要的一类基础在做题的实践中只是停留在表面,做题的十分之一有这个基础就不错了(我是非常怀疑现在刷题的大部分甚至都没听说过主定理)。背题或者代码会更加严重降低这个基础的要求——要看熟题的模式猜到大致出题意图,就不用管什么算法哪来的,都是套路。
    实际上,就算不讨论算法题,没有独立思维的“算法”爱好者通常不可能有机会正确搞对一些基础问题——即便是最专业的算法竞赛训练也不足以提供涵盖这些背景知识。
    引用我之前在氵家( https://www.ithome.com/0/648/992.htm )的一个回复:

    算法学残的多了去了。随便抓个奥赛教练问个半算法(semialgorithm)存在的意义怕都是没底的。也难怪,一般算法描述训练时碍于理论基础不够,都用抠脚菜鸡的不严格描述(比如《算法导论》之类的伪码)入门,而九成九读者永远停留在入门阶段不懂在理论 CS 上缺了什么课要补,更不懂一般调教算法的普遍规律就是他们自以为无足轻重的语言里的——明明后者才是真正普遍的模型。这导致一堆菜鸡问题,比如要你去写个任意满足 PTC(proper tail call)的算法八成都会卡壳,因为算法用的语言太弱,要保证这种性质就得内嵌一个支持 PTC 的解释器。而训练合格到能解决这类问题的,会说自己做 calculi/semantics/computation models ,却一般不好说做 algorithm——太 low 了。

    这个批评是涵盖所有自卖自夸搞“算法”的。考虑到会这样想的其实主要也就是比较不长进的码农,所以倒不必担心误伤实际上真的在从事改进和创造算法及其有效实现的工作的人。
    所以你看,我其实都不太在乎背不背了。对正经码农工作,做题一直天然地比较 low ,差距还不小,所以有差嘛?

    如果真有差,那么过滤口嗨的算法小学生的问题也不是没有:

    算术复杂度和位复杂度有什么区别?
    指针的算数操作的复杂度多少?

    不是靠背,而是正经靠做题然后结合题面外的知识自行演绎理解爬上来的码农,这点应该还是能有点 13 数的(大概……)。
    yaphets666
        22
    yaphets666  
       2022-11-03 09:42:28 +08:00
    @FrankHB 你说这么多也没用啊兄弟,在今天来看,进大厂不刷算法题绝对进不去,不管是国内还是国外。
    FrankHB
        23
    FrankHB  
       2022-11-03 20:59:05 +08:00
    @yaphets666 那你可以理解我对这些所谓大厂(或者至少是通过你理解的方式进这些厂)以及这种方式混入其中的人没什么兴趣。因为客观上讲,人数不少,入行以后对业内影响实在有限。再不乐见,我也没理由为了跟我不太搭边的下界琐事浪费太多时间。

    然而 OP 说的“入行”“新人”显然并不只事关这些厂和这些人。这也是我后面“稍微离点题”而不是彻底跑题的理由。

    你应该也注意到我对算法小鬼(并不表示这些人技术一定差,其中甚至可以包括某些正儿八斤的算法竞赛选手)的不爽,远甚于刷题混进大厂的。因为小鬼的层次更加高一点,和我所处的生态环境相对更相关,并且远远更容易造成破坏。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1005 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 20:02 · PVG 04:02 · LAX 13:02 · JFK 16:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.