最近团队在扩张,也分担了部分的招聘压力。因而,也顺势思考了一个问题:怎样才算是一个靠谱的程序员?

  • 知识体系化
  • 懂得分析和解决问题,拥有把茶壶中的知识转化成解决方案的能力
  • 码的一手好代码


做开发或者研发比较费神的问题是,我们将会面对大量的知识点。尤其是做终端开发的,需要掌握很多东西。一不小心,这些知识就成了碎片化的知识。东一榔头西一棒槌,遍地野草。而一个体系化的知识系统则能够代表着思考的深入,找寻过这些知识点之间串联起来的线索。也应该深入思考过这些知识点之间的共性与不同。比如就拿网络来说吧,很多人在简历里面写:熟悉HTTP、TCP等网络协议。仔细一问,很多都是我使用过OkHttp、使用过AFNetworking。[手动一脸黑线]。按照这个逻辑,我吃过米其林的饭,我就可以是三星大厨;我做过飞机,我就是驾驶员。使用和熟悉是有非常大的区别的。


熟悉代表着你能够不止知其然,而且知其所以然。之前和很多朋友讨论,在面试的时候考算法到底有没有用?平时写个iOS的代码,哪里需要B+树、二叉树反转,不都是容器进容器出做一下数据转换嘛。这些都只是知识点而已,面试的时候考的算法。哪里是看你有没有把这个题目做出来啊。比如:一个简单的输出KeyWindow上面所有的View的frame。看的是你思考的速度和准度。也就是说的懂得分析和解决问题。

在别人没有提示的情况下,能够充分的了解问题,并且能够定位这个问题和自己知识体系中的哪个知识点相关。并提取相关知识,形成解决方案。 比如刚刚frame的问题,其实就是一个Tree,既然是tree那么遍历无非是广度优先或者深度优先。那么就能够写出一个“算法”来。这与经验性的写出递归的解法,而不知道非递归揭发,区别非常大。

“谋定而后动”。在有足够的知识支撑下方能得出靠谱可行的方案。毕竟扪心而问,在打团战的时候,你是喜欢突然爆发一下就没有然后了的队友呢,还是喜欢能够持续稳定输出的队友。当然是持续稳定输出的了。而且也不喜欢有脑子里面有一壶饺子,说的头头是道。一上战场就被秒的队友。有足够的知识体系,也知道如何解决问题还不够。你还得码的一手好代码。

在意函数命名,在意临时变量的生命周期,在意类的接口定义,在意高内聚低耦合,甚至在意i++和++i 的效率差别。能够找到解决方案还不够,还得有一手好代码。

这些是我认为的一个靠谱的程序员的硬素质。而还有一个非常重要的软素质:“态度”。借一句公司里面TK大神的话:什么才是程序员的核心竞争力?(以下内容纯属剽窃,讲的实在太好)

“对待问题的态度,以及处理问题的思路和方法”

你服务器偶尔出501错误,也许比例不高,很多程序员:没错,是很多,假装看不见不在乎,或者归咎于人民问题。这就是态度问题。

再往后负载高了活着其它什么原因,突然频繁出现501错误,不去追究深入的原因。而是找个钟接口,什么IDC服务商不好,服务器品牌不好,操作系统不好,数据库不好,CDN不好,网络状况不好,web server不好,甚至直接找Boos说我们被DDOS啦!!!

这就是态度,触目惊心,如果能对问题有敏感性,能知道任何小的问题,轻微的问题有足够的敏锐度。很多性能活着程序逻辑上的非致命BUG,在不够敏锐的时候是发现不了的。但是一旦进入特殊场景就会骤然爆发,你多一点敏锐度,就会减少这种危机。

第二个是解决问题的态度,有人对自己的解决方案信心满满,认为万无一失。但是有的人就会多留一条后路。

第三个态度基于沟通与理解的态度,产品或者运营提出了一个不靠谱的需求。一句话打回去的确很爽很威风,但是又没有仔细沟通分析过?这个需求机遇怎样的实际诉求,这个实际诉求是否存在更合理的实现路径。一句话“这个没法做”,不是正确的沟通态度。

Last modification:April 7th, 2020 at 08:37 pm
如果觉得我的文章对你有用,请随意赞赏