成为一名卓越的程序员
编程的一些思考
千万不要过分关注细节,人的精力和注意力是非常稀缺和珍贵的资源,不要把它们浪费在不重要的事情上面。
对应在编程过程中:一个方法只需对外声明能干什么活,而无需详述怎么干的,编码者在完成代码一个方法的设计实现后,能够快速的抽身,把精力投入到下一个方法的编码中去。无需背上历史包袱,毕竟一个人的精力是有限,只关注当下面临的事,尽力解决当前面临的问题,能够保证高效而少犯错。
怎么才能在有限的精力下成为一名卓越的程序员呢?
大多数人都是精力有限的,笔者可以通过反复锤炼自己拆分复杂问题的能力,来超越大多数编码者。所谓拆分复杂问题,就是将一个大问题拆解成一个个小问题,大模块被拆解成几个小模块(根据自己的理解拆分即可,不必犹犹豫豫,浪费过多的时间在这一点上)。拆分之后要面临的是解决拆分出的模块,按顺序编制功能。遇到不决的模块,先跳过,处理目前思路清晰的模块。这项能力有以下好处:
思路清晰的模块好处理里,完成过程中能加深对整个系统的理解,也许编码过程中就能拿出跳过模块的解决方案。
避免卡在一个问题上,因为一个问题没解决而导致后续功能都无法完成(这在外界看来工作量为 0,在真实的工作中要 100%完成,要么完成 0%。这种作法是不行的,作为打工人能理解,但领导是不能接受的,所以保证至少解决了部分问题,在领导看来完成部分和一点都不完成区别是天差地别的(一个是能力问题,一个是态度问题,态度不好能力再高的下属无疑是不受待见的),每到急难险重的问题由时,都不会是领导考虑使用的对象)。
减轻自己的心理压力,简单的功能迟早都要编码,既然这样为什么不早点写,早写至少有两点好处:
① 有工作量可以汇报,不管你承认不承认,当今会汇报工作的人就是吃香,会汇报是一项重要的工作能力;
② 清空大脑缓存,留更大的空间去老虑其它棘手的问题。
对于所有模块的开发,能解决问题为第一要务。不要上手就中想要写出最优雅,时间复杂度和空间复杂度都尽如人意的代码(不要幻想自己是个天才),优化要尽量排到后面去做。总之,先试着让程序跑起来,再尝试让程序跑的更快。
接口是签名,对外声明的约定。比如说 API 告诉别人我能运物品到火车站,别人知道这一点就行,无须关注你采用什么方式。(想想自己调用库中的函数时,会关心函数底层的实现吗?别逗了,好的程序员在写程序根本过分在这些已经被生产大量证实过的功能上下功夫)。
要有整体思维,全局思维,绝不困于一隅,把精力浪费在一些琐碎碎的小事上。能够做到该聚焦的时候聚焦,该宏观的时候宏观。回想起自己年少时曾多次兴致勃勃的搭建开源代码阅读环境,费了好大功夫准备环境,搭建环境就消耗了当初的热情,乃至从没完整阅读过一个开源软件的源代码。现在看来,自己阅读源码的指导思想上错的。一开始就想着搞明白每个细节。怎么能要求自己做大部分人都难做到的事呢? 挑战人性,可能偶尔会成功那么一次,但不成功是占大多数的。聪明的人从不挑战人性,而是顺之而为。人贵有自知之明,在于知道自己的能力边界,慢慢的去突破,而不是天真的在自己的能力范围外另外开辟一个战场,还期待着能够成功。
评论