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

写了几千行代码以后自己就蒙了

  •  
  •   strahe · 2016-03-11 11:05:26 +08:00 · 3645 次点击
    这是一个创建于 3186 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,也可能由于时间紧迫,但感觉更多的原因还是自己的经验不足,开始写代码前没做更多的设计,理解个大概就先写起来,跑起来再说,写了几千行以后,再往后写,就发现有时候不得不重复写一些功能相似的代码,之前写的都不怎么"通用",有一些代码逻辑也不是很好,但都能用,我自己是有写出简洁高效代码的意识的,但就是因为这个,所以如果没开好头,后期就会处于纠结之中,越写越矛盾.
    请问一下怎么提升写好代码的能力,代码质量高,设计合理,还要优雅一些,求老程序员能传授一下自己的经验,谢谢.
    如果要特指语言的话,就 python.

    11 条回复    2016-03-11 18:21:08 +08:00
    finab
        1
    finab  
       2016-03-11 11:07:23 +08:00 via iPhone   ❤️ 1
    无他,唯手熟尔
    chend
        2
    chend  
       2016-03-11 11:24:01 +08:00   ❤️ 1
    需求加着加着, 一开始的代码 就乱了~~~
    要么经验丰富(代码经验和业务经验), 合理规划 代码 结构。。
    要么, 写完功能后, 顺便考虑下 可能的需求改动, 重构优化, 代码质量慢慢提高
    lxy
        3
    lxy  
       2016-03-11 12:08:35 +08:00   ❤️ 1
    哈哈,刚好前几天独自完成了 2000 行的小项目,个人用。其实是第二次写了,把之前的全部推倒重写(之前的 BUG 太多,基本运行不起来,由于代码太乱我都不想再改了)。

    重写的收获很大,简单来说最重要的经验就是自顶向下写代码。先考虑好最上层函数大概需要做什么,然后把需要做的动作写成一个函数,我也是用 python 写的,我觉得 python 有个特别有用的东西就是 pass ,先把顶层的写完,下面一层除了名称外不必考虑太多,主体暂时一律写 pass 。

    比如写个抓帖子的爬虫,最上层就是 get_thread(), check_thread(), get_post(), save_post(),根本不必考虑下层写什么,先把主要的逻辑动作写完。写完后依此下去,考虑 get_thread 主要做什么,一直到最后不可分割的原子动作,每个函数代码可控制在 50 行以内(即使只有不到十行也别觉得太少),而且代码高度可重用。

    另外 python 另一个有用的东西就是装饰器, log 、通用循环结构都可以写成装饰器,可以节省大量的重复代码,简化结构。
    akring
        4
    akring  
       2016-03-11 12:52:15 +08:00   ❤️ 1
    经验堆砌,还有就是条件允许的情况下多重构,不断用新学到的知识优化代码, keep learning and moving on
    zymmm
        5
    zymmm  
       2016-03-11 13:12:13 +08:00
    promise
    feiyuanqiu
        6
    feiyuanqiu  
       2016-03-11 13:39:50 +08:00   ❤️ 1
    推荐看看 clean code (代码整洁之道),工作一两年之后再看这本书感觉简直把自己平时的坏习惯都写到了
    然后写代码的时候一直记着 solid ,看看写的代码是不是符合这个原则,特别是单一职责、开放关闭两个,对写出清晰的类、方法很重要
    WispZhan
        7
    WispZhan  
       2016-03-11 13:51:03 +08:00   ❤️ 1
    《代码整洁之道》
    《重构:改善既有代码的设计》
    《 Head First :面向对象分析与设计》
    strahe
        8
    strahe  
    OP
       2016-03-11 18:18:42 +08:00
    @chend 好像是必经之路啊
    strahe
        9
    strahe  
    OP
       2016-03-11 18:19:41 +08:00
    @lxy 嗯我目前也是这中思维,只是还考虑不到太多情况
    strahe
        10
    strahe  
    OP
       2016-03-11 18:20:19 +08:00
    @feiyuanqiu
    @WispZhan
    ok, 谢谢
    strahe
        11
    strahe  
    OP
       2016-03-11 18:21:08 +08:00
    @akring 看来反复写是成长的必经之路
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2030 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:23 · PVG 08:23 · LAX 16:23 · JFK 19:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.