突破程序员思维

突破程序员思维

来源:技匠的简书

过去我曾一直认为程序员是依靠他们的技术在编程,也是因为技术使得程序员的水平有高低之分,但随着我写代码的时间越来越长,也接触到更多的程序员,我渐渐发现程序员们其实是依靠他们所特有的程序员思维在进行编程的,而他们中的佼佼者正是那些有着更高思维成熟度的优秀程序员们。

什么是程序员思维

那么,什么是程序员思维呢?我曾读到过一些文章,试图给它下一个明确的定义,比如,具备抽象和逻辑思维的能力,拥有面向对象编程和设计的能力等等。我对这些所谓定义有些不以为然,因为,我所体会的程序员思维更像是一种感觉,它是由常人的思维+编程思维,长期相互作用下产生的一种思维模式,它能够帮助程序员快速找到以程序方式解决现实问题的最优解。

那么,程序员们又是如何获得这种思维的呢?我想说,从你学习编程并写下你的第一个HelloWorld程序的时候,程序员思维就已经不知不觉地建立起来了,而随着你不断深入地学习与实践,它也变得越来越完整和成熟。下面就是我认为对于提升程序员思维有所帮助的几点建议,虽然不做展开,但相信每个程序员都会认同吧。

  • 长期不间断的编程实践
  • 持续地学习与借鉴(参考)
  • 学会反思,并像专家一样思考

为什么要突破程序员思维

既然程序员思维对程序员来说如此重要,我们又为什么要突破它呢?在我看来,主要有以下一些原因:

  • 随着技术的进步和专业领域的融合,程序员的职能正在不断扩展,你一定也听到过DevOps,全栈工程师,增长黑客这些词吧,新一代的程序员不仅需要具备很强的编程能力,同时还需要具备从设计、运营、测试等各种不同角度去进行分析和判断的能力。
  • 从程序员的发展角度来说,当你从一名程序员转变为高级程序员、架构师、系统分析师、项目经理、产品经理的时候,需要你突破程序员思维,而从更人性化的角度去识别和解决问题。
  • 突破程序员思维对你的生活也会有所帮助,有很多过于技术的程序员,随着编程时间的增加,他们会越来越不善与人沟通,甚至排斥与人交流。他们也往往无法扮演好自己在生活中的角色。

程序员思维对程序员来说是一把双刃剑,它既能帮助程序员写出优秀的代码,去解决一个又一个复杂的问题,但有时候它也会阻碍程序员们的发展,成为进阶路上过不去的一道坎。

如何突破程序员思维

在成为架构师以及开始做IT管理之前,我也是一个完全用程序员思维去进行思考的人。但我通过一些方法逐渐突破了程序员思维,相信这些方法也能给你以启发。

透过技术发现问题的本质

我时常会组织开发团队做一些技术问题的讨论,但当一个问题被抛出时,比如:用户时常会在段时间内重复地点击某一个功能,导致系统压力的上升。团队的大部分程序员都会很快给出他们的解决方案,比如增加流量阀的控制或在用户会话中加入某些Token来防止用户的频繁重复提交等等。但几乎很少有程序员会问,用户为什么会在短时间内频繁点击这个功能呢?是啊,解决问题的关键,往往不是如何通过技术手段禁止用户这样做,而是理解用户这样操作的原因,从而得出解决的办法。

多年的开发工作,使程序员们不自觉地首先想到如何用技术手段去解决问题,然而,真正优秀的程序员一定善于透过技术发现问题的本质。我想这就是我们突破程序员思维的第一步,也是最容易实现的一步吧。而说到方法,我最常使用的便是,反复地追问一件事的原因,比如刚才这个例子,最终我们找到原因可能是系统没有给用户一个友好的提示,导致用户错误地认为系统并没有处理他的请求,而尝试反复点击。而我们的解决方案也与之前团队程序员们所提出的完全不同,只需花上几分钟,给系统加上一句友好的提示就行了。

像专家一样给出意见

我发现在很多场合下,比如与用户沟通需求、与产品经理沟通方案时,程序员总是处于比较弱势的一方。他们只是被动地去接受这些需求和方案,然后回去将它们转换为代码的实现。

而那些真正优秀的程序员在与用户进行沟通时,总是试图去理解用户所提出需求背后的真正原因,因为,他们知道用户往往会按照自己对问题的理解去给出他们认为正确的方案,而很多情况下,这并不是正确或最优的解决方案。优秀的程序员会站在用户的角度,认清问题,并像专家一样给出他们认为最优秀的方案。

如果你对一个问题有充分的理解,并具有足够的信心,你就应该站出来像专家一样给出自己的意见,这会让你显得与众不同。而如果你每次提出的意见都被证明是正确的,那么不需要多久,你也会被大家认同为是一名真正的专家了。

杂学并从中获得不同的视角

要做到看清问题的本质和像专家一样给出意见,其实并不简单,这不仅需要你具备极强的技术功底,更需要你对问题所涉及的相关领域有足够的认识。你必须通过大量地学习编程之外的各种知识来完善自己的知识体系,并从中获得不同的视角。

我经常听到程序员会抱怨用户提的需求质量有多差,设计师做的设计根本无法实现等等。这其中一定有一些客观的原因,但程序员无法跳出程序员思维,站在用户或设计师的角度看待问题,也是一个重要的原因。

我在自学设计之后,获得的不仅仅是一项技能,对我帮助更大的是自己能够从一名设计师的角度来待看问题,这反过来也促进了我的编程能力的提升。同样的,你也可以学习某个行业的知识,即使你无法成为这个领域的业务专家,但这些知识能够帮助你更好地理解用户的需求,从而得到更优秀的技术解决方案。这也是为什么我总是鼓励身边的程序员们去尝试学习除编程之外不同东西的原因。

找回创造力

虽然编程是一项脑力活动,但程序员们可能都知道,在大多数情况下这并不需要我们发挥创造力。也就是说,我们在按部就班地完成那些开发工作的同时,我们正在失去我们的创造力。

创造性地解决问题是优秀程序员所需要具备的能力,但我恰恰发现很多具有多年编程经验的程序员,他们的思维却好像受到了限制似的,只能凭着那些已经有些过时的经验去给出他们的方案,而很难创造性地去解决问题。

其实,有很多方法都能让我们找回创造力,关键是你是否愿意坚持那样去做。而我的方法也很简单,每天进行阅读,每周写一篇博客记录自己想到的东西。另外,我也有一本小本子用来记录那些转瞬即逝的想法,有些看起来是那么不切实际,但我都把他们记录下来,没事的时候就去翻翻,这个过程中我可能会得到一些新的不错的可行的点子,然后,我再尝试着花些时间把它做出来。虽然,他们中的大部分都不会产生什么价值,但我知道下一个优秀的创意或想法,可能就来自于它们。

突破程序员思维并不是要摒弃它,恰恰相反,突破正是建立在成熟的程序员思维之上的,这将帮助程序员以更全面的视角去思考和解决问题,同时也能为我们程序员这个职业创造出更多可能。

文章转 技匠的简书

时间: 2024-08-07 21:18:41

突破程序员思维的相关文章

[转]突破程序员思维

本文转自:https://kb.cnblogs.com/page/597877/ 过去我曾一直认为程序员是依靠他们的技术在编程,也是因为技术使得程序员的水平有高低之分,但随着我写代码的时间越来越长,也接触到更多的程序员, 我渐渐发现程序员们其实是依靠他们所特有的程序员思维在进行编程的,而他们中的佼佼者正是那些有着更高思维成熟度的优秀程序员们. 什么是程序员思维 那么,什么是程序员思维呢?我曾读到过一些文章,试图给它下一个明确的定义,比如,具备抽象和逻辑思维的能力,拥有面向对象编程和设计的能力等等

有意思的 '程序员思维'

先贴俩行业老梗 一个程序员下班了,他老婆给他打电话说下班回来的时候买一笼包子看见卖西瓜的就买两个,然后他就回家了心里想买一笼包子看到卖西瓜的就买两个,然后他在路上看到卖西瓜的,就买了两个包子回家了. 还有一个记不大清楚了,大致意思是本来需要换个灯,发现没有螺丝刀,就去邻居家借,但是邻居家的螺丝刀有问题,于是又去先修理螺丝刀,等等. 第一个一般用来说明程序员思维的代码逻辑惯性,看见卖西瓜的就买两个,普通人估计抱着两个西瓜一笼包子就回家了,可怜的程序员把看见卖西瓜这个当成了if判断,直接把包子变量置

何为程序员思维

看到这个题目,我想起了很多很多........... 首先,我说明我为什么要写这篇文章了. 一个原因是逸惋惜峥嵘岁月岁月稠,当初读大学的时候,学习计算机技术的课程,我过多的走向了两种极端的状况.一种情况,我愿意把他归结于本末倒置,例如我学习<C++面向对象程序设计>的时候,更多的是研究C++的语法,却忽略了面向对象的思想,到头来,C++语法学会了,但是最重要的面向对象却没有理解,也不知道他能够真正的做些什么.另一个情况,我把它理解为目标很宏大,理解很困难,例如,我学习软件过程的时候,开始,课程

偷偷告诉你什么是程序员思维。

这几天连续发生的事情已经颠覆了我的思维了. 首先是易中天品三国,让我深刻体会到了历史形象不等同于文学形象.如果是这么那看的话,会有两个延伸: 1. 经过时间的打磨,一再重申的假象也能被改写成真理. 2. 名人出名了之后需要包装的,这里技巧很重要. 其次是看了三体.以前没怎么看过科幻小说,一看就入迷了,好歹物理系毕业的,居然在小说里找到了慰籍.三体游戏,面壁人,黑暗森林,思想钢印,四维空间,曲率引擎,宇宙湮灭.以人的视角永远无法丈量未来,面对未来能做的只能是活在当下,只争朝夕. 人和人的连接真是奇

到底什么是程序员思维,设计师思维

笔者这行匆匆入行快10年了,这么些年做过的项目也比较多,比较杂,见到的客户也有奇葩的,一知半解的,懂行的都有.谈谈个人见解. 什么是思维? 用脑袋瓜想的就叫思维,只要是你所见所闻后,你自然反应出来的动作或者语言,说明你就有思维. 比如:人家一拳头打过来,你会下意识的知道要躲避,为什么?打到身上会疼啊 比如:今天到田里看自家种的稻谷,一大堆的飞虫,你难道还不会马上想到要过来打农药? 再比如:你要坐公交去上班,你为啥看到对应的多少路公交来的时候,你会想要挤上去? 其实每个行业,每个人都有自己的思维方

程序员思维修炼:从新手到专家的5个阶段

摘自:<程序员的思维修炼:开发认知潜能的九堂课> 阶段1:新手 Novices need recipes ---新手需要指令清单. 新手在该技能领域经验很少或者根本没有经验.这里提到的经验,指的是通过实施这项技术促进了思维的改变.举个反例,可能一个开发人员声称拥有十年的经验,但实际上只有一年的经验重复了九次,那么这就不算是经验. 新手非常在乎他们能否成功,没有太多经验指导他们,他们不知道自己的行为是对是错.新手不是特别想要学习,他们只是想实现一个立竿见影的目标.他们不知道如何应付错误,所以出错

「程序员思维训练」1. 读前声明

本书作者:Andy Hunt「催康 译」 读前须知: 本书是对 高级程序员 的思维训练,包括个人提升和团队管理等 在没有达到本书的读者水平的情况现 建议跳读,先了解,取其所需 一本书没有必要一次性读完「针对所有的书籍而言」期间你还可以做很多事情,这样可以提高阅读的效率 Chapter 1 绪论 诀窍 :始终关注情境 经验之谈不是指令清单,它们必须在一定的情境下使用 切记随波逐流                                Only dead fish go with the f

程序员思维释放:打破常态

在公司没事,作下一段时间总结: 对于像我这类刚出校园的程序员,可能更加关注的是代码细节,而没有锻炼自己发散的思维项目一个接一个,而很多东西,是重复的叠加,我们从来不去想为什么会是这样?为什么这个问题为发生?为什么逻辑应该是这样,想到了很久以前的高考,对于数学一类题目在求多种可能发生的情况,我们常常用到的是归纳的方法,也就是我们现在所用到枚举,一类事物的发生,是一种情况,还有很多未知情况,是我们程序员懒得去想,还是习惯了自己平时的行为和思维方式, 我们要学会用局部最优来代替全局最优程序员有三种思维

用程序员思维、程序设计师思维两种方式写求斐波那契数列的方法。

//用Java实现斐波那契数列(Fibonacci) public class Test { public int f(int n)//n代表第几个数字,程序返回它对应的值 { return n>2?f(n-1)+f(n-2):1;//看似如此优雅的一句程序 } //程序设计师的思维:会重构上面的代码,让他们更易读,推荐!!! public int fibo(final int pos) { final int num; if(pos>2) num = fibo(pos-1)+fibo(pos