热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Growth:全栈增长工程师指南

开篇全栈工程师是未来。因为技术门槛下降,导致一个web应用只需一两个人就可以。组织架构的变迁,也赋予每个人的职责越来越多。技术的革新史,CGI到MVC到前后端分离的架构模式,不断降低技术的门槛
开篇

全栈工程师是未来。因为技术门槛下降,导致一个web应用只需一两个人就可以。组织架构的变迁,也赋予每个人的职责越来越多。

技术的革新史,CGI到MVC到前后端分离的架构模式,不断降低技术的门槛。

组织架构,瀑布式开发到迭代式敏捷开发到精益开发,解决沟通,需求变更等问题。

大公司需要解决性能问题,需要专家式任务,小公司需要活下去,需要近乎全能的人,需要全栈工程师。全栈和专家都符合20/80法则,两种角色都需要20%的时间,达到某一领域80分水平。专家会继续花80%时间深入这个技术领域,全栈会用这个80%时间探索新的四个领域。

基础知识篇

讲几件事,使用怎样的操作系统,如何选择工具,如何搭建响应操作系统上的环境,如何学习一门语言。

工具只是辅助,好的装备确实能带来一些帮助,但事实是,你的演奏水平是由你自己的手指决定的。

WebStorm还是Sublime?IDE及Editor之战,主要精力应该放在学习的东西上,而不是工具。工具是为了效率 寻找工具的目的和寻找捷径是一样的,我们需要更快更有效率地完成我们的工作,换句话说,我们为了获取更多的时间用于其他的事情。而这个工具的用途是要看具体的事物的。如果你负担得起你手上的工具的话,那么就尽可能去了解他能干什么。那些是最实用的,如同我们日常工作中使用的 Linux 一样,记忆过多的不实实用的东西,不如把他们记在笔记上实在。我们只需要了解有那些功能,如何去用他。

语言也是一种工具。我们选择语言一样,选择合适的有时候会比选得顺手的来得重要。需要编译的时候习惯用 IDE,不需要的时候用Editor。以前不知道 WebStorm 的时候,习惯用 DW 来格式化 HTML, Aptana 来格式化Javascript。

提高效率的工具。在提交效率的 N 种方法里:有一个很重要的方法是使用快捷键。如果是从头开始搭建环境的话, IDE 是最好的——编辑器还需要安装相应的插件。所以,这也就是为什么面试的时候会用编辑器的原因。

DEBUG工具。有些 IDE 自带了 Debug 工具,这点可能使得使用 IDE 更有优势。在简单的项目是,我们可能不需要这样的 Debug 工具。因为我们对我们的代码库比较熟悉,一个简单的问题一眼就知道是哪里的问题。而对于那些复杂的项目来说,可能就没有那么简单了。 Debug 工具——对于前端开发来说,我们可能使用 Chrome 的Dev Tools。但是对于后端来说,我们就需要使用别的工具,如Intellij Idea的 Debug 界面。

终端或命令提示符。在终端上也会有同样的工具——只是你觉得记住更多的命令。并且不同的
工具对于同一实现可能会不同的规范,而GUI 应用则会有一致的风格。不过,总的来说使用终端是一个很有益的习惯——从速度、便捷性。当你使用 Linux 服务器的时候,你不得不使用终端。

包管理。包管理不仅仅存在于操作系统中,还存在着语⾔的包管理工具。在操作系统中
安装软件,最方便的东西莫过于包管理了。我们经常会使用各式各样的包管理工具,来加速我们地日常使用。而不是 Google某个软件,然后下载,接着安装。

学习一门语言的艺术。学习一门新语言的步骤。

应用一门新的技术。学习⼀门新的技术的最好实践就是⽤这门技术对现有的系统⾏重写。

从浏览器到服务器。curl -v https://www.baidu.com。我们会发现解析 DNS 的时候,我们需要先本地 DNS 服务器查询。如果没有的话,再向根域名服务器查询——这个域名由哪个服务器来解析。直⾄最后拿到真正的服务器 IP 才能获取页⾯。当我们拿到相应的 HTML、 JS、 CSS 后,我们就开始渲染这个页⾯了。

从HTML到页面显示

HTML。超⽂本标记语⾔所以我们可以发现其中的关键词是标记——markup,也就是说 HTML 是⼀个markup, head 是⼀个 markup, body 也是⼀个 markup。

CSS。如果说 HTML 是建筑的框架, CSS 就是房⼦的装修。作为三剑客之⼀,它的主要⽬的在于可以让我们⽅便灵活地去控制 Web页⾯的外观表现。我们可以⽤它做出像淘宝⼀样复杂的界⾯,也可以像我们的书本⼀样简单。

JS。Javascript 现在已经⽆处不在了,也许你正打开的某个⽹站,他便可能是 node.js
+json+Javascript+mustache.js 完成的,完整的 Javascript 应该由下列三个部分组成:核⼼ (ECMAScript)——核⼼语⾔功能;⽂档对象模型 (DOM)——访问和操作⽹页内容的⽅法和接口;浏览器对象模型 (BOM)——与浏览器交互的⽅法和接口

前端与后台

主要讲解 后台语言与选型,前端框架与选型,前端一致化与后台服务化的趋势,前后端通讯。

后台语言选择。

JS。Javascript 似乎是⼀个性价⽐⾮常⾼的语⾔。只要是 Web 就会有前端,只要有前端就需要有 Javascript。与此同时 Node.js 在后台中的地位已经愈发重要了。这些应⽤都是基于浏览器来运⾏的,有:
• Electron + Node.js + Javascript 做桌⾯应⽤
• Ionic + Javascript 做移动应⽤
• Node.js + Javascript ⽹站前后台
• Javascript + Tessl 做硬件
So,这是⼀门很有应⽤前景的语⾔。
Python。
Java。Javascript 造出各种我想要的东西,但是通常我⽆法保证他们是优雅的实现。过去⼈们
在 Java 上花费了很多的时间,或在架构上,或在语⾔上,或在模式上。由于这些投⼊,都给了⼈们很多的启发。这些都可以⽤于新的语⾔,新的设计,毕竟没有什么技术是独⽴于旧的技术产⽣出来的。
PHP。不得不提及的是 WordPress 已经占领了 CMS 市场超过⼀半的份额,并且它也占领了全球⽹站的四分之⼀。
Go。性能应该是相当可以的
Ruby、 Scala,对于写代码的⼈来说,这是⾮常不错的语⾔。但是如果是团队合作时,就有待商榷。
MVC。⼈们在不断地反思这其中复杂的过程,整理了⼀些好的架构模式。
层次 职责
表现层 提供服务、显⽰信息、⽤户请求、 HTTP 请求和命令⾏调⽤。
领域层 逻辑处理,系统中真正的核⼼。
数据层 与数据库、消息系统、事物管理器和其他软件包通讯。
举例Spring,iBatis。
而在前后端解耦和的系统中,通常系统的架构模式就变成了MVP,或者MVVM。
后台即服务。BAAS backend as a service 是一种新型的云服务,旨在为移动和 Web 应 ⽤提供后端云服务,包括云端数据/⽂件存储、账户管理、消息推送、社交媒 体整合等。
产⽣这种服务的主要原因之⼀是因为移动应⽤的流⾏。流行的原因是移动应用的流行。
数据持久化。view层可以直接从model层取数,⽆遗也会暴露数据的模型。作为⼀ 个前端开发⼈员,我们对数据的操作有三种类型:
1. 数据库。由于Node.js在最近⼏年⾥发展迅猛,越来越多的开发者选择使⽤Node.js 作为后台语⾔。这与传统的Model 层并⽆多⼤不同,要么直接操作数据库,要么 间接操作数据库。即使在NoSQL数据库中也是如此。 2. 搜索引擎。对于以查询为主的领域来说,搜索引擎是⼀个更好的选择,⽽搜索引 擎又不好直接向View层暴露接⼜。这和招聘信息⼀样,都在暴露公司的技术栈。 3. RESTful。RESTful相当于是CRUD的衍⽣,只是传输介质变了。 4. LocalStorage。LocalStorage算是另外⼀种⽅式的CRUD。
说了这么多都是废话,他们都是可以⽤类CRUD的⽅式操作。
数据库,除了对文件的增删改查,我们需要操作用户的操作记录,如果这个也交给文件,那就麻烦了。SQL 是⾼级的⾮过程化编程语⾔,它允许⽤户在⾼层数据结构上⼯作。Node.js的ORM框架Sequelize。
搜索引擎。有相当多的⽹站采⽤了搜索引擎作为基础的存 储服务架构,⽽且他们并⾮⾃动从互联⽹上搜索信息。搜索引擎应该分成三个部分来组 成:1. 索引服务 2. 搜索服务 3. 索引数据。从架构上来说,使⽤搜索引擎的优点是:分离存储、查询部分。从开发上来说,它 可以让我们更关注于业务本⾝的价值,⽽不是去实现这样⼀个搜索逻辑。

前段框架选择。Augular, React,vue,jquery,backone+zepto+mustache

前台与后台交互。在我们把后台服务化后,前端跨平台化之前,我们还需要了解前台和后台之间怎么 通讯。从现有的⼀些技术上来看,Ajax和WebSocket是⽐较受欢迎的。
Ajax。返回的内容可以是多种格式,如 XML 和 JSON,但是从近年的趋势来看, XML 基本上已经很少看到了。这⾥我们以 JSON 为主。。JSON 采⽤完全独⽴于语⾔的⽂本格式,但是也 使⽤了类似于 C 语⾔家族的习惯(包括 C、C++、C#、Java、Javascript、 Perl、Python 等)。
JSON WEB tokens。JSONWebToken(JWT)是⼀种基于token的认证⽅案。
WebSocket。

 

编码。展示了一种编码过程。

web应用的构建系统。构建系统(buildsystem) 是⽤来从源代码⽣成⽤户可以使⽤的⽬标的⾃动化 ⼯具。⽬标可以包括库、可执⾏⽂件、或者⽣成的脚本等等。常⽤的构建⼯具包括GNUMake、GNUautotools、CMake、ApacheAnt(主要⽤于 JAVA)。此外,所有的集成开发环境(IDE)⽐如QtCreator、MicrosoftVisualStudio 和Eclipse都对他们⽀持的语⾔添加了⾃⼰的构建系统配置⼯具。通常IDE中的构建系 统只是基于控制台的构建系统(⽐如Autotool和CMake)的前端。 对⽐于Web应⽤开发来说,构建系统应该还包括应⽤打包(如Java中的Jar包,或 者⽤于部署的RPM包、源代码分析、测试覆盖率分析等等。
Gulp入门指南。

Tasking。讲了Tasking的流程,以tasking写书和 tasking 代码为例。

如何编写测试。写测试相⽐于写代码来说算是⼀种简单的事。多数时候,我们并不需要考虑复杂的 逻辑。我们只需要按照我们的代码逻辑,对代码的⾏为进⾏覆盖。从结构上来说,上⾯的⾦字塔可以分成三部分:1. 单元测试。2. 服务测试 3. UI测试
测试替身。stub 和 mock
测试驱动开发。红-绿-重构。,通常来说测试代码和功能 代码的⽐例可能是1:1,或者是2:1等等。
可读的代码。
代码重构。降到 Intellij Idea 重构。用IDE功能。
过度设计与设计模式。在软件迭代的过程中需求总是不断变化的,这就意味着如果我们对我们的代码 设计越早,那么在后期失败的概率也就越⼤。设计会伴随着需求⽽发⽣变化,在当时看 起来合理的设计,在后期就会因此⽽花费过多的代价。

上线。
隔离与运行环境。讲到了几层,真机,虚拟机,虚拟容器,servlet容器,虚拟环境,语言虚拟机,DSL。

数据分析
借助 Google analytics 收集用户的数据。新的想法在适当的时候就会变成一个产品,接着我们就
开始收集用户数据,然后循环。

构建-衡量-学习。我们根据我们的想法去创建我们的产品,在使用产品的过程中我们收集一些数据,再依据这些数据来改进我们的产品。想法实际上便是解决一个痛点的解决方案。我们并不缺少Idea,我们只是一直没有去记录。我们需要快速地构建出一个 MVP 产品, 也就是最小可用的产品。

产品-衡量。客户开发可以分成五个步骤:
• 形成假设。即我们觉得有用
• 找到可以交谈的潜在客户
• 提出恰当的问题
• 从答案中找到有⽤的信息
•弄明白现阶段需要构建什么样的产品来保持下一个学习循环。
我们其实就是在了解我们的客户是谁,以及他们的需求。并且在这
个过程中,我们可以为我们的开发确认出清晰的假设,我们可以一点点地打造出用户喜
爱的产品。

数据-学习。在分析数据之前,我们需要确定我们的增长模型,即:
• 黏着式增长引擎——其重点是让用户成为回头客,即让客户持续使用我们的产品。
这就意味着,我们在分析数据和学习的过程中,我们要侧重于关注流失率和使用频率。
• 病毒式增长引擎——其只做一件事:让名声传播出去。即通过用户间的不断传播来
扩散产品,我们需要考虑所谓的病毒式传播系数,还有用户之间的特定行为。
• 付费式增长引擎——赚钱是识别商业模式是否可持续的指标。
针对不同的增长引擎有不同的学习过程。

数据分析。简单地将这个过程分成四个步骤:
• 识别需求
• 收集数据
• 分析数据
• 展示数据
在这个跨越多个领域的过程中,回归敏捷是个不错的选择。1. 通才高于专长, 2.小团队大于大团队3.使用高阶工具和平台:云计算、分布式系统、 PaaS 4.持续、迭代地分享工作成果,即使这些工作未完成

用户数据分析: Google analytics。 不仅仅可以用于web 应用,也可以用于移动应用。

应用性能指数。任务响应事件定义为: 当用户操作(鼠标点击、输入、回车)开始到系统(客户机、
网络、服务器)响应从而用户能继续这个过程所经过的时间。这些等待时间定义了应应用程序的 “响应度”。该指数是基于应用程序响应度的三个方面:满意,容忍,挫折。

网络性能。针对网站性能优化。如以下。
减少HTTP请求。合并JS和CSS,CSS SPrites,拆分初始化负载,划分主域。
页面内部优化。HTML页面优化的目的就是尽快渲染出页面。常见策略: CSS放在顶部,将JS放在底部,压缩HTML。
减少下载量。也就是减少对服务器的请求。如使用CDN,使用外部 JS和CSS,缓存。
网络连接上的优化。主要是对域名到服务器进行优化。如DNS域名解析加速,减少DNS查找。

SEO。



持续交付。交付管道的建立和自动化是持续交付的基础。
持续集成系统。
持续集成流程。
持续交付。持续交付依赖于一系列的工具和实践,还有一系列与开发无关的技能:
1. 自动化
2. DevOps
3. 云基础设施
4. 以软件为中心的哲学

基础设施。
持续集成环境。
测试环境。

遗留系统与修改代码。

 


推荐阅读
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 基于Node.js、EJSExcel、Express与Vue.js构建Excel转JSON工具:首阶段——Vue.js项目初始化及开发环境配置
    在近期的一个H5游戏开发项目中,需要将Excel数据转换为JSON格式。经过调研,市面上缺乏合适的工具满足需求。因此,决定利用Node.js、EJSExcel、Express和Vue.js自行构建这一工具。本文主要介绍项目的第一阶段,即Vue.js项目的初始化及开发环境的配置过程,详细阐述了如何搭建高效的前端开发环境,确保后续功能开发的顺利进行。 ... [详细]
  • WebStorm 是一款强大的集成开发环境,支持多种现代 Web 开发技术,包括 Node.js、CoffeeScript、TypeScript、Dart、Jade、Sass、LESS 和 Stylus。它为开发者提供了丰富的功能和工具,帮助高效构建和调试复杂的 Node.js 应用程序。 ... [详细]
  • TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得
    TypeScript 实战分享:Google 工程师深度解析 TypeScript 开发经验与心得 ... [详细]
  • 深入探索Node.js新框架:Nest.js第六篇
    在本文中,我们将深入探讨Node.js的新框架Nest.js,并通过一个完整的示例来展示其强大功能。我们将使用多个装饰器创建一个基本控制器,该控制器提供了多种方法来访问和操作内部数据,涵盖了常见的CRUD操作。此外,我们还将详细介绍Nest.js的核心概念和最佳实践,帮助读者更好地理解和应用这一现代框架。 ... [详细]
  • tabnine 破解_最新在线免费激活2022.07.18
    (tabnine破解)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。Intell ... [详细]
  • 导读:今天编程笔记来给各位分享关于PHP的前端用什么工具的相关内容,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: ... [详细]
  • pycharm激活码 2021 3月最新注册码
    pycharm激活码 20213月最新注册码,https:www.yht7.comidea。详细ieda激活码不妨到云海天教程 ... [详细]
  • SpringBoot与缓存使用及原理(上),Go语言社区,Golang程序员人脉社 ... [详细]
  • Node.js 配置文件管理方法详解与最佳实践
    本文详细介绍了 Node.js 中配置文件管理的方法与最佳实践,涵盖常见的配置文件格式及其优缺点,并提供了多种实用技巧和示例代码,帮助开发者高效地管理和维护项目配置,具有较高的参考价值。 ... [详细]
  • K3Cloud 平台字符串解密技术详解与应用
    在 K3Cloud 平台中,配置文件内的敏感信息如密码会被加密处理。通过深入研究,我们发现可以通过 Kingdee.BOS.Api 提供的接口对这些加密字符串进行解密。本文详细介绍了这一解密技术的具体实现方法及其应用场景,为开发者提供了宝贵的参考和实践指导。此外,还探讨了该技术在数据安全和系统管理中的重要性,以及如何在实际项目中高效地应用这些技术,确保系统的稳定性和安全性。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本课程首先介绍了全栈开发的最后一公里为何重要,并详细探讨了搭建线上生产环境的关键步骤。随后,通过五个本地Node.js项目的实战演练,逐步展示了从快速构建纯静态简易站点到复杂应用的全过程,涵盖了环境配置、代码优化、性能调优等多方面内容。 ... [详细]
author-avatar
lin
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有