众所周知,并不是每一个程序员都能成为优秀的软件工程师。许许多多发展潜力良好的“种子选手”,有着多年的的工作经验,并且曾为大型或者超大型的技术公司服务过,按时到且止步于面试。
我们可以肯定,应聘人员都是能力不错的软件工程师,甚至可能很擅长他们目前的工作。在面试中否决这些人,只是因为面试官不认为他们能成为一名优秀的软件工程师。而具备一些特殊的品质能让软件工程师更容易在创业环境中取得成功。同时这些品质在初创企业比在一个更成熟的公司更为关键。
因为在一家初创企业:
1.由浅及深,可以对产品、软件系统、文化及团队有一个更为深刻的认识。
2.成功源于团队的表现,而非个人之功。如果位于一家更大更成熟的公司,你的出色表现就会成为你向上爬的踏脚石,但是在一家又新又小的公司,这根本不值一提。
3.时间是控制因素,一是因为初创企业盈利能力薄弱,另外则是和那些盘根错节根深蒂固的老牌子公司相比,灵活敏捷是他们最大的优势。而时间有限就意味着必须马不停蹄、加班加点,不能拖拉磨蹭,也就是说没有太多的时间供你挥霍在需要解决的问题上。
而有着卓越的决策能力和熟练的技术,则是最有效率的软件工程师。这样的工程师大多内涵以下7种特质:
1.很大一部分时间其实是花在系统调试上的,而非技巧编程。
当有用户报告紧急问题,尽快将其修复;当数据莫名遭到破坏,要尽快找出罪魁祸首;当服务器的CPU出现负载高峰,尽快找出原因等等,都是工程师的工作。而良好的调试技巧则能让企业干净利落地解决这些问题。
所以在调试时,应采用一种科学严谨的思维看待问题:先去假设出错的地方,然后用最小可重现的情况或者最有效的方法去验证。此外,调试过程还需要涉及各种的工具:缩小回归原因范围的git bisect、交叉分析现状的UNIX命令行、发现瓶颈的分析器、单步执行代码的调试器等等。当然,调试的应用范围不仅仅局限于技术领域。
如果产品的使用率和增长率趋于平稳,那么该如何假设和测试用户的行为以调试未来目标的重心?若一个团队完不成他们的项目目标,又该怎么调试才能知道导致项目流产的最终原因是团队沟通不畅,技能不足还是别的其他原因?关键:先从数据入手
2.对于未知勇于挑战。
面对未知作为一名软件工程师,需要经常专研那些又大又不熟悉的代码库。可能需要好好研究正在使用的开源工具的代码;又或者需要掌握其他团队成员写的代码等等。所以,能快速驾驭大型代码库和精通相关区域的能力显得至关重要。而这种能力一般来自于经验,通过阅读大量代码积累。另外则需要靠熟悉能搜索代码库、跳转到相关部分的工具,以及会查找有关提交历史中的版本控制——这些捷径都能减少了解新代码所需的时间。
若是在成熟的公司,这种未知也能让我受益匪浅,不过不同的是,工程师往往只需要专注并精通一部分代码库就能成果斐然了。当然,其他非代码领域有时候也需要你去探索。软件工程师常常需要与销售人员讨论客户要求的可行性、接待客户、给新的工程师培训,以及其他领域甚至完全没有接触过的事物。
3.在一家大规模公司决策的务实态度,在代码审查和单元测试坚持己见有助于改善组织平衡。
但在一家初创公司,关键因素是:务实。这能让团队快速完成任务。比如:知道什么时候应积极辩论,当一旦有了决策,即便你再不同意,也能一丝不苟地作为团队的一份子认真执行。而对决策的指导启发式评估应侧重于“是否最终能增加团队成功的概率?”。很多因素都会对这个问题产生效果:团队的文化、产品的选择、架构的侧重点、人才结构等等。在决策前最好限定讨论的时间,然后执行,参与人员各抒己见。
4.工欲善其事,必先利其器。
工具的合理运用能节约大量的时间,时间则是工程师最重要的资源。对于初创公司,工程师善用工具的能力越强,完成的任务数量就会越多。而高效的工程师常常是那些善于利用工具的人,这一点在刚创业公司尤为重要。一些大型的组织一般会有专门的工具团队。若这些工具也为其他团队成员所接受,那么团队生产力将会发生乘数效应。
5.高大上的多元化初创企业,早期出现的许多问题并不需要很专业的知识。
具备的技能越多,在解决问题时所遇到的瓶颈就越少,哪怕只对这些技能有一个最基本的了解,甚至还在熟悉摸索的过程中。如果前端Web工程师同时装备了基本的服务器技术(server skill),当下次再遇到与此相关的问题就不必去请服务器工程师了。而后端工程师,若会一些基本的HTML、CSS以及JavaScript技能,就能将其所制作的工具设计成一个Web界面,方便其他成员使用,不必因为缺乏Web设计师而裹足不前。一个在成长的工程师,应该能达到顺利使用基本的数据分析工具分析实验数据,而不必受制于数据分析员。不过,还有一种更欢迎“专家”的例外,如果是在利基、重技术的环境中,拥有更加精深的专业知识和工作效率。随着创业公司的不断发展,对于杂而不精的多面手,越到后期,替代品就会越多。
6.保持玩家心态,而非受害者心态
在《Conscious Business》一书中,Fred Kofman描述了人们对待问题采取的两种不同态度。一种就是玩家的心态,审视自己的能力,一旦确定能做补救,毫不犹豫投入。一种是受害者的心态,怨天尤人,责怪他人的不是,例如产品推出不当、项目时间太少、以及和队友之间发生争执等等,通通归咎于外部因素。在短时间内,受害者心态可能抚慰受伤的心情,但是从长远角度分析,拥有玩家心态的人可以不断进步和发展。而在创业公司工作压力是很大的,同时随着压力程度的增加,人们往往回顾,不去勇于承担个人责任,陷入逃避责任和互相推诿的怪圈。
7.不断学习与回顾,持之以恒。
研究发现,只要程序员有足够的激情和动力,上述品质是可以通过学习和培养后天养成的。坚忍不拔是一种专注于长远目标的激情和毅力。众所周知坚持梦想,坚持未来,不是一两天之功,也不是一周两周之效,更不是一个月两个月就可以实现,而是持续多年,不畏艰辛、勇往直前,为了目标而奋斗。随着时间的推移,不断进步,一定会成为一个更为优秀的软件工程师。
上述这些技能即便是在更为成熟的公司也是能助你一臂之力的,不过在初创公司发挥的作用更大。当然,并不是说不具备这些技能就能成为一个好的工程师了,这说明,可能你不大适合这种创业环境。但是,如果要立志成为一个优秀的软件工程师,不要让上面这7种因素限制发展。从现在开始,模拟一个学习计划来提高技能吧!
全部0条评论
快来发表一下你的评论吧 !