热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

让你的软件永生的7个规则

生命会逝去,但一个好的软件不会。要想写出一个永垂不朽的软件,关键是
文章目录[隐藏]
  •  1.模块化
  •  2.测试
  •  3.持续集成
  •  4.自动化
  •  5.冗余
  •  6.提交
  •  7.计划
  •  结束

  生命会逝去,但一个好的软件不会。

  要想写出一个“永垂不朽”的软件,关键是你能否遵循以下规则:

 1.模块化

规则1:模块化。在一个模块中找bug总比在整个代码库里找简单得多。

  人脑是极其复杂的生物,可以设计出能处理复杂问题的CPU,但自我本身却处理不来这些问题。想要证明吗?那么告诉我,在不使用任何计算器,纯心算的条件下,你能算出13*35是多少么。我敢打赌,你不能。至少在短时间内你办不到。

  但是,我们擅长将复杂的问题分解为更容易解决的问题。

13*10是多少? 130。
13*5呢?那就是130/2=65。
130*3? 390。
390+65是多少? 455。答案就是它了!

  这就是如何分解问题的一个事例:将一个大型的复杂问题分解为一个个独立的小型的简单问题,从而快速得出正确的答案。

  我们也可以按照同样的逻辑对待软件。模块化的代码不仅易于阅读,而且更容易调试。在大多数情况下,堆栈跟踪只会导致非常小的代码子集,而不是一下子出来个1000行代码的文件。甚至在更新某个特定模块时,也不需要捣腾整个系统——只要正在更新的那部分就可以了。

 2.测试

规则2:任何不经过测试的代码都是耍流氓。

  很多人认为测试和写软件是两码事,即使是在学校中,教师会教你如何使用C ++模板,却不会告诉你如何测试。在线教程能教你如何在Brainfuck制作web服务器,却不会说明如何测试。而这就是问题的所在。

  有人说,我们应该在编写实际的应用程序逻辑之前就先写好测试。

  但是在我看来,什么时候写测试其实并没有关系,只要写了就ok。不要试图一步登天,不要想着刚开始就写得出完美的测试:从简单的起步。用蛮力方式测试(如print(add(1,1)=2)),然后再测试对应语言的框架。

  测试有助于我们了解软件的复杂性。你可以学到如何将软件模块化为可以独立的测试件。

 3.持续集成

规则3:使用持续集成。只要出现问题代码,就会通知你。

  你写的测试,你必须确保可以应用于多种环境(例如Python的多个版本)。并且如果需要作出任何改动,也得测试。

  当然你也可以手动操作命令行,但是使用持续集成的平台更方便,更快捷,成本更低。

 4.自动化

规则4:自动化。自动化可以减少步骤,节约时间。

  我看到很多人会存储命令txt文件,以便需要的时候可以复制粘贴。我建议你不妨学习bash脚本(和/或Python)。

  以下是一些你必须自动化的bash脚本任务:

  • 将README.md转换为其他格式(取决于不同的分销渠道要求)
  • 自动化测试(包括创建模拟服务器和/或数据,删除临时文件等)。
  • 阶段化代码给开发服务器。
  • 部署到生产。
  • 自动化的更新依赖(特别是当更新有可能会破坏现有的API时,尤其要小心)。

 5.冗余

规则5:冗余版本控制:不要仅依赖于Git,可以使用多个同步异地的远程遥控,增加冗余。

  俗话说,鸡蛋不能放在同一个篮子里。如果你的代码只托管在Github上,那么一旦Github出现故障等,你的工作流程就会受影响。

  给你个参考,我的代码是这么存储的:

  • 所有代码都放在Dropbox的“Codebase”文件夹中。自动同步变化。
  • 在Github也放上几乎所有的代码。
  • 最重要的代码,则同时放在两处比较秘密的地方。

  你看,除非世界末日,不然我的代码怎么搞也不会丢失。

 6.提交

规则6:提交:做一点小小的改变,然后频繁提交,不要出现问题代码。

  很多程序员将版本控制系统当作是备份方式,而非维护历史的一种手段。要知道,像这些历史信息是没用的,除非你想要做的只是检索文件。

  在你提交改动信息一个星期后,因为发现引入了一个新的bug,所以你需要恢复原先的内容。但是现在,因为你提交的信息已经覆盖了原先的信息,那么你就只能慢慢摸索原来是怎么写的了。

  版本控制系统,正是为了防止出现这样的情况。

  如果你觉得写出好的提交很难,那么可以按照下面这个模板走:

  • 每次提交都应该有一个目的。确定是修复bug,添加新的功能,还是删除现有的功能?
  • 改动一次提交一次。
  • 提交信息包括发布排序号码。
  • 提交描述中应说明改动情况。这取决于项目的指导方针,通常包括是什么造成了bug,如何修复,以及如何对改动进行测试。
  • 提交信息应写得明白易懂。

 7.计划

规则7:有计划:为最坏的情况作准备。如果确实出现了错误应怎么做?在文件中详细说明这些步骤。

  即使照着上面的6条规则一丝不苟地执行,写出来软件也不可能尽善尽美。如果你曾这样想过,那就未免过于天真了。

  不怕一万,就怕万一。

  可以制定一个计划,为最坏的情况作准备。如果网站流量一下子太多了怎么办?出现未知bug,导致系统瘫痪,可以到哪里去扒拉出备份?半夜三更服务器宕机,可以找谁?

  好好考虑这些情况。但也不必过于杞人忧天。然后尽可能自动化可以自动化的步骤。

  详细地记录到文档中。

让你的软件永生的7个规则

 结束

  记住,你的软件是你的遗产。它能活得多久完全取决于你。So,软件是朝生暮死还是永垂不朽,就看你怎么做了。

  英文原文:The 7 Rules for Writing Software That Won’t Die When You Do 翻译:codeceo

欢迎大家阅读《让你的软件永生的7个规则》,跪求各位点评,若觉得好的话请收藏本文,by



推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文介绍如何解决在 IIS 环境下 PHP 页面无法找到的问题。主要步骤包括配置 Internet 信息服务管理器中的 ISAPI 扩展和 Active Server Pages 设置,确保 PHP 脚本能够正常运行。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文探讨了如何在发布 XenApp 应用时,通过命令行参数实现启动时的参数传递。特别介绍了静态和动态参数传递的方法,并详细解释了 ICA 文件中两种参数传递方式的区别及安全检查机制。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
author-avatar
手机用户2602927383
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有