热门标签 | 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在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 整理于2020年10月下旬:总结过去,展望未来Itistoughtodayandtomorrowwillbetougher.butthedayaftertomorrowisbeau ... [详细]
  • 利用爬虫技术抓取数据,结合Fiddler与Postman在Chrome中的应用优化提交流程
    本文探讨了如何利用爬虫技术抓取目标网站的数据,并结合Fiddler和Postman工具在Chrome浏览器中的应用,优化数据提交流程。通过详细的抓包分析和模拟提交,有效提升了数据抓取的效率和准确性。此外,文章还介绍了如何使用这些工具进行调试和优化,为开发者提供了实用的操作指南。 ... [详细]
  • WebStorm 是一款强大的集成开发环境,支持多种现代 Web 开发技术,包括 Node.js、CoffeeScript、TypeScript、Dart、Jade、Sass、LESS 和 Stylus。它为开发者提供了丰富的功能和工具,帮助高效构建和调试复杂的 Node.js 应用程序。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • 使用 jQuery 实现页面加载进度条
    页面加载进度条是提升用户体验的重要工具,通过在页面头部显示一个加载状态,并在页面完全加载后隐藏,可以有效减少用户的等待焦虑。本文将详细介绍如何使用 jQuery 实现这一功能。 ... [详细]
  • 尽管Medium是一个优秀的发布平台,但在其之外拥有自己的博客仍然非常重要。这不仅提供了另一个与读者互动的渠道,还能确保您的内容安全。本文将介绍如何使用Bash脚本将Medium文章迁移到个人博客。 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • 利用 JavaScript 和 Node.js 验证时间的有效性
    本文探讨了如何使用 JavaScript 和 Node.js 验证时间的有效性。通过编写一个 `isTime` 函数,我们可以确保输入的时间格式正确且有效。该函数利用正则表达式匹配时间字符串,检查其是否符合常见的日期时间格式,如 `YYYY-MM-DD` 或 `HH:MM:SS`。此外,我们还介绍了如何处理不同时间格式的转换和验证,以提高代码的健壮性和可靠性。 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
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社区 版权所有