在信息技术高速发展的今天,程序员已经成为炙手可热的职业。然而,并非每个程序员都能在激烈的竞争中脱颖而出。
那么,究竟是什么特质区分了普通程序员和优秀程序员呢?
1.新领域的学习能力
在评估一名程序员的能力时,我们首先需要关注的是他们在新领域的适应和学习速度。
例如,如果一个人之前没有使用过Go语言,那么他需要多长时间才能用Go语言实现一个功能?面对一个全新的代码库,他们实现一个需求需要多长时间?当他们加入一个新公司或新部门,完成第一个项目又需要多长时间?
我认为这一点至关重要,不仅因为技术的更新换代非常快,需要我们不断学习新技能,更因为第一印象的重要性。
2.深厚的领域知识
当负责的产品出现异常行为(bug)时,你能否迅速判断出问题可能出现在哪里?当同事遇到类似问题时,你是他们寻求帮助的第一人选吗?
举个例子,以前我遇到一个严重的bug,我花了半个小时调试却毫无头绪,于是我向老板汇报。老板立刻指出问题可能出现在A、B或C三个地方,C是最不可能的,让我先去检查C。结果问题很快得到解决,我也能按时下班。
对系统架构和代码逻辑的深入理解,能够帮助我们快速定位问题,节省宝贵的时间和精力。
3.出色的问题解决能力
优秀程序员是天生的问题解决者。他们能够从纷繁复杂的信息中抽丝剥茧,找到问题的根源并提出有效的解决方案。
比如在调试时,如果有人在论坛上讨论你们产品的异常现象,你能根据讨论直接找出bug吗?这需要你对产品架构和用户行为有深入的理解,并具备从海量信息中提取关键信息的敏锐洞察力。
面对性能优化的目标,你会如何着手找出瓶颈?这需要你熟练掌握性能分析工具,并对系统架构和代码执行效率有深刻的理解。
面对一个开放问题,你如何简化问题?这需要你具备清晰的逻辑思维能力和抽象思维能力,能够抓住问题的本质,并将其简化到可以解决的程度。
4.领导力
领导力不仅仅是领导层的能力,领导自己也是一项领导力。
比如在负责的项目中,你能自信地做出正确的技术决策吗,甚至能说服领导,还是必须请示领导怎么做决定?你能规划好项目的时间表,给出准确的时间预估吗?你知道下一步应该做什么吗?
特别优秀的程序员在接到任务后,老板就可以放心等待成果了。如果每天都需要告诉程序员今天该做什么,做完第一步永远想不到下一步,作为领导,虽然这种程序员也能干活,但带领起来确实很累。
5.团队协作沟通能力
比如你的领导和团队是否了解你的进度和进展是否顺利?你能处理与团队成员的冲突吗?当你和领导或团队意见不一致时,你如何处理?
你能推动跨部门合作吗,跨部门的沟通是否顺畅?你能带领新人并培养他们吗?你能在紧急情况下承担责任吗?你能带领团队吗?
优秀程序员是团队中不可或缺的一员。他们能够与团队成员保持良好沟通,及时同步项目进度,有效处理团队冲突,并积极推动跨部门合作。
6.对产品/业务的认识
你知道你的部门做什么产品和业务是有意义的吗?当产品提出不合理的要求时,你能有理有据地反驳,并且让高层觉得你更有道理而不是产品更有道理吗?你有能力和客户直接沟通需求吗?
一个优秀的程序员,尤其是级别特别高的,由于对领域非常熟悉,会参与很多与产品相关的决策,很多时候会与产品管理重叠。
因此,市场调研、客户访谈、需求分析等,即使不比产品经理做得更好,至少会做,不会被不靠谱的产品经理带入误区。即使不跳槽,也能在同领域内担任比平均水平高的产品经理,没有太大难度。
------
希望每一位程序员都能以此为目标,不断精进,在职业道路上越走越远!