Graph + AI 中国峰会火热报名中,点击探索图分析更多可能! 了解详情
写点什么

32 条关于软件开发的建议和教训

Nicklas Millard

2021 年 6 月 30 日

32 条关于软件开发的建议和教训

近几年来,我一直为大大小小的客户开发专业软件。这些软件中有一些是在非常严格的环境下使用的,安全性和可靠性是最重要的。基于多年的工作经验,我提出了一系列有用的建议和教训。以下是我整理的清单,包括建议、经验教训和最佳实践。


  1. 有时候编写一些垃圾代码也没问题。应用程序的各个部分并不是生来平等的。

  2. 不必通过学习一门新语言来学习新事物。很多相同的事情可以用多种语言来完成,宁可深而不广。

  3. 编写抛弃型代码以测试不同的方法。别把这些抛弃型代码变成产品代码。

  4. 防御式编程。你是否记得你认为永远不会变空的那个方法参数?是啊,结果它还是变成了空值,你的应用程序“爆炸”了。只需写下这些卫语句(guard clauses)就可以了。

  5. 从来没有,永远也不会有应用程序的硬编码设置。写出可配置组件并向其传递环境变量。重启应用程序比重新编译和部署都要简单。

  6. 编写容易测试的代码。这就是说,停止在命令处理程序、服务等中“新建”数据库对象。取而代之的是,使其成为依赖项。

  7. 异常只会在特殊情况发生时抛出。

  8. 了解 If-Else 的合适替代方法。If-Else 经常被滥用,成为糟糕设计的早期标志。If-Else 语句在许多设计模式中是不必要的。

  9. 并非每一个 IF 都需要 Else If 或 Else。If 本身是可以的,并且经常受到鼓励。

  10. 重构意味着重构。进行重构时,不要尝试添加任何新功能。这样做没有什么好处。

  11. 如果发现了垃圾代码,请花时间清理它,使之更好——无论“更好”在特定环境中是什么意思。

  12. 假如不学习设计模式,将会遇到一些困难。它们无处不在,了解它们会使你的生活更轻松。

  13. 应用设计模式可以改善代码。

  14. 攻击别人的代码并不会让你成为一个更好的程序员,也不会展示你的资历。大多数新手都会攻击其他开发者的代码,因为他们甚至难以理解简单的概念。

  15. 在需要接口之前不要创建接口。由具体的类开始完全没有问题。

  16. 你是否确定该字段 / 属性 / 方法需要公开?没有,我也这么认为,将其设为私有或者内部。

  17. 一个超简单的类,就像一个简单的方法,它是可行的。

  18. 针对简单问题编写简单代码。

  19. 请确保测试了重构的每一部分。不然你就不知道你在破坏什么。

  20. 不 —— 你刚刚草草记下的代码并不比下载量为 1100 万的 npm/nuget/pip 包好。下载那个该死的软件包,并继续前进。

  21. 对于复杂的问题,不要害怕提出复杂的解决办法。别走另外一条路。

  22. 掌握几种语言就可以了。尝试学习一种后台、前端和数据库语言。通过这种方式,你可以更好地理解团队中其他人所处理的问题。

  23. 别再看这些该死的教程了。独立思考一下。当你陷入困境,或者需要快速学习一些东西的时候,偶尔有一些教程是很好的。只是要退出教程的“灵薄狱”。

  24. 其他大部分的开发者也会编写垃圾代码。别为此而丧失信心。他们这么做一定有原因。

  25. 观看开发者会议的讲座,并关注思想领袖。有很多很好的经验可以借鉴,而且很容易得到启发。

  26. 在成为更好的开发者的过程中,我们都会遇到瓶颈。向有成就的开发者寻求建议。不要害怕给一个随机的开发者发送消息。

  27. 以 GUID/UUID 作为实体 ID,这使得处理起来更加简单。但是,请注意你的取舍。

  28. 遵守 SOLID 原则。它们易于理解,并且可以改进代码质量。诸如“开发 / 封闭原则无关紧要”之类的声明会反过来咬住你。

  29. 当选项数目有限时,使用枚举代替字符串作为参数。

  30. 在模块中安排代码(项目以 .NET 术语表示)。别把所有的东西都放在一个模块里。很快就会失去控制。

  31. 你将要解决的业务问题,或者将要开发的业务应用,都是必须牢记的。对于企业来说,代码只是实现目标的一种手段。

  32. 将软件开发视为一种手艺。编写出有目的、漂亮的代码。主动去提高自己的技能。


肯定会有开发者对我的一些建议提出质疑,你总能找到不同的观点、方法和想法。


多思考是有益的。对你认为对你有意义的事情要保持批判的态度。


作者介绍:


Nicklas Millard,是一家发展最快的银行的软件开发工程师,负责为关键任务构建金融服务基础设施。曾担任 Big4 的高级技术顾问,为商业客户和政府部门开发软件。


原文链接:


https://medium.com/swlh/32-opinionated-advice-and-lessons-learned-in-software-development-cc1939847f0a

2021 年 6 月 30 日 15:12911
用户头像

发布了 73 篇内容, 共 15.9 次阅读, 收获喜欢 76 次。

关注

评论 1 条评论

发布
用户头像
印象深刻的点
1. “有时候编写一些垃圾代码也没问题。应用程序的各个部分并不是生来平等的” 不同的代码有不同的地位
2. 写出可配置组件并向其传递环境变量。重启应用程序比重新编译和部署都要简单
2021 年 07 月 01 日 10:35
回复
没有更多了
发现更多内容

[译] D8 类库脱糖

Antway

6月日更

AI论文解读:基于Transformer的多目标跟踪方法TrackFormer

华为云开发者社区

预测 Transformer 多目标跟踪 TrackFormer 跟踪目标

全球云计算大会|TcaplusDB一举斩获优秀解决方案奖

数据人er

数据库 nosql tencentdb TcaplusDB

HarmonyOS学习路之开发篇——公共事件与通知(一)

爱吃土豆丝的打工人

Java HarmonyOS公共事件 鸿蒙操作系统

回忆录 | 那些你不能错过的CTF夏令营往届历程,2021精彩继续……

郑州埃文科技

JavaScript学习(十一)---RegExp对象

空城机

JavaScript 前端 6月日更

一步步设计版本控制系统

YiYu

git 版本控制 版本管理

代码管理工具:Git和SVN

正向成长

git svn

为什么switch的case没有break不行

叫我阿柒啊

Switch case break

使用 Scala 宏解决对象转换

GrowingIO技术专栏

scala protobuf 元编程 macro

APP 开发技术如何进行选型 ?

程序员海军

前端 App 技术选型 APP开发

Rust从0到1-自动化测试-测试组织

rust 单元测试 集成测试 自动化测试

30分钟接入SDK 融云是如何让开发者做到开箱即用的?

融云 RongCloud

可视化搭建的一些思考和实践

白玉兰开源

联想服务斩获两项智能运维大奖 助力企业业务创新与数字化转型

科技大数据

支持低代码开发和远程真机,DevEco Studio 2.2 Beta1来啦

科技汇

神经网络吴恩达, 解析极限编程--Kent Beck, Cynthia Andres John 易筋 ARTS 打卡 Week 53

John(易筋)

ARTS 打卡计划

12种mysql常见错误总结 +分析示例

我是阿沐

MySQL 面试 常见问题

EasyRecovery——一款专业的数据恢复软件

淋雨

文件恢复 Easyrecovery破解 免费恢复软件 硬盘数据恢复

深度解读MRS IoTDB时序数据库的整体架构设计与实现

华为云开发者社区

大数据 架构 时序数据库 FusionInsight MRS MRS IoTDB

掌门教育自研APM实际分享

白玉兰开源

面试官:你知道怎么求素数吗?

华为云开发者社区

面试 开发者 开发 代码 素数

数据结构——顺序表

若尘

数据结构 6月日更

冰泉奶茶香牙膏好不好?奶茶控的宝藏牙膏就是它

Geek_50a546

基于 Web 引擎扩展技术的 RTC 混合开发框架实践

白玉兰开源

前端

拥抱开放的英特尔 让PC行业再次越过创新鸿沟

新闻科技资讯

带你认识9种常用卷积神经网络

华为云开发者社区

神经网络 深度学习 卷积神经网络 图像 卷积

AI如何赋能软硬件产品创新?百度大脑开放日西安站解密

百度大脑

AI 百度大脑 开放日 EdgeBoard

起诉书!慕课网你敢抄袭,我就敢起诉你!

十三

Java 开源 知识产权 维权

容器化 | 在 Kubernetes 上部署 RadonDB MySQL 集群

RadonDB开源社区

MySQL Kubernetes 容器化

计算机网络的 89 个核心概念

cxuan

后端 计算机网络 网络

32 条关于软件开发的建议和教训-InfoQ