[它山之石] 一件事情,如果你不能说清楚,十有八九你就做不好

记得有一次开会,我的头儿说了标题所写的这句话,自己深以为然。

有过较多解决问题的经历的人可能会有这样的感觉,很多时候,面对一个问题,我们即使没有完全将之想清

楚,也可以基于已有的经验给出一个能够work的解决方案,当然这种情况下给出的方案往往不是最优的。

而即使给出了解决方案,很可能自己都未必能把自己给出的解决方案所基于的推理逻辑,清晰无误地阐述出来.

因为随着人的知识,经验的积累,我们可以越来越多地依靠经验来解决一些问题,这些经验有些是自己身体力行,

实践得来的,有些则是道听途说,经卷纸传,从其他的地方获得的。在获得这些经验的同时,我们的大脑会建立起

这样的一个触发机制:

遇到问题A,经验B会有效。

遇到问题C,经验D会有效。

。。。。

至于为什么经验B对问题A会有效,是不是在所有场景下都会有效,是否还存在更有效的解法,大多数情况下,我们

未必会深入去思考挖掘。

于是,在遇到了与自己以前经历过的问题相似,相近的场景时,我们就会条件反射地基于已有经验,设计出一个解

决方案,大多数情况下这个方案work得很好。但也有很多情况下,这个方案虽然能work,但并不是最优解,甚至

自己都未必能说得清楚为什么给出这样的方案。

最近在工作中,需要为编译器的语法规则设计相应的数据结构,自己就有了这样的感觉,

在作设计的过程中,有的时候,是旧有经验作祟,有的时候,则是因为偷懒的情绪占了上风,自己会满足于浅尝辄

止,对某个问题给出一个未经深思熟虑的解决方案,而随着设计过程的推进,暴露出来的信息越来越多,就会发现

已有的设计不能很好地满足一些场景的要求,因而对已有的设计进行调整,但是在调整时,自己往往会发现,对于

已经作出的设计,为什么当时自己选择那样的接口,定义那样的数据成员,自己并不能给出清晰明确的解释,这就

说明在作出当时的设计的时候,自己并未将问题想清楚,也未将自己给出的设计想清楚,而是基于一些已有的经

验,给出了一个差强人意的方案而已。

在这方面,我的老大作得要比我好很多,对于一个问题,他往往会将之想得非常清楚之后,才会去着手去作。以前

的技术讨论会上,凡是他提出的设想和方案,几乎很少会有被我们驳斥倒的,因为只要是他在会议上提出来的东

西,几乎方方面面,各种可能,他都已经去思考过了。而在工作过程中经验的积累上,他也经常会作深入的思考和

挖掘。一般来说,凡是他解决过的问题,只要不是太detail的,跟他讨论起来,他往往能够对答如流,而能够

作到这一点正是因为他在储备这些经验的时候已经作足了功夫。而自己在储备经验的时候则往往不会花费太多精

力。一个典型的场景就是我和老大同时遇到一个问题,有的时候,我能更快地给出答案和解法。但是过了一段时

间,又遇到了类似的问题,我却可能会忘了当时解决问题的思路,需要重新进行思考,而我的老大往往能够直接从

他的经验体系中找出当时的解法思路。遇到一个问题,我往往能较快地给出一个解决方案,但细究起来,我就时有

被卡住的场景,而我的老大,虽然给出问题答案需要的时间会较长一些,但一般他给出的答案,往往都经得起推

敲。

在办公桌上放一个小熊,有什么好的想法,就讲给它听。我则比较喜欢自言自语,既作发言人,又作听众

时间: 2024-09-12 20:23:10

[它山之石] 一件事情,如果你不能说清楚,十有八九你就做不好的相关文章

今天琢磨的几件事情

今天在琢磨几件事情,也是和工作相关.数据灾难切换的几点认识: 在unix中可能会碰到在处理网络问题时,超时时间会远远高于linux的情况,这个时候如果尝试做failover是非常消耗时间的,而且日志没有任何输出,看不到进展,相比于linux的处理,我感觉要更简洁一些. 鉴于unix中的处理方式,我还是建议直接使用命令行来做failover,使用下面两个命令即可. alter database recover managed standby database finish force; alter

阅读 NodeJS 文档,我学到了这 19 件事情

本文讲的是阅读 NodeJS 文档,我学到了这 19 件事情, 我相信我对 Node 了若指掌.我这 3 年来写的网站都是用 Node 来开发的.但实际上,我从没有详细查看 Node 文档. 长期的订阅者应该知道,我正处在书写每一个接口(interface),属性(prop),方法(method),函数(function),数据类型(data type)等等关于 Web 开发的漫漫长途中,这样可以填补我的知识面的空缺.在完成了 HTML,DOM, WebApi, CSS, SVG 和 EcmaS

我希望在我写第一个安卓 APP 前知道的 6 件事情

本文讲的是我希望在我写第一个安卓 APP 前知道的 6 件事情, 我的第一个 APP 是极其糟糕的. 实际上, 它已经糟糕到了让我把它从商店下架, 我甚至不愿费事儿再把它写进简历. 如果在我写它之前知道一些关于安卓开发的事情, 这个 APP 本来不会这样糟糕. 这有一个你在开发你的第一个安卓 APP 时需要牢记的事情的列表. 我下面要说的这些经验教训都是从我的第一个安卓 APP 的源码里的真实的错误中得来的. 将这些(经验)铭记在心将会帮助你写一个你可以为之骄傲的 APP. 当然, 如果你像一个

C#开发人员应该知道的13件事情

本文讲述了C#开发人员应该了解到的13件事情,希望对C#开发人员有所帮助. 1. 开发过程 开发过程是错误和缺陷开始的地方.使用工具可以帮助你在发布之后,解决掉一些问题. 编码标准 遵照编码标准可以编写出更多可维护的代码,特别是在由多个开发人员或团队编写和维护的代码库中.例如FxCop,StyleCop和ReSharper等,就是常用的实施编码标准的工具. 开发人员:在压缩代码之前,请使用工具仔细检查是否违反了标准,并且对结果进行分析.使用工具发现的代码路径问题,不比你预期的少. 代码审查 代码

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一)

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(一) CentOS 是一个工业标准的 Linux 发行版,是红帽企业版 Linux 的衍生版本.你安装完后马上就可以使用,但是为了更好地使用你的系统,你需要进行一些升级.安装新的软件包.配置特定服务和应用程序等操作. 这篇文章介绍了 "安装完 RHEL/CentOS 7 后需要做的 30 件事情".阅读帖子的时候请先完成 RHEL/CentOS 最小化安装,这是首选的企业和生产环境.如果还没有,你可以按照下面的指南,它

安装 Fedora 21 工作站后要做的10件事情

安装 Fedora 21 工作站后要做的10件事情 Fedora 21已经在2014年12月正式发布.对于Fedora新手和初学者来说,初始化设置可能存在一点困难,我们翻译了一篇Fedora系统配置文章,为新手提供参考.下面一起看看Fedora 21安装后到底要做哪些事情? 当然,系统安装完毕后,首先要确保已经从Fedora 21仓库获得最新更新:sudo yum update . 1. 配置GNOME Shell界面 Fedora 21工作站系统版本默认桌面环境为GNOME Shell,我们可

大数据 企业CIO应该知道的六件事情

本文讲的是大数据 企业CIO应该知道的六件事情,在一系列针对大数据提出建议的文章中,IDG集团PCWorld记者Joab Jackson所写的<大数据,CIO应该知道的五件事>我认为绝对是最好的一篇.他提出的五点建议在我们与客户的交谈中几乎每次都会被提到: 1.大数据的入门成本相对较低.我们现在看到的大数据的入门成本,至少按照CapEx的观点,这个成本是相当低的.诸如Hadoop.Cassandra.MongoDB.MapReduce和其他开源工具,再加上相对低廉的云计算成本,让组织可以不必花

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(六)

安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(六) 30. 用密码保护 GRUB 用密码保护你的 boot 引导程序这样你就可以在启动时获得额外的安全保障.同时你也可以在实物层面获得保护.通过在引导时给 GRUB 加锁防止任何无授权访问来保护你的服务器. 首先备份两个文件,这样如果有任何错误出现,你可以有回滚的选择.备份 '/etc/grub2/grub.cfg' 为 '/etc/grub2/grub.cfg.old'. # cp /boot/grub2/grub.cfg

新手要想学好Linux系统就必须做好这四件事情

新手要想学好Linux系统就必须做好这四件事情. 一般情况下,大部分人接触Linux的机会并不多,对Linux平台下的开发更是一无所知.而现在的发展趋势却越来越表明:无论是作为一个优秀的软件开发人员,或是互联网.IT行业的从业人员,掌握Linux是一种很重要的谋生资源与手段,很多迹象表明这是一个很好的加分项.下来我将会结合自己的几年的个人经验,谈谈Linux的学习方法与学习中应该注意的一些事. 培养耐心,培养兴趣 兴趣是最好的老师,建议你去摸索下Linux有些什么优点和特点,了解了这些可以提升你