不是每个程序猿都能成为优秀的软件project师。

在过去的6年时间里,我在Ooyala、Quora和now Quip这3个创业公司面试过许很多多挺有发展潜力的“种子选手”。他们都有着5年以上的工作经验。而且曾为类似于谷歌这种顶级技术公司服务过,可是就是搞砸了面试。

毫无疑问,这些应聘人员都是不错的软件project师,而且,他们甚至可能非常擅长他们眼下的工作。我之所以否决他们,仅仅是由于我不觉得他们能成为一名优秀的软件project师。

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

  • 1.对产品、软件系统、团队及其文化有一个更为深刻的认识。
  • 2.成功更依赖于团队的表现。而非你自己。当然,假设在一家更大更成熟的公司,你的出色表现可能会成为你向上爬的踏脚石。可是在一家又小又新的公司,这根本无足挂齿。

  • 3.时间是关键因素,一方面是由于初创企业大多没有盈利,还有一方面则是相较于那些盘根错节根深蒂固的老牌子公司,敏捷是他们最大的优势。时间有限就意味着你必须马不停蹄、加班加点,不能拖拖拉拉磨磨蹭蹭。也没有太多的时间供你挥霍在须要解决的问题上。

我以前有幸合作过的最有效率的软件project师。有着熟练的技术和卓越的决策能力。他们大多内涵下面7种特质:

1.系统调试技巧

编程非常大一部分时间事实上是花在调试上的。实用户报告紧急问题。尽快将其修复。server的CPU出现负载高峰。尽快找出原因。数据莫名遭到破坏,尽快找出罪魁祸首,等等。都是你的工作。

而良好的调试技巧则能让我们干净利落地解决这些问题。

在调试时。我们应该用一种科学严谨的思维看待问题:先如果出错的地方,然后用最有效的方法或者最小可重现的情况去验证。此外调试过程还须要涉及各种的工具:发现瓶颈的分析器、单步运行代码的调试器、缩小回归原因范围的git bisect、交叉分析现状的UNIX命令行等等。

只是。调试的应用范围不只局限于技术领域。

假设产品的增长率和使用率趋于平稳,我们该怎么假设和測试用户的行为以调试未来目标的重心?假设一个团队完不成他们的项目目标,我们该怎么调试才干知道导致项目流产的根本原因是技能不足,团队沟通不畅还是别的其它原因?招聘有的时候并不能尽如人意——你也知道,大家对于你是怎样调试的过程并不能一目了然,不是吗?(关键:先从数据入手)

2.勇于面对未知

作为一名软件project师,你须要常常专研那些又大又不熟悉的代码库:可能你须要好好研究你正在使用的那个开源工具的代码。才干随心所欲地挥洒自如;又或者你须要搞清楚其它团队成员写的代码。由于他没有改动时间等等。所以,高速驾驭大型代码库和精通相关区域的能力显得至关重要。而这样的能力大部分来自于经验。通过阅读过大量代码积累的经验。另一小部分则须要靠我们熟悉能搜索代码库、跳转到相关部分的工具了,以及会查找有关提交历史中的版本号控制——这些捷径都能降低我们去了解新代码所需的时间。假设是在更为成熟的公司,这样的勇于面对未知的精神也能让我们受益匪浅,只是不同的是,我们往往仅仅须要专注并精通一部分代码库就能成果斐然了。

当然。其它非代码领域有时候也须要你去探索。软件project师经常须要接待客户、与销售人员讨论客户要求的可行性、给新的project师培训。以及其它领域的非常多你甚至全然没有接触过的事宜。在这些经历中成长。会让你受益无穷。

3.对决策的务实态度

可能在一家大规模公司,在代码审查和单元測试坚持己见有助于改善组织平衡。

可是在一家初创公司,务实更重要,由于这能让团队高速完毕任务。在这里我所说的务实指的是,知道什么时候应该积极辩论,而一旦有了决策,即便你再不允许,也能一丝不苟地作为团队的一份子认真运行。我以前看到过由于编码风格而相互争执的现象,一个说在源码起码得有80。100,或120个字符和大括号,而还有一个认为应该另起一行。呵呵。我深深地认为,我们还不如把这些宝贵的时间和精力用到更重要的决策上。

对决策的指导启示式评估应该側重于“是否终于能添加团队成功的概率?”。

非常多因素都会对这个问题产生影响:产品的选择、架构的側重点、团队的文化、人才结构,等等。

我们在决策前最好限定讨论的时间,然后坚决运行,各抒己见。

4.善于运用工具

工欲善其事。必先利其器。工具的合理运用能让我们节约大量的时间,而时间则是我们最重要的资源。高效的project师经常是那些善于利用工具的人,而这一点在创业公司尤为重要,由于这里的时间更紧迫。一些大型的组织可能会有专门的工具团队。而在初创公司。你善用工具的能力越强。完毕的任务数量就越多。假设这些工具也为其它团队成员所接受,那么团队生产力将会发生乘数效应。

5.牛逼的多面手

初创企业早期出现的非常多问题事实上并不须要非常专业的知识。具备的技能越多。在解决这个问题时遇到的瓶颈就越少,哪怕我们仅仅是对这些技能有一个最主要的了解,还在摸索熟悉技能的过程中。假设前端Webproject师也装备了主要的server技术(server skill),那下次再遇到与此相关的问题就不必去请serverproject师在百忙之中拨冗相见了。

而后端project师,假如会一些主要的HTML、CSS和JavaScript技能,就能将他所制作的工具设计成一个Web界面,以方便其它团队成员使用。从而不必由于缺乏web设计师而裹足不前。

一个成长中的project师,应该是那种能顺利使用主要的数据分析工具分析实验数据,而不必受制于数据分析员的多面手。

只是,有一种更欢迎“专家”的例外是。假设是在利基、重技术的环境里,比如启动数据库,那么拥有精深的专业知识工作效率会更高。并且。随着创业公司的发展,对于博而不精的多面手,越到后期,能代替你的人就越多。

6.保持玩家心态,而非受害者心态

在Fred Kofman的《Conscious Business》一书中,他描写叙述了人们对待问题採取的两种不同态度。能够是受害者心态,怨天尤人,责备他人的不是(项目时间太少、产品推出不当、以及和队友发生争执等等),通通归咎于外部原因。还有一种就是玩家心态,审视自己的能力,一旦确定能做补救。毫不犹豫地贡献自己的能量。

尽管短时间内,受害者心态能抚慰我们受伤的心情,可是从长远角度看,拥有玩家心态的人才干不断进步与发展。

在创业公司工作压力是非常大的。而且随着压力程度的添加,人们往往不但不能勇于承担个人责任。反而非常easy陷入互相推诿以逃避责任的怪圈。

而这样做,我不得不遗憾的说,最后终将导致失望和解聘。

7.不断学习与回想,持之以恒

研究发现。仅仅要我们有足够的激情和动力,上述种种品质通过学习和培养都是能够后天养成的。而学习这些技巧的全部能量来源于一种叫做“坚忍不拔”的品质。

Angela Lee曾在她的TED演讲《The key to success?

Grit》(《成功的关键:坚持》)中。提及这个概念:

坚忍不拔是一种专注于长远目标的激情和毅力。坚持梦想。坚持未来,不是一天两天,也不是一周两周,更不是一个月两个月。而是持续多年。不畏艰辛、勇往直前。为了目标而奋斗。

假设我们也能拥有这样的坚忍不拔的品质,愿意投入时间回想自己的所作所为,那么就能发现自己的薄弱之处和须要改进的地方。然后随着时间的推移,不断进步的你必将会成为一个更为优秀的软件project师。在早期假设能得到大咖的指点迷津。尽早行进在正确的方向,也能让我们走的更远。

上述这些技能即便是在更为成熟的公司也是能助你一臂之力的,只是在初创公司发挥的作用更大,原因么,上面也有提到,由于初创公司的时间更紧凑。当然。并非说不具备这些技能就不是一个好的project师了。这仅仅能说明。可能你不大适合这样的创业环境。

可是。假设你立志要成为一个优秀的软件project师。不要让上面这7点品质限制你的发展。那么,从如今開始,写个计划学习和提高这些技能吧。

译文链接:http://www.codeceo.com/article/7-feature-programmer-need.html

英文原文:What
Qualities Make a Good Startup Engineer?


翻译作者:码农网 –
小峰

优秀软件project师必备的7大特性的更多相关文章

  1. 软件project师的属性与发展

    工作近十年了.[软件project师] 一直是我职业 title 的中心词,仅仅是前面的修饰语在不断变化,从0基础.中级.高级到资深. 事实上 [软件project师] 是一个非常泛化的定义.工作现实 ...

  2. Atitit. 高级软件project师and 普通的差别 高级编程的门槛总结

    Atitit.  高级软件project师and 普通的差别 高级编程的门槛总结 1. 完备的知识体系 2 2. 编程理论/原理的掌握 2 1.1. 掌握经常使用的概念(ORM,IOC.AOP,eve ...

  3. 怎样以学习单片机为契机,逐步成为优秀的project师

    现状 不知道阅读本文的读者,在初学单片机时是否和我以前一样迷茫.看到各种新的术语,疑惑不解:不知道从何学起:照着书中的样例一步一步做都没有问题,可是自己试着做东西,遇到各种问题却不会解决,向别人提问, ...

  4. 软件project师周兆熊给IT学子的倾情奉献

    [来信] 贺老师: 你好,我是中兴通讯的一名软件开发project师,名叫周兆熊. 近期看了您的新书<逆袭大学:传给IT学子的正能量>,感觉你真心为当代学子答疑解惑.非常值得敬佩! 从上大 ...

  5. 全端project师必备技能汇总

    首先,看一张前端知识结构图:  (原文: ithomer) 图片的形式具有诸多的不便.缺失源图的我们.无法为此图贡献些什么,随着时间的迁移,也许有些技术点会发生改变.所以有了这个GitHub项目.我们 ...

  6. 招一位安防软件project师,嵌入式开发project师

    岗位职责 1.负责海思平台IPC产品应用层软件设计及维护 2.私有平台协议对接及为第三方提供技术支持. 任职资格: 1.较强的学习.领悟能力,能够高速熟悉公司现有代码. 2.熟练掌握C.C++开发语言 ...

  7. 美国程序猿(软件project师)平均年薪状况调查

    来源站点:Indeed.com&computerengineeringsalarydata.com Average Software Engineer Salary by 50 States ...

  8. 2014年java软件project师面试题收集

    如果页面中于五个li标签.写个js使点击每个li返回他的index <!doctype html> <html> <head> <style> li{c ...

  9. 单片机project师必备的知识

    C语言编程 程序编译过程  哪部分干什么 数据结构  链表 二叉树 算法   数组  堆栈 队列算法 遍历 常量在内存中的表现形式 语法和内存的相应关系 数电 UML 类图 时序图 状态图 用例图   ...

随机推荐

  1. 慕课网3-13编程练习:采用flex弹性布局制作页面主导航

    小伙伴们,伸缩容器的属性我们已经学完了,接下来使用我们所学的伸缩容器属性完成下面的效果图. 要求: 1.logo.导航项.登录注册按钮这三项在水平和垂直方向上都对齐,而且他们之间的距离也相等. 2.导 ...

  2. Eclipse设置空格代替tab

    1.点击 window->preference-,依次选择 General->Editors->Text Editors,选中右侧的 insert space for tabs;如下 ...

  3. warning: remote HEAD refers to nonexistent ref, unable to checkout

    今天使用git clone时候 提示 warning: remote HEAD refers to nonexistent ref, unable to checkout 经过测试解决办法如下 git ...

  4. Mac OS安装octave出现的问题-'error:terminal type set to 'unknown'的解决'

    学习Machine learning需要使用Octave语言,毕竟Andrew Ng (恩达.吴)力荐.本机系统Mac OS X EI Capitan, 其实什么系统都无所谓了,安装原理都是一样的. ...

  5. Sublime Text2安装emmet

    一.安装Package Control 如果Preferences中没有Package Control,需要手动安装.安装方法如下: 访问Package Controls站点复制一段python命令安 ...

  6. .net 大数据量,查找Where优化(List的Contains与Dictionary的ContainsKey的比较)

    最近优化一个where查询条件,查询时间很慢,改为用Dictionary就很快了.  一.样例 假设:listPicsTemp 有100w条数据,pictures有1000w条数据. 使用第1段代码执 ...

  7. JS高级——Object.prototype成员

    基本概念 成员 描述 Object.prototype.__proto__ 指向当对象被实例化的时候,用作原型的对象. Object.prototype.hasOwnProperty() 返回一个布尔 ...

  8. Less——less基本安装

    1.下载node.js 我们需要NodeJ运行LESS示例. 要下载NodeJ,请打开链接https://nodejs.org/en/ 2.node.js安装是否正确 在cmd中输入lessc -v, ...

  9. 关于java 关键字enum不识别的解决办法

    从别人那儿拷贝过来的myeclipse java工程,打开一看标红了一大片,仔细一看,原来是不识别enum关键字,这就有点尴尬了. 我自己重新建了一个java工程,测试了下,假如我在新建工程的时候选择 ...

  10. Java中IO对象的输入输出流

    输入流: public void inputDemo () throws IOException { //文件名称 String fileName = "d:\\aaa.txt"; ...