程序员进阶之路

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

 

什么是程序员思惟

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

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

长期不间断的编程实践学习

持续地学习与借鉴(参考)测试

学会反思,并像专家同样思考设计

为何要突破程序员思惟

既然程序员思惟对程序员来讲如此重要,咱们又为何要突破它呢?在我看来,主要有如下一些缘由:对象

随着技术的进步和专业领域的融合,程序员的职能正在不断扩展,你必定也听到过DevOps,全栈工程师,增加黑客这些词吧,新一代的程序员不只须要具有很强的编程能力,同时还须要具有从设计、运营、测试等各类不一样角度去进行分析和判断的能力。开发

从程序员的发展角度来讲,当你从一名程序员转变为高级程序员、架构师、系统分析师、项目经理、产品经理的时候,须要你突破程序员思惟,而从更人性化的角度去识别和解决问题。博客

突破程序员思惟对你的生活也会有所帮助,有不少过于技术的程序员,随着编程时间的增长,他们会愈来愈不善与人沟通,甚至排斥与人交流。他们也每每没法扮演好本身在生活中的角色。产品

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

如何突破程序员思惟

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

透过技术发现问题的本质

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

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

像专家同样给出意见

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

而那些真正优秀的程序员在与用户进行沟通时,老是试图去理解用户所提出需求背后的真正缘由,由于,他们知道用户每每会按照本身对问题的理解去给出他们认为正确的方案,而不少状况下,这并非正确或最优的解决方案。优秀的程序员会站在用户的角度,认清问题,并像专家同样给出他们认为最优秀的方案。

若是你对一个问题有充分的理解,并具备足够的信心,你就应该站出来像专家同样给出本身的意见,这会让你显得不同凡响。而若是你每次提出的意见都被证实是正确的,那么不须要多久,你也会被你们认同为是一名真正的专家了。

杂学并从中得到不一样的视角

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

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

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

找回创造力

虽然编程是一项脑力活动,但程序员们可能都知道,在大多数状况下这并不须要咱们发挥创造力。也就是说,咱们在循序渐进地完成那些开发工做的同时,咱们正在失去咱们的创造力。

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

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

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