全栈工程师需要掌握哪些技术?【月诚故事】
标题: 《全栈工程师需要掌握哪些技术?【月诚故事】》
昨天是知乎成立的第十周年。十年里,知乎社区从 200 名种子用户的少数人小群体发展到了如今的数亿用户规模,而知乎上的问题数量和回答总数也分别超过了 4400 万和 2.4 亿,影响力已经广泛渗透到了国内日常生活的方方面面,记录和见证了中国乃至全世界十年间的发展变化。
昨天知乎发布“十年百问”榜单,综合了 2011 至 2020 年,知乎上最热门、最具价值、最富好奇心的100个优质问题。在这份知乎百问榜单上,排在 2014 年榜单第一位的高流量话题是《怎样成为全栈工程师(Full Stack Developer)?》。
这是一个有意思的话题。在英语里,有句老话叫做“Jack of all trades, but master of none.”而中文里也有一句意思差不多的老话叫做“样样通,样样松。”但在互联网的世界里,又确实有很多公司和个人都很喜欢招聘或者成为全栈工程师。
比如说,互联网上很容易就能找到芬兰赫尔辛基大学(University of Helsinki)免费推出的全栈公开课《深入浅出现代 Web 编程 全栈公开课 2020》。虽然学了这门课程人不在当地拿不到学分,但课程学习内容是完全一样的。因此这门免费的全栈公开课在网上广受欢迎。
再比如说,有知乎网友指出,“Facebook 工程师说 Facebook 只招 full stack engineer”。这位网友说,“Facebook 的众多海报当中,有一张写的是「任何一个 Facebook 的问题,都不是别人的问题」。有问题,你就需要去评估是否值得解决。如果值得解决,你就应该着手去解决,而不是假设公司内会有另外一个人比你更合适解决这个问题。这时候很可能你就需要去做你从来没有做过的事情,需要学习你原本可能完全不懂的技术。……如何创造更大的影响力,就是寻找当前杠杆效应最明显的问题来解决。有些问题你解决了的话,投入进去的时间每小时能换回来一千美元;有些问题你解决了的话,投入进去的时间每小时能换回来一百万美元。然而哪些问题更值得解决,这是动态的,往往还存在衰减效应。如果现在性能瓶颈在后端,你做了一个季度两个季度优化后,瓶颈就已经不在后端了,你再优化下去衰减效应就会越来越明显。”
这时就会存在一个非常矛盾的地方。如果从产品的业务逻辑角度出发,需要不断寻找当前杠杆效应最明显的问题来解决,结果“样样通,样样松;但要是只专研精通一门技术,只深入优化一小块领域的瓶颈问题,又会面临“衰减效应”。结果变成精通一小块技术,却错过当前杠杆效应最明显的问题。
“衰减效应”很容易理解。就拿英语单词作为例子,早在 1982 年,研究人员 Francis 和 Kucera 就发表研究结果称,“2000 个最常用单词覆盖了 79.7% 的英文文本内容,最常用的 3000 单词及变形的覆盖率达到 84%,4000 最常用单词及变形的覆盖率为 86.7%,当词汇量增加到 5000 时,覆盖率为 88.6%。”换句话说,如果你的目标只是阅读原版的计算机编程教材,大学英语四级水平的四千多个单词词汇量已经差不多够用了。
而读过《刻意练习》这本书的人会知道,如果想要在某一小块专业领域成为世界顶级的大师,需要经过大量时间的刻意练习。第一,是时间上的保证,需要遵循「一万小时定律」,大约可以理解成平均需要投入 10000 小时左右;第二,则是需要避免简单的重复。譬如有些父母炒菜做饭一辈子,经历了一辈子的简单重复,最终厨艺水平从未真正提高过,参见《为什么有些中老年人做了半辈子的饭菜,做的东西还是难吃?烹饪技能更多靠天赋还是可以靠练习提升呢?》
因此,每一样技能的维持都需要一定的训练强度,还不能只是简单的重复。俗话说“一天不练手脚慢,两天不练丢一半,三天不练门外汉,四天不练瞪眼看。”说的就是这个道理。所以有知乎网友指出,“「全栈」害人不浅啊,搞的现在的技术人员相当浮躁。最近招人,碰到有些人的简历里突出自己是是全栈工程师,用的是高亮「全栈」的字眼,生怕别人看不见,但是过来面试就不行了,基础知识都不懂。”
问题是,每个人的时间和精力又都是有限的,如果不能保持足够的时间投入和训练强度,理想中的全栈工程师就变成了“做啥啥不会”的三脚猫。
那么在时间和精力都非常有限的情况下,真正的全栈工程师应当掌握哪些技术呢?
真正的全栈工程师其实是那些拥有明确目标的 *创业者* 。“全栈”这两个字本身就决定了全栈工程师需要一个人站在全局角度思考问题,结果注定了就是“样样通,样样松”。创业者需要关注的问题很多,最重要的是找出“当前杠杆效应最明显的问题”,也就是找出瓶颈问题。然后再根据具体的瓶颈问题,选择自己最顺手的技术、工具或者合作伙伴去解决问题。全栈工程师所有技术的选择,一定是围绕着如何克服瓶颈问题及如何实现目标来进行削减和取舍的。
这个时候,全栈工程师最重要的能力,反而是“做减法”的能力。懂得如何界定边界,聚焦有限的资源,同时减去和目标无关的低回报任务;懂得如何在众多杂乱的问题中,找出瓶颈问题,并找出最高效的解决方法。
比如说做产品早期,使用哪种编程语言并不是最重要的,关键是要能够快速做出产品原型 Demo,然后拿去市场上验证,获取用户反馈。根据自媒体文章《Python 有多强大?豆瓣、知乎、新浪都是用它开发的》描述,豆瓣、知乎、新浪早期都是用 Python 快速开发出来的。一般来说,大部分产品都不会达到豆瓣、知乎、新浪这些产品的用户规模,所以早期开发产品 Demo 完全可以使用 Python 快速上手。以后如果真的规模发展起来了,自然会有更多的资源去聘请专职的技术专家去优化产品。
再比如说,家里的小件物品坏了需要维修。如果只看维修的成本,肯定要比再买一个便宜些。但是值不值得这么去做,完全取决于你的时间成本。如果维修的物品原本价值就不足百元,而自己动手维修需要至少一个小时,同时你的平均小时收入已经超出了百元。这时候该如何取舍就很显而易见了。
做饭也是如此。很多人做了半辈子的饭菜,不是不愿意提升做饭水平,而是因为单位小时内的工资收入水平有限,所有愿意选择花点时间去节省金钱。而 996 加班文化下的互联网大厂更愿意提供丰盛的晚餐甚至是自助餐,因为可以用好吃的饭菜换来更多的加班时间。
至此我们已经知道,对于全栈工程师来说,没有谁可以真的全栈,只不过是在众多的问题和选项之中去做取舍。
人总是从某一点开始突破,然后慢慢变得出类拔萃的。全栈工程师或者说“创业者”也不例外,所需掌握的技术始终是由业务需求和产品目标所决定的。只有清晰地知道自己的兴趣点在哪里,目标是什么,最终才有可能把有限的时间和精力聚焦在和目标相关的问题上。对于从零起步的全栈工程师来说,除了开发软件产品应当精通一门编程语言,以及宣传推广产品需要学会自媒体写作之外,其他领域技能则完全可以遵循“60 分哲学”去做减法。
微博头条文章作者:<strong>【月诚故事】</strong>
微信公众号:<strong>【月诚故事】</strong>自媒体运营小白的成长日记
联系邮箱:messages (à) intorich (.) com
<img src="/img/wechat.png" alt="【月诚故事】自媒体运营小白的成长日记" />