开篇词 | 从成长角度看,为什么你应该成为全栈工程师?
开篇词 | 从成长角度看,为什么你应该成为全栈工程师?
讲述:四火
时长11:00大小10.07M
关于个人发展
关于就业和创业
赞 13
提建议
精选留言(44)
- 而立斋置顶2019-09-09作为一个八0后,我不怕别人嘲笑我能力低下,从事行业传统,技术栈陈旧。这些都是我前进道路上的动力,我希望自己知识面很广,对技术的钻研很深,最重要的是有自己的理解跟体系。到了这个年纪,不奢望轰轰烈烈,只希望脚踏实地,学多少会多少,会多少用多少。这就是我的全栈梦,老师见笑
作者回复: 技术栈确实有新有旧,但是很多技术的本质都是一样的,新的技术都是由某些旧的技术演进而来的,而有很多基础知识都是几十年也没有大的变化的。所以请不要觉得旧的技术栈就“无用”。在专栏中你也会看到技术之间大量的类比和联系。技术的学习没有任何可笑之处,加油!
共 2 条评论42 - leslie置顶2019-09-09全栈:我记得Google的SRE 就是类似的概念;完全的80后,早年开发出身,早年的中后期工作需要开发兼数据库,中期在基本上算是数据库兼系统运维或系统运维兼数据库,这个角色干了超过5年,MYSQL和Oracle的OCP;职场工作10余年的老兵。 目前回到二线城市原本是准备继续之前的职业平谈下去,理想很美好现实很残酷;去年某个DBA圈子的老友又刚好把极客时间推荐给我了,学了赵成老师的运维体系,二叉树视频陈皓老师的跳出金融业的行动引发了反思;目前在本地的某互联网企业主要负责数据库和linux系统相关的性能维护和优化。 全栈这个词我是在Google SRE这本书看到的:DepOps其实同样是全栈,这本书中强调运维开发其实不分家,其实这就是一种全栈;故而我非常想从老师的课程中去学习和明白道理的修正/调整,以便能够够好的走好后面的路。展开
作者回复: 很棒的回复。 我特别想回复一下运维开发不分家这一点。其实不只是 Google 的 SRE,太多大型互联网公司都崇尚小团队 + 服务自治了。工程师需要 oncall,解线上问题,通过运维的快乐和痛苦反哺开发(“吃自己的狗食”这一说法就指的是这个)。这种环境下工程师就要一专多能,在亚马逊对 SDE - Software Development Engineer 有一个“戏谑”的解释,叫做 Someone Does Everything。这方面我在专栏中会有展开介绍。
10 - Brave2019-09-14四火老师您好,看到您的专栏很有感触,我先做个介绍,男31,工作8年,坐标天津,自我评价是一个技术狂热的人,每天工作到夜里2,3点很正常,目标做全栈工程师(主后台全栈),最早在北京做ABAP+JAVA,后来赶上移动互联网android回天津,再后来由于跨平台对原生的冲击,跳槽混合APP医药电商公司,同时H5+CSS+JS+JQuery+Bootstrap+移动框架都补了起来,再后来由于APP需求减少转了JAVA后台,Spring,SpringMVC,SpringBoot,SpringCloud各种全家桶,Spring源码和底层实现,中间件等都搞了起来,前端部分:Angular+Ionic,Vue全家桶,React全家桶(无实战),NodeJS,微信部分:微信公众号,小程序,JSSDK也都深入学习实战过,去年年底到今年做了基于Vue的前端工程化,过程中阅读了很多源码,webpack优化,写了一些便于前后端协作的插件和工具,说到这里我的优势和劣势基本都体现出来了,我可以胜任多个开发岗位,项目紧张时前后端可以一起搞省去了很多沟通设计成本,熟悉前后端技术栈能够用最简单方法做收益最大的方案,能够快速学习新语言新技能,缺点就是技术栈太多,带来的学习压力,每个领域都希望能做精,不满足仅仅是会了能写的状态,"自杀式"的学习方式让我身心俱疲,我也阅读了很多时间管理,精力管理的书籍,如番茄工作法,确实有了很大改善,但目前我依然面临着一个巨大的问题:即便我能够平衡好作息,能够兼顾几个重要技术分支进行深入学习,但始终没有办法同时应用起来,就会造成遗忘,对于这个问题,我目前只能对各个部分做笔记写博客,加深理解认识,减少二次学习的成本,我觉得全栈的思想很重要,而不应该是什么都会,我需要裁剪掉哪些技术栈?四火老师是否也有过同样的困惑,能否指点一下?展开
作者回复: 你好 Brave! 从你的描述我确实你感受到你对技术的“狂热”,你接触了非常多的技术,首先,我希望你更能把它视之为你的优点,而不是“累赘”,要知道并没有多少人能像你一样拥有这么全面的经历的,这是你的财富。接着,对于你的困惑,我有这样几个建议: 1. 把书读厚之后,要把书读薄。也就是说,要多做一些归纳和整理,寻找这些技术之间的联系,把握住技术的本质,而不是机械记忆。事实上,有许多记忆性质的知识,并没有那么重要,需要的时候搜索和查看文档就可以了。 2. 你可以逐步明确下自己想着重的领域和方向了,全栈当然是一个方向,但是全栈不是简单地做全面,它也有自己的重点。当然,你可以根据自己的情况来决定。每个领域做精显然是很难的,也不具备可持续性。你不需要“裁剪”掉任何部分,但是,你需要把主要的精力专注到你较少的目标上。 3. 最后,仅仅是带有偏向性的个人建议——如果可能的话,因为以你描述的能力,已经超过了大多数人,你完全可以一边夯实基础,多去面试,去开阔眼界(不只是技术上的眼界),然后去尝试挑战一下互联网更高级别的岗位(你有北京的经历,我认为北京的机会远远多过天津,甚至,你也可以考虑北美的互联网公司)。 希望我说的对你有帮助!
共 3 条评论27 - 笑忘日月星辰2019-09-12我觉得java全栈应该掌握下边的技能吧: 1. SQL: mysql、oracle、sqlserver, db2, MongoDB, HBase, 人大金仓,神通 1.1 对接过程中需要申请应用id秘钥,解密,存库,加密。 1.2 已有应用对接办公平台,会牵扯到数据初始化,数据迁移。 2. JavaScript, html, css, Ajax, jsp前端技术 2.1 办公桌面负一屏,会牵扯到前端接口的调用,需要用到基本的JS 2.2 平台对接过程中可能会遇到应用前端代码的问题,需要阅读应用前端源码 3. vue,webpack,react等前端新技术 4.1 技术一直在持续发展,好多公司也会追随新技术的步伐,学习流行的技术也是为更好的技术支持服务做铺垫。 4. Nosql技术: memcached, redis, Ehcache, mongodb 5. elasticsearch,Lucene, solr等搜索技术 6. 负载均衡: Nginx:高性能、高并发的web服务器;功能包括负载均衡、反向代理、静态内容缓存、访问控制;工作在应用层 LVS: Linux virtual server,基于集群技术和Linux操作系统实现一个高性能、高可用的服务器;工作在网络层 7. webserver: Java:Tomcat,Apache,Jboss,Tongweb, AAS 8. service: SOA、微服务、spring boot,django 9. 容器: docker,kubernetes 10. 协调中心: zookeeper、etcd等 11. rpc框架: grpc、dubbo、brpc 12. 消息队列: kafka、rabbitMQ、rocketMQ、QSP 消息队列的应用场景:异步处理、应用解耦、流量削锋和消息通讯 13. spring, spring boot, spring cloud, hibernate, mybatis, maven, gradle,网络编程,并发编程, http、tcp协议等展开
作者回复: 这是我看到的第一个具备那么丰富的知识点的回复,这里面有许多在本专栏中都会涉及到。
共 3 条评论15 - 轻飏2019-09-10我是一名阿里巴巴的java研发工程师。四年前本科毕业的来了阿里,岗位是测试开发工程师,可是还不到两年,因为拥抱变化,这个岗位在我们部门就被干掉了。于是转型做纯开发,但是究竟是专注于后端还是前端我很迷茫,因为团队当时处于初创,需要大量前端且招不到人,而我又偏向于做后端开发。所以都在学习。自己最初的一个研发项目是将一个配置发布控制台从0到1实现,需要从前端写到后端。最终我成功完成了这个项目,虽然技术上没什么特殊的难点,但是涉及到的知识点非常多。这段经历也让我学习了很多,了解一个web应用系统的全貌。直到后来我终于有机会专注于做后端开发,有时候需要和前端同学配合的时候,也可以站到他们的角度思考这里的实现方案。 对我而言,全栈不是意味着全要精通,而是需要熟悉整个研发体系,了解技术栈。这样子无论是团队合作还是后来带团队带项目都是非常有帮助的。而且通过加强全栈学习,也会改变自己思考问题的方式,这种影响不局限于工作范围展开
作者回复: 嗯,很详细的描述,也恭喜你从测试开发工程师转纯开发成功。我想这个过程一定不容易。 我相信你已经有了初步的知识,因此才有了这样的感悟。下一步,你可以利用专栏,在每一章的学习过程中,把你经历的那些技术,特别是 Web 技术对号入座一下,了解具体技术背后的那些原理和套路。
10 - mmm2019-09-13四火老师好,我工作了6年,感觉做着全栈的工作,但找工作并没有优势,迷茫中,求指导,我在华为做了三年通信行业c语言业务研发,互联网三年就是跟着公司需求走,做过Android 和ios的sdk开发,做过web前端页面开发,做过后端服务开发,做过大数据的项目,现在做监控告警方面的系统运维开发,一路过来感觉对前端到后端,开发到运维的流程都清晰了,但找工作时,因为工作6年了对方往往期待你是某一方面的专家,不care你是不是全栈,可我在各方面只有一到两年的积累,前端和后端都没有形成完整的技术体系,跟某一领域干了三年的人比反倒不占优势,因为年轻人更有精力而且要的也少,请问老师什么工作岗位特别需要全栈,或者我的发展方向哪里有问题需要调整?展开
作者回复: 我想从我的理解谈两个方面: 第一,全栈学习和成为某个领域的专家并不矛盾,不但不矛盾,还有相辅相成的促进作用。这点我在好几处评论的回复中已经谈到了,你可以参考一下。就拿我自己来举例子,我之前做了许多Web全栈开发的工作,但我现在做的是分布式系统,和Web 全栈“看起来”没有直接关系,但实际完全相反,我在文中也提到了。 第二,确实有很多公司都招聘 Web 全栈开发,我在国内还是北美都工作过。你自己也认识到了技术体系上的欠缺 :),并且,当你产生了“年轻人更有精力而且要的也少”的想法,我觉得就要当心了——你的竞争力是什么,拼体力肯定拼不过年轻人的。你的竞争力应该是经验、思路、眼界等等这些东西。你说对吗?另外,我在 06 篇会讲到一点这方面,你可以留意一下。
共 2 条评论8 - 蜉蝣2019-09-09我的岗位是 web 后端,语言用 python 而非 java,前端基本不会。可以说与这个专栏格格不入,但我还是想啃!
作者回复: 赞一个积极的态度!但是对你描述做个说明: 首先,你提到的“web 后端”本身就是我所理解的基于 Web 的全栈的重要一部分; 其次,语言是 Python 还是 Java 并非什么大问题,我工作中用了差不多十年的 Java,但是现在我所在的团队用的全部是 Python。你所学到的全栈技术,特别是技术的本质,还有常见的“套路”,往往和你的实现语言没有关系。:) 再次,至于前端,它能给你带来很多好处(第三章我们还会详述),我推荐每一个程序员都学习前端,无论在未来是否专注于这个部分。
7 - 許敲敲2019-09-09四火老师好,我是 一名web developer,工作年限比较少,仅半年,外企的话,工作轻松,相对职责确定,不会接触到所有的业务。平时工作就是做web相关的开发,工作中写 前端组件,Angular,React,Vue都有接触,写基于组件的showcase ,写单元测试,写集成测试,有时候也要自己配置 CI/CD环境,也需要了解一些运维的东西。自己喜欢接触新技术,也学了很多机器学习,NLP的知识。一直都想着自己开发一个app,能把自己学的东西连起来,做一个东西出来。 自己学的话,老是觉得很多技术层出不穷,而且接触很多方向的话,每个方向的深度都不会深入太多,而且学东西,实际工作用不到,或者做不出什么东西出来的话,感觉学习效果没那么好。之前也有看到国外的full stack 培训班,可是3000,5000刀的价格确实太贵。 不知道学习这门课,是不是可以在老师的指引下,做一个完成的包含前后端技术栈的产品出来? 希望至少对软件架构这块有个入门。展开
作者回复: 你好。 你提到了培训班,确实如此,并且相较来说,据我观察北美的程序员圈子里面 full stack 的讨论氛围比国内要浓厚许多。 对于深度的问题,其实广度和深度不但不矛盾,还有相辅相成的特点。技术都是相通的,在专栏中你也会看到,某一些有深度的技术都是别处“借鉴”过来的,“套路”都是一样的。 关于你的问题,是一个很好的问题。这个专栏并非围绕一个完整的技术栈的产品而设计的,但却会覆盖很多项目中的实际问题和例子。在下一篇学习路径中会讲到专栏内容的设计。 另外,从描述中可以看出,你有很多优秀的品质。:)
共 2 条评论7 - inmo2020-08-21老师您好,我是名刚出来实习的大专生,现在走的方向是前端,对于以后的发展有点迷茫,希望老师看到后给予点指引 主要课程: 在学校期间,学的是计算机基础,计算机组装与维修,网络基础,ps,flash, c语言, linux, Dreamweaver, office,高数,英语,mysql,数据结构与算法,网络安全,jsp 课程情况: 1. 对于上面的课程,老师上课完全是读ppt,而且还不是这个专业的老师(除了数学英语),问他们问题,多数都是答不上来 2. 像我们计算机的,上了两年大专,还没有碰过学校的电脑,至于为啥,学校说没有多余的机房分配给我们,虽然我们老师也申请过很多次,但都被回绝了,但经过我的观察,多数的机房都是空的 3. 大专的环境,基本上上课了周边的都是打游戏的,由此上课都是自己带本书,到一个角落,学自己想学的 第一个学期,因为有c语言课程,觉得挺有趣就开始看视频自学,从c到c++再到qt,可以自己搞一些简单的小应用,工具 在第二个学期,一个同学的指引下,我接触到了html跟css,就开始了前端的自学路程,从此踏上了前端的道路 从html开始, css, js, jq, jq源码, node.js,webpack,vue全家桶, git, 中间捣鼓了一下flutter,折腾了下linux 疫情的时候使用flutter做了个起床打卡app,使用php搭建后台服务器存储数据 五月份左右,使用node.js+vue独立做了一个博客,并上线在宝塔中 至此现在毕业,找工作的时候面试了,5家公司,全是培训机构。说我能力不行,需要培养(费用2w,称可以帮我分期,培训完再开始还),知道这是个坑,果断的拒绝了。 后来在掘金看到了个内推网易的,就去试了下前端开发实习生。 笔试之前,做了很多复习: 笔试题, http,缓存,dns,浏览器渲染过程,手写各种es6的函数,this,原型链....., webpack原理, vue双向绑定, git...... 到了笔试那天,怀着忐忑的心,打开了笔试网页, 先是文化题,后是数学的,然后是编程题: 打开后人都傻了,就四题,但全是算法题,虽然学过算法课,但真要写算法,我也只会个冒泡,堆栈,链表! 然后硬着头皮做,虽然在本地运行输出没问题,但一题都没过,我想应该是一些极端条件没想到,结果就是网易跟我说拜拜了 心灰意冷,进了家小公司(有多小? 只有30来人)做着学徒,因为主要业务小程序的,又没有学过,所以只好从学徒开始干,每月600的补贴(不包吃住),其实就是每天去公司自学,也没人管你,我觉得这能把我零碎的学习时间组合起来,也挺好。 我知道大专跟正常的大学生有些很大的基础差距,我希望能够转正后系统学习计算机基础知识 再等实习完,参加升本考试(招聘硬性要求本科学历) 最后,希望老师能指点下,实在是迷茫不知道怎么走下去,虽然明确了学历前进的方向,但却不知道技术的道路如何走下去,难道真的要从算法开始学起来?展开
作者回复: 你好inmo,读完了你的故事,我理解你的苦衷。 首先,读书期间的教育条件并不过硬,显而易见地,这影响了你早期基础的积累。但软件本身,其中的一个好处就是,自己学习一样可以做到足够的积累。你说在学校里面没有办法使用上学校的电脑,似乎还有些“耿耿于怀”,可是话说回来——即便能够,我觉得也很难获得足够的时间和环境,因此终归还是要靠自己的学习,也请不必太过沮丧。 其次,根据你的描述,我注意到你在前端已经有了一定的知识储备,现在在这部分,除了知识的记忆,你需要注意慢慢把它们串联起来,找到套路和体系。 再次,但却是最重要的,就是要把基础夯实。你已经通过网易实习考试认识到,“全是算法题”,没错,大厂的玩法确实是不一样的,它们往往更重视基础。你既然在学生时期由于种种原因落下了这部分,现在尤其需要优先捡起来。要知道,随着年龄增大,如果这部分最重要的短板不补上去,你面临的竞争压力可能会越来越大。 你问“难道真的要从算法开始学起来?”我的回答是:“对!” 另外,上面提到的第2、3点,我在不久前的直播中都有介绍,直播视频在B站,你可以看一下:https://www.bilibili.com/video/BV12T4y157Z7 祝你成功。
共 5 条评论5 - 业余草2019-09-09全栈就是“全都你一个人干”。。。我们只差一个全栈程序员。。。
作者回复: 全栈可不是“全干”啊。我认为偏狭义的理解,比如定位到我提到的基于 Web 的技术栈,更有学习和讨论的价值。
共 2 条评论5 - NumZhou2020-05-08干开发四年了,我越来越不知道自己是做什么的。大学那会只学了一点C,C++的皮毛,还没有真正理解开发的内容。毕业以后没有任何技能,自学了两个月的java基础就进了一家外包公司,项目经理知道我啥也不会,就从做前端开始自学,一边学习一边开发,然后就整天画页面调样式,和后台开发调接口。后来又开始做后台开发,虽然没有深入学习后台开发,但是做的都是维护类的项目,可以依葫芦画瓢,写一些基本的交易也没问题。然后就开始前后端联合开发,后端写完写前端,然后联调,单元测试,也做过一段时间的测试,都是很基本很简单的。目前一边做着开发一边做着一个大项目的运维。很迷茫,技术也不过硬,所以想多学点东西。展开
作者回复: 👍,听起来你有不少积累的!就是可能缺少一点体系
3 - SHERRAN要好好学习2019-09-12四火老师,我是一名大四学生,我大学自学的前端后端略有涉及,可是身边的人以及程序员网友一直让我转后端,说前端没前途,是真的吗?很迷茫!
作者回复: 还有无数人会对你说,程序员是吃青春饭的呢,你觉得呢?:) 类似这样的论调会有很多,相信你会有自己的思考的。我们在第三章开始的时候讲前端,也会特别提到学习前端带来的好处。
3 - 靠人品去赢2019-09-09全都精太难了,但是怎么说做后台懂点前端,做前端会点SQL,Node服务器语言还是可以的。关键两个科技树技能点和要求还是有区别的,现在连半截树都点不亮。
作者回复: 感谢你的观点和分享。 我认为,全栈技术的广度和你希望钻研的技术深度并无冲突,事实上,还有相辅相成的作用。程序员的发展总是要面临深度和广度两个维度的。 确实如你所说“有区别”,但是它们之间的“联系”更多。别担心,希望这个专栏能带给你帮助,帮你“上道”。
3 - paperen2020-05-25感觉80后做技术的都算全栈,因为咱们那会都是后端与前端一块写的 自己今年三十多岁,十年的开发, 是从PHP开始的技能标签一大堆 : 前端:jquery、vue、bootstrap、mpvue、公众号/小程序开发、vant 后端:codeigniter、thinkphp、lumen、scrapy(python) 存储:redis、mysql 运维:zabbix 大数据:hadoop、flume、kafka、elasticsearch、filebeat 但真的觉得很杂但又没有很专,最近在补架构与算法的知识,老实说用过这么多并没有让自己感觉比别人厉害很多展开2
- Geek_East2019-11-11从您的博客Trace到您的领英,从中国到美国,我也有类似的经历; 本科是跟计算机完全无关的文科,出于兴趣,研究生到了CMU读信息系统,不算是非常正统的计算机科目,但是有机会跟很多出众的同学们学习。现在在澳洲一家创业公司任职全栈工程师不到一年,看到您的文章,认同其中很多观点:选择全栈也是因为它可以让我自主构建项目;工作机会多;可以从广度上了解这个行业,为将来架构或者说管理层面打下基础。将来打算base澳洲,赶赴美国任职软件工程师,现在也是在学习全栈技术的同时,偶尔看看数据与算法的题目。文末感谢您提供的课程给了我很多很多启发。展开2
- 小寞子。(≥3≤)2019-09-22老师好!标准90后 在土澳刚毕业 IBM做顾问一年。 发现澳洲这技术人员落后(也可能是IBM的锅) 不知不觉总是在团队里充当技术最牛逼的人。。 实际上只是我学习速度快。 从小接触编程, 自学深度学习机器学习。 发现土澳很难用到。 机缘巧合下在一个项目中自学了spring boot。一个人搭建了整个测试自动化框架的后端。。既然我全栈已经接触了一半, 另一半应该也不难。。希望能多学习前人的经验。😁
作者回复: 👍
共 2 条评论2 - 王智2019-09-13老师中秋节快乐, 哈哈, 我现在的工作是服务于教育的, 给学校做网站, 这种工作一段时间闲, 一段时间忙, 最近就比较闲, 但是不知道该做什么, 希望跟着老师的专栏好好学习一下. 对于全栈的理解我就比较模糊了. 大学喜欢前端, 后来毕业学了后端, 现在前端忘得差不多了, 主攻后端. 对于如何成为全栈工程师前途迷茫啊. 先跟着老师好好, 规划一下学习路线, 总觉得公司用什么学什么太慢, 但是不用又忘, 难受. 哈哈 学习学习展开
作者回复: 每个人的遗忘曲线都不一样,但是学了就忘很有可能还因为其实没有学透彻,只是理解怎么使用、怎么配置这只是表象。 对于最后一条,我非常同意一点,如果跟着公司用什么,就学什么的话,这局限性太强了,想必你也不想把你的能力和未来绑在“公司用什么技术”上,对吧?
2 - 颜林林2019-09-13我的技术栈虽然略陈旧,但我自信自己的技术栈更宽;我是来加深自己在“狭义全栈”这部分技术的深度的,以便成长为一位全栈数据科学家 ^_^
作者回复: 全栈数据科学家,很有意义的方向,加油!
2 - koko_zhk2019-09-12我是一个做了有5年多的前端工作者,之所以对全栈感兴趣,是一开始是因为我觉得这样很酷,很厉害,可以做很多自己喜欢的事情。后面在最近的一年里,感觉前端的东西已经不能太满足自己学习的兴趣,所以突然就想着自己试试做做后端,也许从另一个角度工作,会反过来对我的前端视野有帮助也不一定,同时还有一个原因就是想打发一下无聊的时间,哈哈。后来就靠自学和旁边后端小哥的带领下,慢慢的接触了java的东西,并且尝试进行一些日常需求的开发。所以我觉得全栈工程师这个应该是一种发展的趋势,等你工作到一定的年限后就会发现目前的这些东西,已经把你局限在了一个范围里,你需要跳出一个范围圈,去接触一下外面的东西,然后再回过头来审视一下自己认为的那个范围圈,是不是有什么问题,是一个双向的帮助。展开
作者回复: 嗯,说得太好了,很想为你鼓掌。我尝试用两个字来概括你后面几句话的意思——“视野”。等你学完了这个专栏,你可以回过头来再思考思考你说的这些话,相信你会有更多想法的。:)
2 - 张一2019-09-10从事十余年银行核心业务系统的实施。行业的特殊性和业务的重要性决定了我们只能采用成熟可靠的技术,不能去尝试任何开源的新技术。但新技术中蕴含的理念,思想还是可以去借鉴和参考。有了新思想的注入,不知道老树还能否发出新芽?
作者回复: 你好,张一。 让我尝试理解一下你说的老树发新芽的含义: 如果是具体技术本身,在老技术中应用新思想,多数时候是可行的,但也有时由于技术本身的限制,或不适合那样做。 另外,如同我在另一则回复中说的那一,无论技术新旧,技术背后的本质都是一样的,新技术也往往是从旧技术演化而来的。
2