《Web全栈工程师的自我修养》的原文摘录

  • 1.什么是全栈工程师 全栈工程师(Full-Stack Engineer),是一个在IT行业圈子里越来越热门的话题,无论是像Facebook这样的大型公司,还是刚刚起步的初创公司,都开始招募全栈工程师。据说,Facebook声称:“我们只招全栈工程师!” Facebook只招全栈工程师? “全栈”是一个外来词,对于中国读者而言,会觉得它很陌生。当我第一次对某人提到“全栈工程师”时,他一头雾水:“全栈?您是说全端工程师吗?” 其实,“全栈”翻译自英文full-stack,表示为了完成一个项目,所需要的一系列技术的集合。“栈”是指一系列子模块的集合。这些软件子模块或者组件组合在一起即可实现既定功能,不再需要其他模块。 全栈中的“栈”与计算机数据结构中的“堆栈”不是同一个概念,后者是指先入后出的串行数据结构。顺便说下,“队列”是指先入先出的串行数据结构。 IT行业之外的人其实很难理解Web开发是多么复杂的工程。人们一般认为,在计算机公司或者互联网公司工作的人,就应该能够解决与计算机相关的所有问题:电脑开不了机、应该买什么型号的手机、家里上不了网,等等。在他们眼中,计算机行业的从业者天生就带有“全栈光环”。 但是拿着这本书的您知道,要开发一个Web页面,工程师需要掌握的知识至少包括:服务器(比如Linux)、数据库(比如MySQL)、服务器端编程语言(比如PHP)、前端标记语言和脚本语言(HTML、CSS、JavaScript)等。这些技术中的每一个,都需要几年的学习和练习才能达到精通的程度。Web工程是一个如此大的专业类别,以至于IT公司为每一个环节都设置了专门的部门和岗位,来把每一个环节做好。 服务器、数据库、服务器端编程语言、HTML、CSS、JavaScript等组合在一起就是一个“栈”。这个“栈”是用来制作Web站点的,所以又叫Web栈(Web-Stack)。 如果要开发... (查看原文)
    獨孤求敗 2赞 2018-07-26 19:29:38
    —— 引自第1页
  • 我们知道,前端工程师就是负责页面浏览器端编程的人,后端工程师就是负责服务器端编程的人,那么什么才是全栈工程师呢? 对于全栈工程师,业界并没有严格的定义,并不是说一定要一种都不能少地具备哪几项知识才能叫做全栈工程师。我倾向于认为,应该从能力和思维方式两方面,来判定一个人是否是一个合格的全栈工程师。 国外是怎么定义全栈工程师的呢?在著名的问答网站Quora上有人提出了这个问题。一个获得了高票的回答是: 全栈工程师是指,一个能处理数据库、服务器、系统工程和客户端的所有工作的工程师。根据项目的不同,客户需要的可能是移动栈、Web栈,或者原生应用程序栈。 基本上,当客户需要一个全栈工程师的时候,客户需要的是一个全能的“大神”。简单来说,全栈工程师就是可以独立完成一个产品的人。当客户让他去做一些舒适区之外的工作时,他敢于迎难而上,并成功完成任务。 我们每一个工程师,进入到公司和企业工作之后,就会有一个职位头衔。我的职位头衔是“UI工程师”,其他人的头衔可能是“交互设计师”“PHP开发工程师”,等等。“全栈工程师”不需要头衔。他既有全面的技术能力,也渴望跨界工作的状态。 “全栈”好像是一个遥不可及的梦想,所以对于初次了解“全栈工程师”这个概念的工程师而言,有可能觉得“不可思议”或者抱着“这不可能”的排斥心理。但如果我们回头看看Web开发的历史,就知道“全栈”其实没那么难。 Web开发流程 有人曾开玩笑说,全栈工程师是资本家的阴谋,因为老板想雇一个人来做三个人的工作。 其实在2000年第一次互联网泡沫破裂之前,那时候的Web工程师也许符合“全栈工程师”的简单定义:一人包揽整个网站的构建。 那时的Web工程师们所面临的挑战比今天小很多,他们可能只是制作一些静态的页面,不会面对如今富交互的Web应用程序。那时网站可能包含数据库和一些HTML表单,但仅此而已,甚至只需要将一些静态页发布到服务器上... (查看原文)
    獨孤求敗 2赞 2018-07-26 19:29:38
    —— 引自第1页
  • 产品经理:产品经理其实是对一个产品负根本责任的管理者。他通常的工作包括制订产品规划、协调多方资源、把控产品方向和质量细节,等等。有时候,他会从头策划一个新的产品,而更多的时候,他是在优化已有产品的一个部分。总之,在流水线中,产品经理需要从策划跟进到发布,是一个非常重要的角色。 用户研究员:用户研究员的工作是研究用户行为,有时候他会从宏观的角度分析数据,有时候也从微观的角度分解用户场景,有时候会召集一些用户专门来访谈,或者观察用户对产品的使用情况。从输出品的角度来说,用户研究员一般输出用户研究报告来交付给产品经理和交互设计师,作为产品设计的目标参考。 交互设计师:交互设计师常被简称为“交互”。他与视觉设计师最大的区别是,交互设计师更多着眼于如何优化用户界面的信息分布和操作流程。交互设计师的输出品一般是描述用户与网站“交互”过程的流程图,以及描述页面信息结构的线框图。输出的线框图会交付给视觉设计师。 视觉设计师:在细分交互设计师和视觉设计师的大公司,视觉设计师根据交互设计师输出的线框图来做一些润色和设计,输出最终的产品视觉稿之后将视觉稿交付给前端工程师。在一些不细分交互设计师和视觉设计师的小公司,二者被统称为“设计师”,他们的职责就是负责整个用户界面的设计。 前端工程师:产品视觉稿在得到产品经理和交互设计师等多方确认之后,会交给前端工程师,由前端工程师制作页面,实现视觉稿以及交互功能。从头衔上的变化就可以看出,这时候才真正开始编码。前端工程师需要非常熟悉HTML、CSS和JavaScript,以及性能、语义化、多浏览器兼容、SEO、自动化工具等广泛的知识。 后台工程师:使用服务器编程语言,进行服务器功能的开发。在编程语言的选择上,很多公司都会出于团队已有成员的知识储备、程序员的供给量或者语言性能方面来进行选择。在这一方面,后台语言的选择是相对自由的一件事,不像前端工程师,为了页... (查看原文)
    獨孤求敗 2赞 2018-07-26 19:29:38
    —— 引自第1页
  • Web页面的生成和传递需要经历复杂的过程,因此容错能力就是首当其冲要考虑的问题。数据从位于深圳某个机房里的服务器传输到用户手机浏览器页面上进行运算和渲染,这个过程中的每个环节都可能出错,所以每一步都要做好容错处理。如果服务器出现错误,是否能在30秒内切换到备用机?后台数据异常时返回什么结果给前端,等等。 Web页面可以在无数种设备上显示。兼容性在此时成为了前端工程师需要考虑的一个重要问题。不同的用户在不同手机上浏览页面,显示的方法会有些许不同,甚至要考虑到如果浏览器不支持JavaScript,则需要给出特定的提示。 模块化的Web开发流程在很大程度上提高了服务的可靠性和可用性,让我们对每一个环节都能单独进行测试。这让大型Web开发真正变得可管理、可控制、质量可评估。 模块化的Web开发流程在很大程度上提高了服务的可靠性和可用性,让我们对每一个环节都能单独进行测试。这让大型Web开发真正变得可管理、可控制、质量可评估。 流水线带来的另外一个好处是,产品以团队的方式来运作和生产,公司不会过于依赖某一个工程师。团队即使失去某个工程师,其他人也可以接手他的工作,快速理解他负责的那一部分工作内容。对于有些经理来说,宁可雇用多个可管理的普通工程师,也不愿意聘请一个不可管理的天才工程师。 所以到现在,我们可以看到大部分互联网公司都会招聘很多专门的工程师,比如前端工程师、交互设计师,还有一些具体到实现语言的工程师(比如PHP程序员),这都是为了提高可靠性、可用性和可管理性。 刚才我们说到,一个基本的Web栈由服务器、数据库、服务器端编程语言、HTML、CSS、JavaScript构成;一个基本的App栈由服务器、数据库、服务器端编程语言、手机客户端编程语言等技术构成。您可能已经注意到,App栈跟Web栈在后台技术上几乎是完全相同的,只有在跟用户最接近的那一端采用了不同的技术——要么使用HT... (查看原文)
    獨孤求敗 2赞 2018-07-26 19:29:38
    —— 引自第1页
  • “各司其职”的弊端 虽然流水线式的职业划分和工程管理有很多优点,但是它就像一把双刃剑,在带来高可控性、可用性和可管理性的同时,也给工程师带来了一些困境。 工程师职责不清导致效率低 因为分工太细,所以在不同职业的交接处往往会有一些既不属于上游,也不属于下游的“灰色地带”。 这部分工作没有明确规定由谁去做,所以有时候时间会浪费在沟通上。员工会认为自己的头衔代表了自己的责任边界。比如,一个前端工程师可能会不加思考地实现视觉设计稿,因为他的岗位说明里规定了自己的职责,这其中不包括质疑设计稿,所以他忽视了自己的最终目标:让产品更好。 在一个开放平等的环境中,他实际上可以对影响可用性和性能的设计提出自己的想法。甚至如果他很熟悉这个项目的话,对设计的一致性和一些交互细节都可以说出自己的看法。 工程师缺乏主人感导致产品质量差 流水线工作流程对专精工程师的要求是,能很好地执行动作或者执行任务,而不需要对产品的目标有很好的理解。其实在工程师的初级阶段,执行任务的能力是必需的,因为他还没有能力把握产品的目标,而且也需要更多的练习来提升专业能力。但随着经验的积累,如果工程师还不能对产品整体有自己的理解和贡献,就很容易缺乏主人感,要么他会跳槽,要么产品本身缺乏亮点而导致失败。 工程师缺乏全局的视野影响个人成长 当工程师希望晋升到更高级的职位,如高级工程师或者管理岗位时,公司对他的大局观会有更高的要求,这就不仅仅是做好“分内”的工作就行的。 高级工程师需要有对设计的理解、对后台知识的了解,以及有跨团队推动项目的能力。长期研究专精的专业知识会让一个人视野变窄,变成“学术派”,而不是“实践派”。 更多角色导致项目效率低下 软件工程项目与工业中的标准流程化项目有一个很大的区别:标准流程化项目中每一个流程所接受的输入都是一样的,所需要的输出也都是完全相同的。 比如,一个汽车生产流水线,将“造汽车”这个任务分解... (查看原文)
    獨孤求敗 2赞 2018-07-26 19:29:38
    —— 引自第1页
  • 技术的发展 提到全栈技术,不得不提一个代表性的全栈框架——MEAN,它是MongoDB-Express-AngularJs-Node.js的缩写,是从数据库、服务器到前端页面的一个完整技术栈。 MongoDB是一个面向文档的、NoSQL类型的数据库。MongoDB颠覆了传统的基于表的数据存储方式,而采取了类似JSON的文档结构来存储数据,因而它在储存数据时可以更加灵活。 Express是一个Node.js框架,可以创建灵活的Web服务,比如单页面应用程序、多页面应用程序和混合型App。 AngularJS是一个开源的JavaScript框架,由Google和开源社区共同维护,它用来创建单页面应用程序。它的目标是使用model-view-controller模式来规范Web应用程序,让开发和测试富交互的单页面应用程序变得更加轻松。 Node.js是一个运行在服务器端的JavaScript运行环境,它的底层是基于Chrome的JavaScript运行环境——V8引擎。Node.js可以作为服务器端语言,用来创建快速、可扩展的应用程序。Node.js也可以在本机运行,做一些本地操作,比如加速本地开发流程,或者实现一键发布。 MEAN可以说是传统的LAMP方案的有力竞争者。因为从服务器端到页面端都采用同样的语言(JavaScript)和同样的架构模式(MVC),所以一个擅长JavaScript的工程师可以兼顾前后端的开发,并且前端模板代码和后台模板代码是可以复用的。 提供PaaS服务的平台越来越多 随着Web技术的发展和开源社区的积极努力,有很多公司提供便宜又方便的一条龙服务,可以解决独立开发者的大量麻烦。 比如Amazon提供的PaaS(Platform as a Service,平台即服务),就可以让创业公司的开发者省去架设和维护服务器的麻烦。 而GitHub在2012年获得了... (查看原文)
    獨孤求敗 2赞 2018-07-26 19:29:38
    —— 引自第1页
  • 全栈工程师的发展前景 纪录片“寿司之神”讲述了86岁的顶级寿司制作者小野二郎的故事。小野二郎心怀追求极致的匠人心态,终其一生,他都在握寿司,永远以最高标准要求自己跟学徒,观察客人的用餐状况,微调寿司,确保客人享受到究极美味。他的寿司店只有10个座位,上厕所都需要去店外的公共场所,但是这样一间小店获得了米其林三星的顶级评价,这意味着仅仅为了享受美食就专程来到这个国家都是值得的。我想小野二郎就是专精工程师的代表,他日复一日地磨练和提高自己的技艺,他不会想要上市或者在全国开满连锁店,也不去追逐更大的商业回报,只为了自己内心对完美的追求。 确实,全栈工程师不是唯一成功的方式,也不是所有工程师的最终归宿。无论您是渴求成就感,还是物质回报,都有很多路径可以达到。如果能在任何专精的职业中努力做到名列前茅,就能获得巨大的回报,就像顶级的寿司制作者小野二郎。 而我推崇的全栈工程师则是与专精工程师不同的另一条道路。全栈工程师除了在一个专精知识领域有深入研究之外,还以知识广博和解决问题能力强著称。所以我认为有志成为全栈工程师的学习者,要有这样几个觉悟。 一专多长 我跟一位行业专家讨论过全栈工程师的话题,他不是很赞同全栈工程师这个方向。他认为,工程师应该有专精的技能和目标,如果初学者贪图大而全,反而样样不精。我理解他的担心,如果一个工程师没有坚实的基础(比如专业理论知识,对常用设计模式的理解,或者特定职业的基础知识),那么了解的非本专业技能越多,越容易迷失。 所以我认为,全栈工程师首先要“一专多长”。 一专多长的意思是,工程师首先有一个专精的方向,在这个方向上足够精通之后(高级工程师级别),以此为突破点去学习更多的知识,增加自己的长处。如果还没有获得某个方向上足够深入的理解,就不要囫囵吞枣地去学习其他领域的知识。 (查看原文)
    獨孤求敗 2赞 2018-07-26 19:29:38
    —— 引自第1页
  • 有些知识需要时间的积累,并不是快速阅读就可以掌握的。“全栈工程师”这个名词可能会引起读者的误解。勿在浮沙筑高台,“全栈”是一个长期积累的过程,是专精型工程师在不断解决问题的过程中积累知识和经验所形成的能力,而不是一蹴而就的过程。 解决问题,而不是醉心技术 公司存在的意义就是解决问题,公司要解决用户的问题,而员工要解决公司的问题。 公司的问题可能是降低成本、扩大用户群、增加成交量、优化性能,等等。不同的问题优先级不一样,投入同样的时间,有的项目能为公司增加上百万的收入,而有的项目却只能增加几万。 互联网领域发展很快,问题的优先级永远都是在动态变化的,所以团队往往每半年或者三个月就要回顾一下当前形势,并制定新的工作计划。如果新计划不是您擅长的,怎么办?您应该马上开始学习新的技术,这就是我说的关注问题,而不是醉心技术。 无论个人的目标和兴趣是创业,还是单纯希望学习更多的技术,或者学习项目管理,全栈工程师都是一个不错的努力目标。而随之而来的收益也是非常大的。 在大公司,程序员逐渐由初级工程师成长为高级工程师后,在专业技术能力上不断接近极限,公司对工程师的要求也逐渐提高,特别是要求他扩大“影响力”。如何创造更大的影响力?影响力就是跨界解决问题。高级工程师可以选择往上下游去扩展自己的能力,并承担更多的责任,给公司带来更大的收益,也给自己带来更大的成长空间。 在创业公司做工程师会由于“形势所迫”不得不做很多不熟悉的工作,也就是“舒适区之外”的工作。虽然说小公司没钱聘请更多员工是最直接的外在因素,但是全栈工程师的成长并不是靠外力,而是自我驱动。程序员在小公司里主动去承担更多责任,自己跟公司都会获得相应的成长。假如公司上市扩张,自己能获得巨额的回报,即使公司失败,自己也能获得锻炼。 在自由职业市场,全栈工程师是最闪耀的明星。因为全栈工程师能独立创作产品,所以很容易被市场接纳。比如WordPr... (查看原文)
    獨孤求敗 2赞 2018-07-26 19:29:38
    —— 引自第1页
  • 您手中的这本书,是我在腾讯五年工作和学习的一些个人心得。 我从助理UI工程师,一步步晋升为高级UI工程师。 我从稚嫩的毕业生,变成了领导数十人的团队管理者。 我独立设计、制作、发布并开源了一个淘宝客CMS系统,并登顶GitHub热门关注排行榜首。 我作为发起人和主导者,组织数十人一起,翻译了《众妙之门:网站重新设计之道》和《响应式Web设计全流程解析》两本书。 我从零开始学习iOS开发,半年后独立制作并发布了一个iOS App,赚回了两年的开发者费用。 我从一个不敢对陌生人讲话的菜鸟,变成了在几百人面前分享的演讲者。 在这五年中,我最大的收获就是,领悟到做一个“全栈工程师”的快乐。能够做自己喜欢的事情,能够全心投入,能够边学边做,能够不追求完美,能够自我驱动,能够不被自己的头衔局限,能够看到不同技术的联系,能够被老板认可,能够被业界认可,能够相信自己…… 由于平时的工作和技术学习都比较跨界,所以在几年前全栈工程师的话题刚刚兴起的时候,我就进行了很多研究和思考。哪些技术对一个组织是真正有用的?全栈工程师的标准能力模型是怎样的?为什么有些人学习和晋升更快? 带着这样的思考,从2014年开始,我在豆瓣网发表专栏《谈谈全栈工程师》,发表了20篇连载专栏之后,得到了很多读者的欢迎,有五千多人订阅了我的专栏,并且在评论中跟我交流心得、表达感谢。我在开心的同时,也知道自己写得还不够好,文章还有很多语法错误和逻辑不清的地方。于是我打算投入更多心力出一本更好的作品。 经过半年的整理和撰写,这本书终于完成了。我把这本书定义为“轻松的技术杂文集”,希望读者可以以轻松一点的心态来读。书中一小部分内容来自豆瓣网专栏的扩充,一小部分来自我的博客(http://yuguo.us),一小部分来自这一年多来的梦境和灵感,一大部分想法来自阅读。 本书需要读者有基本的编程基础,能理解基本数据结构,了解一门编程语... (查看原文)
    獨孤求敗 2018-07-26 19:22:41
    —— 引自第1页
  • 简单说说我自己吧,我从小一直很喜欢读书,高中开始对计算机技术燃起狂热的兴趣。还记得高中时候我每个月必读的两本杂志是《大众软件》和《散文》,即使是最忙碌的高三也没有停止,毕业的时候杂志堆起来一米多高。 《大众软件》话题覆盖面很广,从游戏评测到硬件展览报导,从软件推荐到硬件速递,从手机评测到CPU架构介绍……也许从那个时候起,我就养成了对各种新技术来者不拒的习惯吧,这也是我下定决心报考IT专业的原因。 小学时候看过很多散文、唐诗宋词,这可能跟我父母都是文科生有关系;可我偏偏热爱并擅长理科,尤其数学和物理,长大后渐渐喜欢看编程类的书。在父母都是文科生的环境下长大,导致我可能有一种感性和理性相结合的特质。 从理性的角度来讲,我做事情非常在意逻辑、证据、数据和对比;从感性的角度讲,我喜欢把我理解的知识用图形化的方式储存在脑海中。还记得高中做数学题的时候,有些关于象限的题,既可以用方程和公式去计算,又可以用图形去推理,我就非常喜欢用图形去推理,看到一个方程式就能“脑补”出解的集合曲线。一个方程组的解就是象限图种几条曲线的交集,因为线是点的集合,所以交点就是既满足方程A也满足方程B的解,这对我来说是非常容易理解的事情。但副作用是,由于长期不开发自己的记忆能力,所以我很容易忘事,也经常记不住人的名字和脸。理科中,我的生物和化学成绩就不怎么好。 后来我在西安电子科技大学读软件工程专业,西安是一个很美的城市,在沙尘中有一种古老的沧桑感,整个城市也方方正正(处女座最爱),鞋子和衣服在阳台上放两天就会有一层灰。我很喜欢西安,我在西安度过了美好的四年。 从大学第一天起我就开始写博客,大学生时间比较多,期间折腾了很多域名和很多服务器,以及各种各样的博客程序,也丢过很多内容。在大学毕业那年,我开始启用http://yuguo.us/这个域名,并抛弃WordPress,开始用静态站点生成器Jekyll生成... (查看原文)
    獨孤求敗 2018-07-26 19:23:23
    —— 引自第2页
  • 不管您是否承认,除去极少数天赋异禀、骨骼惊奇的天才程序员,我们大部分人都是普通人,都需要遵循“一万小时定律”,才能从平凡变成超凡。 凡人要从一个小菜鸟成长为全栈工程师,只能从少到多、慢慢积累知识和经验。职业生涯的本质,就是在一个专业方向上积累信息。这里我推荐采用“先精后广,一专多长”的流程来学习。采用这种方式来学习,不光可以触类旁通、举一反三,还让我们学习得更快,而且循序渐进更符合一般人的职业生涯发展。 (查看原文)
    獨孤求敗 2018-07-26 19:57:47
    —— 引自第19页
  • 每一个糟糕的用户体验背后都蕴含着商机 (查看原文)
    就是江湖骗子 2018-08-04 18:07:32
    —— 引自第25页
  • 《 精益创业》 客户需求只有在实际使用中才能辩明,再多的前期调研也只能发现客户认为他们想要什么,而不是客户实际上想要什么。因此在不了解客户的真实需求下,只会多做多错。 (查看原文)
    Sean 2019-03-26 11:44:52
    —— 引自第65535页