神刀安全网

怎样成为全栈工程师(Full Stack Developer)?

成为全栈工程师一般的学习路径是怎样的?

补充一下Full Stack Developer的定义和标准:What is a Full Stack developer?,这样大家讨论怎样成为Full Stack Developer时不会偏的太远。

  Is it reasonable to expect mere morals to have mastery over every facet of the development stack? Probably not, but Facebook can ask for it. I was told at OSCON by a Facebook employee that they only hire ‘Full Stack’ developers. Well, what does that mean? To me,   a Full Stack Developer is someone with familiarity in each layer, if not mastery in many and a genuine interest in all software technology…

6 条评论 分享

按投票排序按时间排序

172 个回答

顾鹏,Live with less, share with more.

知乎用户、知乎用户、耳机 等人赞同

做这样一个简单的 app:
一个天气应用,干净清爽的界面,天气信息一目了然。它不仅可以精确预测未来 10 天的天气,还可以显示某地的历史天气信息。它具有自定义提醒功能,支持 web 版本, iOS 版, Android 版。

为什么想要做这样一个 App ?因为你喜欢旅行,但没找到一个天气 App 可以提供你下个月或者某个特定月份的天气信息;因为你懒你没有每天看天气预报的习惯,你想要在第二天温度达到 30 度以上或者温差有 +/-7 度的时候,获得温馨提示;因为你要成为一个 Full Stack Engineer ,你必须不断训练每个 stack 的能力。

## Web版
你决定用 MySql 来存储用户数据,用 NoSql 存储历史天气数据。你用 Redis 作为 cache ,缓存一些最常请求的天气数据。你用 Python 写后台,功能简单,后台不复杂,用户注册登录,抓取返回某城市的天气数据,某地的历史天气数据,很快便搞定。

后台开发并测试好了,接下来是 Web 前端。你十分清楚一个好的 UI 设计对一个 App 的重要性,你也明白 UI 的设计不只是为了美观,更重要的是提高信息的可读性和程序的可用性。幸好你平日的积累这次派上用场了。你把之前保存下来的上百个优秀的UI设计作品拿来研究,你从书架上拿出Norman 的那本经典 – The Design of Everyday Things 重新细读。最终你用白纸黑笔敲定了第一个版本的 UI,简洁直观,没有任何多余的设计,所有元素的排列间距 大小颜色都恰到好处。你相信即使天气不好,但用户只要使用这个 App 都会有着愉悦的心情。

那么开始写前端吧。啊,别急,都忘了还有 Icon 和 Logo ,可是不会 PS ,不会 AI ,不会 Sketch 怎么办呢,学吧。你平日喜欢结交不同领域的朋友,正好几周前在一个活动上你认识一位朋友做设计的。她花一个下午的时间教你基本的 Sketch 的使用,并对你的 UI 设计给出了一些意见。你请她吃了顿晚饭表示感谢,然后立即回家根据她的一些建议重新调整了 UI ,这次你在 PS 里把 UI 画了出来,Icons 和 Logo 也顺道一起做了。

接下来的一周,你学习 HTML,CSS,以及 Javascript,并漂亮地把前端搞定。

## 发布 App
在朋友圈发了个状态,找人帮你做 Beta 测试。他们都首先问你是什么 App,一开始你简单回答一个天气的 App。但你发现,这不能提起他们的兴趣。你觉得你需要用语言,用故事包装一下。不光是作为别人「是什么 App」提问的回答,也是成为 Full stack Engineer 道路上的一个重要技能。

你去看了所有你喜欢的产品的主页,从他们的文案上获得一些灵感启发;你读了经典的 On Writing Well ,发现好的文案,好的设计,其实和好的代码很相似,都是重在交流,如何让他人毫不费劲地明白你要表达的内容。你的故事要吸引人,你的产品介绍要在1分钟内解释清楚,并确保你的父母可以毫无压力听明白。

一切就绪,产品上线了。反响不错,用户持续增加。很多用户希望有移动版本,于是你立即投入到iOS 版本的开发上。

## iOS 版 及 后台优化
你花一周不到时间学习了基本的语法和工具使用便投入到 App 的开发中。你知道 Learn by Doing 是最好也是最快的。由于之前学习了设计的基础,UI ,Icons 很快搞定,不久 iOS 版本便发布了。iOS 的发布带来了更多的用户增长,后台服务器的压力颇大,你知道是时候优化后台了。

你在 AWS 上多开了 2 台服务器,并写了一个 Script 来自动化部署过程。
你改用 uWSGi 协议,用 uwsgi 作为 Application Server。
你使用 Nginx 来做并发,负载均衡 …
……
……

## 成立公司
用户持续增长,每天你都会收到十几二十封用户的邮件。你很感激这些愿意花时间给你写邮件的用户,你相信他们是你最重要的用户,是潜在的付费用户。如果你把他们像上帝一样对待,他们同样也会把你看作是上帝。所以除了睡觉时间的发来的邮件,每一封邮件,你都会在2小时内给予回复。

果然这样的付出是收获巨大的,他们不仅惊讶且非常感谢你的快速回复,他们会在app store里给你★★★★★的评价,他们在社交网站上分享你的app,他们甚至会主动提出捐款给你。

你从快速的用户增长中嗅到了商机,你开始思考如何赚钱。广告你是坚决不能允许的,你认为再精确的广告也会影响用户体验。你设计了 2 个不同的付费方案,你打算用 A/B 测试看哪个方案更好。你分别给 200 个用户发去邀请尝试付费的邮件,邮件内容你精心打磨过,并在最后写上:CEO & Founder. 通过分析 2 种方案的用户行为,你决定将使用第一种方案。

接下来,你相信差不多是时候成立个公司了。为了省时间,你花 2000 块钱找了个园区挂靠并帮你注册公司。公司的名字让你头疼了很久,你不想只是简单的用这个 App 的名字作为公司名字,你知道公司将来还会做出其他优秀的产品。你希望这个名字简单易记,同时其含义也是你公司文化的象征。

公司注册下来了,但银行那边得自己跑。你联系了一些媒体编辑,邀请他们来试用你的产品;你重新设计了产品主页,并开始写产品的 Blog ;你在各大社交网络都给 App 注册了账号,即做社区客服也为宣传… 这些事大大压缩你写代码的时间。以往你都是以代码量作为衡量自己当天工作效率的指标,所以这些天你总感觉没做啥工作。

这样的发展早已超过你的预期,这个 App 从一个 Side Project 几乎变成了你生活的全部。你跟你女朋友半个月才出去约会一次,她抱怨不断;你1个月没跟朋友出去玩耍喝酒了;你 2 个月都没锻炼过身体… 你意识到, YOU CAN NOT DO THIS ALONE,你需要帮手,你需要找人一起把这个做下去。

但你不是要成为 Full Stack Engineer 么?你现在是了么?

## Full Stack Engineer
设计,后台开发,前端开发,移动开发,运营维护,PS,文案… 好像都会了,这算 Full Stack Engineer 了么?

不,这只是踏上成为 Full Stack Engineer 的第一步。你知道目前只是每个 stack 都懂一点,离senior 或者 expert 还差得远,而要每个 stack 都做到极致,需要大量的时间和精力。精力有限,产品开发紧迫,力不从心啊,这条道路也太孤独,因为你不需要与任何人进行协作。难道要把一些stack的任务交给别人做么?这样算是放弃成为 Full Stack Engineer 么?

不!这不是。
什么是 Engineer?「Engineers are versatile minds who create links between science, technology, and society」。
Engineer 的本质工作是设计,开发出应用于大众的产品。

一个真正的 Full Stack Engineer ,他从生活中发现问题,洞察需求,他设计解决方案,并开发出初始版本的产品。为了达到目标,他愿意去学习任何领域的技能和知识。同时他不追求一个人完成所有工作,如果有人可以比他在某方面做得更出色,便会十分热情的邀请他们加入。

最终他的职位也许不再是 Engineer ,他不再设计 UI ,不再写代码 … 他的工作不再是 design and building an app or product,因为他有更大更重要的任务要做 – design and building a team or a company which builds great products.

而这时,社会给了他们另一个称呼 – 创业者。尽管众人已忘记他们 Engineer 的身份,但在他们骨子里,内心深处,自己始终都是一个 Engineer 。当他们需要从头再来时,他们毫不犹豫从设计开发产品做起。Nikola Tesla,Ferdinand Porsche,Henry Ford,Jack Dorsey,Mark zuckerberg,Elon Musk … 细数那些改变了或正改变世界的创业者,他们大多数是 Engineer 背景,热衷于设计创造。他们学习技能和知识,不是为了成为某个领域的专家;而是因为那些 是完成自己目标所需要的。

以上,为我认可的 Full Stack Engineer


Peng

编辑于 2015-02-04 134 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

知乎用户,上知乎,求欢乐

熊猫老湿吴沛鸿、知乎用户 等人赞同 • 收录于 知乎周刊

既然原文是说,Facebook 工程师说 Facebook 只招 full stack engineer,那我就来说说 Facebook engineer 都是怎样的人啦。

我觉得任何一方面的具体经验都不重要,重要的是思维方式和学习能力。首先说思维方式,那就是不为自己设限,不会想着自己是前端工程师,所以后端的东西我就一点也不碰。Facebook 的工程师,级别越高就需要保持越大的影响力。如何创造更大的影响力,就是寻找当前杠杆效应最明显的问题来解决。有些问题你解决了的话,投入进去的时间每小时能换回来一千美元;有些问题你解决了的话,投入进去的时间每小时能换回来一百万美元。然而哪些问题更值得解决,这是动态的,往往还存在衰减效应。如果现在性能瓶颈在后端,你做了一个季度两个季度优化后,瓶颈就已经不在后端了,你再优化下去衰减效应就会越来越明显。等瓶颈变成前端了,你是不是就说因为你不懂,所以不愿意碰?那就相当于寄望于公司有个前端很懂性能优化的人来解决,但如果公司没有这样的人那就没有人来解决了。

Facebook 的众多海报当中,有一张写的是「任何一个 Facebook 的问题,都不是别人的问题」。有问题,你就需要去评估是否值得解决。如果值得解决,你就应该着手去解决,而不是假设公司内会有另外一个人比你更合适解决这个问题。这时候很可能你就需要去做你从来没有做过的事情,需要学习你原本可能完全不懂的技术。如果你是个专门做数学模型的博士,加入 Facebook 原本是打算做搜索结果优化的,结果发现这不是最急需解决的问题,JavaScript 性能才是最需要解决的问题,你怎么办?如果你以为 Facebook 需要的是你做数学模型的经验,那你就错了。Facebook 需要的是你完成博士学位的学习能力。你从来没做过 JavaScript 并且觉得 JavaScript 很恶心?正确的做法是立即在网上买几本 JavaScript 入门的书连夜看完,然后着手分析性能瓶颈并且解决。在你完成手动优化后,你还可以思考一下能否把这做成自动化,例如说在代码提交时分析 JavaScript 语法树并且指出可能成为性能瓶颈的地方,又或者说从用户浏览器那里收集性能数据扔到 Hive 然后再从中分析产生瓶颈的特征。这些都可能涉及到一些你没有做过也没有学过的东西,但问题摆在那里你就需要去解决,而无论这要求你去钻研什么。这就是我所说的学习能力。

这是高级工程师和初级工程师的主要差距。尽管在高级到初级这一维度上,美国工程师和中国工程师是有重叠的,但美国的教育体系和行业传统使得美国应届生比一般中国工程师更偏向于高级那一端。美国学生的优势在于,他们的教育体系让他们习惯面对开放性问题。一家公司万千问题当中,此时此刻哪一个最值得解决?这不是中国工程师擅长的问题,因为实在是太开放了。中国教育让人擅长在给定条件下解决问题,太开放反而不知道从何入手。此外因为绝大多数文献都是英文的,所以要钻研什么对于能读懂英文的人来说都可以非常成体系的学习,这对于很多拒绝阅读英文的中国工程师来说很不利。拒绝阅读英文意味着永远只能接受别人的二手资料,对于很多概念的理解只能停留在技师的层面,而无法上升到工程师或者科学家的层面。

发布于 2014-01-07 60 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

尤雨溪,不会搞艺术的程序员不是好设计师

Wang Tupac吴大卫胡继伟 等人赞同

现有的答案已经说明了,以一个正常人的精力和学习速度来说,想在 full stack 的每一个层面都达到顶级的精通显然是很困难的事情。但是做不到这一点就算不上 full stack developer (FSD) 了吗?其实我希望大家留意题主引用的那段英文的最后一句:a genuine interest in all software technology. (对所有的软件技术抱有一种真挚的兴趣)。

我觉得对于 FSD ,尤其是对于想成为 FSD 的人来说,这个态度才是最重要的事情。即使都是 FSD,每一个人各自的技能加点也肯定会不一样,有人在前端更擅长一些,有人在服务器层面更有经验… 但其实没有什么硬性的门槛,需要的是解决任何问题的能力和意愿。你要做到的就是不固步自封在一个领域。遇到问题,就去研究,不因为问题不在你的 comfort zone 就放弃或者推给别人。即使一开始的解决方案很笨拙也无所谓,just learn whatever it takes to make it work. 比如说我要做一个网站,我有一些东西没碰过,但我有足够的兴趣和动力去搞个八九不离十。(这里自学能力很重要,有好的 mentor 也会帮助很大)当你经历过一次这个过程以后,你就会有信心去弄明白更复杂的东西,在之前的基础上进一步去消化、改进、学更多的东西。

另外,我个人觉得这个过程应该是由实际问题驱动的,而不是漫无目的看到什么东西流行了或者觉得很NB就去学。@庄生 的答案里提到绝大部分的网站都活不到或者永远也达不到10k用户在线的水平,那种情况下去看 high scalability 的东西有什么意义?学的东西用来解决或是改进实际遇到的问题,这样你的整个知识体系覆盖面和侧重点会比较合理。打个比方就是你的技能点有限,所以加点方案得有一个主题,到处乱点的话就废了。

编辑于 2014-01-07 2 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

phodal,待我代码编成,娶你为妻可好 @花仲马

阿凡虾君临sersh van 等人赞同

一年之后,终于可以真正的给这个问题一个答案。现有的高票的答案没有涉及到怎么成为全栈工程师。

献上我写的电子书《GitHub – phodal/growth-ebook: Growth: 全栈增长工程师指南。Growth: Learning Full Stack

发布于 2016-04-11 36 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

知乎用户,我对明天的恐惧 来自对今天的厌倦

oraant、知乎用户、老马识途 等人赞同 • 收录于 知乎周刊

Update:
我又合伙创业了。招php基础的开发者,入门基础到中级的都收,有意私信。坐标上海,汽车后市场的现代化连锁化互联网化改造。
http://www.zhuanchedao.com

如果你目前写的少基础还比较差,只要逻辑思维清晰,好学,问题不大,我会带你的。

另外说一下,开发者的概念。我们要的是开发者而不是程序员,我从入行2000年到转管理岗07年,之间的工作一直是开发者,尤其朗讯贝尔实验室,我们根本不管你会什么语言,我们默认你会所有的语言。就像我曾经接手一个perl的数据转换脚本的工作,迁移爱立信设备的用户数据到我们服务器上。就一周时间,我在班车上边啃骆驼书上班了边写,后面我就开始喜欢上写perl了。
我一直觉得,代码专家负责纯语言的底层事情,手术刀是用来做业务逻辑的,语言根本不是问题。
Update:
这个回答竟然收到的赞同比我其他所有回答都高,看来我还是转型灌技术鸡汤好了。

补充下,首先我觉得好的开发者,即使不是全栈,也要融会贯通多种技术。我从来不认为一个只专精一种技术的人有可能成为好的开发者,即使是 C,即使是汇编。(当然其实反过来看,那些大神们哪个不会搞点其他的?比如几个做服务器端开发的大神居然不懂服务器管理?)

然后从广度和深度的组合看,我认为好的开发者大概有两种类型:
1. 手术刀
2. 代码专家。
(来自《人月神话》)

手术刀是业务驱动的,最需要全栈的人;他们的核心价值在于:懂业务,技术全面,都能拿的起来,而且能选择最合适的技术。
代码专家是技术驱动的,即使不够全栈也可以用,但是技能树点的越多当然有好处。

而我提的创业逼出来的全栈,是因为,对于创业团队而言,手术刀更加重要,代码专家要依靠各种开源组织的贡献,或者临时聘请。

还有几位讲,创业的最大需求技能是整合资源的能力,找合适的人做事的能力。这个我认同,我只是说我自己,我承认我没能力忽悠一堆技术大牛策划大牛和我一起没工资的创业。我也忽悠不到前期种子投资的钱。
所以我说的,是说对于我,种子期,天使期,最重要的都是我自己作为手术刀,而不是资源整合者。

——————————————

全栈工程师不是为了工作本身,是为了方便实现自己的梦。
作为一个标准的全栈工程师来答下,全栈工程师不是培养出来的,是逼出来的~
不是公司逼的,是自己逼自己逼出来的~

因为我要创业,我经济压力又大没法辞职,我没法忽悠其他人一起免费干活……而且作为一个写了13年程序的老程序员(貌似知乎上比我老的程序不会很多了。。。。),本来工作语言就已经用过 Delphi, C++,Java,Perl,PHP,Lua,ObjectiveC,NodeJS,Tcl。这些都是工作中用的,尤其是创业那些年,遇到什么问题,我就要自己去探路,探出路来需要招聘对应的人再招聘~结果顺便把各种语言都学了一圈~

之前创业三年,一开始就我一个技术,所以运维几十台Linux 服务器我也顺便管了(我之前工作平时就工作在 Solaris 下面,差距不大),我老婆是前端工程师,所以 HTML,CSS,JS 我也一起学了。
所以多学一些语言对我来说真的不是件事情……

做过几年游戏制作人(做制作人我也同时每天 写代码….),策划,UI 都还有心得。

而且我这十三年怎么过的呢?别人朝九晚五,我每天工作到半夜2点,周末也很少休息。

谁能做到这样努力的工作(不是为了“资本家”,而是为了自己为自己工作),并且不是一直专注于一个岗位,我相信都能成为全栈工程师。

回到起点,全栈工程师不是为了工作本身,是为了方便实现自己的梦。

没错,如一些答主所说,你各方面都半吊子,我承认。
我之前有一段工作是写 C++和 Lua。Lua 部分还好,C++要遍历个 std::map 我到现在记不住,每次现搜索。作为一个 C++程序员我不够好,只能算是入门,或者说我一直是重视实现功能而非钻技术细节的人。我不关心技术上多牛,我关心功能的实现。
但我的价值根本不在于是一个 C++程序员,而是我可以从前端到后端到运维提供一揽子方案,视野广阔,任何点都可以选择最合适的技术,比如说最终选择 Lua 实现逻辑。
如果是创业,我可以自己一个人完成这个纯应用层面难度的开发的全部工作(当然,我的意思不是我一个人全做掉)。

如果不是创业,我的价值可能也就是个2w 多工资的架构师或者技术经理,这个价格远远对不起我这13年的付出。
一个真正的全栈工程师,目标只有一个:创业。

编辑于 2015-12-30 121 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 禁止转载

董飞,Learning without limit

鱼翅oraant咕唔 等人赞同

从全栈工程师到全栈员工,软件吞噬世界的步伐又进了一步。以下是 Chris Messina的文章

在我离开 Google快两年之后,我开始意识到职业环境正在发生的变化。传统的管理纪律正在渐渐瓦解。要想在职场上成功,需要的技能比以往更加多样而难以定义。如今,要想在职场上有所成就,你必须成为一个真正的博学者,成为一名全能全栈员工。

 

什么是全栈员工(full-stack employee)?

 

就像“全栈工程师(full-stack engineer)”和“全栈创业(full-stack startup)”一样,全栈员工(full-stack employee)拥有超强的综合技能,有着无法估量的价值。他们可以在快速演进、变革的技术浪潮中如鱼得水。他们可以在事实稀缺、观点横飞的过剩信息中凭直觉做决定。全栈员工能够熟练运用设计语言,明白使用卡通字体无异于犯罪行为,轻车熟路地嘲弄Keynote、Sketch抑或是Skitch。他们清楚用户界面(UI)和用户体验(UX)的区别。

 

他们可以和人讨论工程问题,能搞清楚算法、编程,也能理解前端的等级和后端的等级根本不是一回事。虽然他们可能并不亲自编程,但他们知道GitHub、StackOverflow都是做什么的。如果必要,他们会暴力破解一段“复制粘贴”的脚本,在CSV文件中进行基础分析。

 

他们是最新锐的社交应用的用户,深谙自我推广 之道。他们既可以在听众面前循循善诱地耐心讲故事,也可以在看了3分钟kickstarter视频后就能指出:亮明要点的时间不能长于一段Instagram、Vine短视频。注意力就是这个时代的硬通货。

 

全栈员工对新的想法、最棒的实现路径、提升生产力和与愉悦度的事情有着“贪得无厌”的胃口。他们对世界及其运转规则充满好奇心,想知道如何留下自己的印记。正是这一点使他们与过去时代的人们区分开来。开始一份工作时,全栈员工不会戴上“眼罩”埋头苦干,而是始终与行业的发展保持同步,因为他们清楚:变革往往出现在边缘地带,不能只盯着脚下的一亩三分地。

 

一名全栈员工是什么样子的?

 

有了24小时在线的移动设备,工作和非工作之间的界限正在模糊,既然工作正在变得碎片化,全栈员工要清楚地意识到自己的生活方式也要随之变化,比如使用整体式单色衣柜、功能明确的厨具。

成为全栈员工意味着要在两极之间来回切换。他们既要适应单兵作战,自给自足(比如自己安排时间,使用自己的设备工作),也要能和团队高效协作。过去,在大型团队中,往往需要有一名 IT经理来决定使用何种技术。如今,随着人们越来越多地使用个人设备工作,员工需要自己来搞定跨设备、跨平台沟通等问题。就拿企业协作工具来说。Slack可以整合所有东西,而微软却只对自己平台上的工具开放特权。如果你不能接入其他人的 API,你已经落后于时代了。全栈员工也是如此——他们至少应该熟知所有最新的应用,这样才不会落伍出局。

 

全栈员工必须要在自己的领域有深刻的洞见,同时也要机动地应对优先事项的转换,胜任不同的安排。组织的扁平化已经不是新现象,变革的动力可能来自顶层,也可能来自底层,有时候需要个体来决定事情的优先级。现场服务工程师(FSE,Field Service Engineer)应该遍布组织内部,却又不能分布的过于稀疏。即使不用监控每一位员工,他们也应该知道每一个人在做什么,保证他们在不熟悉的事情上不会手足无措。

 

要成为一名全栈员工不是一件容易的事,回报却也很丰厚。首先,他们可以更自由地按照自己的方式、在自己喜欢的地方(Teleport等服务可以帮助他们找到价廉的工作地点)、喜欢的时间工作。他们可以使用最新的工具,自给自足,自我管理。由于他们的工作涉及多领域、多学科之间的协作,会带来更宽广的视野,更丰富多彩的经历。在组织内部,他们的影响力也会不断上升,对组织的成败也将担负起更大的责任,团队的成功与否更加休戚相关。

 

这对雇主和管理者意味着什么?

 

对于企业和管理者来说,在人力市场上争夺全栈员工意味着很多准备工作。首先,你们做好准备来吸引、留住这些人才了吗?其次,你们团队的工作风格是否明确,你们对远程办公的支持如何?再次,你们允许的工作时间,支持员工自主安排工作计划吗?最后,你们会给他们留出健身、养生、陪伴家人的时间吗?

 

Google虽然充分考虑到了员工的健康、精神需求,但反过来也要求员工高度负责。 Google的员工可以以任何方式在任何时间、任何地点工作,只要能最大程度发挥创造力。但它同时希望员工能够随时参加一场临时安排的快速议事会。你的团队准备好了吗?

 

如果你还没有尝试过,不妨一试,来感受下”全栈员工“的工作环境是什么样子的。不同背景的人们在一个公共空间内彼此协作。他们一直在线,通过Slack等协作对话平台交流。大多数全员协作空间都是临时搭建,多种实体、虚拟的工具混合使用(白板、投影仪、会议室、视频会议设备等)。

对于职员和管理者来说,最需要培养的是”同理心“——员工和管理者都要对彼此有一种“同情的理解”,在彼此沟通、协作、要求时能够提出具体的需求。因为未来的工作需要高度的灵活性和自主性,但这并不意味着每个人给自己下达工作命令、工作指标。管理者的角色依然是必要的。

 

未来的工作是什么样子的?

 

说未来的职场将由全栈员工引领,无疑有些夸张,但这是一个显而易见的趋势。毫无疑问,工作的定义正在发生变化,员工的最大价值是应对不确定性,能够从海量的信息中提炼出有效的战略、战术。

 

而且,在工作机器人大规模“入侵”之前,我们只有10年的时间。他们正在取代体育新闻、驾驶、快递等重复性工作,人们要重新思考适合自己的角色。感知和综合的能力将是第一位的,而语言、辨析力和同感力在进行复杂、敏感的任务是都是必备技能。全栈员工将帮助我们向未来过渡,将成为新的混合经济中的关键角色。

编辑于 2015-04-16 5 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

auxten,面向工资编程

Bayes漂乎兮乎2222 等人赞同

高中的时候喜欢踢球,班上有一个特别厉害的前锋,用我们对手的话就是:“挡也挡不住,跑也跑不过,绊都绊不倒”。
嗯,我认为的一个“全栈工程师”,不是仅仅能从汇编写到JavaScript,从PHP写到Objective-C。更是从代码到PhotoShop,从产品设计到地推样样行,样样懂。
从小了说,给他安排个你自己都没想太明白的任务,他给你一个惊喜。
从大了说,就是既能当CTO,又能当COO,没有各种CXO,自己也能当CEO。

==============分割线==============
说一个我一个朋友@程一仕的故事吧,我是在大三认识他的。当时我是学校论坛的系统管理员,正在招人接替我毕业后在学校的工作。招了好久没有入得了我法眼的,这时我师傅说找到一个不错的。
说实话,第一次见面我对他没啥好印象,因为这货抽烟,完全不像是一个搞技术的。后来一起通宵修理服务器,研究技术,慢慢发现这货是个挺有意思的人。
以后的日子里我带着他一起写Python,写C,写JS。。。我发现他就是那种能不断给我惊喜的工程师。。。
我们工作室的传统是,每年暑假大家都在学校做封闭开发,当时我找了个去IBM实习的机会,想让他替我留校。最后一聊,这货没空,暑假要骑自行车去西藏。。。我才发现他还是个文艺青年(当时还不是那么贬义)
后来,他到了大三,去的支付宝实习,做运维开发。
再后来跟我一样去了百度,不到三年时间,就升到了T6。。。
有一天无意发现这货豆瓣竟然有上万的粉丝,一问才知道,有一天他闲得无聊,写了篇骂豆瓣的产品的帖子,由于字字鞭辟入里,连豆瓣的产品同学都直呼骂得好(抖m的既视感),不断邀请他来豆瓣做产品,直到他亮出T6的身份,对方才作罢。
此人还对人文历史政治总有很多见解。每每觉得无聊,第一个想到拉他出来吃吃饭,每次都有新收获。
几个月前,他跟我说他前几天被一伙人拉着去融资了,那伙人是想搞云存储的,发现他对分布式存储很有研究,就生生拉上他去壮大阵容。。。
我就问,他们怎么知道你对这个有研究呢?这货拿起手中的加冰可乐,33.3°仰望天花板:“因为MooseFS有部分代码是我写的”。
后来才知道,这货已经是百度分布式存储&缓存Topic的负责人了。。。。
就在我为他要在技术的道路上超越我而惶惶不可终日的时候,有一天,他问我有没有兴趣回成都。。。
原来,这段时间他拉着几个学弟搞了个无节操(约XX)的叫“谁有空”的APP(啧啧,这名字。。),拿了几百万的融资,开始出任CEO,走向人生巅峰了。。。
他也教会我一件事,遇到比自己厉害的学弟,不要嫉妒,不要尝试去压制,因为“有些鸟注定是不会被关在笼子里的,它们的每一片羽毛都闪耀着自由的光辉”。可能有一天你就要去他公司打工呢。

所以,过了这么久,我最喜欢的一个身份还是
曾经这个全栈工程师的“师傅”。

编辑于 2015-05-27 37 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

王征,互联网软件产品和开发,智能家居

李哲oraantRm2788 等人赞同

先来歪楼
为什么要成为所谓full stack engineer? 这个full stack engineer 的概念要理解清楚,我个人认为不是说要成为一个全能工程师。
先讲个自己的故事,我是从90年代初就开始做技术的,那时候没有互联网、没有开放代码、没有各种平台,资料都是去书店去买,一本书里面真正有用的就10来页,雷布斯当时写了本《未公开的dos中断》,当时奉为天人,后来知道是翻译的。做应用要懂dos,要懂各种bios的中断,要会用汇编,要会用c,要会做网线,要会装服务器(那时还是netware的天下),还要会手动查查病毒,读懂分区表,要自己写sql和sqlform去实现用户应用需求,甚至在DOS里面自己做字符的界面管理和鼠标控制,还要用汇编写中断去控制调制解调器和打印机,因为用户不愿意多买服务器(当时服务器好贵)写个简单的tcp/ip的堆栈….
这个够full stack吧,当时觉得自己真的属于上知天文下知地理,但是时至今日,这些本事有什么用呢?我觉得基本没用了,而且随着经历的丰富,反而觉得过去自己浑身的本事都是雕虫小技,不懂的东西好多好多,真正有用的是留下来对项目的经验和架构的体会。IT行业发展到现在,和社会发展一样,进入了社会分工明确的时代。每个方向深入下去都是大的不得了的东西:
1 你说你懂操作系统,能给linux提补丁吗?
2 你说你会运维,sed,awk,sar,snmp这些东西你都是活字典吗?
3 你说你会数据库,一条复杂sql能不看explain就能知道怎么运行的吗?看了explain能知道数据库的索引问题在哪里吗?知道怎么改吗?
4 你说你会网络,看过tcp/ip源码吗?知道wifi里wep,wpa aes的区别吗?知道前兆线和百兆线物理上的区别嘛?
5 你说你会web编程,看过http的rfc吗?看过webkit代码嘛?
6 你说你会大数据分析,概率论的几十种分布都懂嘛?每种分布适合那种情况知道吗?或然率公式会推导吗?
7 你说你会C/C++,你知道不同编译选项出来的优化代码的顺序吗?
。。。。。
真正要懂一个技术,不是仅仅看几本书写几段例程就行的,都得实际干几个能上线的项目才能知道这个技术的坑在哪里,适合什么,不适合什么,出了问题大概怎么回事。这件事从人的精力上来看我个人觉得是不可能的,而且做到了也没什么意义,最多就成为一把瑞士军刀:什么都能对付两下,真干专业的活那样都不好使。这对一个技术人员真的不是什么好事,因为工程师是要实际动手干活的。
我建议工程师的可以成为临栈工程师而不是一个全栈工程师,所谓临栈就是对于自己专项工作相邻的一些技术要有一定的了解,类似母语之外的外语。比如做后台的工程师,对数据库要有点了解,或者对tcp/ip有点了解。做前台的工程师,对http要有点了解,对图形学、色彩学有点了解。这样有助于在工作中和团队中的伙伴更好的交流,实在不行时候也能对付两下子救救急,或者证明不靠谱的伙伴做的确实猪头。但是,记住了,这不是你的饭碗,除非你打定主意改行。
当然,你要是想做那种光说不做的工程师、顾问呀什么的,那是另外一回事了。瑞士军刀也是有市场的。
歪楼结束,回到问题。
如何成为全栈工程师,我觉得是机遇,就和民国初期出了一堆学贯中西的人一样,不是他们多牛,而是时代造就:
小时候读私塾,国学童子功没问题。长大取消科举,留洋好找工作,不到20岁就去留洋,回来以后一看,我靠,学贯中西呀。
如果你每3年换一个方向,每个方向都扎的很深去做实际项目,还要复习过去的知识并跟上发展,你就可以成为一个full stack工程师。祝你成功!

发布于 2014-01-04 14 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

李楠,魅族营销中心招募设计师

张强dc zeng路人甲 等人赞同 • 收录于 知乎周刊

Full Stack Developer 在国内不被接受的一个主要原因是公司缺乏稳定的 T 线(技术职位晋升路线)。

太多有才华的人写了几年代码最后都去做了管理。而今天的网络相关技术,聪明又能持续学习的人,在三年之内可以在一个领域做到很高的水准。那么如果你做五年,十年甚至十五年呢?
我以为你成为 Full Stack Developer 是很自然的选择,而且可以跟随最顶尖的技术。这种人并不罕见,我认识的人中 @徐 乐乐 就是个例子。

相信 Full Stack Developer 的核心并非否定团队和协作,而是更多的体现在架构设计,快速原型和 TroubleShooting 方面。

随着今天的分层越来越清晰,平台和语言越来越有特点,更加全面的技术人员可以根据不同的语言搭建整个架构。
数据一致性要求高?那么使用事务管理久经考验的 Spring?还要考虑 scale ?那么放在 Oracle 里面做还是放在 Application Server 的 Transaction 管理里面做?简单请求的高并发?那么 Node.js 也许不错。 Web App 快速原型,那么 Rails 也许不错。邮件模板和自动发送? PHP 有现成的东西为什么不用?前端数据和交互复杂? 为什么不试试 emberjs ( PS :选前端框架对于架构人员来说简直像女人逛银座一样令人兴奋。甚至有人用几乎所有的框架写了同样的 Web App 来供他们试用: TodoMVC)?想绕过苹果的 App Store 的审查机制频繁发布?可以考虑在 iOS Apps 里面嵌入 HTML5 。

Full Stack Developer 在快速原型上也很有优势,因为省去了大量的管理和沟通成本。而且,这并非就意味着一定在代码质量或者测试上有缩水。
MVC 前后都可以用。一个写过 test_helper.rb 的人做前端,一定会搜索 javascript TTD 。同样,用过 javascipt lint 的人一定可以找到 stylecheck 。语言和平台会变化,聪明的方法和工具都是共通的。懂得基本的字体知识和排版审美难道和 CSS 不是天生一对?

TroubleShooting 方面 Full Stack Developer 同样优势巨大。
服务器压力太大未必需要通过后端解决,优化个 SQL 写个 Hint 是选择,而拿一部分数据和运算到前端也许是更加合理和低成本的选择。一个系统运行多年,最后遗留的问题很可能需要对业务和技术都有深入理解的人才能解决。

从以上内容可以看出, Full Stack Developer 并非杂而全 – Facebook 也不会雇庸手。他要求的是一种更加全面的深入。 一方面,他是技术人员不断学习的结果。另一方面,他也是对自己事业的一种责任:

技术人员的价值不是指派做了一半的 issue 给队友,而是更快更好的搞定事情

编辑于 2014-01-18 4 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

知乎用户,Rubyist/ 「诱人的Ruby」视频教程作者

陈泉伊野山椒鸡杂Lyle 等人赞同

最近招人,碰到有些人的简历里突出自己是是全栈工程师,用的是高亮「全栈」的字眼,生怕别人看不见,但是过来面试就不行了,基础知识都不懂。 感觉「全栈」害人不浅啊,搞的现在的技术人员相当浮躁。

所以我的建议是,不要在乎自己是不是全栈工程师,起码首先应该有一门深入的技术吧?由深到广,这是一个知识学习积累的过程,不是个Title。

发布于 2014-01-21 7 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

albert corleone,中央在下一盘很大的棋

段立鹏三水坤王林 等人赞同

受苏格拉底大神的启迪,我也来谈谈全栈。
禅师:成为全栈工程师,这个问题等于如何成为全才,有可能吗
码农:有可能,不过可能性比较低,因为达芬奇这类人毕竟是百年一遇的奇才。不过,因为我热爱这个行业,也有一定天赋,所以只做好软件全栈的话我想还是可能的
禅师:你玩过三国志这个游戏吗
码农:我还开发过
禅师:你喜欢什么样的武将,诸葛亮怎么样?
码农:不错,虽然他武力只有20,不过智力有100,不过游戏出战不是单打独斗,我可以给他搭配武力100,智力20的吕布,在战场上所向披靡
禅师:对于一个武力65,智力65的武将,你怎么处理
码农:砍头或让他下野,浪费军粮和黄金
禅师:但是他很全面啊,两项能力综合130分,比诸葛亮和吕布的综合分还要高
码农:话虽如此但他还是太平庸,无法独挡一面
禅师:赵云怎么样
码农:这是我最喜欢的武将之一,武力97,智力80,还有一个姜维也是,武力91,智力91,这是我心中全才的标准
禅师:首先,请把一个能力发展到90,如果你还有余力把另一个能力发展到90,再称呼自己全栈吧,否则你只是一个全面发展又全面平庸的废材。
码农:我明白了,我想facebook和google标榜的全栈,也肯定不是一个c++,java,ios,php,blabla都只会编写hello world的全栈。

发布于 2014-12-30 7 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

马宏菩,Hexcles / Programmer / (Wanna be) Hacker

候金成Ye Long汪大骆 等人赞同

UPDATE:这篇答案写在问题添加了“补充说明”说明之前,对于“Full Stack Developer”的定义是我根据自己的理解来写的,现在看来我(以及另外一些朋友)的理解和补充说明里引用的那一段是不同的。所以这个答案与题目描述并不相符,仅供参考,请大家注意。

 

简单来说我以下所说的 FSD 可能更像是“全才大牛”,对任何一个领域的了解都达到了该领域的专业人士的平均程度,更像是 Engineer × N ;而补充说明以及 庄生 (抱歉由于重名太多不知道该at哪一个)、@尤雨溪 等朋友所说的 FSD 则是各领域都有一定的了解(但不必达到该领域的专业人士的水平),足够独立完成一个项目的各个方面,强调了解新领域的勇气和能力(前提自然是有充分的兴趣)。

 

对于后一种 FSD ,我是十分赞同将其作为一个目标而奋斗的,理由和方法其他几位也说了很多的(我很赞同独自完成一个项目,途中了解些感兴趣/有用到的、但之前不了解的新领域,永远保持一颗好奇心,真的受益匪浅)。

 

而对于前一种 FSD (也是我下面即将讲到的),先声明我绝对不是也不想“装逼”,做以下几点说明:

  1. 对于各个领域来说,我所举的那些例子都是我在对该领域“简单了解”之后接触到的很有限的一些概念、技术,是一些例子而已。该领域的大部分专业人士所能够做到的,但绝不是说懂了这些就是专业人士,也更谈不上“炫耀”(我自己也不会啊,所以有错误肯定在所难免,还望指正)。
  2. 这种各领域都达到专业水平的全能大牛(至少在我看来如此)真的存在么?是的,我见过一些。他们的知识广度和深度让我由衷佩服。而他们中的很多其实在工作中也只是某个领域的专业工程师而已。
  3. 以我有限的知识水平和学习经历来看,能够做到这个程度需要付出极大的努力。而所谓的“给大家泼冷水”其实倒不如说是给自己泼冷水——我也一度觉得似乎能一个人搞定一个项目(就像下面即将谈到的那个“反例”一样)就是什么都行的 FSD 了,但遇到了他们之后,我真的意识到差距真的不是一般大。因而我才产生了疑问:在我短暂的大学生涯里,把这样的“全栈”当成奋斗目标真的可行、值得么?是不是先把一件事情做好更好呢?
  4. 最后,下面的回答是以“基于 Web ”的全栈“开发者”例的,所以有些朋友吐槽怎么不说 native app 、怎么不说 PS 、画画之类的……好吧,可能是我太年轻了。

 

====================

 

窃以为 full stack 不是那么简单的事情。当然,不同的地方可能有不同的标准,且听我慢慢道来。

 

既然大家都在以 Web 为例,那我也说 Web 好了。不过事实上 full stack 也有可能是其他方面的。

租个 VPS ,从装系统配环境开始,然后拿个 PHP Python Ruby Nodejs 什么的写个后端(少不了用一些框架吧, 后端框架多如牛毛,不说 PHP , Python 用个 django 、 Ruby 弄个 rails ,都挺方便吧),再给它撸个好看的页面(表现层多半也会用个 bootstrap 之类的,如果设计能力强一点的话就用一些更轻便的 helper frame 然后主要自己手写;逻辑控制层高端一点弄个 backbone 甚至 angular 之类搞个重 AJAX 、带前端模板及路由的新潮 HTML5 应用)。弄好以后上线,性能出问题了,看看日志 Google 一番调调参数,甚至多买一两台 VPS 来弄个负载均衡什么的。再要不,我们换成实体机,然后顺便玩玩网络和虚拟化什么的?

 

这样算不算 full stack 呢?也许在一些小公司(不过现在很多互联网创业公司水平都很高,所以也不能完全看大小)可以算是了。但在真正高水平的公司,以上的任何一点都达不到相应领域“工程师”的标准。

 

装个系统调调参数甚至弄个简单的负载均衡就叫运维了?你确定这不是网管?从几台机器到成百上千台机器是有一个量变到质变的(虽然经过这个质变以后,对于运维工程师来说两者就差别不大了),更别说弄个机房,搞个异地数据中心什么的。不说CCNP,CCNA总该有吧?再者,如果不说这么大(这么大了可能就涉及到“架构师”了),往小一点说,也有很多可深挖的:性能调优只是根据网上的文章随便调调参数?我见过不少牛逼的 Web 运维都读过 Apache 和 nginx 甚至部分 kernel 代码。没有自动化的监控程序和运维工具难道得死死守在机器前一遍遍地敲命令?合格的运维不但熟练使用已有的工具,还会根据需要自己写脚本、工具,因为现实情况太复杂通用工具不一定适合。很多公司里,运维还要兼顾安全问题,那么又是一个大坑。备份、冗余、风控个个门道都很深。

 

再说后端。会用 django 或者 RoR 写点东西很厉害?这些本来都是 RAD 框架,就是拿来快速开发、快速上手的,降低了门槛。但不同的程序员编程功底和代码质量还是会对最终成果造成很大影响。滥用 ORM 导致性能低下的例子我就不多说了。明明用了这样的框架还能写出带有 SQL 注入的程序也不少见,有的甚至还存在逻辑安全漏洞,至于什么加盐、防 CSRF 、 XSS 、 replay attack 、 session fix 、应用层 DoS 等等,多少人都是只听说过名字知道个大概然后用一个“厉害”的框架就以为一劳永逸?不知道原理也没看过框架代码,不知道框架到底是怎么实现的、是否有一定局限……再说软件工程方面。写几个测试数据就叫单元测试了?提前写测试数据再开发就成 TDD 了?三天两头重构就叫敏捷了? QA 、版本控制、协作、文档,都不是那么简单的事吧。

 

然后说前端。 HTML CSS 本来就是以方便表示内容和布局样式而开发的,只是“会写”应该不算什么难事吧?何况还有各种布局、排版库。 JS 灵活得很,有一点 C 语法基础的人学起来也很快,感谢 jQuery ,就算是不知道什么是闭包、不知道 JS 原型继承等等的三脚猫功夫也能实现大多数需求了。那么这样就是前端工程师?真是这样的话为何前几天知乎还有人问好的前端工程师为什么这么难找?能写出在所有浏览器表现一致并且方便维护的样式需要不少经验积累和勤奋实践,对浏览器渲染原理的了解也不可少。这还只是第一步,加上 JS 这玩意儿以后复杂度其实陡然上升了。在一个真正的大项目里,要保证各个组件正常运行不是一件容易的事, JS 本来就缺乏一些“软件工程”特性,导致大型代码组织不便,糟糕的 JS 程序很容易就污染了命名空间、搞错了作用域、漏掉了异常、弄错了类型、在异步和回调之中迷失……一不小心,就搞挂了页面,调起来还麻烦(就算现在有了 Chrome )。这还没算上性能、兼容性、安全等等问题呢。这也是为什么前端工具/技术特别多的原因之一。好的前端工程师不但紧跟技术前沿,还乐于知道这些牛逼的技术都是怎么实现的,然后灵活运用。

 

可能有人会说人的精力有限, full stack 有了广度自然要牺牲一下深度。那么我想说,再怎么牺牲深度,如果各领域都像上文举的反例那样,那肯定是不够的。那样可能只算是一个爱折腾的 geek 而不是工程师。我一个大二学生就能很好地完成开头提到的情景,并且还可以再深一点(比方网络方面有个差不多CCNA的水平和一些经验, PHP 自认为还是比较扎实的= =,对于安全、性能优化、分布式等方面也有一些了解……),但我也只觉得自己大多数时候还只是“折腾”而已,还有太多不足和有待提高之处。事实上,上述任何一个领域中的真正的工程师都肯定能凭借自己的学习能力和极客精神轻松地在业余时间完成开头所说的那个例子:看看 github 上那些有趣的个人开源项目和搭建起来的 demo 吧,大部分作者的本职应该都只是前端、后端或其他等等的其中之一。更不用说还有很多工程师的博客也是自己写(我是指写一个博客系统)、自己搭的。

 

full stack 一定是很难的。其实我自己作为一个互联网领域的学徒,也面临着这样的困惑:我发现自己什么都会一点、什么都不算精(按照某些标准大概已经算是一个“full stack”了吧)。到底以后应该怎样呢?是朝真正的 full stack 努力还是好好专精一个?看了不少招聘要求,现在就算是创业小团队也很少会直接招 full stack 的,所以觉得大概是先做好一个性价比高一些?不知道题主为何想要成为一个 full stack 呢,是因为已经是某一领域的工程师想要做做其他方面么(这个也会影响到“怎样成为”这个问题)?

 

不好意思,似乎跑题了。到最后自己还反倒提了个问。只是希望抛砖引玉,更踏实的回答多一些,不要太浮躁,把全栈说得太过轻易。

 

手机打字,如有差错还望指出,谢谢。

编辑于 2014-01-07 28 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

李运华,《面向对象葵花宝典》,写代码的架构师,…

Bayes、知乎用户、知乎用户 等人赞同

我感觉大家讨论的热火朝天,却有几个关键的问题都没有定义清楚
1)什么是全栈工程师 ?
有的人说是精通前端,精通后端,精通底端
——按照这个标准,地球上估计都找不出一个“全栈工程师”;
有的人说是懂前端,懂后端
——按照这个标准,我估计大部分目前做后端都可以称为“全栈工程师”,毕竟哪个写后台的一个页面都没写啊 ?大部分目前做app的也可以算“全栈工程师”,毕竟哪个做app的完全不知道后端怎么写啊? 但如果这就是“全栈工程师”了,未免有点夸张了;

所以,如何定义“全栈工程师”就是一个很难的问题。我个人倾向于所谓的“全栈工程师”,应该是“精某端,懂另外一端”,“精”自然就是精通,能够玩各种花样,熟悉各种机制;“懂”就是知道怎么一回事,知道能够完成什么工作,知道常见的功能如何完成。

2)什么情况下需要“全栈工程师” ?
有的人说以后全部都只要“全栈工程师”,我觉得这完全是胡扯!分工合作是人类社会进步的一个很大的推动力,难道软件业发展到今天,反而要反其道而行之了么 ?肯定不可能。术业有专攻,分工合作才能促进整体效率的提升。

所以,“全栈工程师”真正能够发挥很大作用的,一个应该是如很多人所说的“创业”,自己创业,刚开始没那么多人那么多钱,要尽快做出产品,那么”全栈“就是一个必备的条件了;另外一个是”做原型“,比如说有了新产品想法,不太可能一下子扑100个人上去搞,很多时候都是先投3~5个人先试试,这个时候”全栈“也是很有优势的。

但无论是创业,还是新产品,一旦上了规模,必然要开始分工合作,全栈可能就慢慢退出,或者转型为类似产品的角色,起到一个胶水的作用

3)你要成为”全栈工程师“么?
我觉得看个人兴趣,毕竟前端和后端或者底端差异很大,不是想成为就成为的。
前端偏向于艺术,后端偏向于工程,底端偏向于数学,一个人很难同时具备这三种截然不同的素质。比如说像我这种码农,完全没有审美观,颜色分辨不超过10种,让我做前端,做出来的只能说能用,远远达不到美观的要求。

但保持适当的兴趣还是有必要的,做不出美观的前端,能作出能用的,一开始也不错
所以我觉得每个人都可以去尝试一下。

发布于 2014-01-23 7 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

霏昀,弃机从文

知乎用户、知乎用户、叶子 等人赞同

Step 1:有足够的好奇心,相信人生应该广度优先而不是深度优先的——否则最适合的角色是「专家」。

Step 2:无论是多小的问题,都在理解的前提下追求尽可能正确的解决方案,拒绝以「基于 Copy-Paste」、「基于巧合」的方式处理问题。

Step 3:习得任何知识技能的时候,尽可能建立其跟已有知识的联系,以此不断拓展自己的知识图谱和结构。

重复 2-3

完成以上,剩下的工作就是给自己洗脑,让自己相信「以 full stack 为目标的人生,也必须当一个工程师」。

发布于 2014-01-08 1 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

匿名用户

微风dc zeng、知乎用户 等人赞同

  焊过电路板,调试过硬件
把弄过各种芯片硬件,写过几行fpga
研究过x86, arm, powerpc, mips各种芯片
写过几万行的linux驱动,网卡,pci等等都写过
精读过linux内核几个模块的代码,写过几个os级别模块
写了无数的linux后台程序,各种c, c++, python,
ruby, java, erlang, php都写过一些程序
用qt写过客户端,写过android app,写过ios app
写过windows的程序
做过网站,用过ROR,写过简单前端,js, css,html都了解一些
弄过机器学习,写过分类聚类,跑过svm。
做过通讯系统,做过强电逆变器。

看起来够fullstack了吧?很不幸告诉你,如果是这样,那么就会毁掉fullstack这个词。

做过强电逆变器,虽然控制电机可以跑起来,但是仅仅停留在跑起来,可以控制速度而已。但是波形还能烂一点不?尼玛电机噪音那个大,主流的逆变器论文看过木有?甚至我怀疑微积分都没学好。

做过机器学习,其实说白了,机器学习导论那本书你看完都可以做了,各种贝叶斯聚类分类决策树,高端点的LDA;但是这个仅仅是入门好不,底层的数学原理你足够了解了?能推导公式不?。让你做一个数字识别可以做出来,让你做一个来识别指纹呢?人脸识别呢?别告诉我说有库。

其它的等等很多都类似,别被fullstack这个词毁掉了你的一辈子, 要知道你做的东西都是别人的入门的时候做的

————————————————————————————

回到问题:如何称为一个fullstack工程师

我觉得不要怕dirty job就可以了,一个不熟悉的领域,去找一两本导论级别的书,建立一个基本的知识框架,然后就可以开始干活了;当然,你别指望做的多好;但是绝对不会差到哪里去,知识基本都是相通的;甚至是可以相互借鉴的。

当然,如果就拿起某门语言大概看一下语法就开始干活的,我觉得这个不能算。基本每个后端工程师都会写简单的html & css & js吧?

————————————————————————————-

关于发展问题:

和我一起毕业进入同一个公司(后面跳槽了)的同事,基本都是做深度路线的,很多都混的比我好(大公司核心部门核心岗位,或者在各大公司跳来跳去的);无论是搞ACM的,还是在某个领域有足够强的积累。

他们去面试基本都可以秒杀国内主流互联网公司;但是我呢?做深度不够,做广度他们不需要,而且各大公司都会考虑成熟的技术,所以给的offer相对就没那么有吸引力了(当然,毕业后就没找过工作了,具体也不知道,哈哈)。

相反创业公司如果要找合作伙伴,都需要建立一定的信任关系,有些不了解的,让你去你都不敢去;如果是熟悉的团队,那么你只能期待公司发展顺利早点上市,哈哈。

自己创业?目前不考虑,这个是一个团队的事情,哪怕两三个人,不是你一个人可以解决的。就算你在fullstack,你也不可能兼顾到所有的事情。

———————————————————————————————–

关于优势

考虑问题会全面很多,可以做系统级别的事情,不容易陷入拿着锤子满世界都是钉子的境界。
还有,中小创业公司很喜欢这种人。

————————————————————————————————-

对自身发张的考虑

1) 知识结构体系化,更扎实一些。

2) 技术在某个方向做深。

3) 切入某个应用领域,多了解领域知识,解决领域问题。

4) 千万别沦落为民科!!!!

编辑于 2014-01-16 30 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

卢林,follow your heart

潘秋颖rccoder孙越 等人赞同

个人觉得一开始就加大广度会让自己成为万精油,以至于对什么都了解不是很深入。更好的应该是学好计算机体系的核心知识,比如:操作系统,计算机网络,计算机组成原理,数据结构与基本算法思维这些,之后学习语言自身是比较简单的(当然学习第一门语言的时候可能会比较不好适应,习惯啦程序思维就好啦)。

有了扎实的基础过后,再深入学习一门后台语言,比如:C,C++,C#,Java这些主流的,面向过程和面向对象的各一门,专研自己喜欢的一门,这样后台的思维会培养起来。

接着学习前端的知识:HTML/CSS/JS/PHP这些吧,这样对浏览器可能会比较亲近一点。

最后选择自己技术的定位,深入专研,这样从深度上学习,才能够让自己的底气更足。当深入到一定程序,平时作为技术人员,热爱技术本身是必须的,所以自然就会接触到其它知识,比如:服务器shell,linux系统的使用,汇编,ruby,计算机网络技术等等,反正各种技术。这样不断的增加自己知识的广度。

最后总结:想要精通一门,必须手握10门技术。做一个知识的生态体系,深到广,广到深,顺序都是可以的。

编辑于 2014-02-07 4 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

宝玉

Worm Lazy一名机智的逗比Sharly Lee 等人赞同

  1. 首先思想上不能局限自己,别把自己框住觉得自己只是前端或后端,最好都别当自己只是个工程师
  2. 然后在成为全栈之前,先在某一栈做成专家。也就是先纵向做深
  3. 最后在某一栈专家后,就可以多横向发展了。

发布于 2015-05-07 添加评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

庄生,再见小男孩

oraant葉宗華叶星 等人赞同

名词定义:

  • FSD = full stack developer
  • 领域专家 = 和FSD相对,表示精通且只精通单一领域的大牛(暂时想不出更好的名字了)
  • 互联网公司 = 通过互联网产品本身的运行来产生现金流。例如百度,Dropbox
  • 外包公司 = 根据客户需求来订制产品然后整体卖给客户。项目本身的现金流和公司没有关系。例如东软。

首先,反对  @马宏菩 以及其他类似的泼冷水答案, FSD并不需要在每个领域都学到精通的程度,领域专家和FSD是压根儿就是拿来做不同的事情的。对于互联网公司来说,一个项目刚开始的时候叫几个FSD就可以非常快地写个poc甚至直接发布,流量上去以后再考虑安全或性能隐患,慢慢交予领域专家在后期调整优化。考虑到大部分项目的生命周期和用户数量,上面这句话的后半部分根本不会发生。引用一句话:the bigger problem isn’t scaling, it’s getting to the point where you have to scale。

不知道马同学所谓的 高水平公司都有哪些,可能都是外包公司吧。因为对于互联网公司来说,他提到的问题基本都属于premature optimisation。比如:

建一个VPS还非得精通到怎么搞机房和数据中心?以现在的硬件条件稍微高配一点的VPS跑一个在线人数10K的网站+DB问题也不大。国内有多少网站在线人数超过10K了?对于大部分的网站要CCNP/CCNA干嘛?

ORM性能差就要用native sql? 重写了一遍以后每个request平均能省下多少ms? 你的用户在乎这点时间吗?值得那么多重写和测试的¥¥么? 现在确实native sql确实又开始火了,但本质原因还是方便,根本不是性能问题。

还有很多,不一一反驳了。

下面回到楼主的问题,我认为成为FSD的想法非常好。因为成为FSD意味着具备了单人创业的能力。而且随着框架越来越强,互联网创业团队(包括intraprenuer)越来越小,FSD的前景其实远远超过领域专家。(这句话是个人观点,5年以后再回来看)

那么如何成为FSD呢?很简单也很难: 自己去做一个网站,并维护它。

发布于 2014-01-04 10 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

知乎用户,0x55AA

oraant、知乎用户、张强 等人赞同

突然就想起这个表格了http://static.icybear.net/[CN]Programmer%20competency%20matrix.htm
如果说要想全部达到level3,没有三四十年怕是不行吧,到时候还会有新的知识,永远达不到的。
所谓的全栈都是资本家们根据他们的业务自我衡量的,骚年们还是从基础好好打起吧。基础好,学习就快,所谓阳光下没有新鲜事嘛,学计算机你懂得的。

编辑于 2014-01-03 12 条评论 感谢 分享 收藏 • 没有帮助 • 举报 • 作者保留权利

大妖

南君先森牧云空、知乎用户 等人赞同

我是怎么跌跌撞撞的变成全栈工程师的

故事应该是从2008年夏天开始的,对于那一年映像最深的除了汶川地震,北京奥运之外,还有JAVA。

java算是我第一次接触的跨平台的东西吧,决定要去学java的原因很简单,因为那时候我还不满16岁的大脑貌似对正在被教授的嵌入式C语言不太感兴趣,也许是那个时候教学太死板,我始终觉得:

既然要教我嵌入式,怎么说也得先弄个机器人什么的给我长长眼吧?

如果当年阿凯老师的银色手提箱里取出的是一个micro robot,而不是一块电路板(开发版),也许我会一点不犹豫的坚持在嵌入式这条路上走下去。后来懂得多了,才发觉,当年那块电路板上搭载的居然是arm处理器。

要知道,那时候开放手机联盟大概也才刚刚成立,android估计才进入测试阶段,嵌入式设备上大多运行的还只是KED桌面的Linux和WinCE。

然而,在完成了一个阿凯老师布置的任务之后,我就再也没有接触过所谓的嵌入式开发了。

那个任务大概是这样的:首先是读取Linux的串口,串口的终端是一块GPS天线,我所做便是实时读取这个串口文件。然后用C语言的字符串处理截取出来我需要的信息:高度,速度,纬度,经度。最后,使用另外一个GPRS模块,把这些信息发布出去。

我的任务完成的还算圆满,交叉编译之后烧到ARM板上还运行的不错,不过,在整个系统中,我所做的只是移动终端的开发,当我看到指挥中心的客户端时,我的心情…是震惊的。

这他妈的简直是黑客帝国嘛,一个个终端被分散出去,地图上不停的闪着小点点。简直是电影里才出现的呢!16岁的我瞬间被震撼到了。阿凯老师只说了一句,这是用java做的。事实上,后来到了部队也做出来了类似的GIS地图,只是苦于当时只是个义务兵,没钱买开发芯片和各种模块,领导也不重视,那个地图也仅仅是个能够分层的地图而已…

总之,那个时候就鬼使神差的迷上了java,阿凯老师擅长的不是java,我又跟亮老师学习了,刚接触不久就被OOP这种思想给征服了,受够了面向过程中的各种数据结构,面向对象里原生态提供的数据结构,原生态类库,让我第一次觉得编程原来还可以这样。

和所有09年前学习java的人一样,最终目标都定在JAVA EE上,我也不例外,大概学了一年的JAVA之后,我的眼界也逐渐开阔,也能用struts hibernate这类的框架做出来一些web应用了。

不过,毕竟还是太年轻,不知道怎么想的,突然对web开发有了一用莫名的轻视,感觉无非就是数据库的CRUD罢了,那个时候,似乎也还没有前端的概念,我的一些作品的页面也是丑的一塌糊涂。渐渐的对web开发没了兴趣,于是做回了老专业——嵌入式。

那个时候对嵌入式和手机开发,没有明显的界限,或者,那个时候手机开发就可以称得上是嵌入式了,于是我开始了我的Android之旅。

勉强算的上是国内比较早的Android应用层开发者了吧。大概是半年时间吧,一个软件公司找到了我,那是个当时西北地区为数不多的做android开发的公司,苦于招不到人,居然找到了我这个17岁的孩子。去公司面谈了一次,项目经理还给我出了一道算法题,具体记不清了,大概就是一个数列的获取和排列。大概也就五六分钟时间,我就给了代码,本以为会对我的算法指指点点,谁知道那货关于算法和程序功能都没有说半个字,甚至都没验证,反而是对我的编码规范大大的赞赏了一番。那就下个礼拜上班吧。

可是这个时候,老妈突然通知我回家当兵。据算命的说,如果我不当兵,可能会有牢狱之灾。老妈可能是看我一回家就做在电脑面前,不玩游戏也不看电影更不和女孩子聊天,每天都在电脑上敲一些她看不懂的英文字母。老妈虽然不懂,但是新闻还是经常看的,结合算命先生的话,再看看我的状态,不由得怀疑,我是在搞网络犯罪。天天旁敲侧击的教育我,君子爱财,取之有道之类的。

于是,2010年冬天,我终究还是跌跌撞撞的闯进了部队,走的时候,不知道哪根筋不对,居然带了一本《LINUX 环境下C语言程序设计》。

就这样,一个人,一本书,到了部队。

在此之前,我已经具备了一些成为全栈工程师的资格:

  • java语言基础
  • web开发的必备知识
  • HTML/CSS
  • 移动开发
  • 一些MVC MTV之类的开发模式。

到了部队就是在新兵连里训练,各种不适应,因为之前天天在家写代码,以至于身体底子特别差,刚开始的时候跑上1000米都喘的不行,于是训练的过程就是各种挨骂的过程,再加上遇到了个比较严厉的班长,基本上每天能够不挨骂那便是我最舒服的日子了,过了一段时间以后,身体的每一个块骨头都被骨膜炎蹂躏一遍之后,感觉整个人都脱胎换骨了一样,也就慢慢适应了,这期间,每个周末会有一天休息,我就拿起那本《LINUX环境下C语言程序设计》看,没有电脑,就在日记本上写代码,在大脑里编译,不知道这算不算是对自己的一种锻炼。这样的日子过了四个月,我才下连,我的连队在一个山沟里,下连没多久就开始执勤,主要是看犯人。

每次站在哨位上看到监狱里的犯人,我都会问自己,我来这干嘛来了?

事实上,这个问题我至今也没搞清楚。好在没过几天,值班室通知我接电话,电话那头是司令部的哪个首长,之前也没见过,问我程序能搞不,我说没问题。于是我就被调到了司令部作训股,全称是作战训练股,那会儿也不懂那是个干啥的单位,总感觉听名字还是挺牛逼的。

到了机关,每天都会在办公室里上班,不过比较尴尬的是,办公室配给我的仅仅是一台赛扬的处理器的台式机,那叫一个慢呀,而且根本没有外网。我在部队内网找了大概整整一天,编程的工具居然只有c++ builder,好在之前这个东西用的还算不错,于是,就开始了我在部队的第一个程序,基本上就是一个简单的管理系统,我甚至都没找到数据库,用的ini文件来存储数据。不过,总算开始敲代码了,这期间慢慢的也熟悉了新的环境,每天的工作也是比较繁琐的,除了写程序之外,还要负责司令部领导的生活起居,办公室的卫生,几个库房的卫生,每天还要雷打不动的站四个小时岗。
按照领导们的说法,我对电脑比较精通,于是又交给了我一个新的任务,那就是,视频剪辑。也就是把部队每个月的执勤,训练的视频资料剪辑出来,方便做一些分析呀之类的东西。于是,我就开始学习会声会影。

之前对于视频剪辑,图片处理之类的软件也没怎么接触过,感觉就是点点鼠标什么的,接触之后才发现,这里面也有大学问。所以也慢慢认识到,隔行如隔山,我们不能用自己的浅薄轻易的否定了别人的价值。

关于视频剪辑,后来我在大概第三年的时候专门参加过一次培训,培训内容直接上升到了电影的制作,授课的都是一些北京电影学院的教授和几个比较有名的导演。也算是长了见识,回来之后就买了个MacBookPro,在自己的单位用单反相机拍了一部微电影,用finalcut剪辑了出来,后来在全部队还获了奖,不过这都不是我想要的了。

再说回来,大概在第二年的时候,部队开始搞信息化,我被调整到了通信股一起搞建设,这次建设让我有了一种鸟枪换炮的感觉,指挥中心里所有全新的笔记本电脑和所有的台式机随便我用,最重要的是,我们接了一条外网!这个时候,上面信息化部门也来了一个帮助我们搞建设的参谋,这参谋也算是科班出身,和我勉强算是有点共同语言吧,我们两个一合计,觉得还是要搞出点软件来,不过,这货的编程功底确实差的一塌糊涂,于是我变成了主力。我用了差不多两天的时间在在网上复习了一下java的struts2框架,然后开搞。

由于确实在这方面没什么实战经验,而且要做的系统还是比较庞大的,直接命名为一体化平台,总之部队里的人员,车辆,作战,执勤,战斗力评估之类的全部要做进去。第一个难题就在数据库设计上,我一个人差不多折腾了三天三夜,才把数据库这块做好。然后就是各种业务逻辑,在这里也不便透露,总之,整个项目边开发边测试,差不多一个人折腾了一个半月时间才能跑。功能都实现了,可是问题来了,我的前端确实丑的惨不忍睹,于是,上面来帮忙的参谋动手了。

他用了一个叫做authwear的东西,做了一个固定分辨率的界面,不得不说,他的界面做的确实很好,在看他工作的时候我也学会了不少PS上的东西,以至于现在我的PS已经能相当于一个职业美工的水平了。与此同时,我用了半个月的时间自学了3DMAX,把我们所有目标做成了3D模型,并且按照海康的sdk,把实时视频监控也做到了这个系统里。

但是,把我的页面直接嵌套进他的界面里,B/S构架的应用直接变成了C/S构架,直接牺牲了程序的灵活性,以至于,我又一次改了代码,直接提供接口给他来调用。最后,得到了一个看起来很酷,但是牺牲了部分功能和灵活性的平台。

当这个平台被放在了指挥中心的大屏幕上,我在控制室为指挥中心里的将军调出来各个执勤点的视频,每一个战士的资料,战斗小组信息,车辆和装备信息的时候,一种成就感油然而生。

我的军旅生涯本该就这样结束的,9月份的时候,我被家里人内推,去了一次百度西北区总部,面试我的是他们的人事总监,他对我还算满意,并且也谈好了,推荐我去北京的百度无线部。我也就做好了再过两个月退伍的准备。

可是,之后的一次任务改变的我,任务甚至还有友邻部队的战友为此付出了生命的代价,参与完任务之后,我鬼使神差的写了一份留队申请,结果,就变成了一个士官。

转了士官之后,我被调到了另外一支部队,专业是网络维护员,用外面的话来说就是站长。负责网站建设,主要是ASP和PHP,这个新的单位对软件系统这块儿也没有特别的需求,以至于我在这里还是比较清闲的,直接的好处是,我可以花大把大把的时间去学习一些新的东西。

我也正是在这个时候开始学习python的,大概一接触python之后,我便彻底舍弃了java,我喜欢新技术,而且python真的很对我脾气,于是开始用django来做一些项目。日子就这样波澜不惊的过着,差不多持续了三年吧,只要没有其他的任务,我也每天坚持写代码,在这期间同时也学了SWIFT IOS开发,新的CSS和HTML,bootstrap以及jquery,并且在第四年的时候,受到原部队的邀请,回去用WPF重新实现了之前的一体化平台。

这一次,我一个人,让界面更酷,效率更高,软件更实用。

到此为止,我不知不觉的已经进步了许多,回头看看。

  • 曾经的闭门造车,在完全没有网络的环境下开发,锻炼了我不择手段解决问题的毅力。
  • 使用一些以前不屑于使用,或者认为太简单的工具,并且去研究它,发现了技术和艺术结合之后的新世界。
  • 接触了许多硬件设备,维护部队的网络,发现了许多硬件和软件共同的地方。
  • 接触了身边形形色色的人,有初中毕业的战士,研究生技术干部,学院教授,发现他们的可爱与可敬,让我改掉了自己心浮气躁,眼高手低的毛病,学会了尊重与学习。

从浮躁不安,自以为给我足够的设备和材料我能把卫星放上天的十七岁的不知天高地厚的少年变成了宠辱不惊,愿意踏踏实实做一点事情的老兵。

我发现自己在一点一点的进步,这些进步很多时候自己不能直接感受到,但他确实存在,虽然我现在也并不是什么技术大牛,但我愿意,踏踏实实的去创造一些自己喜欢的东西。

一个人,一台电脑。

浑浑噩噩的,就这么成了一名全栈工程师。

 

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 怎样成为全栈工程师(Full Stack Developer)?

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址