小钢聊全栈

原创文章,转载请注明:转载自Keegan小钢
并标明原文连接:http://keeganlee.me/post/full-stack/20170826
微信订阅号:keeganlee_me
写于2017-08-26php


全栈正在变得愈来愈流行,不少人都有意愿或正在往全栈的方向去发展。我本身也一直在往这个方向不断提高本身,到目前为止,算是略有小成,勉强称得上是一个合格的全栈架构师。为了给更多走在全栈路上的小伙伴们提供一些思路,我将基于我本身这些年来的经验总结和思考,以及从其余更优秀的人(好比吴军)学习得来的感悟,与大伙分享我对全栈的一些观点。我主要将从三方面来聊聊全栈的问题:html

  1. What?什么是全栈?
  2. Why?为何要发展全栈?
  3. How?如何发展全栈?

什么是全栈

对全栈的定义,据我所了解的,最先来源于Facebook的工程师Calos Bueno在2010年末时写的一篇文章:The Full Stack。做者认为全栈是一个通才,可以本身建立不平凡的应用程序。他也指出,没人可以熟悉全部方方面面,但做为一个全栈,可以看清每一个栈的上下之间是如何运做的。他还提出视觉化一个系统的方案:One way to visualize a system is how its data is shaped and how it flows. 前端

百度百科收录的定义则是:掌握多种技能,并能利用多种技能独立完成产品的人。收录的原文实际上是这篇:全栈工程师到底有什么用。本质上来讲,和Calos Bueno的观点大同小异。另外,也有愈来愈多人认为,全栈工程师 = 前端开发 + 后端开发。面试

对全栈工程师,每一个人都有不同的定义,不同的衡量标准。要求高的,认为全栈=全能,需求分析、产品设计、UI设计、移动开发、前端开发、后端开发、运维等,所有都熟悉。要求低的,认为只要既懂前端开发也会后端开发便可,好比,熟悉H5前端开发和Node.js后端开发,就能够称得上全栈工程师了。在我看来,其实都没有错,工程师也有分初级、高级、资深、专家,全栈工程师也同样有等级划分。数据库

那么,咱们就从分级的角度来聊聊什么是全栈。但我不想从传统的初级、高级、资深、专家的角度来划分,我想从另外一个更高的视角来划分全栈工程师。编程

吴军在获得专栏《硅谷来信》的第054封信中,将工程师划分为五级,以下:后端

第五级:能独立解决问题,完成工程工做;
第四级:能指导和带领其余人一同完成更有影响力的工做;
第三级:能独立设计和实现产品,而且在市场上得到成功;
第二级:能设计和实现别人不能作出的产品,也就是说他的做用很难取代;
第一级:开创一个产业。设计模式

从本质上来讲,不一样层级的工程师须要有能力独立解决不一样高度的问题。第五级只要有能力独立解决技术任务便可,第四级则须要解决团队问题,第三级须要解决产品问题,第二级须要解决行业问题,第一级则是最高级的产业问题了。须要注意的是,有能力独立解决问题,不表明就不须要和别人协做。服务器

全栈工程师属于工程师的子集,一样的,也适用这个五层级别的划分。那么,对于第五级的全栈工程师来讲,就是有能力独立解决跨栈的技术问题。第四级的全栈工程师,须要具有管理和领导能力,应该是一个全栈架构师。第三级则还须要掌握产品设计能力,有能力作出成功的产品。但这个产品会比以往复杂得多,若是不具有全栈技能,那就很难造成全局性思惟,更难以作出成功的产品。再往上还要深刻了解行业和产业痛点,须要更高远的前瞻性能力。微信

若是这样划分的话,那可以独立完成产品的全栈工程师应该属于第三级和第四级之间,而只懂前端开发 + 后端开发的全栈工程师还不必定能达到第五级,由于懂了前端开发和后端开发并不意味着就有能力独立解决问题。我面试过几个既懂前端开发,也懂点后端开发的程序猿,但每一个端其实都还达不到我要求的及格线,更谈不上有能力独立解决工做中的跨栈问题。

在我看来,一个合格的全栈工程师应该具有硬技能和软技能。硬技能主要就是熟练掌握工做领域中的各类技术栈了,好比作移动应用的,那可能就要熟悉Android/iOS开发、Java开发、数据库、运维等。更重要实际上是软技能,我以为至少应该具有有如下能力:

  • 解决问题能力 —— 若是不能解决问题,要全栈工程师何用
  • 超强学习能力 —— 全栈须要快速掌握不少技能,因此必须具备超强的学习能力
  • 良好沟通能力 —— 全栈虽然有能力独立解决问题,但在实际工做中仍是须要和各类人员合做沟通,在团队不一样成员之间起到桥梁做用
  • 技能迁移能力 —— 全栈不会被某一领域绑死,技能能够快速迁移到其余领域,好比能够从移动互联网迁移到物联网、人工智能或区块链等新领域
  • 全局思惟能力 —— 全栈最大的价值就是拥有全局思惟能力

为何要发展全栈

发展全栈,无论是对公司仍是我的,都大有益处。

对公司的益处,就举个栗子吧。假如在App端有时候会出现调用接口超时的问题。在没有全栈工程师的团队里,通常的处理流程就是:Android或iOS开发人员在App端检查肯定不是前端的问题后,就把锅丢给API网关,API网关开发人员检查日志后发现有部分服务的查询接口没能在超时时间内返回数据,各服务开发人员和前端、网关联调后发现是数据库查询结果慢,就将锅甩给了DBA,DBA通过一番排查以后发现数据库存在不少慢查询,最终定位到是由于不少SQL查询语句没有加索引。等这个问题解决,可能半天就过去了。而为了解决这个问题,至少投入了前端开发、API网关开发、后端服务开发、DBA等四个角色的人力。至少四我的加起来那就是两人日的成本,期间还有很多沟通成本。这不是个杜撰的栗子,而是在咱们团队中真实发生过的事情。那么,若是有全栈工程师的话呢,一我的从前端到网关、服务接口端、数据库,一路本身调试跟踪数据,估计一个小时左右就能定位到问题,这就很是高效地解决了问题,也极大地减低了沟通成本。

固然,最重要的仍是对我的的发展如何。毕竟,公司并无要求你必定要成为全栈,而你也不会是为了公司的利益而努力成为全栈,除非这家公司是你本身开的。而我以为,我的发展全栈,最重要的就是为了应对将来,主要有如下几方面:

  • 避免被淘汰 —— 技术更新迭代太快,只熟悉单一技能栈在将来几年有可能会面临被淘汰的风险。好比,虽然如今Android和iOS开发依然是主流,但又有谁能保证五年十年后不会像塞班同样。好比,虽然如今Java依然是后端开发的主流,但表明着将来趋势的人工智能、区块链等,大多却不是用Java开发的。
  • 提高我的价值 —— 现在,系统级产品已经愈来愈复杂,那么,对于具备全局思惟的全栈工程师和全栈架构师的人才需求就会愈来愈大,因此,全栈工程师,尤为是全栈架构师的我的价值也就会愈来愈高。
  • 走向高管职位 —— 管理岗位对全局观的要求必不可少,越高的管理岗要求越高。因此,就算是在特定领域作到了技术专家,若是缺少全局思惟,就会成为职业瓶颈。
  • 实现创业梦 —— 我想,很多人可能和我同样,将本身慢慢发展成全栈,主要仍是为了作出优秀的产品,为了实现创业梦。

如何发展全栈

要发展全栈,就须要全面发展硬技能和软技能,硬技能相对比较容易掌握,但最重要的仍是软技能,这是全栈的根基,固然,软技能就不是那么容易提升的了。

须要发展哪些硬技能要看从事的行业和技术方向而定,作移动应用和作VR/AR/MR应用所需掌握的技能栈是不一样的,作人工智能、区块链应用又是另外一套技能栈。就以目前作企业级应用的主流技术为例,主要会有如下技术栈:

  • 移动端 —— Android、iOS、React Native
  • 前端 —— H五、CSS三、SASS、LASS、React、Vue、AngularJS
  • 后端语言 —— Java、Go、Python、Node.js
  • 后端框架 —— SpringBoot、SpringCloud、MyBatis、FastJson、Dubbox
  • 数据库 —— MySQL、Oracle、DB二、MongoDB、Redis
  • 运维 —— Nginx、ZooKeeper、Docker、Kubernetes

一个合格的全栈工程师并不须要掌握以上全部技术栈,但在工做中遇到问题时,若是卡在了某个你还不懂的技术栈,那你应该能快速学会该技术栈中能解决问题的那部分知识,而后解决问题。

若是想发展成全栈架构师,那还须要掌握架构方面的技能,包括前端架构、API设计、负载均衡、微服务架构、分布式事务、服务器集群设计、容灾设计等等。优秀的架构师还须要深刻理解业务,应该也是个业务专家。

而后,如何发展软技能呢?就如我上面说的,软技能主要包括: 解决问题能力超强学习能力良好沟通能力技能迁移能力全局思惟能力。这些软技能都须要经过长时间的实践积累才能掌握,如下我只提供一些实践方法的指引。

解决问题能力

要提升解决问题的能力,首先要懂得如何分析问题。分析问题要尽可能保持开拓性思惟,多角度、多方面地思考可能致使的缘由。多思考,多分析,而不是直接就开干,才能不断提升你的思惟能力。若是该问题不是急着立刻就要解决的,能够尽可能将全部想到的可能缘由所有列出来,经过长时间的这种刻意练习,你会慢慢变成分析问题的高手,同时,你的思惟能力会获得质的提高,常常能看到别人看不到的地方。

而后,对推测得出的缘由,必定要进行检查验证。有些人,一旦遇到问题,老是武断地下结论,认为是某某地方致使的,而不是先进行检查验证,这是一种错误的解决问题的思惟方式。就算有90%的可能的确是某某地方致使的,也要先进行验证以后才下结论。以前,我带领的团队里就有这种固话思惟习惯的人,出现了某个BUG,他立马就下结论说必定是由于XXX致使的,我也知道,多是XXX致使的概率挺高,但我仍是让他先检查验证一下再做结论,结果检查完发现是另外的缘由致使的,啪啪啪,直接打脸。

还有,更重要的一点就是,要去解决当前值得解决的问题。注意两个词:当前值得。有些问题,可能也是值得解决的,可是否须要当前就去解决呢?好比说,项目初期阶段,须要解决高性能问题吗?

超强学习能力

刘润在《5分钟商学院》提到一个20小时快速学习的方法,怎么作?

  1. 第一,花5小时,大量泛读,主要就是为了了解一些基本概念;
  2. 第二,花3小时,创建模型,这是为了造成基本的全局观;
  3. 第三,花2小时,请教专家,专家能帮你解答你没法理解的问题;
  4. 第四,花10小时,理解复述,可使用著名的“费曼技巧”。

另外,古典在《超级个体》也提到了一些学习管理的东西,包括:功利学习法、找到知识源头、学习金字塔。

还有一本书叫《关键20小时,快速学会任何技能!》,书中提到快速学习也是分为四步:

  1. 分解步骤 —— 把技能作最大程度的细分,分红若干小步骤。
  2. 充分学习 —— 对每一个小步骤进行充分学习,以便进行灵活的练习,并在练习中自我纠正。
  3. 克服困难 —— 克服在练习中出现的生理、心理或者情绪上的障碍。
  4. 集中练习 —— 至少用20小时集中学习最重要的小步骤。

学习方法不少,但我以为最有效的仍是 输出倒逼输入。我目前在团队中也正在采用此方法帮助团队成员提高本身的能力。

良好沟通能力

良好的沟通主要分为两方面:一是理解对方的想法,二是让对方理解个人想法。任何一方理解出现误差,都是无效沟通。

首先,你要先理解对方的想法,这是有效沟通的第一步。固然,这里面的学问也很大。有时候,对方表达出来的只是表面的需求,而不是真正的需求,这时候,你要懂得如何去挖掘出他的真实需求。通常状况下,多问几个为何就能挖掘出来。另外,多站在对方的立场看问题。

其次,要让对方理解个人想法,这就须要你能清晰明确地表达出你本身的想法了。固然,前提是你本身脑子里已经有了清晰的逻辑。另外,做为技术人员,最容易犯的错误就是:与不懂技术的人员沟通时,依然使用技术语言。好比,你和不懂技术的产品经理谈UML、谈架构细节,这都不是合适的沟通方式。沟通时,必定要使用对方能听得懂的语言或其余方式。

技能迁移能力

硬技能通常是比较难迁移的,软技能则容易迁移。因此,应该多发展本身的软技能。就算是硬技能,其底层大多也是软技能的东西,好比,Android和iOS开发属于硬技能,但底层的设计模式、架构模式、编程思想等则属于软技能,是能够迁移到后端开发的。因此,学习一门技术,除了要知其然,还要知其因此然,了解一门技术背后为何这么设计,这才能将硬技能转化为软技能。

不过,有一点须要注意,技能迁移不等同于把全部东西都从旧领域照搬到新领域,由于两个不一样领域确定存在一些差别性,在旧领域适用的东西,在新领域不必定也适用,甚至有可能拔苗助长。好比说,不少大公司的高管出来创业的人,会将他们在大公司的管理经验迁移过来,对创业公司进行一样的管理,但最终不少都失败了。这样的故事相信你也听到过很多了。因此,进行技能迁移时,也要清楚不一样领域的差别性在哪里,要懂得判断哪些能够迁移过来,哪些不能直接迁移。

全局思惟能力

全局思惟能力是最难提升的,须要不断扩展本身的技能栈,要不断扩大本身的视野,要站在更高的视角看问题。我本身在这方面的培养主要就是多学习和思考如何才能作出优秀的产品。这就涉及到需求分析、产品设计、UI设计、技术实现等,每一部分都会影响产品的质量。所以,我每作一个产品,虽然主要仍是负责技术部分,但都会习惯站在更广更高的视野去看待整个产品,也会常常性地给产品经理、UI设计师提建议。

总结

最后,作一个总结回顾。本文主要围绕三个问题简单聊了聊我对全栈的一些观点:

  • What?什么是全栈? —— 全栈也有分等级,合格的全栈工程师至少应该有能力独立解决跨栈的技术问题。合格的全栈工程师应该具有硬技能和软技能,硬技能就是熟练掌握工做领域中的各类技术栈了,软技能主要包括: 解决问题能力超强学习能力良好沟通能力技能迁移能力全局思惟能力
  • Why?为何要发展全栈? —— 发展全栈对公司和隔热都大有益处,但最重要的仍是对我的的发展如何。我的发展全栈主要仍是为了应对将来,主要有几方面: 避免被淘汰提高我的价值走向高管职位实现创业梦
  • How?如何发展全栈? —— 发展全栈就须要全面发展硬技能和软技能,须要发展哪些硬技能要看从事的行业和技术方向而定,更重要的是发展软技能。

另外,我也正在计划开设一个通往全栈的收费社群,目前正在规划提纲,有兴趣加入的能够关注一下。


扫描如下二维码便可关注订阅号。

相关文章
相关标签/搜索