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

读书笔记--从代码到沟通

  •  
  •   JustW · 257 天前 · 761 次点击
    这是一个创建于 257 天前的主题,其中的信息可能已经有所发展或是发生改变。

    序言

    各位程序猿/媛们,还记得你刚入行时写下的那些代码吗?是不是像一堆乱麻,连自己都看不懂?是不是像我一样,曾经天真地以为,只要代码能运行,就万事大吉?

    哈哈,别担心,我们都经历过那个阶段。写代码就像学武功,一开始都是乱打一气,只有经过不断的练习和领悟,才能慢慢掌握其中的奥妙。

    那么推荐大家可以看看文章末尾推荐的几本书籍.这些书籍就是指引我们从无名小辈到扫地僧的武功秘籍。

    代码

    命名:代码的“名片”

    还记得那个名为 d 的变量吗?它就像一个没有名片的人,你永远不知道它是谁,它要做什么。这样的代码,就像一个江湖黑话满天飞的武林,让人摸不着头脑。

    好的命名,就像一张清晰的名片,能让人一眼就明白它的身份和职责。比如,elapsedTimeInDays 比 d 好懂多了吧?这就好比武林中人,行走江湖,总得有个响亮的名号,让人一听就知道你是谁,你擅长什么。

    所以,请记住以下秘诀:

    • 抛弃那些毫无意义的字母,用完整的单词或短语来命名。
    • 避免误导。 别用 accountList 来指代一组账号,除非它真的是 List 类型。
    • 做有意义的区分。 a1 、a2 、aN 这种命名方式简直是灾难,请用 source 和 destination 来代替吧!

    好的命名是代码整洁的第一步,也是最重要的一步。它能让你的代码像优美的散文一样,清晰易懂,令人愉悦。

    函数:代码的“士兵”

    还记得那个长达几千行的函数吗?它就像一个臃肿的胖子,行动迟缓,效率低下。这样的代码,就像一支乌合之众,毫无纪律可言,战斗力自然低下。

    好的函数,应该像训练有素的士兵,短小精悍,各司其职。每个函数只做一件事,就像每个士兵只负责一个任务一样,这样才能保证整个队伍的效率和战斗力。

    所以,请记住以下秘诀:

    • 函数要短,越短越好! 20 行封顶,10 行更佳。(根据实际情况来)
    • 每个函数只做一件事。 别让你的函数像个杂耍演员,一会儿变个戏法,一会儿又变个戏法。
    • 每个函数一个抽象层级。 别把高层逻辑和底层细节混在一起,这会让你的代码像迷宫一样难懂。

    好的函数是代码整洁的基石。它能让你的代码像积木一样,易于组合,易于维护。

    示例

    // 糟糕的函数
    public void calculateAndPrintReport() {
      // 计算数据
      // 格式化数据
      // 打印报表
    }
    
    // 好的函数
    public void calculateReport() {
      // 计算数据
    }
    
    public void printReport() {
      // 格式化数据
      // 打印报表
    }
    

    注释:代码的“点缀”

    还记得那些不知所云的注释吗?它们就像一堆垃圾,只会让代码更难懂。这样的代码,就像一个脸上涂满油彩的小丑,让人眼花缭乱,却不知其意。

    示例

    i++; // 将 i 加 1
    

    好的注释,应该像画龙点睛,起到解释和说明的作用,而不是画蛇添足。它应该简洁明了,直击要害,让人一看就懂。

    所以,请记住以下秘诀:

    • 注释不能美化糟糕的代码。 如果代码很烂,最好的办法是重写,而不是加注释。
    • 用代码来阐述。 很多时候,你都可以用代码来表达你的意图,而不需要注释。
    • 写好注释。 如果非要写注释,请确保它清晰、准确、简洁。

    好的注释是代码整洁的点缀。它能让你的代码锦上添花,但绝不能喧宾夺主。

    示例

    // 解释算法的注释
    // 使用快速排序算法对数组进行排序
    public void sort(int[] array) {
      // ...
    }
    

    格式:代码的“颜值”

    还记得那些缩进混乱、毫无章法的代码吗?它们就像一堆杂草,让人头晕眼花。这样的代码,就像一个衣衫褴褛的乞丐,毫无美感可言。

    好的格式,就像代码的“颜值”,能让你的代码赏心悦目,易于阅读。它就像一个穿着得体的绅士,让人一看就心生好感。

    所以,请记住以下秘诀:

    • 保持代码行短小。 别让你的代码像一条长蛇,让人看不到尽头。
    • 使用空格和缩进来区分不同的代码块,让代码结构清晰可见。
    • 团队要有一致的格式规范,别让你的代码像一个拼凑的怪物。

    好的格式是代码整洁的门面。它能让你的代码更专业,更易于维护。

    示例

    // 糟糕的格式
    if (condition) {
    doSomething();
    } else
    {
    doSomethingElse();
    }
    
    // 好的格式
    if (condition) {
      doSomething();
    } else {
      doSomethingElse();
    }
    

    对象和数据结构:代码的“骨架”

    对象和数据结构,就像代码中的“骨架”,支撑着代码的整体结构。它们就像武功中的内功和招式,相辅相成,缺一不可。

    对象,就像一个训练有素的特工,身怀绝技,却又深藏不露。它把数据隐藏在幕后,只向外界展示它能做什么,而不是它是什么。

    数据结构,就像一个透明的玻璃箱,里面装满了各种数据,一目了然。它没有隐藏,也没有秘密,所有数据都直接暴露在外。

    那么,什么时候该用对象,什么时候该用数据结构呢?

    • 当你需要添加新数据类型,而不是新函数时,对象是你的好帮手。
    • 当你需要添加新函数,而不是新数据类型时,数据结构是你的好选择。

    记住,对象和数据结构各有优劣,选择合适的工具,才能写出整洁的代码。

    示例

    • 当你需要存储和操作一组数据,并且需要频繁地添加或删除数据时,ArrayList 是一个好的选择。
    • 当你需要存储和操作一组数据,并且需要快速地查找数据时,HashMap 是一个好的选择。
    • 当你需要定义一个抽象的概念,并提供一些操作数据的函数时,对象是你的好帮手。

    错误处理:代码的“消防员”

    错误处理,就像代码中的“消防员”,负责在代码出现问题时及时扑灭火灾。它就像武功中的防御招式,能够在关键时刻化解危机。

    但是,如果消防员到处乱跑,只会让火势蔓延得更快。同样,如果错误处理代码写得不好,只会让代码更加混乱,难以维护。

    所以,请记住以下秘诀:

    • 使用异常来处理错误,而不是返回错误码。 这能让你的代码更整洁,逻辑更清晰。
    • 先写 try-catch-finally 语句,再写正常逻辑。 这能帮你定义代码的行为边界,让代码更易于维护。
    • 避免返回 null 值。 这只会给调用者添乱,增加代码的复杂度。

    好的错误处理应该像隐形的防护网,在代码出现问题时及时保护,而不是像个碍手碍脚的家伙,到处添乱。

    边界:代码的“国境线”

    边界,就像代码中的“国境线”,将你的代码与外部世界隔离开来。它就像武功中的门派之别,划清了界限,避免了冲突和混乱。

    如何守好这道“国境线”,是写出整洁代码的关键。

    所以,请记住以下秘诀:

    • 封装第三方代码。 不要让你的代码对第三方代码了如指掌,这会增加代码的耦合度。
    • 编写学习性测试。 通过编写测试来学习和理解第三方代码,这能让你更快、更准确地使用它。
    • 预测未来。 当你需要使用尚未存在的代码时,先定义你想要的接口,这能让你不受制于人。

    好的边界应该像一道坚固的城墙,保护你的代码免受外部世界的侵害,同时又能方便地与外界沟通。

    单元测试:代码的“侦察兵”

    单元测试,就像代码中的“侦察兵”,负责在代码中寻找 bug 和缺陷。它就像武功中的练功桩,帮助你不断提升代码的质量。

    但是,如果侦察兵漫无目的地乱跑,只会浪费时间和精力。同样,如果单元测试写得不好,不仅不能保证代码质量,反而会成为代码维护的负担。

    所以,请记住以下秘诀:

    • 遵循 TDD 三定律,先写测试,再写代码。
    • 保持测试整洁。 测试代码和生产代码一样重要,都需要精心设计和维护。
    • 每个测试只测试一个概念。 不要让你的测试像个贪婪的胖子,什么都想测。

    好的单元测试应该像一把锋利的匕首,直击代码的要害,快速、准确地找到问题。

    类:代码的“建筑师”

    类,就像代码中的“建筑师”,负责构建代码的整体结构。它就像武功中的心法,决定了你的代码能走多远。

    一个好的建筑师,应该懂得如何设计出结构合理、功能清晰的建筑。同样,一个好的程序员,应该懂得如何设计出结构清晰、易于维护的类。

    所以,请记住以下秘诀:

    • 类应该短小。 不要让你的类像个巨无霸,什么功能都往里塞。
    • 每个类只负责一件事。 不要让你的类像个多面手,什么都会,却什么都不精。
    • 保持类的内聚性。 类中的方法和变量应该紧密相关,共同完成一个目标。

    好的类应该像一个精密的仪器,每个部件都各司其职,共同协作,完成复杂的任务。

    代码整洁之道:持续精进

    除了上面提到的内容,我还想补充以下几点:

    • 代码整洁是一种态度。 它不仅仅是技术问题,更是一种对代码的尊重和对专业的追求。
    • 代码整洁需要团队合作。 一个人写出整洁的代码并不难,难的是整个团队都保持一致的代码风格和质量标准。
    • 代码整洁需要持续学习。 随着技术的发展和项目的演进,代码整洁的标准也会不断变化,我们需要不断学习新的知识和方法,才能写出更好的代码。

    我个人的建议是,不要把代码整洁看成是一种负担,而应该把它看成是一种投资。整洁的代码可以提高开发效率,降低维护成本,让你的代码更易于理解和扩展。

    最后,我想说,代码整洁之道,没有终点,只有不断精进。让我们一起努力,写出更整洁、更优雅的代码吧!

    开发

    作为一名开发者,我深知开发不仅仅是敲代码,更是一项需要沟通、协作和不断改进的系统工程。以下是我在阅读过程中总结的一些经验:

    持续沟通

    正如书中所说:“开发者必须在许多层面上进行交流” ,与团队成员、用户和其他利益相关者的有效沟通是项目成功的关键。

    • 与用户沟通: 了解用户的需求和期望,并确保开发的软件能够满足他们的需求。例如,在开发一个新的功能之前,可以通过用户访谈、问卷调查等方式收集用户的反馈意见。
    • 与团队成员沟通: 保持项目进度和代码质量的一致性。例如,可以通过定期召开团队会议、使用代码审查工具等方式进行沟通。

    及时修复漏洞

    代码中的漏洞就像房间里的“破窗户”,如果不及时修复,就会让房间变得越来越脏乱。因此,我们应该养成及时修复漏洞的习惯,避免问题越积越多。

    • 使用代码分析工具: 帮助我们发现代码中的潜在问题。例如,可以使用静态代码分析工具来检查代码的语法错误、代码风格等问题。
    • 编写单元测试: 确保代码的正确性。例如,可以使用单元测试框架来编写测试用例,并定期运行测试。

    持续重构代码

    代码重构就像整理房间,可以让我们更容易地理解和维护代码。我们应该定期对代码进行重构,消除重复、冗余和难以理解的代码,让代码更简洁、更高效。

    • 使用重构工具: 帮助我们进行代码重构。例如,可以使用 IDE 中的重构功能来进行代码重构。
    • 遵循重构原则: 确保代码重构不会改变代码的行为。例如,可以使用测试驱动开发的方式来进行代码重构。

    使用合适的工具

    工欲善其事,必先利其器。选择合适的工具可以让我们事半功倍。

    • 版本控制工具: 例如 Git ,可以帮助我们管理代码版本,方便团队协作。
    • 代码分析工具: 例如 SonarQube ,可以帮助我们发现代码中的潜在问题,提高代码质量。
    • 构建工具: 例如 Maven ,可以帮助我们自动化构建过程,提高开发效率。

    保持学习的态度

    软件开发是一个快速发展的领域,新的技术和工具层出不穷。作为开发者,我们需要保持学习的态度,不断学习新的知识和技能,才能跟上时代的步伐。

    • 阅读书籍和文章: 了解最新的技术和趋势。
    • 参加培训和会议: 学习新的技能和知识。
    • 参与开源项目: 锻炼自己的开发技能,并与其他开发者交流学习。

    注重团队合作

    软件开发是一个团队合作的过程,我们需要与团队成员相互协作,才能完成项目目标。

    • 互相帮助: 团队成员之间应该互相帮助,共同解决问题。
    • 代码审查: 通过代码审查可以发现代码中的问题,并提高代码质量。
    • 结对编程: 通过结对编程可以提高代码质量,并促进团队成员之间的沟通。

    关注用户体验

    最终用户是软件的使用者,他们的体验决定了软件的成败。

    • 用户研究: 了解用户的需求和期望。
    • 用户界面设计: 设计易于使用和美观的用户界面。
    • 用户体验测试: 测试用户对软件的体验,并进行改进。

    拥抱变化

    软件开发是一个充满变化的过程,需求可能会变更,技术可能会更新。作为开发者,我们需要拥抱变化,灵活应对各种挑战。

    • 敏捷开发: 采用敏捷开发方法可以帮助我们快速响应变化。
    • 持续集成和持续交付: 通过持续集成和持续交付可以帮助我们更快地将软件交付给用户。

    追求卓越

    作为注重实效的开发者,我们应该追求卓越,不断提升代码质量和开发效率,为用户提供更好的软件产品和服务。

    • 编写高质量的代码: 代码应该是可读的、可维护的、可测试的。
    • 提高开发效率: 使用合适的工具和方法来提高开发效率。
    • 持续改进: 不断寻找改进代码和开发过程的方法。

    享受开发的乐趣

    软件开发是一项充满挑战和乐趣的工作。我们应该享受开发的过程,从中获得成就感和满足感。

    • 选择自己喜欢的项目: 参与自己感兴趣的项目可以让我们更有动力。
    • 与团队成员一起工作: 与团队成员一起工作可以让我们更快乐。
    • 挑战自我: 不断挑战自我可以让我们获得更大的成就感。

    总结

    注重实效的开发不仅仅是编写代码,更是一项需要沟通、协作和不断改进的系统工程。通过有效的沟通、及时的修复漏洞、持续的代码重构、使用合适的工具、保持学习的态度、注重团队合作、关注用户体验、拥抱变化、追求卓越和享受开发的乐趣,我们可以成为更加注重实效的开发者,为用户提供更好的软件产品和服务。

    让我们一起努力,用代码改变世界!(世界太大,不如从自己开始)

    参考书籍

    1.《代码整洁之道》

    2.《程序员修炼之道:从小工到专家》

    3.《重构:改善既有代码的设计》

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3354 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 11:36 · PVG 19:36 · LAX 03:36 · JFK 06:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.