全栈工程师是将来。由于技术门槛降低,致使一个web应用只需一两我的就能够。组织架构的变迁,也赋予每一个人的职责愈来愈多。javascript
技术的革新史,CGI到MVC到先后端分离的架构模式,不断下降技术的门槛。前端
组织架构,瀑布式开发到迭代式敏捷开发到精益开发,解决沟通,需求变动等问题。vue
大公司须要解决性能问题,须要专家式任务,小公司须要活下去,须要近乎全能的人,须要全栈工程师。全栈和专家都符合20/80法则,两种角色都须要20%的时间,达到某一领域80分水平。专家会继续花80%时间深刻这个技术领域,全栈会用这个80%时间探索新的四个领域。java
讲几件事,使用怎样的操做系统,如何选择工具,如何搭建响应操做系统上的环境,如何学习一门语言。node
工具只是辅助,好的装备确实能带来一些帮助,但事实是,你的演奏水平是由你本身的手指决定的。jquery
WebStorm仍是Sublime?IDE及Editor之战,主要精力应该放在学习的东西上,而不是工具。工具是为了效率 寻找工具的目的和寻找捷径是同样的,咱们须要更快更有效率地完成咱们的工做,换句话说,咱们为了获取更多的时间用于其余的事情。而这个工具的用途是要看具体的事物的。若是你负担得起你手上的工具的话,那么就尽量去了解他能干什么。那些是最实用的,如同咱们平常工做中使用的 Linux 同样,记忆过多的不实实用的东西,不如把他们记在笔记上实在。咱们只须要了解有那些功能,如何去用他。web
语言也是一种工具。咱们选择语言同样,选择合适的有时候会比选得顺手的来得重要。须要编译的时候习惯用 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. 以软件为中心的哲学 基础设施。 持续集成环境。 测试环境。 遗留系统与修改代码。