标题说的有点玄乎,在网上看到的一篇文章,提到了一些大牛具备的几种素质(或者说应该养成的习惯),值得反思。
部分原文如下:
为了了解那些大神级程序员和普通程序员的区别,采访了很多世界高端科技公司的软件工程师。发现这些给世界带来巨大影响的的工程师们至少有以下几个共同的思维模式:
**勇于去研究自己不懂或不熟悉的代码**
一般程序员都不愿意去研究自己不曾接触过的代码,很多人都没有尝试就放弃了。如果你经常去研究你没有接触过的代码,你就会越来越熟悉不同的代码结构和设计模式。现在程序员很容易就接触到优质的开源代码资源,可以很方便的就下载下来做一些改动或者调试,去研究为什么代码可以这么写。
除了代码之外,很多人对于陌生的工作内容也会感到抵触。每次换工作的时候,可能都会遇到新公司的工作内容和以前工作的内容不一样的情况,以至于刚开始的时候,工作效率没有以前那么高。
其实,所有程序员都是在学习的过程中成长的。在一个陌生的领域,没有人可以从一开始就是大神。如果你想在你工作的领域,变得越来越强,无论是写代码,或是与人沟通或者其它的技能,都是需要投入大量时间去学习的。
**精通代码调试**
很多人在写代码的过程中,经常会有的一个问题就是:为什么写出来的代码不能运行?为什么运行的结果不是我想要看到的?
几乎所有的程序员在写代码娿过程中,都不是一遍就能写好的。但是大神级的程序员会很快的就明白自己代码的问题。这是一个很重要的能力,需要在工作中日积月累。那么怎么去调试好代码呢?以下几个方法,看文章的你可以借鉴下:
1.不妨先猜测一下到底发生了什么。
2.假设你的猜测是对的,想想你的猜测会导致程序有什么样结果。
3.试着观察这些结果有没有异常的地方。
4.如果你没有发现异样,那么说明你的猜测就是对的。
5.如果你发现了异样,那么说明你的猜测是错的,接下来换一个猜测试试。
对于大神级程序员来说,这个过程在脑海中就是电光火石的一瞬间。只要你解决的问题足够多,你做出来的猜测就会越准确。
至于如何发现异样?就需要有一套属于自己的工具或者方法了。最简单的就是在代码里输出日志来判断。但是这是比较笨的办法,需要去接触一些高级的工具或者直接带有Debug功能的编辑器。
**重视能够节约时间的工具**
最近打败人类的AlphaGo(阿尔法)每天可以进行上百万局的下棋训练,人类一万个小时的训练却需要10年之久。也就是说,电脑运行几分钟,可能就等于人类工作好几年。这么一比,人力的思维好渺小。。。
高效率的程序员都把时间花在制作工具上,很多程序员也认为工具是很重要的,但是他们并没有花时间去制作、整合自己的工具。但是,团队最出色的员工会耗费了他1/3的时间在工具制作上,这些工具可以用来发布代码,监控系统,以及能让他们花更少的时间去做更多事情。
总之,不要花时间去做没有意义的事情。
**优化你的迭代速度**
假设一下你要花12秒钟去搜索某个函数是在哪里定义的。再假设你每天做这个动作60次,那么你每天就要花12分钟去搜索函数定义。
如果你用一个好一点的编辑器,每次找到函数定义只要2秒钟,那么你每天就会节约10分钟。每年你就可以节约40个小时。
如果你能找到3个这样的场景去优化一下,那么你每年可以节约一个月的时间,想想这一个月你可以做多少有意义的事情啊。
再假如你在调试一个App的错误的时候,改完一次代码都需要重启一下App,然后点击4、5次才能看到错误有没有改好。那么你是不是可以先花几分钟设置以下,让App一启动就转到显示错误的页面呢?
所以千万不要小看这些琐碎的细节,改善它们对你的回报是巨大,细节决定成败啊。
**系统性的思考方式**
当你在写代码的时候,很容易就认为只需要按照需求实现了指定的功能,这个代码就可以算是写完了。但是这其实只是沧海一粟。任何没有发布到生产环境的代码都不会产生任何价值的。
如果想写出真正有影响力的代码,需要从整个系统去理解属于你的工作:
1.你的代码和其他人写的代码在功能上是什么关系?
2.你有没有好好测试你的代码?或者其他人是否很容易测试你的代码?
3.为了部署你的代码,线上生产环境的代码是不是需要改动?
4.新的代码会不会影响到已经运行的代码?
5.在新的功能下,你的目标用户的行为是不是你所期望的?
6.你的代码有没有产生商业上的影响?
这些问题都不是很容易就能回答的,但是在写代码的时候,你需要明白你的代码最后会不会得到你想要的结果。
上面谈到的几点,很容易就可以想到,但是你做到了吗?
共勉。