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

考手写代码是否真的有意义?

  •  
  •   yuhuan66666 · 2016-05-31 01:06:32 +08:00 · 10507 次点击
    这是一个创建于 2859 天前的主题,其中的信息可能已经有所发展或是发生改变。
    听朋友说有点面试要求手写代码,请问这样的真的有意义吗?
    61 条回复    2016-06-01 11:35:27 +08:00
    Cassandra
        1
    Cassandra  
       2016-05-31 01:13:50 +08:00   ❤️ 6
    有的有的。虽然无数工具可以帮你更正错误,可以测试代码能不能跑出想要的结果,可这些都是工具的思考结果,不是你大脑的。手写去掉了这些辅助,会实际考验一个人的思维能力,对代码的了解以及熟悉度。
    ltzliwe
        2
    ltzliwe  
       2016-05-31 01:29:26 +08:00
    xiahei
        3
    xiahei  
       2016-05-31 01:30:11 +08:00
    kofip
        4
    kofip  
       2016-05-31 01:30:23 +08:00   ❤️ 4
    手写代码,我搞不定,多少类库与方法,我就记得前面几个字符,然后依靠自动补全。
    zztemp
        5
    zztemp  
       2016-05-31 01:35:53 +08:00   ❤️ 2
    想当年手把手地教妹子手写代码……
    zhangfan
        6
    zhangfan  
       2016-05-31 01:45:43 +08:00   ❤️ 1
    @zztemp 老司机
    yxc
        7
    yxc  
       2016-05-31 01:50:09 +08:00   ❤️ 2
    高中时候学的政治历史各种高深的函数其实也没有意义。

    目的只是为了证明在同样的条件下,你有更强的耐力,更好的思维,比别人更优特秀,然后把高优质的教育资源投在你身上。

    反正面试都是老司机,公司说不定就想在同样条件下招个记忆好的,写字好的看的呢
    likuku
        8
    likuku  
       2016-05-31 01:50:11 +08:00   ❤️ 1
    觉得手写伪代码 /手绘流程 就可以了。
    ncisoft
        9
    ncisoft  
       2016-05-31 02:19:20 +08:00 via Android   ❤️ 1
    手写代码又不要求能执行,只是看基本逻辑(伪代码)和主要函数库是否用得熟练,特别是 C 还是能考出东西的, JAVA 就算了,只能当作伪代码来看参考
    cxbig
        10
    cxbig  
       2016-05-31 02:22:00 +08:00   ❤️ 1
    手写代码一般不是考校你对方法、类的记忆,更多是考校解决问题的思路。
    wdhwg001
        11
    wdhwg001  
       2016-05-31 03:31:37 +08:00 via iPhone
    想当年上课偷偷写 php 然后微机课抄到记事本上 U 盘带回去…
    后来,我对 php 的函数命名风格深恶痛绝。
    yuhuan66666
        12
    yuhuan66666  
    OP
       2016-05-31 08:06:02 +08:00 via Android
    @Cassandra 如果因为方法名拼写错误而被卡下来,那岂不是背离了初衷
    pH
        13
    pH  
       2016-05-31 08:20:20 +08:00
    @wdhwg001 不懂,其中有什么梗?
    @yuhuan66666 你可以简略的写伪码。或者和面试官说明这里是一个什么函数,我觉得这样可以把
    janxin
        14
    janxin  
       2016-05-31 08:35:20 +08:00 via iPhone
    Stupitch
        15
    Stupitch  
       2016-05-31 08:38:14 +08:00
    我觉得吧,只要面试者有等级证书或者相关履历就不用这么较真,只要让他写写解决思路和一些关键代码即可。如果面试者尚未有很强力的证书或者履历,不妨考一考,如果很过硬的话,反而会给自己加分不少。
    Bryan0Z
        16
    Bryan0Z  
       2016-05-31 08:39:55 +08:00 via Android   ❤️ 1
    曾经有次回家,想写 Java ,懒得下编译器 IDE ,找了个在线的编译网站,直接打开记事本开始写…那个痛苦的,但是是坑
    jeffersonpig
        17
    jeffersonpig  
       2016-05-31 08:43:11 +08:00
    大四那年有一次 C/C++笔试,当我发现我连 main 的参数列表都不确定该怎么写的时候就明白考手写代码是很有用的
    andrewliu117
        18
    andrewliu117  
       2016-05-31 08:45:27 +08:00
    有的,但是考题的答案不需要太多的库,要重点考思路和变成习惯
    odirus
        19
    odirus  
       2016-05-31 08:47:04 +08:00   ❤️ 1
    可以看出你是面向啥编程的,面向 Google ,面向 IDE 。。。
    xpol
        20
    xpol  
       2016-05-31 08:47:49 +08:00 via iPad
    大学的时候,上机课全部是事先手写号代码。 x86 汇编指令。
    mudone
        21
    mudone  
       2016-05-31 08:50:05 +08:00
    有。
    maomaomao001
        22
    maomaomao001  
       2016-05-31 08:51:05 +08:00 via Android
    @odirus 面相智能 IDE 编程 不对吗?
    手写,最多应该写个流程图。。。
    手写代码,你这些麻烦,老师看着更麻烦
    gccdchen
        23
    gccdchen  
       2016-05-31 08:51:24 +08:00
    shakoon
        24
    shakoon  
       2016-05-31 09:06:19 +08:00
    手写代码估计我会出一大堆语法错误,我能写的应该算是伪代码,但是算法是描述清楚了的
    adoyle
        25
    adoyle  
       2016-05-31 09:09:11 +08:00
    不说有句话,字如其人么....
    yellowV2ex
        26
    yellowV2ex  
       2016-05-31 09:19:09 +08:00   ❤️ 1
    当年在学校里,那时候还是 Flash5 的年代,写 AS2 ,因为上课实机操作的机会不多,那时候能在本子上写一个下一百层的游戏,还能脑部运行画面还能脑部 debug 。
    现在不行了,库那么多, objc 特么方法又臭又长没有自动补全完全没法写。我不知道是不是很多人都这样,好多代码段根本懒得自己写,直接关键词去 stackoverflow 或其他 blog 复制过来的,比如什么数字转中文大写啊,汉子转拼音啊什么的,自己再重新写一遍完全浪费时间啊。不过这么做时间长了细节不太记得是肯定的,需要再花时间整理思路什么的。

    不过据我所知,面试手写代码,主要考的是你逻辑思维算法方面的东西,公司不会那么傻逼去纠结你单词写的对不对吧。
    Neveroldmilk
        27
    Neveroldmilk  
       2016-05-31 09:20:53 +08:00
    呵呵,除非你的电脑能识别手写代码,否则一点意义都没有。
    Neveroldmilk
        28
    Neveroldmilk  
       2016-05-31 09:21:18 +08:00
    @adoyle 汪精卫和秦桧的书法水平不知道比你高到哪里去了。
    odirus
        29
    odirus  
       2016-05-31 09:36:28 +08:00
    @maomaomao001 不好意思,理解错了,原本以为是不提供 IDE ,而是只提供单机环境下的 文本编辑器。
    yuankui
        30
    yuankui  
       2016-05-31 09:42:04 +08:00
    手写 objective-c 啊,写死你。。
    wdhwg001
        31
    wdhwg001  
       2016-05-31 09:48:16 +08:00 via iPhone
    @pH php 巨大而又没什么逻辑的基本库函数名…
    jetyang
        32
    jetyang  
       2016-05-31 09:51:17 +08:00
    不会让你写涉及第三方库的代码,一般代码量不大,简单的比如:实现一个方法反转字符串,输入 abcd ,输出 dcba ;难一点儿的比如:前序遍历一颗二叉树。最复杂顶多也就 30 行代码左右了
    zealic
        33
    zealic  
       2016-05-31 09:52:15 +08:00   ❤️ 4
    Stackoverflow and Google Oriented Programming

    SGOP
    现在编程很大程度上都是,毕竟记忆能力是有限的
    我们可以理解为我们的大脑分为 内存、硬盘和工作缓存
    内存存最近几个月的项目和工作内容的细节
    硬盘存以前用过的技术信息的索引
    工作缓存存最近几天的工作上下文

    当需要切换项目和工作内容是,需要从硬盘读取大量索引,并通过大脑查询检索索引,再与外部搜索引擎通信读取信息并过滤,讲主要信息置换到内存中
    最后加载到工作缓存
    好了,喝杯茶开始工作吧
    jindian
        34
    jindian  
       2016-05-31 10:06:24 +08:00
    一般只会让手写小段代码实现一些算法, 目的也就是高效的筛选面试者
    SunnyCoffee
        35
    SunnyCoffee  
       2016-05-31 10:19:59 +08:00   ❤️ 1
    感觉像是潜水考验你的水下憋气一样。
    buptrobin
        36
    buptrobin  
       2016-05-31 10:32:25 +08:00   ❤️ 1
    首先,考手写代码不会去考很多类库的,所以不用担心什么库函数问题。
    但如果最基本的库函数都不会,那肯定是丢分的。
    一般都是考基本问题的解决,考思路以及实现是严谨性。
    有的就是考基本函数的实现,比如 atoi 这样。
    coddmajes
        37
    coddmajes  
       2016-05-31 10:39:05 +08:00
    我觉得还是很有用的,,,
    zog
        38
    zog  
       2016-05-31 10:51:43 +08:00
    对于想找个代码翻译器的员工有意义, 对于想找个解决问题的员工没意义. 面试更应该考察解决解决问题的能力, 信息检索能力.
    BUPTGuo
        39
    BUPTGuo  
       2016-05-31 12:07:42 +08:00   ❤️ 1
    不管有没有意义,不能手写代码基本是找不到太靠谱的工作的,除非你的项目实习经历很匹配
    chairuosen
        40
    chairuosen  
       2016-05-31 12:10:59 +08:00
    上机比手写好吧,起码要筛出一指禅
    mengzhuo
        41
    mengzhuo  
       2016-05-31 13:09:48 +08:00 via iPhone
    手写确实蛋疼
    面试时碰到过手写质数筛、 lru 、 floodfill
    wizardoz
        42
    wizardoz  
       2016-05-31 13:16:09 +08:00
    就好比说足球队招人考踮球有意义吗?比赛的时候踮球能踮得分?
    但是对一比较初级的球队来说(比如少年队),这个还是是很有意义的,原因不用说了吧。
    对于比较高端的招人,比如 C 罗和梅西的转会,就不会考查他们踮球。但是并不代表他们不会。
    msg7086
        43
    msg7086  
       2016-05-31 13:16:37 +08:00
    考手写代码的大多是大公司。
    人家年薪 100K 放在那,一个星期几十个人投简历,一个月光现场面试就有十几人,你怎么筛选人啊?
    给你个 IDE 一个 Google 一个爆栈网让你写代码,十几个人都能写出来,让你从里面挑 2 个你怎么挑?
    SourceMan
        44
    SourceMan  
       2016-05-31 13:18:45 +08:00   ❤️ 2
    楼上的不要自己不行就认为此举没有意义
    wshcdr
        45
    wshcdr  
       2016-05-31 14:11:49 +08:00
    对公司而言,手写代码是成本最小的筛选方式
    ilikekindle
        46
    ilikekindle  
       2016-05-31 14:26:00 +08:00
    也许将来会有人来提问:“程序员手敲代码是否有意义?”
    iamjs
        47
    iamjs  
       2016-05-31 16:30:33 +08:00
    有。。。前端 面试 简单 css 测试
    有 1/10 的人 margin border padding 写错。。。
    5/10 的人 radius 写错, moz ms webkit 写错
    jarlyyn
        48
    jarlyyn  
       2016-05-31 16:32:46 +08:00
    非常有意义。

    当然,如果是考拼写就没意义了。
    Cloudee
        49
    Cloudee  
       2016-05-31 19:00:42 +08:00 via iPhone
    就我面过的手写代码的面试而言,逻辑没问题的情况下,少量的拼错是没问题的,甚至不太清楚的方法还能问面试官,面试官当时拿电脑查了 javadoc 给我。但是写的递归出不来,边界条件下运行出错估计就要扣分了
    pH
        50
    pH  
       2016-05-31 19:02:03 +08:00
    @mengzhuo floodffill ?是啥。 LRU 是让你写一个实现的数据结构出来么?
    youKnowDai
        51
    youKnowDai  
       2016-05-31 20:15:09 +08:00
    mengzhuo
        52
    mengzhuo  
       2016-05-31 23:11:18 +08:00 via iPhone
    @pH 自己 Google 去
    lru 还要求无错 某头条的面试题
    对了 还有 n 叉树 dfs 找所有父节点 某雷的面试题
    蛤蛤蛤
    nomemo
        53
    nomemo  
       2016-05-31 23:17:56 +08:00
    你可以不会写,但有人会写就可以了
    然后招会写的
    maomaomao001
        54
    maomaomao001  
       2016-05-31 23:19:19 +08:00 via Android
    @odirus 可是,纯文本环境也和纸上写没啥区别啊~~
    没有只能 IDE 的时代~~无法想象能写大应用
    手写的话,算法,数据结构还行~~~ 大一点写在纸上太恶心了~~~
    msg7086
        55
    msg7086  
       2016-05-31 23:45:20 +08:00
    @maomaomao001 请搞清楚我们讨论的是面试,不是让你 20 分钟写出一个操作系统。
    我说个某位在 Google 的朋友给我 Mock interview 时候的题目好了。

    给一个包含若干英文单词 / 句子的字符串。
    比如 "Hello world boy"。
    逆序单词,但保持单词内的字母顺序不变。
    比如 "boy world Hello"。

    需要用到 IDE 吗?
    如果 Google 的面试题都不需要用到 IDE ,那别的公司我觉得应该也不需要用到了。
    janxin
        56
    janxin  
       2016-05-31 23:59:41 +08:00 via iPhone
    一般我都是要求先说实现原理,然后自己实现一下,当然也不会要求能编译通过。一个是基础到底是不是扎实,尤其是算法数据结构这些基础;另外一点是看从思路到代码的能力是不是过关。

    SGOP 这种我都是直接 pass 了
    matthewz
        57
    matthewz  
       2016-06-01 00:02:43 +08:00
    这都是 Google 之类的公司先搞出来的

    但问题是, 国外的 FLAG 题目很多都是不需要特别的算法知识, 比如贪心是纯粹拼智商.我反正真的一次需要高级数据结构的题目都没碰到过, 基本都是拼实现的题目, 动规, 递归.

    而国内各大公司出题简直丧心病狂, 听说 KMP 红黑都有, 根本不考虑候选人未必学过某些知识就出题. 百度之前考过三门问题简直神经的可以. 说白了就是中国人多, 爱咋出咋出都行, 反正也都是天天加班干苦工.
    incompatible
        58
    incompatible  
       2016-06-01 00:35:41 +08:00   ❤️ 1
    曾经面试一个小公司,手写 jdbc 写到面试官潸然落泪,说是面了这么多终于遇到一个靠谱的。
    之后我面试别人时也会加上这道题。

    Java 那么多 ORM 框架,刨根到底无非就是对 jdbc 的封装。所以面试时看对方会不会 jdbc ,基本就能看出来他刨根问底的 欲望有多强。
    mikegreen7892003
        59
    mikegreen7892003  
       2016-06-01 00:59:53 +08:00   ❤️ 1
    手写代码可以看看 coding 的基本功,思路是否清晰,做事是否认真,等等。

    coding 基本功:
    对代码的基本用法是否熟悉。比如 Python:

    def foo(one_default_dict=None):
    if one_default_dict is None:
    one_default_dict = {}
    balabala

    def foo(one_default_dict=None):
    if one_default_dict:
    one_default_dict = {}
    balabala

    def foo(one_default_dict=None):
    one_default_dict = one_default_dict or {}
    balabala

    我一般就会让面试的人手写一个默认值会是 dict 的例子,上面几种写法都说得过去。然后可以问问为什么这么写。经常写代码并且有思考的人,很容易说出所以然来。反之亦然。


    思路是否清晰:
    不同人写代码有不同风格。对于三五行的代码,有些人喜欢想好再写,有些人喜欢写好再改,都是 okay 的。
    而思路清晰的人,在这么短的代码里,能够比较容易看出自己代码的逻辑错误,所以基本不应该写错。


    做事情是否认真:
    程序员嘛,最重要的考核标准之一当然是写代码是否认真。而当场手写代码是最容易看出来的方式。


    顺便说,有些人抱怨自己有 9 分能力,却只能面试出 6 分,但别人有 3 分能力,却能面试出 9 分。
    而手写代码这回事,一般不会被高估。实际上会给大家一个更公平的面试环境。
    是骡是马,拉出来溜溜呗。都是程序员,手写代码谁怕谁呀~

    至于有些人认为 IDE , Google, StackOverflow 能够解决问题即可。
    我想说的是,对于有一年或者以上工作经验的人来说,手写三五行代码只是非常基础的能力。如果这点都做不到的话,很难让人相信能把大的模块做好。
    当然,最坑的是,这样的人挖的坑,谁来填,谁来填,谁来填!(因为他们往往看不出自己抄的代码到底哪里有问题。)

    当然,我这些观点都是作为面试官的角度来看。大部分公司都希望招到能干活能解决问题的程序员。考察手写代码是能够在最短时间内看出很多东西的方式吧。也许有所偏颇。
    顺便说,我就没见过学得会手写代码的人学不会用 IDE , Google, StackOverflow 解决问题。嘿嘿嘿~
    maomaomao001
        60
    maomaomao001  
       2016-06-01 10:31:59 +08:00 via Android
    @msg7086 这个 手写 IDE 写完全一样啊。所以,用纸的(相比于不用 IDE ) 的 尤特点在哪里???
    msg7086
        61
    msg7086  
       2016-06-01 11:35:27 +08:00
    @maomaomao001 如果照你说的「手写 IDE 写完全一样」,那么人家考手写不就好了。
    另外手写和 IDE 写代码的要求是不一样的。
    手写代码不要求完全无错,你可以写错单词,写错函数,这都无所谓。
    用 IDE 写的话就要求完全无错,程序要能直接运行跑出答案了。
    通常考白板题对面试者来说更简单。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2767 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 12:18 · PVG 20:18 · LAX 05:18 · JFK 08:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.