回复内容:

就是没事儿了就写个网站,一开始先能跑起来,之后页面不能太难看吧?你得学前端,页面逻辑越来越复杂,你得上前端框架了吧,用站的人越来越多了,你得优化服务端性能了吧,发现自己菜成狗的时候,你得上服务器框架了吧……发现数据库io成问题的时候,你得理解数据库了吧……反正觉得实践中遇到问题,解决问题,总结,再反复,这样是我认为的科学的方法。
----------我是华丽的分割线--------------------------------------------
接下来想说说我是怎样变成一个全(dou)栈(bi)工程师的...Orz...也是人生第一次大篇幅回答问题,想想就有点小激动呢Orz...
最前面的话
现在感觉世界上的各种选手,对于全栈工程师褒贬不一。贵知乎上面也是有很多在黑全栈工程师的大大们。我个人的看法是闻道有先后,术业有专攻。每一种的技术栈形态的形成必定都是时代所需,大家都是为了感受coding带来的快感,何必文人相轻,非要较个你高我低。如果看到这里已经忍不住想吐槽怒喷,那还是跪求不要再看下去了。
入门
我的入门是从web前端开始的,然后之后又做了一些gwt相关的项目,对于前后端的开发大致有了一些了解。再后来去了一个稍微大一点的厂进行了实习web前端,当时的感受是每天百分之五十的时间都是跟后端在接口上撕逼,不慎酸爽。再后来到了同学的公司进行实习,于是发现这里的选手都是一个打10个的选手,每天说自己什么都不会但是随便一说虐你10条街, @朱文雷@刘超凡@DoG A@Chao Liu@Dont Panic 于是也不知道自己到底会干什么了。当时做了一个整理一些lib,然后写demo 跑通所有流程的工作,于是遇到了很多平时几乎用不到的问题。也跟着各位大仙们一起学习了很多很多解决问题的姿势。所以我觉得入门最重要的事情就是要多折腾,什么不会玩什么,慢慢就会了....入门要达到的目的就是前后端打通,知道是怎么个流程。
发展
之后就是加入linkedin中国之后的事情,一直在web前端和后台之间游离,甚至还做过一小段安卓的工作,近半年也在做一些自动化测试相关的工作。由于是快速迭代和敏捷开发,之间学习和使用了很多敏捷开发的东西。接触到了一些优秀的前后端的框架以及工具。比如时兴的react和貌似过气的angular,小众的coffeescript,更小众的ruby on rails,以及有我司实习生的merge-request的gin,还有更小众的calabash种种。。。这里面遇到过很多很多问题,绝大多说都是gg解决的,这里感谢@cr同学(顺路吐槽知乎的圈人系统,我关注的人居然圈不到),记得有一次遇到的一个angular的bug居然是我发现的前几天刚刚修好的。这一阶段的感觉就是要不断的尝试,不断地反思,这一次的这样的选择为什么好或者为什么不好,然后下一次在做选择的时候要进行哪些改进。搭车感谢一下放任我随意折腾的老板迪哥和视我的我的代码为粪土的梦南。
反思
对于一个全栈工程师最总要的几点:
1. 勇于折腾,多尝试更多技术,姿势,体位,坚持嘬死。
2. 一个强大的解决问题(gg)的能力,一般踩到的坑大部分人都踩过,感觉总是能搜到的。
3. 善于总结和反思,用于接受打脸和撕逼。
心目中的好的全栈工程师应有的素质:
1. 快速的项目介入和上手能力。
2. 精准的技术选型能力。
3. 强大的问题划分能力和解决能力。
4. 优秀的代码质量。
5. 良好的补位意识和团队意识。

感觉跑题了,题主问的是如何学习,再说就不知道说到哪里去了,愿题主早日把他截的图的东西都学会吧,感觉一年时间应该够了?我去抓猫猫了T_T不要迷信全栈!
不要迷信全栈!
不要迷信全栈!

知识体系图是什么鬼?naive~
知识爆炸的年代,居然还迷信什么知识体系图啊?找虐还是怎么滴??
光我大前端的知识体系图就够你喝n壶了~

言归正传,我个人支持“业务驱动”。那么问题来了,怎么做?(直接以当前在做的项目为例)

1.全景直播平台的搭建

1.1 需求分析
要做一个全景直播平台的核心需求是什么?
- 支持直播的全景播放器
- 稳定的流媒体服务器
- 直播状态管理服务器
- 其他相关内容(业务优化什么的~)

1.2 知识储备
1.2.1 要做到直播,涉及到三个重要的环节
- 推流(比如使用obs、ffmpeg等推送rtmp或者hls流)
- 转发(这里针推不同的情况,可以推送rtmp/rtsp/hls/other)
- 播放(这里当然就是视频了,根据平台可以分为flash使用的hls或者rtmp、rtsp,移动端hls)

1.2.2 要做到“平台”级别,当然要求是可以支持n个直播!
- 服务器选择,为了应对所谓“高并发”,完全可以放弃服务器渲染,生成静态页面丢到云存储
- 缓存问题,上一步适用云存储存放页面,这里配置cdn来做缓存,基本解决了多人观看的问题
- 另外可选方案是配置负载均衡(加n个服务器,适用轮训之类的方式来对不同区域不同人访问)

1.2.3 状态管理,更新逻辑
- 页面既然已经是静态了,那么状态最好的方式是ajax方式来管理了,设置一定时间的轮询也可以
- 中心服务器当然是要有状态的,至于怎么管理自己决定就好

1.3 其他内容
...

按照当前需求来独立实现这些功能,自然而言,该学习的东西都会学习到了。

完了吗?NO !


我理解的全栈,不是你用了什么技术,不是你解决了什么问题,
而是,你怎么解决问题,如何应对需求,以及需求变更。

熟记一些知识点当然要比我这种用到查文档的人要专业,但是吧,多做一些类似的事情,你会发现,这些坑,填完了,要是能同时记住一些重要的点,对以后做东西是灰常有用的~被邀请了两次,就回答一下吧。

说实话,那图(网上还有很多类似的)很唬人,其实基本功好了,就知道那些只是三生万物了。

想学好前端,就从把http://www.w3school.com.cn上html,css.javascript三个章节看清楚开始(只看这三个,不包括网站上html5,xhtml,css3等等衍生栏目)。用java的话,就写个servlet, get, post, 各种方法玩一遍,返回html字符串。然后再用模板引擎,实现html复用。 然后尝试ajax,实现不刷新页面。 代码多了以后,分层,分mvc. 代码有规模后,部署到各种web服务器,架上ga脚本。 用linux,ant自动部署。 再玩memcache以及各种分析工具。web全栈简单的说来就是自己开发网站, 缺哪补哪, 从头开始搭建保证能够自己一个人做到上线运维即可

从细处讲(目前我在公司做的)
域名购买 => 主机购买 => 域名配置 => 服务器操作系统安装 => 服务器软件运行环境配置(包括用户权限 防火墙) => web数据结构设计(ER图,数据库表) => web页面设计 => web切图写页面 => 后端程序编写(基本的MVC MVVM 数据库CRUD 数据缓存 各种中间件) => 代码压缩混淆自动化上线 => 反向代理配置(nginx) => 代码监控及优化

数据量并发量上来之后
分库分表=>服务器docker化=>自动化部署运维测试=>消息队列引入 等等...

能做的很多, 一点一点去做就好了...

以上
2016年02月17日先学数据库和简单数据结构, 无论前端后端都用得着。学会这俩,基本上你会对业务有了一定概念在学其他的。就是什么都学,什么都做一点,接点私活,聪明点大概10年可以完事,笨一点20年也够了。谢邀。
全栈工程师对各方面能力要求都很高,成为一个全栈工程师是一个远大的目标,但除了知道全栈工程师薪资待遇很高之外,首先你必须先清楚为什么全栈工程师会拥有这样高的待遇和地位。

全栈工程师与其说是掌握某个领域产品的全栈技术,到还不如简单来说是拥有能够独立实现一款产品的能力(拥有这种能力和是否需要你这么做是两件事,这里谈的是需要先拥有这样的能力)。

所以啊,题主如果想成为一个全栈工程师,最快最有效的方式莫过于能够作为多个产品化项目的负责人,全程参与和主导项目的完成。题主需要明白的是,在计算机技术这个领域,哪怕是业界出名的全栈工程师也不可能各个领域全部都能够理解,更多的是水平高的工程师对业务和产品以及技术体系有很深的理解,这样的人哪怕面对新技术、新风格也一定能够快速掌握(要知道,在正式项目中,架构师在做架构设计的时候必定需要考虑风险点,其中所用到技术的可靠性和学习成本是最重要的风险点之一,如果时间不会过分紧的话会有一小段时间供你快速掌握的)。

然而你可能会问,我刚刚毕业,或者还没有毕业的时候,我没办法负责主导一个正式项目,那我该怎么办?根据我个人的经历来说,程序员大多数是一群靠谱的老实人,在你做好本职工作的前提下,你向前辈或者技术领导提出想看一下架构文档,或者需要他来帮你讲解一下架构和技术选型,我想别人如果有空的话一般来说都是很乐意的(程序员装逼基因永远在骚动)。当你得到这些架构设计时,仔细反复研读推敲,推敲设计者在设计时的情景以及做这些技术决策的原因(都说架构实际上是一系列决策的组合),时间长了自然而然就好了。

毕业前想成为真正的全栈工程师,楼主我劝你还是不要把步子迈的太大,反正要是我收到一份自称自己是全栈工程师的应届生简历的话一般觉得99%是来逗我的,1%是遇到神了。

好好研究自己的技术,做好做精,多经历一些实际项目,多思考和探索保持向上之心,每个程序员都能成为全栈工程师。node.js是通往web全栈的捷径新手还是不要一上来就全栈,好吓人的好不~
我对全栈的理解是那些大牛在某个技术领域达到一定高度以后,思想+技术逐渐辐射到全局且融会贯通的时候,才能说全栈吧!会用和理解完全是两个维度的概念,后者+时间的。
我觉得全栈一定分面向前端还是面向后端,因为你一定有自己擅长或者主导的技术池。从发展的角度来说,在思想上你需要在某项技术中来不断进步,突破!
个人建议3/7原则,70%的时间专注于自己擅长的领域中,30%的时间专注于其他领域中。
搞开发的,切忌别一瓶子不满半瓶子晃荡,出了问题满世界找bug。。
09-07 16:19