程序员如何做到「编程速度又快, Bug 数量又少」? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
liuhanyang0
V2EX    程序员

程序员如何做到「编程速度又快, Bug 数量又少」?

  •  1
     
  •   liuhanyang0 2015-03-12 09:19:54 +08:00 7998 次点击
    这是一个创建于 3873 天前的主题,其中的信息可能已经有所发展或是发生改变。

    http://jjyy.guru/how-fewer-bugs/

    三个程序员被要求穿过一片田地,到达另一侧的房子。

    菜鸟程序员目测了一下之间很短的距离,说:“不远!我只要十分钟。”

    资深程序员看了一眼田地,想了一会,说:“我应该能在一天内过去。”菜鸟程序员很惊讶。

    大神程序员看了一眼田地,说:“看起来要十分钟,但我觉得十五分钟应该够了。” 资深程序员冷笑了一声。

    菜鸟程序员出发了,但只过了一会,地雷爆炸了,炸出了巨大的洞。这下他必须偏移预定的路线,原路返回,反复尝试穿过田地。最后他花了两天到达目的地,到的时候颤颤发抖,还受了伤。

    资深程序员一出发就匍匐前进,仔细地拍打地面,寻找地雷,只有在安全的时候才前进。他在一天的时间内小心谨慎地缓慢爬过了这片地,只触发了几个地雷。

    大神程序员出发之后径直穿过了田地,十分果断。他只用了十分钟就到了另一边。

    “你是怎么做到的?”另外两个人问道,“那些地雷怎么没有伤到你?”

    “很简单,”他回答道,“我最初就没有埋地雷。”

    38 条回复    2015-03-16 10:00:00 +08:00
    Arrowing
        1
    Arrowing  
       2015-03-12 09:30:16 +08:00   2
    Why don't you try REPL Driven Development?
    PS: REPL is Read-Eval-Print-Loop
    init
        2
    init  
       2015-03-12 09:33:34 +08:00
    printf (“hello world\n”);
    hahastudio
        3
    hahastudio  
       2015-03-12 09:40:18 +08:00
    写完之后做时光机回去干掉以前的自己
    zealic
        4
    zealic  
       2015-03-12 09:49:31 +08:00   1
    @init 大小写不正确,没有标点,并且会存在编译错误,因为使用的是全角符号。
    crayhuang
        5
    crayhuang  
       2015-03-12 10:50:13 +08:00
    @init Great mind think alike
    zhouquanbest
        6
    zhouquanbest  
       2015-03-12 10:52:51 +08:00
    和做到 “作业写得又快 错误又少” 不是一回事吗
    Laobai
        7
    Laobai  
       2015-03-12 12:01:42 +08:00 via Android
    不写不就没错误了么
    zhc
        8
    zhc  
       2015-03-12 12:05:43 +08:00
    能真正理解这个故事的人肯定是优秀程序员, 效率不好的程序员真的是被自己挖的坑搞得不可开交.
    rubygohell
        9
    rubygohell  
       2015-03-12 12:48:32 +08:00
    当老板
    shyrock
        10
    shyrock  
       2015-03-12 12:56:11 +08:00
    说实话没看懂大神和资深的区别。。。
    liuhanyang0
        11
    liuhanyang0  
    OP
       2015-03-12 15:28:01 +08:00
    @zhouquanbest 作业不需要维护
    liuhanyang0
        12
    liuhanyang0  
    OP
       2015-03-12 15:31:13 +08:00
    @zhc 我身边就有很多资深程序员(10年经验以上),经历过有光环的项目,但写出来的代码还是布满地雷
    liuhanyang0
        13
    liuhanyang0  
    OP
       2015-03-12 15:31:58 +08:00
    @liuhanyang0 但经常会感叹于他们躲雷功夫的高深
    liuhanyang0
        14
    liuhanyang0  
    OP
       2015-03-12 16:02:40 +08:00
    @Laobai 有理有据,让人信服
    dingz
        15
    dingz  
       2015-03-12 17:12:24 +08:00
    有时候粗心会犯低级错误,该怎么避免,现在我就是多测试,但难免有漏网之鱼
    jsyangwenjie
        16
    jsyangwenjie  
       2015-03-12 20:37:01 +08:00   1
    马儿如何跑的又快,又不吃草?
    invite
        17
    invite  
       2015-03-12 20:41:30 +08:00
    哦。
    Alex_L
        18
    Alex_L  
       2015-03-12 20:51:00 +08:00
    TDD既能加快编程速度,又能减少bug,还不会给后人埋地雷。
    luoluoluo
        19
    luoluoluo  
       2015-03-12 21:01:12 +08:00
    xiaozi
        20
    xiaozi  
       2015-03-12 21:07:04 +08:00
    @Arrowing good idea
    WispZhan
        21
    WispZhan  
       2015-03-12 21:12:14 +08:00
    编码之前 必须 先设计,设计之前 必须 分析
    typcn
        22
    typcn  
       2015-03-12 21:13:37 +08:00
    写一段就测试一下。。
    lightening
        23
    lightening  
       2015-03-12 21:17:35 +08:00
    多写测试……
    sammo
        24
    sammo  
       2015-03-12 22:09:42 +08:00
    尝试所谓的最佳实践,然后开发自己的最佳实践。
    dreamtrail
        25
    dreamtrail  
       2015-03-12 22:53:56 +08:00
    因为你不可能总在造轮子,所以哪怕你是再优秀的程序员,有时候也会踩上别人埋的地雷。。
    spacewander
        26
    spacewander  
       2015-03-12 23:23:38 +08:00
    大神程序员是看了资深程序员走了哪条路,所以才不会触发地雷的……
    xdeng
        27
    xdeng  
       2015-03-13 00:36:06 +08:00 via iPhone
    你一定不是程序员
    liuhanyang0
        28
    liuhanyang0  
    OP
       2015-03-13 09:16:20 +08:00
    @Alex_L TDD不会加快编程速度,而且只是一种辅助。你会发现写得最好的程序都没有单元测试,比如linux kernel、lua。
    liuhanyang0
        29
    liuhanyang0  
    OP
       2015-03-13 09:18:19 +08:00
    @WispZhan 这正是《代码大全》的观点,深表认同。
    liuhanyang0
        30
    liuhanyang0  
    OP
       2015-03-13 09:18:49 +08:00
    @sammo 深表认同
    jokester
        31
    jokester  
       2015-03-13 09:19:22 +08:00
    deadly correct
    liuhanyang0
        32
    liuhanyang0  
    OP
       2015-03-13 11:17:28 +08:00
    @xdeng 看看我博客就知道我是不是
    yxzblue
        33
    yxzblue  
       2015-03-13 13:51:20 +08:00
    @hahastudio 说得好~
    liuhanyang0
        34
    liuhanyang0  
    OP
       2015-03-13 14:14:21 +08:00
    @zhc 最关键是自己浑然不觉,不知道自己不知道...
    Alex_L
        35
    Alex_L  
       2015-03-15 01:11:40 +08:00   1
    @liuhanyang0 TDD会加快编程速度,主要是分离关注点和缩短反馈周期。在一个大型系统里添加代码,如何确保你的代码按预期执行,测试显然是快速获得反馈的手段之一。REPL Driven也是快速获得反馈的手段之一,不足是没法把断言持久化。

    另外TDD不等于测试,测试也不等于单元测试。这几个都要分开说了。自动化测试已经是现代软件开发的最佳实践没什么好质疑的,Linux也有人做专门的自动化测试。Linux kernel的source code我看过一些,算不上"最好"
    liuhanyang0
        36
    liuhanyang0  
    OP
       2015-03-15 09:11:30 +08:00
    @Alex_L 我的意思是,一个人代码写得好,TDD不是核心。
    另外,分享一下你看过最好的源码?
    Alex_L
        37
    Ale_L  
       2015-03-15 10:24:31 +08:00 via iPhone
    @liuhanyang0 当然不是,这是一句无比正确的话,同样也可以套到,一个人代码写得好,编程语言/编辑器/算法/模式/编程风格不是核心...

    不是说举几个代码质量比Linux高的就是最好的代码了,只是Linux源码质量参差不齐,很多地方dirty and hack,我想不通从哪个维度评价Linux源码能算最好
    liuhanyang0
        38
    liuhanyang0  
    OP
       2015-03-16 10:00:00 +08:00
    @Alex_L TDD在业务多变的领域不适用,比如游戏业务。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1015 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 18:46 PVG 02:46 LAX 11:46 JFK 14:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86