阅读更多

3顶
1踩

非技术

转载新闻 优秀软件工程师必备的7大特性

2014-10-21 16:42 by 副主编 mengyidan1988 评论(0) 有7816人浏览
不是每一个程序员都能成为优秀的软件工程师。在过去的6年时间里,我在Ooyala、Quora和now Quip这3个创业公司面试过许许多多挺有发展潜力的“种子选手”,他们都有着5年以上的工作经验,并且曾为类似于谷歌这样的顶级技术公司服务过,但是就是搞砸了面试。毫无疑问,这些应聘人员都是不错的软件工程师,并且,他们甚至可能很擅长他们目前的工作。我之所以否决他们,只是因为我不认为他们能成为一名优秀的软件工程师。



我多年的面试、培训和指导经验告诉我,具备一些特殊的品质能让软件工程师更容易在创业环境中取得成功。并且,这些品质在初创企业比在一个更成熟的公司更为关键。因为在一家初创企业:

  • 对产品、软件系统、团队及其文化有一个更为深刻的认识。
  • 成功更依赖于团队的表现,而非你自己。当然,如果在一家更大更成熟的公司,你的出色表现可能会成为你向上爬的踏脚石,但是在一家又小又新的公司,这根本无足挂齿。
  • 时间是关键因素,一方面是因为初创企业大多没有盈利,另一方面则是相较于那些盘根错节根深蒂固的老牌子公司,敏捷是他们最大的优势。时间有限就意味着你必须马不停蹄、加班加点,不能拖拖拉拉磨磨蹭蹭,也没有太多的时间供你挥霍在需要解决的问题上。

我曾经有幸合作过的最有效率的软件工程师,有着熟练的技术和卓越的决策能力。他们大多内涵以下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点品质限制你的发展。那么,从现在开始,写个计划学习和提高这些技能吧!
  • 大小: 58 KB
来自: 码农网
3
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 优秀软件工程师必备的7大特性(转)

    不是每一个程序员都能成为优秀的软件工程师。在过去的6年时间里,我在Ooyala、Quora和now Quip这3个创业公司面试过许许多多挺有发展潜力的“种子选手”,他们都有着5年以上的工作经验,并且曾为类似于谷歌这样的顶级...

  • 阿里工程师的自我修养之:优秀工程师必备的三大思维,你拥有哪些?

    在社会分工的背景下,软件行业的工程师群体被划分成了开发、测试、产品等诸多岗位,以协作的方式共同完成价值创造。高度依赖软件的互联网行业正以全新的方式改善着人们的生活,同时在改善的道路上对价值创造的效能...

  • 优秀工程师必备的三大思维,你拥有哪些?

    优秀工程师必备的三大思维,你拥有哪些? 摘自阿里工程师的自我修养 不同岗位、不同职责的技术人对工程师思维的深度要求是不一样的,但从多维度去思考却应是每个技术人都应该具备的素养。 至简:坚信和倡导...

  • 一览java职业社区_【Java帮推荐】优秀JAVA工程师必备的七大特征

    一览Java帮——天下Java豪杰,共聚Java帮...每个程序员都想知道自己是不是一个优秀的程序员,那么,就参考一下下面这 7 条,看看自己是否达到了做一个优秀程序员的标准。1、喜欢帮助他人,照顾比自己差的程序员程序...

  • C#学习记录——软件工程师必备素养与技能

    』—— 网络 1、软件工程师的基本素养 2、个人素质必修课程 3、项目开发流程 具备了良好的个人素质和基础的编程知识,作为一名优秀的开发人员,还应熟悉一个软件项目怎么开展工作,这就是项目开发流程,包括对软件...

  • 优秀工程师必备的三大思维

    本文整理自阿里巴巴高级技术专家至简在团队内部的个人分享,希望通过对工程师思维的分析和解读,让大家能正确对待那些在现实工作中看上去与本职岗位无关,却对团队效能影响极大的一些点和一些事。 在社会分工的...

  • 11个网络工程师必备实用软件

    平时网络工程师都用啥软件工作,其实网上有很多安利,这个主要还是见仁见智,用了才知道到底香不香。 老杨列举一些自己平时喜欢用的软件,希望能安利给有需要的小友,提升你的工作效率。 喜欢的记得收藏点赞同...

  • 软件测试工程师必备软技能:结构化思维

    比如说优秀员工的7种品质、公司的组织架构图等等,其实都是把一个整体分成不同的构成部分。可以是从上到下,从外到内,从整体到局部。 这种分类方法是用于说明事物的各个方面特征的。 4、公式法 公式法就是可以按照...

  • 干货|据说优秀工程师必备这三大思维

    本文整理自阿里巴巴高级技术专家至简在团队内部的个人分享,希望通过对工程师思维的分析和解读,让大家能正确对待那些在现实工作中看上去与本职岗位无关,却对团队效能影响极大的一些点和一些事。作者简介:至简,...

  • 优秀工程师必备的十大能力!

    据说这十大能力,是通往优秀工程师之路的必备资质。 大家好!我是黄勇,目前在特赞(Tezign.com)担任C++TO。特赞有一支强悍的技术团队,以及浓厚的工程师文化,同时也培养了一批优秀工程师。 几天前,我在自己的...

  • html5五大前端,HTML5前端工程师所必备的五大特质

    HTML5前端工程师所必备的五大特质时间:2016-10-28来源:华清远见HTML5培训HTML5前端工程师目前是IT届的焦点,受到IT届各阶层人员的关注,主要还是因为HTML5前端工程师目前比较稀少,可谓是各位企业与程序员的“宠妃...

  • 优秀工程师必备的一项技能,你解锁了吗?

    设计模式,UML这个是对系统架构设计必要要掌握的知识,当你经历了很多大规模的软件系统设计,回到根本上,你会发现逃不出这一块的理论和工具; 领域性的基本原则,比如我们上面提到的“钱货平衡”,“财务平衡...

  • 【思考】阿里| 优秀工程师必备的三大思维,你拥有哪些?

    本文整理自阿里巴巴高级技术专家至简在团队内部的个人分享,希望通过对工程师思维的分析和解读,让大家能正确对待那些在现实工作中看上去与本职岗位无关,却对团队效能影响极大的一些点和一些事。 作者简介:...

  • 基于SSM+JSP+HTML的东风锻造有限公司重大停管理系统(Java毕业设计,附源码,数据库,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 ssm 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

  • 数据库系统课程设计报告-体育项目比赛管理系统设计与开发

    一、系统需求分析 1 (一)需求概述 1 (二)业务流分析 1 从运动员角度分析 1 (三)数据流分析 4 (四)数据字典 5 二、数据库概念结构设计 6 (一)实体分析 6 (二)属性分析 6 (三)联系分析 8 (四)概念模型分析(.PDM图) 9 三、数据库逻辑结构设计 9 (一)概念模型转化为逻辑模型 9 1.一对一关系的转化 9 2.一对多关系的转化 9 3.多对多关系的转化 10 (二)逻辑模型设计(.PDM图) 10 四、 数据库物理实现(一)表设计 10 (一)表设计 10 (二)创建表和完整性约束代码设计 11 五、数据库功能调试 15 (一)运动员管理模块 15 (二)负责人管理模块 16 (三)系统管理员管理模块 17 六、设计系统前台软件 21 (一)开发软件选择 21 (二)软件功能要求与设计 22 (三)软件功能实现 22 (四)系统测试 24 七、设计总结 27

  • 基于SSM+JSP的文物管理系统+数据库(Java毕业设计,包括源码,教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:jsp 后台框架:SSM 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4

  • 智慧园区整体解决方案-37PPT(46页).pptx

    智慧园区,作为现代化城市发展的新兴模式,正逐步改变着传统园区的运营与管理方式。它并非简单的信息化升级,而是跨越了行业壁垒,实现了数据共享与业务协同的复杂运行系统。在智慧园区的构建中,人们常常陷入一些误区,如认为智慧园区可以速成、与本部门无关或等同于传统信息化。然而,智慧园区的建设需要长期规划与多方参与,它不仅关乎技术层面的革新,更涉及到管理理念的转变。通过打破信息孤岛,智慧园区实现了各系统间的无缝对接,为园区的科学决策提供了有力支持。 智慧园区的核心价值在于其提供的全方位服务与管理能力。从基础设施的智能化改造,如全面光纤接入、4G/5G网络覆盖、Wi-Fi网络及物联网技术的运用,到园区综合管理平台的建设,智慧园区打造了一个高效、便捷、安全的运营环境。在这个平台上,园区管理方可以实时掌握运营动态,包括道路状况、游客数量、设施状态及自然环境等信息,从而实现事件的提前预警与自动调配。同时,智慧园区还为园区企业提供了丰富的服务,如项目申报、资质认定、入园车辆管理及统计分析等,极大地提升了企业的运营效率。此外,智慧园区还注重用户体验,通过信息发布系统、服务门户系统及各类智慧应用,如掌上营销、智慧停车、智能安防等,为园区员工、企业及访客提供了便捷、舒适的生活与工作体验。值得一提的是,智慧园区还充分利用大数据、云计算等先进技术,对园区的能耗数据进行采集、分析与管理,实现了绿色、节能的运营目标。 在智慧园区的建设过程中,还涌现出了许多创新的应用场景。例如,在环境监测方面,智慧园区通过集成各类传感器与监控系统,实现了对园区水质、空气质量的实时监测与预警;在交通管理方面,智慧园区利用物联网技术,对园区观光车、救援车辆等进行实时定位与调度,提高了交通效率与安全性;在公共服务方面,智慧园区通过构建统一的公共服务平台,为园区居民提供了包括平安社区、便民社区、智能家居在内的多元化服务。这些创新应用不仅提升了园区的智能化水平,还为园区的可持续发展奠定了坚实基础。同时,智慧园区的建设也促进了产业链的聚合与发展,通过搭建聚合产业链平台,实现了园区内企业间的资源共享与合作共赢。总的来说,智慧园区的建设不仅提升了园区的综合竞争力,还为城市的智慧化发展树立了典范。它以用户需求为导向,以技术创新为驱动,不断推动着园区向更加智慧、高效、绿色的方向发展。对于写方案的读者而言,智慧园区的成功案例与创新应用无疑提供了宝贵的借鉴与启示,值得深入探索与学习。

  • Java毕业设计-SpringBoot+Vue的基于SpringBoot的冬奥会科普平台(附源码、数据库、教程).zip

    Java 项目, Java 毕业设计,Java 课程设计,基于 SpringBoot 开发的,含有代码注释,新手也可看懂。毕业设计、期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。 包含:项目源码、数据库脚本、软件工具等,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行! 1. 技术组成 前端:html、javascript、Vue 后台框架:SpringBoot 开发环境:idea 数据库:MySql(建议用 5.7 版本,8.0 有时候会有坑) 数据库工具:navicat 部署环境:Tomcat(建议用 7.x 或者 8.x 版本), maven 2. 部署 如果部署有疑问的话,可以找我咨询 Java工具包下载地址: https://pan.quark.cn/s/eb24351ebac4 后台路径地址:localhost:8080/项目名称/admin/dist/index.html 前台路径地址:localhost:8080/项目名称/front/index.html (无前台不需要输入)

  • MATLAB设计的芯片字符识别(GUI界面设计).zip

    MATLAB设计的芯片字符识别(GUI界面设计)

Global site tag (gtag.js) - Google Analytics