程序员如何提高解决问题的能力?

这里是Z哥的个人公众号

每周五11:45 按时送达

当然了,也会时不时加个餐~

我的第「121」篇原创敬上

上周的《》发出后,有人给读者给我留言说,让我写一写「如何评估一个人解决问题的能力」。那么就趁热打铁继续把这个话题给写了。

先来想象一个我们每个人都遇到过的场景。

假如现在有一个未知的、有一定难度的任务摆在你面前,然后你你认识的人里找一个搭档来共同完成,这个时候你脑子里第一个浮现出来的是谁?

我想,能出现在你脑海里的这个人必然在你心目中有一个特别的标签——「靠谱」。被贴上这个标签的人往往就是你身边解决问题能力最强的人。

人都是喜欢确定性的事物的。特别是当你面对一个不确定的事情的时候,能有一个给你带来更多确定性的人与你搭档,自然是每个人所最期待的。

因此,这样的人在职场上往往升迁很快。哪怕没有升迁,他们的个人影响力也会很大,具有不小的话语权。

那么,他们与其他人的不同之处在哪呢?

其实也没什么大的不同,大家所走的“路线”都是一样的。区别在于,这部分人在这条路上不断向前,而其他人可能早早的就停下脚步了。

这条大家都一样的“路线”就是——「教育」的过程

/01 给目标,给方式/

最开始,我们都无法独立解决问题,只能是模仿着去解决问题,需要别人手把手教。

比如,4+5=9这个简单的算术,大人会通过掰手指数数的方式来教你,4该怎么用手指表示,加上另一个数字怎么表示。然后你以后就会按照这种方式运用到十以内的加法运算中。

/02 给目标,给范围/

等我们有了很多“方式”的知识储备之后,教育的导向会慢慢变成不直接给你方式,只给一个范围。

比如,给你一个三角形,让你算出他的面积。但是你知道计算三角形面积相关的定理和公式有不少,得从中找出最适合的才能高效的答题。(正弦定理、余弦定理、勾股定理、……)

再往后,当你掌握了在一定的范围内解决问题的能力之后,教育的导向慢慢会变成只给你一个目标,其他啥都不给,你自己想办法解决。

比如,大学时期的论文,就给你一个课题,怎么去研究、去得到这个课题的结论,没有人手把手教你,也没有人给你划范围。

这个阶段是一个分水岭,很多人会停留在第二阶段,到不了这里。因为这个时候没有任何的“提示”,需要你从自己的整个知识体系中找到一个目标或者问题的解决方案。能不能成功的关键取决于是不是耐得住寂寞,愿意不断地从知识储备中摸索各种方式、方法去尝试,甚至是补充新的知识进来。

能真正踏入这个阶段的人,在职场里很容易成为一个企业的中层,或者更高,必然是核心人员。

最后一个阶段,没有任何的提示。

「解决问题」的前提是得有一个「问题」。前面的三个阶段,问题都是别人提供的,到了这个阶段,需要自己去发现问题。除此之外,与第三阶段无异。

要做到这点讲起来很鸡汤,就是你得有主动性,有探索精神,有不断寻求更优解的精神。

正如前一篇文章《》所说,问题其实就是「现状与预期的差距」,而这两点经常是由每个人的主观判断决定的

所以,别人没有看出问题的点,可能你就可以看出来。要做到这点这依赖两个前置条件,

  • 你得有足够的知识储备看得懂现状中的问题有哪些?导致这些问题的关键在哪?

  • 你有意愿去主动发现问题。(想不想主动是每个人的自由)

不过,有的人可能只是想活的轻松自然一些,不愿意去主动发现,这也是一种生活方式的选择。

能踏入这个阶段的人,在职场中常位于企业高层,给其他几个阶段的人提出目的/问题的人往往就是他们。

以上的这个路线,就是一个人解决问题的能力从低到高的演进过程。

判断一个人当前处于哪个阶段,从他应对问题的方式上可以看出端倪。我稍做了一下分类,仅供你参考和探讨。

如果一个人遇到问题经常是头痛医头、脚痛医脚,那么可以判断他最多处于第二阶段。因为一个问题的根源如果真的那么浅显,也不会这么容易被解决,甚至是产生它。

如果一个人看似讲的有理有据,但是经常很轻易的下结论,那么他不可能达到第三阶段,但是比刚进入第二阶段会好一些。

为什么不能达到第三阶段呢?因为结论下的太轻易,往往意味着容易「以偏概全」的,凭借一些直觉在做判定。这样的情况下,很难经常在可选择范围内选出最优解。

如果一个人会习惯于刨根问底,寻求根源、本质,便意味着他已经进入了第三阶段。这类人还会经常出现的表现是,一个问题,大家都聊完了、散伙了,他会自己回去会继续研究。然后会拿他研究的结果自己来和你聊,最终你被他说服。

这样的人在职场中真的很受欢迎和重用。因为问题在他们手里会越变越少,而且新的问题会越来越进入到细枝末节。

能达到这一阶段的人往往也可以精准的提出好问题,而不是提一些无关痛痒甚至是不知所云的问题。

如果一个人总能从大家习以为常的现状中不断地挖掘出问题来改进,那么他就属于第四阶段。但是这样的人真的凤毛麟角,百里挑一。

如果你在职场中会出现觉得好闲,没事做的情况,那么意味着你至少还没有达到这个阶段。

因为问题是解决不完的,任何事物都有两面性,当用一个新的事物解决一个老的问题之后,新的事物本身就会带来新的问题。

对照一下自己的情况,看看当前处于哪个阶段吧。如果希望提高自己解决问题的能力,可以看看我的上一篇文章《》,里面有分享我自己的思路和方式方法。

这篇呢,Z哥先分享了一个观点:当一个人被评价为「靠谱」,其实就意味着解决问题的能力强

但是他们走过的路,和其他人都一样,完全符合「教育」在不同阶段的思路,「给目标,给方式」、「给目标、给范围」、「只给目标」、「什么都不给」。只是他们一直在向前,而其他人在半路就停下了。

随后分享了通过一些常见的现象来判断一个人当前处于哪个阶段,个人观点,仅供参考。

我们在社会上、在组织里,存在的意义就是来解决问题的。但是,大多数人并没有意识到培养自己解决问题的能力的重要性。

希望这篇文章能对你有所启发。



原创不易,如果你觉得这篇文章还不错,就「在看」或者「分享」一下吧。鼓励我的创作 :)

如果你有关于软件架构、分布式系统、产品、运营的困惑

可以试试点击「阅读原文

成为一名优秀的软件工程师是每一个软件工程师的目标,但是在实际中,优秀的软件工程师和一般的软件工程师的表现肯定是参差不齐的,这是什么原因造成的呢?这是一个我们必须反思的问题,同时还是一个关乎团队建设和个人成长的重要问题。Katsuya Noguchi总结了优秀的软件工程师和一般的软件工程师的,为如何成长为优秀的软件工程师提供了启发和指导。

现对这些不同点进行了整理更新,具体内容如下:

良好的编程习惯不但有助于代码的移植和纠错,也有助于不同技术人员之间的协作。优秀的软件工程师都具有良好的编程习惯,他们编写尽量少的代码即可满足需求,还能够引入恰当的抽象层次,重构代码,将业务逻辑和其他程序逻辑分离。

一般的软件工程师编写不出高质量的代码,他们只关心自己的代码是否能够达到预期的输出结果,只要有输出结果,就认为自己的任务完成了,根本不在乎代码的可维护性和可读性。

2、快速、高质量的产出

优秀的软件工程师能够在代码质量和开发所耗时间上做出很好的权衡,能够严格控制技术风险,不断完善自己,能够在有限的时间内写出高质量的代码。

一般的工程师写出的代码质量很低,还声称是最优的设计,时间限制常常是他们怠工的借口。他们的代码会给企业带来很大的负担,并给团队成员留下一大堆问题。

优秀的软件工程师不会盲目地编写项目代码,他们会确定每个问题的目标,找出问题的根本原因,并找到解决问题的合理方案。优秀的软件工程师会将大问题分拆为小问题,针对小问题进行理解、构思、计划、维护和重用。

一般的软件工程师只是匆忙编码,解决所分配的问题,不会进一步思考正在解决的问题,从不考虑长期影响。

优秀的软件工程师深知没有完美的设计、服务和工具,他们还深刻理解可选方案以及实际状况的约束并能做出适当的权衡。

一般的软件工程师只是盲目地使用当前比较流行的服务、设计和工具,而不做更深一步的理解和研究。

团队精神和协作能力是程序员应该具备的最基本素质,优秀的软件工程师所写的代码不仅能够让机器高效地执行,更重要的是能够方便其他工程师阅读、改进和使用。他们写测试用例,确保所写代码的正确性,还能够方便其他人对程序进行改进。他们充分利用审查和使用代码的机会,学习其他部分的代码、分享代码风格、控制整个代码的质量。他们认识到并且坚信,代码审查的过程是相互学习和提高整个工程团队产出质量的最佳时机之一。他们的评论能够帮助团队成员成长,他们考虑整体设计、边缘情况、格式改进及提高代码整体质量的其他优化措施。

一般的软件工程师根本就不关心自己代码的可维护性和可读性,他们很少写测试用例,除非写测试用例是指派的任务。

优秀的软件工程师具有长远的眼光,使他们能够承担起各种困难的软件项目,他们经历过无数的非预期任务,如被喊去解决线上服务器的问题,处理积累了很多技术债的代码以及面对较为紧张的期限。

一般的软件工程师对发生的问题从不积极响应,还责怪别人处理不当;当事情进展不顺时,他们很容易失去信心或推卸责任,不主动、不认真地解决问题。

我要回帖

更多关于 我如何快速判断程序员能力的 的文章

 

随机推荐