春争日,夏争时,扫码抽取夏日礼包!!! 了解详情
写点什么

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

Nicklas Millard

  • 2021 年 6 月 30 日
  • 本文字数:1637 字

    阅读完需:约 5 分钟

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:121039
用户头像

发布了 74 篇内容, 共 19.4 次阅读, 收获喜欢 82 次。

关注

评论 1 条评论

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

云图说|一张图带你了解华为云分布式数据库中间件

华为云开发者社区

数据库中间件 DDM 分布式数据库中间件 华为分布式数据库中间件

如何学习数据结构与算法

C语言与CPP编程

c c++ 数据结构 程序人生 算法

一个魔幻的框架,3分钟纯 Java 注解搭个管理系统

程序员小富

Java 大前端 后端

实现一个“能中断”的ajax

云小梦

JavaScript ajax Promise axios 请求拦截

浅析 Fabric Peer 节点

Rayjun

架构师训练营 4 期 第13周

引花眠

架构师训练营 4 期

散列(哈希)表算法学习

Nick

数据结构 算法 哈希算法

企业利用边缘计算的10种方式

浪潮云

边缘计算

用户体验 | 页面阅读进度提示

云小梦

html css3 用户体验 页面进度提示

ONE MORE

吴小平

Logstash 中 Ruby filter 使用指南

Langer

ruby Logstash ELK

尤雨溪 Twitch 直播:下一代前端构建工具 ViteJS —— Open Source Friday

清秋

翻译 大前端 vite webpack 构建工具

开源项目月刊《HelloGitHub》第 60 期

HelloGitHub

GitHub 开源

华为云自研PB级分布式时序数据库揭秘第一期初识GaussDB(for Influx)

华为云开发者社区

云原生 时序数据库 华为云 分布式时序数据库 GaussDB(for Influx)

如何学习数据结构与算法

C语言与CPP编程

数据结构 算法

2021春招JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等

Java 编程 程序员 架构 面试

使用Flask Nginx Gunicorn和Supervisor部署一个简单的Restful API接口服务器

Langer

Python 部署与维护 服务器部署 web服务

Mac下brew更新及安装Prometheus+Grafana

程序员架构进阶

容器 Prometheus 监控系统 28天写作 3月日更

Python OpenCV setMouseCallback 回调函数,取经之旅第 13 天

梦想橡皮擦

3月日更

推荐引擎概述

跳蚤

用栈、回溯算法设计迷宫程序

不脱发的程序猿

回溯算法 28天写作 3月日更 迷宫程序

第八章作业

LouisN

数据分析作业-用户分析-ReadHub

隋泽

产品经理训练营

浅析Node中间件Koa&Express:原理和实现

云小梦

JavaScript node.js 中间件 koa

HTML5+CSS3高级动画的应用实践

云小梦

JavaScript html css3 浏览器API 网页动画

React 中后台系统多页签实现

清秋

Vue 大前端 React keepalive

一文搞懂如何实现 Go 超时控制

万俊峰Kevin

微服务 超时 Go 语言

力扣(LeetCode)刷题,简单+中等题(第26期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

shell学习

我是程序员小贱

3月日更

Img、net & page新展望:连接感知

云小梦

JavaScript html 网络 用户体验 连接感知

SpringBoot + Mybatis + Druid + PageHelper在多数据源下如何配置并实现分页

北游学Java

Java mybatis spring Boot Starter

32 条关于软件开发的建议和教训_语言 & 开发_InfoQ精选文章