我为什么要成为一名全栈工程师?

4,509
原文链接: smallsoho.com

这篇文章仅仅是自己的一点感悟,可能我写代码的时间不够长,满打满算实习一年,文章可能会有很多不正确的地方,希望大家能帮忙改正,当然菜鸟也要有小梦想和小目标咯~

回到正题,在自己的技术道路上,是选择成为一名全栈工程师还是一个领域的技术专家呢?

写之前报一下自己的技术栈。PS:我是Google脑残粉

不想看的请跳到下面谈谈益处继续浏览^_^:

  • Android螺丝钉开发者(啦啦啦),能独立完成App,写过创业公司App(萌新表示我还跟着实习公司混了一个Google Play全球顶级开发者。。。),也写过大厂App(国内一线视频网站),对金融高可控性的App没有信心,毕竟没做过。有思路+没实践 === 不会
  • Golang小萌新,手撸了一个CI/CD工具(github.com/smallSohoSo…),原理很简单,把需要人手来操作的东西用golang调用shell达到自动化,中间做些容错和分层,上了github的当日热门,也算是一个小成就吧
  • 前端小学生,最近正在学Angular2 + TS,为什么不学vue呢,因为vue偏前端同学的思想我有点搞不太懂。。。Angular2偏后端的思想对于我来说比较好理解,看见依赖注入跟看见亲人一样。。。
  • ios不会。。。表示一点点来,准备2017年看看swift

从上到下依次表示我会的程度。。。当然了,作为一个合格的螺丝钉,上面的技能除了Android和Golang(真的只会一点原理)能扯扯原理之外其他的都是业务级别的会,原理的话。。。

为什么我要学习这么多技术呢?

一是兴趣,二是工作需要,学习前端完全是因为觉得程序员不会写网站好丢丢。。。个人心理作用作祟

先谈谈益处

无可厚非,fullstack,全栈工程师(当然我不是)。一个大家耳熟能详的名字,每当提起这个名字的时候就会有人说,不就是什么都会什么都不精吗。

当然,事实就是这样的,全栈工程师不可能精通每一个原理和方法,但是他能写,任何业务都能用各种库或者方案来解决。这是一种能力,我个人比较推崇这种能力,当你遇到一个问题的时候,你能从不同的角度来思考问题,而不是仅仅在自己的方向。下面是两个例子:

  • 比如有一个极其复杂的动画,要你用原生的Android动画去画,成本可能是5天,然而可能让设计出一个svg仅仅要一天。(此处不撕逼svg和原生的区别还有复杂度之类的= = 就是举个例子) 因为技术有区别的原因可能会节省很大一部分成本。如果你是一个全栈的思维和方式,你就能知道这个途径,而你不是,可能就想不到这样一种解决办法。这种思维方式能帮助你在工作中很大的提高工作效率,这是很有益处的。
  • 在我学习的过程中,在理解Android的Dagger2的时候我很迷茫,我对依赖注入的理解真的只是认识这四个字。。。然而在看了文档之后又看了几篇教程,仍然云里雾里。但是我学了Angular2中之后,他的Service让我突然有种恍然大悟的感觉,突然明白了什么是依赖注入,为什么会有这种区别,因为Service在Angular中的入门是十分简单的,而Dagger的入门却比较麻烦。

所以。思维的联想在工作和学习中是很重要的。

有人可能会问,你学习这么多技术有什么用?

期初学习这些东西纯粹纯粹为了兴趣,但是当我完成了一个技术栈之后,再回到之前的技术栈之后,技术之间关联的思想会让你在钻研自己技术的时候给你更多的选择和指引,这点我觉得就是我想去了解更多技术的动力。比如你想设计一个框架的时候,你可以从不同的角度来分析问题

  • Spring是怎么做的?他有什么劣势?
  • Beego是怎么做的?它又有什么劣势?
  • 我能不能在现有的情况下集成一下他们之间的优势来处理当前的问题?

所以思维的广度在我们的工作中是很重要的

全栈工程师就是思维广度扩展的典型代表,因为他会把思维扩充到自己认知的最大化,然后去学习这些思想和方案,我一直崇尚一个思想:人就是一个圆,你的周长越大,你接触的东西就越多,你不知道的东西越多,说明你会的越多。试问如果你一直是一个小圆圈,如何变得更大呢?

再说说劣势

  • 全栈工程师最大的劣势莫过于很浪费时间,他需要很大的精力去了解不同的技术和方案,这需要时间的积累,不是一朝一夕就能完成的,而且同样的时间同样的劳动可能会换来在你个人专精的方面更加深入的理解,原因是在你了解不同技术的时候可能会更加吃力
  • 并没有一个真正的全栈工程师,谁能说会android,ios,前端就是全栈了呢?还有大数据,机器学习,NLP。。。。等等等
  • 招聘网上这工作属于偏门,没几家点了名的要全栈工程师的(就算是点名要的其实也都是要后端大牛)
  • 任何脱离生产的技术学习都是耍流氓,全栈的学习环境要求十分苛刻

我的建议

当然这是我个人的一些想法。我崇尚在学习本方向的时候去花时间了解其他方向的技术,因为写代码思维真的很重要,组织能力有些是在本方向学不来的,换一种思路有时会有别有洞天的感觉,当然,如果花费了大量时间,舍本逐末,就不太好了,我不崇尚一味的去学习新技术,新框架,基础知识最重要。可以挑选一个当前主流的框架去学习使用然后深入源码,看看大牛的代码百利而无一害。而不是出一个框架学一个框架,那是无用功。

自己该如何选择

其实很简单,回答以下几个问题你就有了答案,答案永远是自己给自己的,不是别人给你的。

  1. 你更感兴趣别的领域的新技术还是自己领域的底层原理?因为可能时间花了你看不进去自己领域的底层知识仍然没用
  2. 你思考事情喜欢从多个方面来解决还是从一个事情的本质上解决。比如你想炒栗子,炒完了不够甜,你是想下次换个炒法,研究研究手艺,还是去看看自己的配料有问题?
  3. 写一篇这个博客,看看你想到的好处多还是坏处多

^_^

这篇文章没有一点教育和技术知识,希望能给你一些答案。 PS:学习可以上掘金,哈哈哈哈(我司硬广)