learn-tech/专栏/程序员进阶攻略/28提问:从技术到人生的习惯.md
2024-10-16 09:57:16 +08:00

150 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

因收到Google相关通知网站将会择期关闭。相关通知内容
28 提问:从技术到人生的习惯
无论做什么工作,一路上你总会碰到各种各样的问题,而提问应是你解决问题的一种有效途径。更进一步,如果能把提问固化成为你的一种习惯,那它就不仅仅是一个解决问题的“工具”,甚至还能引导你的人生选择。
提问这个习惯,我有三个层面的理解:
如何问?
问什么?
为何问?
如何问?提问之术
大部分情况,我们碰到的都是已经有了问题,但却问不好,从而得不到答案或得不到好的答案。
比如说吧,我经常碰到的一种情况是:有同学常拿着一个具体的问题跑来,向我发问,他大概会交代一下想解决的场景,然后就会接着描述他的思路,以及解决这个问题的思路的一些其他约束,但这中间会有一个障碍,然后就问我该怎么解决这个障碍。
这样的发问一般都会让我陷入两种困扰之中:一种是,问题的业务背景交代得太泛化,所以我只好跟着他的思路,感觉解决这个问题似乎只能有这一条路可走;另一种则正好相反,问题的业务背景描述得过于细致,让人最后陷入对复杂业务领域的理解中,迷失在细节的讨论里。
即使是同一个场景,其实不同人还会产生不同的思路。比如:你想去一个十公里外的地方,对方也许会问你怎么套马鞍的问题,这时你就很困扰,因为你的思路是坐车或开车。这就是一个针对技术人员面对同一场景问题,所选取的不同技术方案可能处在不同的时代背景下的类比。所以,面对这类具体的障碍问题,我经常很难回答。
再看看国内网上技术问答社区的情况,我有时会去看看,发现上面的问题大部分类似下面两种模式:
某某出错了,怎么办?
如何针对某某封装一个库?
某某可以是一种具体的技术或框架,这两种提问模式代表了两个方向,都让人无法回答。第一种太模糊而无法回答,而第二种太庞大则不愿回答。
如果你能绕过这两个提问的大坑,提出一个具体的问题,那么算是前进了一大步。但具体问题也有一个陷阱,就如前面套马鞍的那个例子,也许有人回答了你怎么正确地套马鞍,但你可能依然走在落后的道路上,因为你的工具本身就是落后的。所以就具体问题提问,除了问及手段,还最好跟上你的目的和你就此目的是怎样提出的手段,然后才走到了这一步的障碍,让你不得不在此提问的。
一个能够回答的具体问题,一般都是解答题形式,表达清楚你的解答目的,也许你的困扰在高手那里根本就不存在。你只是走了一个弯路而已,这样不仅绕过了障碍,还获得了一条近(先进的)路,这就是有意义的提问。
至此,就得到了提问的第一个原则:提供足够的信息,让人能够回答。
草率的问题是懒惰的问题,通过搜索引擎就能简单获得;草率的问题是模糊的问题,让人没法回答。而更有意义的提问是把解答题变成选择题,提供你的选项,展现你探索了哪些路径,省去了可能产生的反问。也许你的某条路径已经非常接近答案了,只是卡在了某个点上,知道答案的人一看就明白了,也很容易回答。
这就是提问的第二个原则:提供更多的选项,让人方便回答。
即使你的问题能够回答,也方便回答,但也可能得不到回答。因为,回答问题需要有驱动力。提问本是一种索取,要让人有更多的回答动力,还需要付出。付出一种态度,表达感谢;付出一份可供交换的视角,建立讨论的基础。
这就是提问的第三个原则:提供交换价值,建立讨论基础,表达感谢态度,让人乐于回答。
《大教堂与集市》一书的作者埃里克·史蒂文·雷蒙德Eric Steven Raymond曾就如何提技术问题写过一篇影响颇大的文章How To Ask Questions The Smart Way中文名是《提问的智慧》距今已经十多年了修订了十多次也被翻译成了十多个国家的文字很值得一读。
最后,我归纳下关于提问之术的三个方面:
提让人能够回答的问题:草率的问题,只能得到一个草率的答案。
提让人方便回答的问题:你得到的答案的好坏取决于提问的方式和开发答案的难度。
提让人乐于回答的问题:只索取而不愿思考和付出的提问者,要么什么也得不到,要么只会得到 RTFMRead The Fucking Manual 或 STFWSearch The Fucking Web
问什么?求解之惑
有时一个好问题,比如何问更有价值和意义。
我觉着,前面一节关于如何提问本身也算是一个好问题,因为当你面对这个问题,找到了答案,并严肃地对待后,从此就会改变你提问的习惯。提出好问题比寻找已有问题的答案可能更有意义和价值。寻找答案,通向的是已有的结果;而提出新问题,也许会导向未知的宝藏,它可能是获得新知的起点。
有时候,你会碰到一个问题不知道该问什么,甚至该如何提问,即使这个问题是一个非常具体的技术问题。而这一类具体的技术问题,我称之为答案藏在问题中,属于无法提问的问题。
这可能说得比较抽象,下面我举个具体的例子:曾经碰到过一个线上问题,系统间隙性出现超时,只有重启能解决;而且出现的很无规律性,不和什么流量之类成正比,就是莫名其妙偶然出现,还不能恢复,只能重启。这个问题曾经困扰了我很久。这类问题虽然很具体,但你可能会发现,你竟找不到一个好方式来描述这个问题。
如果我就把上面这段描述的关键现象偶现超时并结合使用的具体技术JVM、开源框架配置和业务场景一起抛出来问人你觉得有人能回答吗这类就属于答案藏在问题中的问题唯一的办法只能是找和你一起共事的同事从各人不同的思维视角去分析抽丝剥茧。当你能找出提问的方式基本上答案也就出来了。
后来,终于定位到上面现象的根源是服务线程池的配置有误,结合在某些慢业务场景下会引发连锁超时。这时的问题就是怎么配置服务线程池才最合理,这个问题本身就简单到完全无需再问了,自然就有了答案。
在成长的路上,我碰到过好多问题,但早年还没有形成记录与写作的习惯,所以未能把这些问题记录下来,很多就遗忘散落了。这就是我想说的第二个需要建立的习惯:当遇到暂时没有答案的问题时,先记录下来。在成长这条路上,不是碰到了问题,就能立刻或很快找到答案的。
当我开始写作后,就开始养成了这个习惯。大部分过去写的文章都来自于这些问题记录,定期地回顾下,曾经困扰我的问题,今天能解决了吗?一开始有很多具体的技术性问题,就因此写了很多技术文章。后来又有了更多复杂的问题,也就又写了不少思考性的文章。每写一篇,意味着当下的我对这个问题至少有了答案。无论这个答案如何,从某种意义上说,今天的我相比当时面临问题没有答案的我,就已经成长了。
先从一个记录问题,积攒 “问什么” 的习惯开始,不断去积累并留下一些东西,将来再定时去回顾这些问题,也许就会得到意外的收获。对于程序员,总会碰到各种技术问题,就从这些最具体的问题开始,把暂时这阶段还没法回答的问题按一种模式记录下来,比如下面这样:
问题的上、下文;
问题的具体描述;
问题的解决思考和思路;
问题的解决方案和具体技术或办法;
问题解决后留下的思考或其他延伸的疑问。
这就是你积累的 “宝藏”将来如果能回答了就把答案分享出来。这就是我所认同的积累价值和传递价值的方式分享你从中学到的一切Share what you learn最后自身的价值也就得到了提升。
保持积累,持续给予,终有所获。
为何问?价值之道
提问的目标是获得答案,而答案于我们自己而言是一种价值;为何而问,就是发问于我们的价值之道,最终指向的目的是:认清自我。
值得问 “为何” 的问题不多,但总会遇到,它是一道选择题,有关我们的价值选择。我们最关心的是自己的命运,而关于命运有一句话是这么说的:
选择决定命运,什么来决定选择?价值观。
价值观,是我们对事情做出判断,进行选择取舍的标准。每个人都有价值观,无论你能否清晰地定义与表述它,这些观念都决定了你的行为标准。这么说有些抽象了,下面我通过一个故事来将其具象化。
这个故事的主角叫比尔Bill。21 岁时他成为一名程序员,获得了第一份正式工作,在加拿大多伦多的一家互动营销公司写程序,这家公司的主要客户都是一些大型药企。而在加拿大,法律限制药企直接对普通消费者做处方药的广告。
所以,药企客户提出了需求,做个网站来展示公司的药品,对于浏览网站的用户,如果能提供处方就会被引导到一个病人的专属页面。在这个专属页面上,提供了一系列的测验问题,然后通过病人的回答来推荐相关的药品。
这个网站仅仅是展示公司产品,提供通用说明的信息网站,这显然不是任何特定药物的广告。一切显得很合理,比尔收到了需求,它们包含了针对病人的测验问题,每个问题的答案,以及对答案的处理规则。
比尔完成了开发,在交付给客户之前,他的项目经理决定对网站做个简单的快速验收测试。经理试了这个针对病人的小测验,然后走到了比尔的桌前:
“测验不管用!” 经理说。
“哦,出了什么问题?” 比尔问。
“嗯,看来无论我填什么,测验都给我推荐同一种药物,唯一的例外是我回答过敏或者已经吃过了。”
“是的,这就是客户要求的处理规则,其他情况都会把病人引导到这种药。”
“哦,好吧。酷~”
经理没再说什么,他们一起交付了网站给客户,客户对这个网站很满意。项目结束后,客户的代表还邀请比尔和整个团队一起去吃一顿丰盛的牛排大餐。就在吃大餐的当晚,一位同事给他发了一封电子邮件,链接到网上的一篇新闻报道:是关于一个年轻女孩,服用了他(创建)的网站推荐的药物,然后自杀了。
网站推荐的药,其目标用户就是年轻女孩。比尔后来想明白了,他们所做的一切,建设这个网站的真正目的就是广告一种特定的药物。那时,作为团队中最年轻的开发人员,他虽然觉得客户需求的规则就是为了 “戏耍” 年轻女孩而设计的,编写的代码是 “错误” 的,但却没有多想,只是觉得这就是他的一份工作,有个开发任务要完成,而且他完成的很好。
结果后来发现,这种药物的主要副作用之一就是会让人产生严重的抑郁和自杀念头。比尔说,他可以找到无数的方法来使自己在这个事情中的角色自我合理化,但当时他依然觉得自己的代码写“错”了。那顿大餐后不久,比尔辞职了。
这就是比尔的价值观选择,他一开始是不清晰的,但这个事情让他问了自己为何,就变得越来越清晰了。我能知道这个故事,自然是比尔多年后自己写出来的。他说,“今天的代码(人工智能程序)已经开始接管你的驾驶,帮助医生诊断疾病,不难想象,它们很快也会推荐处方药。”
比尔现在依然还写代码,但自从牛排大餐那一天起,比尔都会仔细考虑代码的作用,多问一个为何?因为程序已经越来越多地占据着我们生活的方方面面,那代码背后需要价值观吗?
这就是第三个习惯:为何而问?获得答案,认清自我,选择自己的价值之道。
关于提问,今天就分享到这里,我总结提炼下:
如何问,是关于提问的 “术”,考虑让人能够回答,方便回答和乐于回答;
问什么,是关于成长的 “惑”,去积累问题,寻找答案,并分享出来,从而完成了价值的积累、传递与交换;
为何问,是关于选择的 “道”,价值观的选择决定了不同的道。
成长的过程,一般都是从提出一个问题开始,找到答案,再融入自身的价值观,完成下一次更好的选择,周而复始,形成习惯,化作天性。
最后,你也可以想想你最近有哪些问题,是否有了答案,以及该如何提问。请在留言区写下你的思考。