我曾经有幸合作过的最有效率的软件工程师,有着熟练的技术和卓越的决策能力。他们大多内涵以下7种特质:
1.系统调试技巧
编程很大一部分时间其实是花在调试上的。有用户报告紧急问题,尽快将其修复;服务器的CPU出现负载高峰,尽快找出原因;数据莫名遭到破坏,尽快找出罪魁祸首,等等,都是你的工作。而良好的调试技巧则能让我们干净利落地解决这些问题。
在调试时,我们应该用一种科学严谨的思维看待问题:先假设出错的地方,然后用最有效的方法或者最小可重现的情况去验证。此外调试过程还需要涉及各种的工具:发现瓶颈的分析器、单步执行代码的调试器、缩小回归原因范围的git bisect、交叉分析现状的UNIX命令行等等。
不过,调试的应用范围不仅仅局限于技术领域。如果产品的增长率和使用率趋于平稳,我们该怎么假设和测试用户的行为以调试未来目标的重心?如果一个团队完不成他们的项目目标,我们该怎么调试才能知道导致项目流产的根本原因是技能不足,团队沟通不畅还是别的其他原因?招聘有的时候并不能尽如人意——你也知道,大家对于你是如何调试的过程并不能一目了然,不是吗?(关键:先从数据入手)
2.勇于面对未知
作为一名软件工程师,你需要经常专研那些又大又不熟悉的代码库:可能你需要好好研究你正在使用的那个开源工具的代码,才能随心所欲地挥洒自如;又或者你需要搞清楚其他团队成员写的代码,因为他没有修改时间等等。所以,快速驾驭大型代码库和精通相关区域的能力显得至关重要。而这种能力大部分来自于经验,通过阅读过大量代码积累的经验。还有一小部分则需要靠我们熟悉能搜索代码库、跳转到相关部分的工具了,以及会查找有关提交历史中的版本控制——这些捷径都能减少我们去了解新代码所需的时间。如果是在更为成熟的公司,这种勇于面对未知的精神也能让我们受益匪浅,不过不同的是,我们往往只需要专注并精通一部分代码库就能成果斐然了。
当然,其他非代码领域有时候也需要你去探索。软件工程师常常需要接待客户、与销售人员讨论客户要求的可行性、给新的工程师培训,以及其他领域的很多你甚至完全没有接触过的事宜。在这些经历中成长,会让你受益无穷。
3.对决策的务实态度
可能在一家大规模公司,在代码审查和单元测试坚持己见有助于改善组织平衡。但是在一家初创公司,务实更重要,因为这能让团队快速完成任务。在这里我所说的务实指的是,知道什么时候应该积极辩论,而一旦有了决策,即便你再不同意,也能一丝不苟地作为团队的一份子认真执行。我曾经看到过因为编码风格而相互争执的现象,一个说在源代码起码得有80,100,或120个字符和大括号,而另一个觉得应该另起一行。呵呵。我深深地觉得,我们还不如把这些宝贵的时间和精力用到更重要的决策上。
对决策的指导启发式评估应该侧重于“是否最终能增加团队成功的概率?”。很多因素都会对这个问题产生影响:产品的选择、架构的侧重点、团队的文化、人才结构,等等。我们在决策前最好限定讨论的时间,然后坚决执行,各抒己见。
4.善于运用工具
工欲善其事,必先利其器。工具的合理运用能让我们节约大量的时间,而时间则是我们最重要的资源。高效的工程师常常是那些善于利用工具的人,而这一点在创业公司尤为重要,因为这里的时间更紧迫。一些大型的组织可能会有专门的工具团队。而在初创公司,你善用工具的能力越强,完成的任务数量就越多。如果这些工具也为其他团队成员所接受,那么团队生产力将会发生乘数效应。
5.牛逼的多面手
初创企业早期出现的很多问题其实并不需要很专业的知识。具备的技能越多,在解决问题时遇到的瓶颈就越少,哪怕我们只是对这些技能有一个最基本的了解,还在摸索熟悉技能的过程中。如果前端Web工程师也装备了基本的服务器技术(server skill),那下次再遇到与此相关的问题就不必去请服务器工程师在百忙之中拨冗相见了。而后端工程师,假如会一些基本的HTML、CSS和JavaScript技能,就能将他所制作的工具设计成一个Web界面,以方便其他团队成员使用,从而不必因为缺乏web设计师而裹足不前。一个成长中的工程师,应该是那种能顺利使用基本的数据分析工具分析实验数据,而不必受制于数据分析员的多面手。
不过,有一种更欢迎“专家”的例外是,如果是在利基、重技术的环境里,例如启动数据库,那么拥有精深的专业知识工作效率会更高。而且,随着创业公司的发展,对于博而不精的多面手,越到后期,能取代你的人就越多。
6.保持玩家心态,而非受害者心态
在Fred Kofman的《Conscious Business》一书中,他描述了人们对待问题采取的两种不同态度。可以是受害者心态,怨天尤人,责怪他人的不是(项目时间太少、产品推出不当、以及和队友发生争执等等),通通归咎于外部原因。另一种就是玩家心态,审视自己的能力,一旦确定能做补救,毫不犹豫地贡献自己的能量。虽然短时间内,受害者心态能抚慰我们受伤的心情,但是从长远角度看,拥有玩家心态的人才能不断进步与发展。
在创业公司工作压力是很大的,并且随着压力程度的增加,人们往往不但不能勇于承担个人责任,反而很容易陷入互相推诿以逃避责任的怪圈。而这样做,我不得不遗憾的说,最后终将导致失望和解聘。
7.不断学习与回顾,持之以恒
研究发现,只要我们有足够的激情和动力,上述种种品质通过学习和培养都是可以后天养成的。而学习这些技巧的所有能量来源于一种叫做“坚忍不拔”的品质。Angela Lee曾在她的TED演讲《The key to success? Grit》(《成功的关键:坚持》)中,提及这个概念:
坚忍不拔是一种专注于长远目标的激情和毅力。坚持梦想,坚持未来,不是一天两天,也不是一周两周,更不是一个月两个月,而是持续多年,不畏艰辛、勇往直前,为了目标而奋斗。
如果我们也能拥有这种坚忍不拔的品质,愿意投入时间回顾自己的所作所为,那么就能发现自己的薄弱之处和需要改进的地方。然后随着时间的推移,不断进步的你必将会成为一个更为优秀的软件工程师。在早期如果能得到大咖的指点迷津,尽早行进在正确的方向,也能让我们走的更远。
上述这些技能即便是在更为成熟的公司也是能助你一臂之力的,不过在初创公司发挥的作用更大,原因么,上面也有提到,因为初创公司的时间更紧凑。当然,并不是说不具备这些技能就不是一个好的工程师了,这只能说明,可能你不大适合这种创业环境。但是,如果你立志要成为一个优秀的软件工程师,不要让上面这7点品质限制你的发展。那么,从现在开始,写个计划学习和提高这些技能吧!
- 浏览: 46735 次
- 性别:
- 来自: 北京
相关推荐
6. 成为优秀的团队合作者:良好的团队协作精神是优秀程序员的重要特质。积极参与团队沟通,尊重团队成员,提升团队合作效率,如同足球队员一样,为团队的整体成功贡献力量。 7. 文档化工作:编写清晰、详尽的文档是...
在IT行业中,一份优秀的程序员求职简历是成功敲开心仪公司大门的关键。简历是展示自己技能、经验和成就的窗口,能够帮助雇主快速理解你的专业能力。以下是一些制作出色程序员简历的重要知识点: 1. **个人信息**:...
"程序员必备简历模块30套"是一个集合了多种IT岗位简历模版的资源,包括软件工程师、测试工程师和嵌入式开发工程师等专业方向,旨在帮助求职者打造具有吸引力的专业简历。 软件工程师简历模版: 软件工程师的简历应...
最后,不断跟进ASP.NET的新技术和趋势是优秀程序员的特质。随着ASP.NET Core的发展,跨平台支持、容器化部署和微服务架构成为新的热门话题。了解Docker、Kubernetes等技术,结合ASP.NET Core,可以帮助你构建云原生...
以下就是投资人眼中创业者应有的7大特质,以及这些特质如何在精益创业环境中发挥作用。 1. **创新思维**:创新是推动创业的核心动力。优秀的创业者能够提出新颖的商业模式或解决方案,敢于挑战现状。在精益创业中,...
"如何成为一名优秀的程序员" 本文将详细介绍如何成为一名优秀的程序员,包括程序员的...成为一名优秀的程序员需要具备技术水平、学习力量、聪慧和虚心、求知欲、诚恳、沟通与合作、制造力和纪律等多方面的能力和特质。
以下是七个核心知识点,它们构成了软件员的七大武器: 1. **开发工具**:熟练掌握至少两到三种开发工具是程序员的基础。C/C++因其高效和灵活性成为系统级软件开发的首选,而JAVA则以其跨平台特性和与WEB的良好集成...
【程序员简历模板—优秀毕业生8.zip】是一个包含程序员求职简历的文档资源,主要适用于那些刚刚毕业或即将毕业的计算机科学和技术专业的学生。这个压缩包中的核心文件是“程序员简历模板—优秀毕业生8.docx”,这是...
"程序员面试必备简历模板"这个主题聚焦于如何打造一份能吸引雇主注意力的简历,从而增加获得面试机会的可能性。以下是一些关于如何构建有效简历的重要知识点: 1. **基本信息**:简历的开头通常包括个人基本信息,...
### 知识点一:构建高效程序员简历的关键要素 #### 教育背景的重要性 - **专业选择**:彭艳梅选择了软件工程作为她的本科学习方向,这为她打下了坚实的理论基础和技术背景。在简历中突出自己的专业背景,尤其是对于...
【程序员优秀个人简历范文模板】 在信息技术日新月异的时代,程序员成为了许多企业和创新团队不可或缺的角色。编写一份高质量的个人简历对于程序员来说至关重要,因为这不仅展示了他们的技术能力,也体现了他们的...
此外,勇于挑战难题也是优秀程序员的特质之一。面对复杂的问题,他们不仅不会退缩,反而会感到兴奋,因为解决这些问题正是他们工作的一大乐趣所在。他们乐于在解决问题的过程中不断提升自己的技能。 最后,愿意与...
在标签“程序员”的引导下,我们可以进一步探讨成为一名合格程序员所必备的特质和技能。首先,编程不仅仅是一项技术工作,更是一种思维方式的体现,需要逻辑严谨和问题解决能力。其次,对新技术的追求和探索精神是...
综上所述,真正的程序员往往具备以下特质:对编程有深厚的热情,自学能力强,热衷于分享技术,拥有丰富的个人项目经验,对技术有强烈的个人观点,聪明且社交能力强,以及早年的编程经验。当然,这并不是一成不变的...
专业程序员应该具备什么样的特质呢?他们不仅要有超群的技艺和丰富的经验,更重要的是他们能够为别人解决问题,哪怕面对的是非常棘手的难题。他们在解决问题的过程中,能够展现出极高的专业性和责任感。 在实际的...
除此之外,一个优秀的PHP程序员还应具备以下特质: 5. 学习能力:随着技术的不断更新,PHP程序员需要持续学习新技术,如PHP的新版本特性、Web开发框架、现代化的前端技术等。 6. 问题解决能力:遇到错误和挑战时,...
清晰地表达想法,理解他人的需求,是成为优秀程序员的重要特质。 总的来说,"程序员是这样炼成的"意味着一个程序员的成长是一个全面的学习和实践过程,涉及技术、工程、沟通等多个方面。只有不断积累,勇于尝试,...
企业创业者的心理特质是他们成功的关键因素之一。在全面创新和全民创业的大潮...通过深入研究这些特质,我们可以为大学生和其他潜在创业者提供指导,帮助他们提升心理素质,更好地适应创业环境,增加创业成功的可能性。