做得好 vs 做得快?

简介: 现实中如果工作中老板给你安排了一个任务,这时候你有两种选择:1.保质保量做完,但可能会花很长时间。 2.花很短的时间做完,但质量可能有问题。 很显然质量和速度是冲突的,做得快大概率做不好,做得好大概率做不快。 这时候你会怎么选?

今天聊一个有意思的话题,假如老板让你做个新的系统,你是选择先把功能做起来至于扩展性和可靠性以后再考虑,还是设计一个非常牛逼的系统架构,可以满足未来很多年的发展。 前一段时间,某个CSDN技术交流群里有个小伙伴问用户系统怎么设计,然后就有另外的小伙伴上来就给了很高大上的建议,什么用户、角色、权限、分库分表…… 都给考虑了,算算人力,没几个月做不出来。


 然后我以半开玩笑的口吻说:别搞那么复杂,先用一个用户表,再加上权限和角色字段区分就可以了,先快速把系统搭建起来,没有什么问题是加一个字段解决不了的,如果有就再加一个字段。如果开始设计那么复杂,万一运气好系统黄了的话不就白做了嘛! 那万一运气不好,系统起飞了怎么办?那更简单了,系统都起飞了,还怕老板不给你人做优化!


 这个故事中涉及两个选择,花时间做个高质量系统和快速做个低质却堪用的系统,简单点就是好和快之间选一个。通常我们提到好和快的时候还会提到成本,好、快、便宜 三者就像CAP理论一样,只能同时选择其中的两种,无法三者都选择。质量、速度和成本三者之间似乎有着不可调和的矛盾。我们这里先去掉一个条件——成本(因为大部分情况下时间才是最大的成本),来单独谈谈好和快之间的关系,说一下我对这两者关系的看法,希望对大家日常工作和学习有所帮助。

image.png


 现实中如果工作中老板给你安排了一个任务,这时候你有两种选择:1.保质保量做完,但可能会花很长时间。 2.花很短的时间做完,但质量可能有问题。 很显然质量和速度是冲突的,做得快大概率做不好,做得好大概率做不快。 这时候你会怎么选?


 选了你就上当了,在现实情况中,你拿到的不仅仅是1或者2两种选项,可能还有花较少的时间做到较好的质量这种中间选项。我们换个问题,你倾向于快还倾向于好? 我可以先告诉你我倾向于好,我为什么选快而不选择好?我有如下几点理由:


能用更短的时间得到反馈:

 快速将事情做完,获取到结果,才能拿到别人的反馈。众所周知 反馈 在任何一个人成长的道路上必不可缺,获得的反馈越多,成长的也越快。 如果你用短时间完成的任务质量比较低,质量低其实也是一种反馈,你还有大把的时间去改进。总比你花了大量时间做出来一个低质的东西,还没有时间改进强的多。


减少风险:

 时间才是人生最大的财富,如果你在某件事上投入了过多的时间,但最后被证明这件事没有任何意义的情况下,也就意味着你会损失大量的时间。快速做完,即便突然发现这件事没有任何意义你损失的也不多。 我们在工作中可能经常听到一个词快速试错,试错总是和快速结合在一起,我相信你肯定从来没听过慢速试错吧,快速意味着即便失败,损失也是可以接受的。


快即是多:

 如果你想掌握一门技能,不断的练习是你唯一的方式。你重复的次数越多,这门技能你就越熟练,你单次练习的速度越快,单位时间内你能练习的次数也就越多。做一件事也是如此,当然做的次数多了,愈发熟练之后,做这件事的成本对你来说也就越来越低,从而你有更多的时间精力去做更多的事,接触和学习到的东西也会更多,逐渐就会形成一个增长的正循环。


 这里需要强调下,做任何事儿也不是一味追求快,而完全忽略了好,毕竟太差的结果就是完全在浪费时间。举个例子,用原本30%的时间拿到50分的结果这不叫快,这叫浪费了30%的时间。真正的快是用原本50%的时间将结果做到80分,而要想做到好(90分+)你可能需要花费120%的时间。 真正的快其实是奥卡姆剃刀式的高效。 这里我又想起了高德纳的一句话过早优化是万恶之源,很多时候的慢其实因为提前考虑了太多不需要的东西。


image.png

 你可能也已经看出来了,我这篇文章有点反完美主义,我承认我确实不是完美主义者,但我也不否认时间上很多优秀的作品确实是完美主义者创造的,科学和艺术可能需要完美主义者,但站在工程和实践的视角,其实就是各种利与弊的权衡,这也是绝大多数程序猿所面对的(那些完美主义的程序猿可能因为产出比较慢,早早毕业了[狗头])。做后端的同学可能也听过一句话架构其实是权衡的艺术,这便是最好的诠释。


  今天的文章就到这了,这是我在CSDN上的第301篇原创文章,如果你觉得我的文章写的还可以,可以留个赞,如果喜欢我的文章也可以关注下,我是xindoo,一个即将奔三的程序猿。

目录
相关文章
|
10月前
|
NoSQL API 调度
IP代理池的搭建与使用指南
IP代理池的搭建与使用指南
740 3
|
10月前
|
人工智能 算法 大数据
深入理解操作系统之进程管理
【4月更文挑战第21天】 随着现代计算机系统结构的日益复杂化,操作系统在硬件资源管理和提供用户服务方面扮演了核心角色。本文将探讨操作系统中一个关键组成部分——进程管理,旨在揭示其对系统性能和用户体验的重要性。我们将从进程的概念、进程状态、进程调度算法以及进程同步与互斥等方面进行详细阐述,并结合实例分析进程管理在实际应用中的表现和挑战。通过本文的阅读,读者可以对操作系统中的进程管理有一个全面而深入的了解。
|
弹性计算 负载均衡 安全
无影云桌面和云服务器有什么区别?
无影云桌面和云服务器有什么区别?阿里云无影云电脑和云服务器有什么区别?云电脑是作为个人或企业办公电脑使用,云服务器是对外提供24小时高可用服务,云电脑是桌面服务,云服务器是提供背后的计算服务,阿里云百科分享阿里云无影云电脑和云服务器的区别
183 0
|
机器学习/深度学习 人工智能 安全
GPU云服务器部署应用体验
随着人工智能和深度学习的发展,GPU云服务器在数据处理和模型训练中发挥着越来越重要的作用。本报告将评测使用GPU云服务器搭建生成人物写真和ChatGLM对话大模型应用的效果,同时也是对上一次的初次测评的补充。
158341 45
GPU云服务器部署应用体验
|
数据安全/隐私保护
深入解析 curl:掌握命令行的网络传输利器
当我们使用 `curl` 进行网络请求时,了解如何有效地使用参数是非常重要的。`curl` 提供了许多参数,用于控制请求的行为和配置。在这篇博客文章中,我们将详细解释一些常用的 `curl` 参数,帮助你更好地理解如何利用这个强大的工具。
310 2
深入解析 curl:掌握命令行的网络传输利器
|
机器学习/深度学习 算法 数据挖掘
周志华《机器学习》西瓜书精炼版笔记来了!16 章完整版
周志华《机器学习》西瓜书精炼版笔记来了!16 章完整版
2038 0
周志华《机器学习》西瓜书精炼版笔记来了!16 章完整版
|
数据可视化 IDE BI
如何实现软件的快速交付与部署?
如何实现软件的快速交付与部署?
176 0
|
域名解析 缓存 网络协议
【Linux网络服务】Centos7搭建DNS域名解析服务
【Linux网络服务】Centos7搭建DNS域名解析服务
|
缓存 Java 数据库
手写SpringBoot启动器主要步骤
手写SpringBoot启动器主要步骤
|
Java 测试技术
《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(8)
《Java单元测试实战》——基础知识:Java单元测试技巧之PowerMock(8)
154 0