做得好 vs 做得快?

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

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


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


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

image.png


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


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


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

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


减少风险:

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


快即是多:

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


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


image.png

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


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

目录
相关文章
|
6月前
|
设计模式 安全 架构师
复用性风控:软件复用成本的量化管理
本文分析「复用性」这一概念背后的风险及成因,借助笔者在业务安全和基础安全的经验,提出了一个在软件研发流程中,管理「复用性成本风险」的风险管理模型,希望能为读者在后续的技术决策和软件研发流程提供些许帮助。
151584 5
|
6月前
|
存储 编解码 计算机视觉
使用ffmpeg缩小视频体积的几种方式
上述命令将输入视频input.mp4转换为H.265编码格式,并将结果保存为output.mp4文件。其中,-c:v选项表示视频编码器,libx265表示使用x265编码器,-crf选项表示视频质量,28表示目标视频质量,值越小视频质量越高,文件体积越大。
141 0
|
6月前
|
Java 数据安全/隐私保护 Spring
使用javax.validation.constraints校验参数合法性
以上就是javax.validation.constraints的基本用法和高级应用。通过掌握这个强大的校验框架,我们可以轻松地为Java项目实现数据校验功能,从而提高代码的健壮性和可维护性。
213 0
|
6月前
|
SQL druid Java
JavaWeb:jdbc(详细讲解)
JDBC,即 Java Database Connectivity,是 Java 语言操作关系型数据库的标准 API。通过 JDBC API,Java 应用程序可以连接到不同的数据库,执行 SQL 语句,读写数据等操作
29543 4
JavaWeb:jdbc(详细讲解)
|
6月前
|
Arthas NoSQL Java
JDK11现存性能bug(JDK-8221393)深度解析(1)
作为一名工程师,面对上面的现象,你会怎么做? 我想你的第一反应肯定是业务代码有问题?是不是有什么地方导致内存泄露? 是不是业务代码里有什么地方加载的数据太多,越来越慢?…… 同事尝试过dump堆里的内容,dump jstak线程…… 都没看出来什么异常,也优化了业务代码里之前一些不合理的逻辑,始终没有解决问题。 当时的问题是他们都没有往热点代码的方向排查,主要是因为他们不知道有啥好用的工具。
84 0
|
6月前
|
编解码 计算机视觉
如何用ffmpeg截取视频片段&截取时间不准确的坑
之前在工作中,有遇到需要程序化截取视频片段的场景,这里使用ffmpeg命令行就可以很容易实现,这里也记录下我们使用过程中遇到的坑,希望对大家也有所帮助。 举个例子,当我们要截取视频文件中input.mp4的第15秒到第98秒时,ffmpeg命令行可以这么写:
214 0
|
6月前
|
Web App开发 编解码 iOS开发
如何使用ffmpeg制作透明背景的视频
数字人的视频我是使用的腾讯智影生成带绿幕的视频,要实现透明背景,有个很关键的信息需要知道,不是所有的视频格式(视频编码)都支持透明背景,首先我们最常用的mp4就是不支持(不管是h264还是h265)都不支持,目前支持透明背景的只有少部分视频编码,比如google的vp9(webm)格式,上图中我用就是webm+vp9编码的视频。实测这种视频兼容性也不行,比如在苹果的safari浏览器下,就无法透明背景。
259 0
|
6月前
使用ffmpeg拼接两张图片
最近在工作中遇到了一个需求,就是需要将两张图片拼接在一起,作为一个封面图。如果只是临时拼接一张,我们可以只用photoshop之类的图片编辑工具,将两张图片拼接在一起。而我们的需要是需要实现自动化,由于之前使用过ffmpeg做过图片的操作,于是搜索了下,ffmpeg确实能实现两张图片的拼接,这里分享下相关操作的命令行。
67 0
|
6月前
|
缓存 安全 Java
谷歌Guava LoadingCache介绍
CacheLoader的作用就是为了在Cache中数据缺失时加载数据,其中最重要的方法就是load()方法,你可以在load() 方法中实现对应key加载数据的逻辑。在调用LoadingCache的get(key)方法时,如果key对应的value不存在,LoadingCache就会调起你在创建cache时传入的CacheLoader的load方法。
129 0
|
6月前
|
设计模式 自然语言处理 程序员
ChatGPT函数调用初体验:让ChatGPT具备抓取网页文本的能力
这篇文章总结了使用ChatGPT提升程序员编程能力的方法和场景。作者经过两个月的使用发现,虽然ChatGPT目前还无法完全替代程序员在一些强上下文的编程场景下的能力,但在一些通用化的编程场景下,它的表现仍然可行。作者提炼出以下利用ChatGPT的场景
123 0