在我和朋友的一个微信小群里,有位产品妹子问了一个问题:现在长沙的高级程序员大概是什么价位?微信群里的几个开发朋友开始你一句我一句,大家不是在讨论价格,而是在讨论:什么样的程序员才是高级程序员?

技术,有好活是基础

在程序员的世界观中,技术好其实是许多指标合并在一起的,写代码快、bug少、api设计合理、架构灵活、多向思维等等,这些都是技术好,但技术好这个指标又没有必要展开讲,因为我觉得技术好只是成为高级程序员的一个基础。

单纯的管理称不上高级程序员,最多算是个高级管理者(没有贬低高管的意思)。网上有很多人建议,说找工作上司必须还在写代码,其一是不写代码的人指挥写代码的,容易事倍功半;二就是容易产生不满的情绪,假如上司真的只会指手画脚,程序员大多数都心高气傲,肯定不会全心全意干活的。

能写代码并且能写高质量高难度代码的另外一个很大的好处就是,能在一个较高水平来评估低水平代码所需的工作量与挑战性,并且对一些难度较高的任务,需要拆分成为几个简单的小任务,这其实也是高级程序员日常的工作之一。

授业,能带着升级

在我以前的感悟中提到过,有篇文章列举了一项很触动我的高级工程师必备技能:帮助他人提升。

玩游戏的人也许会知道,在很多网游中有一个拜师的功能,在两个玩家成为徒弟和师傅的关系之后,为了让徒弟出师(达到游戏中的某些条件),师傅会倾自己的所有力量帮助徒弟来提升自己,在出师之后,师傅会获得巨大的奖励,而徒弟也在这个过程中获得了师傅大量的帮助。师徒系统的设计让游戏的新手能够更快的融入游戏,由一个简单的游戏系统让游戏的上手度获得了巨大的提高。

反观现实,当一个中级程序员成长过程中,高级程序员也可以将自己的技术、处理问题的思路、获取知识的途径等通通传授给中级程序员,中级程序员获得了成长就能为高级程序员分担更多的任务,也是一个双赢。

当然,将一个初、中级程序员慢慢培养起来,比我所说的肯定要难很多,比如布置具有一定挑战又不至于完成不了的任务、对业务的多维度思考与未来的业务拓展的规划、中长期职业生涯规划等,都不是短时间能够培养出来。

经验,思考全面,理解透彻,问题处理迅速

经验说起来是一个比较玄学的东西,它既不是因为做的时间长久而增加,也不是因为人聪明而变多,这是一个根据所见所闻再总结归纳吸取复用的结果。通常来说,在某个领域积累的经验,较难在另外的领域使用,所以对于程序员来说的经验就更加玄学了。

在互联网化的今天,无数的领域在进行数字化,对餐饮业务的经验对于医疗业务来说并没有什么很大的作用,对单一业务钻研的大师并不是真正的大师,而在所有行业都能迅速进行业务理解的才是真正的大师。同理,对问题的处理也是一样,在餐饮行业中碰到的菜品出品、制作顺序等问题在医疗领域也是没有的,但在碰到如药品成本、病床管理等问题的时候,又能迅速根据以往的经验进行解决,这才是真正的经验。

经验也会让人思考的更全面,这也是一个无法量化的说法,但是举个例子也许就能明白了,这是我看到的一篇文章中提到的:如果要做一个小数据量的简单搜索,比如超市商品的检索,你会如何对搜索结果排序?

我只简要的介绍文章中提到的一部分思考:排在最前面的肯定是搜索关键字完全覆盖匹配的;字数匹配上较多的次之;子串匹配上的再次之,其中子串匹配靠近开头的排在相对前边;读音相同文字不同的再次之;相同规则匹配上的,按拼音顺序排序进行排序;相同规则匹配上的,全名短的或者价钱便宜的或者购买量多的排前边等等。

责任心,一种强力驱动剂

责任心常常出现在女人对优质男性的评价中,因为责任心是除开自身实力之外的有力保证。

也许一般人不会注意到责任心对于公司运营和企业文化的影响,最普遍的影响就是甩锅文化。如果公司中存在一个没有责任心的人,很容易不愿意承担起自己的责任,当某个锅被无缘无故甩到身上的时候,很容易下意识的将锅再一次甩出去,这样很有可能开启甩锅的链条。有一就有二,甩锅的企业文化就这么产生了,这样的信任崩塌型企业文化想要再校正过来就很难了。高级程序员出现这种情况更加恐怖,上司向下级甩锅最为致命,也更容易造成信任崩塌。

有责任心的高级程序员也更利于公司的团结,当你出现的时候,就会给同事带来安心的感觉,只需要全力注意自己的职责,和同事的配合也会更加纯粹。

沟通,这是效率提升的利器

会沟通其实是一个没有上限的事情,因为眼光、谈吐、个人魅力都是没有上限的,但最基本要能做到把自己想表达的能用简练的语言进行传达。

高级程序员之间的沟通常常会比中低级程序员高效且传达错误的信息更少,因为大多数的高级程序员在技术和业务能力上是非常过关的,所以他们在大多数的情境下都能考虑到相同的东西,并不会出现需要双方沟通某个接口使用什么http方法或者某个字段加不加索引,高级程序员之间的沟通大多数会出现在业务划分和架构上。

程序员通常还需要跟产品经理和测试沟通,与产品经理的沟通体现了对业务能力的理解能力,在看到原型设计的时候,会开始思考在场景下如何对业务进行建模,并且根据经验来提出原型设计的修改,以达到对架构设计更加友好的效果。与测试的沟通也体现了对自己代码的掌控能力,有的时候测试是无法完全写出复现步骤的,但bug确实是真实存在的,不能够因为测试无法写出复现步骤而置bug于不顾,这时通过与测试的沟通,进行一场犹如推理的讨论,找出自己代码中薄弱的环节,也是沟通带来效率提升的一个典型的例子。

最后高级程序员还要会跟更上一级甚至老板沟通,人力、工作量、工作难度、情绪等等,这些都需要高级程序员去反馈给上级,这样才能让公司有正向的循环反馈。

主观能动性,从主人的角度看公司

换个说法也许更通俗易懂,就是让人更省心。看到网上有人说自己被优化成两个年轻人了,我时常就会想,为什么两个年轻人能够代替他。

我老婆以前问我,你知道什么是洗碗吗?洗碗并不是把碗里挤点洗洁精再用抹布擦一擦冲冲水,洗碗指的是:把餐桌上下顿不吃的菜和所有碗里剩的米饭倒在垃圾桶里,把碗碟从桌上收拾到洗碗池,把碗碟洗干净,再把洗干净的碗碟放到碗碟篮沥水,把抹布洗干净后擦一下餐桌和灶台,把砧板、刀、锅洗干净并放回去,再把抹布洗干净挂起来,把洗碗池里的垃圾掏出来丢到厨余垃圾袋,把厨余垃圾袋收拾好并换上新的垃圾袋。

这,叫洗碗。

如果仅仅是只做碗里挤点洗洁精再用抹布擦一擦冲冲水这一个动作,那就并没有把自己当做这个家的主人。

高级程序员在主观能动性一定是非常强的,并不需要等着上级来指派任务,他们眼里一定是有做不完的活,业务总是有没有做到完美的地方,所以,高级程序员有比初中级程序员更不可替代的地方。

总结

成为高级程序员是否一定要像我说的那么完美呢?其实也没那么苛刻,但高级这个名头冠上了,就得努力做到比别人高级,毕竟程序员也就分了初中高三级,这是最顶级。


0 条评论

发表评论

Avatar placeholder

您的电子邮箱地址不会被公开。