如何编写出优秀软件

如何编写出优秀软件

  软件必须是自由的   优秀软件是自由软件。我将避免使用“开源”,因为它根本没有包含社会层面,它和技术本身同等重要。你可以从这里了解更多。   广泛被接受的工具和语言   编写优秀软件的语言是被广泛使用的,这使得有人能够阅读和修改代码。优秀的语言,比如C、Python和Java。当然也有例外,一些较少被使用的语言是更好的选择。   保持简单   优秀软件不做不必要的事情。换句话说,没有不必要的功能。实现没人使用的功能只会产生bug。设计软件时,保持简单应该作为最高优先级。正如爱因斯坦说的“让事情尽可能简单,而不是比较简单。”   太多抽象是糟糕的。如果你把代码隐藏在多层抽象之后,你也隐藏了bug。太多的抽象让代码难以理解,难以跟踪执行路径和debug。它也会降低性能。抽象之上的抽象经常可以在Java编写的企业软件中看到。优秀软件可以用Java编写,但是Java也让编写恐怖的、结构复杂代码变得非常容易。C++也是如此。   不要弄成火箭科学   使用具有真正意义的变量名。不要使用单字符变量名。它们几乎不可能理解和追踪。也有单字符的变量名,它们是被普遍接受了。例如对于坐标,用x和y就行。对于循环,就使用i,j等等。除此之外,不要这样使用了。通常地,对于优秀软件,代码的结构是清晰的,还有可查的、记录下来的代码风格。   文档是重要的   不管文档是多么地让人厌烦,优秀软件也是有文档的。代码有清晰的注释,软件有随之一起安装的手册。对于web应用程序,让文档可以在线上访问到。   开发者经常认为,当软件被完成后再去写文档,就足够了。那是完全错误的方式。文档必须是开发人员在开发软件过程中的一件事情。文档必须是开发的一部分,而不是代码被写完之后的工作。   使用版本控制系统   优秀软件使用版本控制系统,一直都用。如今我差不多总是推荐Git做版本控制,但是有一些情况,SVN之类的系统就可以做得很好了。版本控制容易回滚到可能有问题的修改。考虑下面的例子,如果没有版本控制系统,该怎么办: 开发者A修改了文件program.c,该文件被拷贝到了源码树(source tree),旧文件被替换了。后来发现了一个bug,问题出在开发者A对program.c所做的修改。开发者B、C等人费了好大劲儿才搞清楚开发者A修改了什么。如果有版本控制系统,这就不是问题了。当然聪明的开发组应该有备份的,因此在这种情况下,他们将找到修改前的原始备份,使用diff工具看看修改了什么地方。然而,既花时间、又麻烦。更不要提从备份拷贝并替换文件是多么地容易出错了。   扩展性   扩展性不是严格意义上的强制项,不过它经常让软件更加有用。开发软件、便于让它能够与其它软件一起被使用,是一种优秀的方式。事实上,这是Unix主要设计原则之一。   例子   互联网充满了编写良好的软件。很多标准的Unix工具编写良好,然而有些就不是。一个写得不错的例子是Memo,这是我写的软件。

原文发布于微信公众号 - Java学习网(javalearns)

原文发表时间:2015-05-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏嵌入式程序猿

这只电子狗跑哪里去了,快找

最新新换了批电脑,所有的开发软件都要重装,其中在IAR安装完,license激活后,打开软件时总是提示找不到dongle,导致项目无法编译,我用的是8.20版本...

11320
来自专栏云计算D1net

混合云和多云管理不再难:基础架构即代码来帮忙

随着运维流程变得越来越灵活,IT团队面临着越来越大的复杂度。当应用动态改变时,可以使用敏捷或者持续应用开发。但是当IT资源本身动态变化的时候怎么办呢多云和混合云...

41870
来自专栏Spark学习技巧

消息队列服务Kafka揭秘:痛点、优势以及适用场景

摘要:消息队列Kafka是一个分布式的、高吞吐量、高可扩展性消息队列服务,广泛用于日志收集、监控数据聚合、流式数据处理、在线和离线分析等,是大数据生态中不可或缺...

33630
来自专栏杨建荣的学习笔记

自动化平台开发小结(五)

今天在睡觉前,突然想明白了一个问题,也就意味着之前困扰我的几个问题都有了解决的思路,算是取得了一个阶段性的成果吧。 接下来的事情就会相对快一些了,我来简单说下。...

33450
来自专栏服务端技术杂谈

服务化的未来--ServiceMesh?

微服务之后什么最火?毫无疑问ServiceMesh。 目前各个大厂都在Mesh化,Mesh的前身是Side Car模式,随着互联网时代/移动互联网时代以及未来I...

12030
来自专栏魏艾斯博客www.vpsss.net

腾讯云数据库 MySQL 月付 8 元及基本使用

37660
来自专栏腾讯云技术沙龙

黄文俊:Serverless架构及场景介绍

大家好,自我介绍一下,目前我是腾讯云无服务器云函数产品负责人。我做了很多年后端开发。今天是从一个程序员角度讲解一下我们怎么样用Serverless架构。

50360
来自专栏企鹅号快讯

Python的web框架-Bottle

近日除了日常的工作复习(没错,KIM 是个准备裸考的考研狗),就是尝试着Python的web框架的一点点东西,今日特地搬出来跟大家分享下。 Python常见的文...

233100
来自专栏逍遥剑客的游戏开发

从Native到Web(五), emscripten学习笔记: 初体验

16430
来自专栏腾讯移动品质中心TMQ的专栏

HTTP性能测试

由于我们公司用户数量庞大,在服务上线之前,性能测试必不可少。本文主要介绍性能测试的流程,需要关注的指标,性能测试工具Apache bench的使用,以及常见的坑...

690140

扫码关注云+社区

领取腾讯云代金券