(1)关键开发技能(硬实力)
·Git/GitHub——你必须掌握如何使用Git来管理和分享你的代码。把Git作为关键技能的第一条,是因为它不仅仅是一个代码管理工具,更是一种推荐的工作方式。它使你能在任何地方进行开发,高效地管理任何大小的项目,通过Git你还能与其他团队成员进行分布式协作,大大提升工作效率。通过GitHub,还能将你与世界所有的开发者联系在一起。
·至少一门编程语言——你需要精通至少一门编程语言,如Java、PHP、Swift、C#、Python、Ruby、Perl等,因为你的大多数核心业务处理都需要用这门语言来写。你既要掌握这门语言的语法,又需要非常熟悉如何基于这门语言进行项目的架构、设计、实现及测试。如果你选择的是Java,那么你就需要掌握面向对象的设计和开发、设计模式的应用、基于J2EE各个组件的开发,等等。
·运用开发框架和第三方库——流行的开发语言,一般都伴有出色的开发框架,比如,Java的Spring、MyBatis、Hibernate,Python的Django,PHP的thinkphp、yin,nodeJs的express,等等。这些开发框架往往都遵循软件开发领域的一些最佳实践,并由非常优秀的开发人员创建。熟练使用这些开发框架或第三方库能够避免重复发明轮子,从而使你的工作事半功倍。更重要的是这些优秀框架或第三方库一般都得到持续的维护,是对你的产品或项目在质量与安全方面最有效的保障。
·前端技术——之所以将前端技术独立出来,作为一项关键技术,是因为它在今天的项目和产品的研发过程中正变得越来越重要。一个产品除了实现所需的功能之外,是否好用(用户体验)也正在成为评判一个产品是否成功的重要标准。而这都依赖于前端技术的实现,你至少需要掌握HTML5、CSS3、JavaScript等基本前端技术,同时进一步学习JQuery、LESS、SASS、AngularJS或REACT等前端框架或第三方库。
·数据库与缓存——任何产品或项目都需要一个数据库来存储数据。作为全栈工程师,你也需要至少掌握一到两种数据库,并知道怎样与数据库进行交互。目前流行的数据库主要包括MySQL、MongoDB、Redis、Oracle、SQL Server等。MongoDB作为文档型数据库,在互联网产品中正被越来越多地使用,对于规模稍大一些的项目,我仍推荐使用MySQL或商用的Oracle作为后端数据库。而Redis这样的内存数据库则可以用于缓存,以提升系统的性能。
·基本设计能力——大部分关于全栈工程师的文章或讨论中,都不会将设计能力作为全栈工程师的关键技能,但我却认为这项技能非常重要。我曾被邀请评估一些软件工程师自己开发的产品,这些产品都有不错的创意,功能实现也很到位,但其中一些一看就不是一个好的产品,用户根本没有使用欲望,原因是这些产品的设计太差了,而那些开发者往往完全没有意识到问题的存在,比如,色彩不一致、排版凌乱、图标不恰当,等等。我所建议的基本设计能力,并不要求你像专业设计师那样能够P出神图、制作奇妙的视觉效果等,但你需要掌握那些最基本的UI设计原则,如色彩的搭配,基本的排版,并具备良好的审美能力和一些基本UI设计能力,这样你做的产品就不会太差了。
在掌握了这些核心技能之后,你可以根据自己的兴趣与发展方向,学习其他方面的技术。比如,如果你对数据处理感兴趣,那么你可以学习大数据方面的技术;如果你对移动互联网更感兴趣,那么你可以学习Swift,开发iOS应用。知识总是相通的,在有了良好的技术基础后,学习其他知识将会变得非常容易。
(2)附加技能(软实力)
稍大一些的项目,你总是需要与同事、干系人或是客户进行沟通。而成功的沟通往往是获得有效需求与建立团队树立信心的第一步。在项目进行的过程中,你更需要通过有效的沟通去确定方案,消除误解,与项目成员协同前进。良好的沟通能力将使你在团队中更具影响力,受到更多尊重和关注。
·问题解决能力——全栈工程师首先是一名工程师,他必须掌握用工程化的方法来解决遇到的各种问题。我在职业生涯中的几乎所有亮点,都与解决问题相关,大到提供整个项目的架构方案,小到以最快的速度解决生产问题,等等。其实,有很多提高问题解决能力的方法,但没有一种比实践更有效。我所见到的优秀工程师,往往能够凭借直觉以最短的时间给出正确的解决方案,但你没有看到的,是在这背后经过大量实践累积而来的经验。
·时间管理——作为全栈工程师,你可角色。你需要合理地分配时间,保证所有的工作能够按时交付。同样在你的业余时间,你还需要花时间阅读和学习,同时你还可能有自己的Side Project。因此,合理地进行时间分配,并对一些关键任务进行计划是很重要的。你或许会感到一些压力,但这反而会激发你的创造力,并能让一切都有条不紊地进行。
·好奇心——对任何工作都抱有好奇心,并愿意不断学习和改善是那些优秀工程师的共同特性。软件开发领域汇集了世界上最聪明的人,各种类型的技术、产品、框架更是日新月异,层出不穷。优秀的全栈工程师需要不断地学习来抓住这些变化,跟上计算机领域发展的脚步。时常有人会问我,做计算机这一行一直会有新的东西产生,要去不断地学习,是不是会很累。我要说的是,对于将持续学习作为一种生活习惯的人来说,学习新东西并不会成为一种负担,反而是一种乐趣。
·领导力——优秀的全栈工程师往往会被赋予技术Leader甚至项目管理者的角色。成为管理者并不是让你去支配其他人,或让其他人替你做事。管理者需要理解你的团队成员的长处与不足,并知道如何以服务的态度使团队获得最大化的产出。我见过一些非常优秀的工程师,当他们被安排去管理团队时,他们是排斥的,他们往往更愿意独自工作。但我想说,成为管理者将会使你更加睿智、可靠和值得他人信赖,也会对你未来的职业生涯带来极大的益处。因此,当机会到来时,请将它视为挑战,不要排斥它。
有经验的技术领导者在招聘时,往往会同时考察应聘者的技术能力与上述附加技能,而对于初级程序员的招聘来说,那些附加技能往往更被优秀的技术公司所看重。开发技能是你的硬实力,而附加技能则可以看作是你的软实力,只有同时具备这两方面技能,才能成为一名优秀的全栈工程师。