软件工程快速入门(下)

9年薪70万的全栈需要什么技能?

什么是全栈开发人员?

全栈Web开发人员是一名技术专家,可以在任何应用程序的前端和后端工作。这个人应该熟悉3层模型的每一层。 3层由

  • 表示层(处理用户界面的主前端部分),
  • 业务逻辑层(任何处理数据验证的应用程序的后端部分)
  • 数据库层

全栈开发人员不一定掌握所有技术。但是,专业人员应该在客户端和服务器端工作,并了解开发应用程序时的情况。他或她应该对所有软件技术都有真正的兴趣。

Stackoverflow调查开发者档案
image

为什么需要全栈开发人员?

以下是您应聘请全栈开发专业人员的一些重要原因:

  • 全栈开发人员可以帮助您保持系统的每个部分顺利运行
  • 全栈开发人员可以为团队中的每个人提供帮助,并大大减少团队沟通的时间和技术成本
  • 如果一个人扮演不同的角色,它可以节省公司的人员,基础设施和运营成本

成为Full Stack Developer所需的技能组合

image

1)前端技术

全栈开发人员应该掌握HTML5,CSS3,JavaScript等基本前端技术。了解第三方库,如jQuery,LESS,Angular和React Js是可取的

2)开发语言

完整堆栈引擎应该知道至少一种服务器端编程语言,如Python、Java等

3)数据库和缓存

了解各种DBMS技术是全栈开发人员的另一个重要需求。 MySQL,MongoDB,Oracle,SQLServer被广泛用于此目的。了解缓存机制,如varnish,Memcached,Redis。

4)基本设计能力

为了成为一个成功的全栈开发人员,还建议了设计知识。此外,该人应该了解基本原型设计和UI / UX设计的原则。

5)服务器

希望接触处理Apache或nginx服务器。 Linux的良好背景有助于管理服务器。

6)版本控制系统(VCS)

版本控制系统允许完整堆栈开发人员跟踪代码库中所做的所有更改。 Git的知识帮助全栈开发人员了解如何获取最新代码,更新代码部分,在不破坏其他开发人员代码的情况下对其进行更改。

7)使用API​​(REST和SOAP):

了解Web服务或API对于完整堆栈开发人员也很重要。需要了解REST和SOAP服务的创建和使用。

8)其他:

  • 能够编写高质量的单元测试
  • 了解构建测试,记录和大规模部署的自动化流程
  • 安全问题的意识很重要,因为每个层都有自己的漏洞
  • 对算法和数据结构的了解也是专业全栈开发人员的基本需求
  • AI与大数据知识(Python、C/C++、Java)
  • 物联网与硬件知识
  • 985统招工科背景轻松助推年薪过百万

什么是软件栈?

软件堆栈是程序的集合,它们一起用于产生特定结果。它包括操作系统及其应用程序。例如,智能手机软件堆栈包括OS以及电话应用程序,Web浏览器和默认应用程序。

上面的完整堆栈工程师的技能组合列表可能令人生畏。您需要根据您的职业目标,项目和公司要求掌握软件堆栈。以下是常用软件堆栈的列表。

无论您选择哪种堆栈,您都会发现架构和设计模式在不同堆栈中的相似之处

LAMP栈

LAMP是一种广泛使用的Web服务栈模型。它的名字“LAMP”是四个开源组件的首字母缩写。

L = Linux:一个开源操作系统
A = Apache:广泛使用的Web服务器软件,现在Nginx更流行。
M = MySQL:流行的开源数据库
P = Python/PHP等:服务器端开源脚本语言,以Python为主流。

这些上面讨论的组件相互支持。许多流行的网站和Web应用程序在LAMP堆栈上运行,例如:Facebook。
MERN堆栈

MERN是基于JavaScript的技术的集合:

M = MongoDB:流行的NoSQL数据库
E = Express:轻便且可移植的Web程序框架
R = React:用于构建用户界面的javascript库
N = Node.js:服务器端javascript。

Full Stack Developer的职责

作为完整堆栈开发人员,您可能参与以下活动:

  • 将用户需求转换为新系统的整体架构和实现
  • 管理项目并与客户协调
  • 用Python / Java等语言编写后端代码
  • 编写优化的前端代码HTML和JavaScript
  • 理解,创建和调试与数据库相关的查询
  • 创建测试代码以根据客户要求验证应用程序。
  • 监控Web应用程序和基础架构的性能
  • 以快速对Web应用程序进行故障诊断

全栈开发人员薪酬

作为一个完整的堆栈开发者,您每年可能赚到112000美元。约年薪70万人民币

在这个英国,薪水范围是40,000英镑--70,000英镑

全栈的神话

神话:全栈开发人员自己编写所有类型的代码。
事实:他或她可能知道不同的技术,但不会编写每个代码。

神话:写下前端和后端代码。
一些完整的堆栈开发人员可能会编码整个网站,如果他们是一名自由职业者。但这并不是他们强制性地编写前端和后端代码。

作为一个完整的堆栈工程师,您可以360度查看不同的组件,从而使软件产品成功。由于这种意识,与后端或前端工程师相比,Full Stack Developer可以快速创建原型。他们对产品设计和架构的看法非常有针对性和有用。

误区:如果您在外包公司工作,您将无法成为全栈开发人员
这是一种心态,而不是一种立场。为了成为全栈开发人员,您需要正确的技术知识组合。

小结

  • 全栈Web开发人员是一名技术专家,可以在任何应用程序的前端和后端工作
  • 全栈开发人员可以帮助您保持系统的每个部分顺利运行
  • 成为全栈开发人员所需的技能集包括前端技术,开发语言,数据库,基本设计能力,服务器,使用API​​和版本控制系统
  • 软件堆栈是程序的集合,它们一起用于产生特定结果
  • LAMP代表Linux,Apache,MYSQL和Python/PHP
  • MERN是MongoDB,Express,React,Node.js的完整形式
  • MEAN代表MongoDB,Express,Angular.js和Node.js
  • 全栈开发人员将用户需求转换为新系统的整体架构和实现
  • FULL STACK DEVELOPER每年可赚取高达112,000美元
  • 关于Full stack开发人员的最大神话是他们自己编写所有类型的代码,这是不正确的

10函数式编程

什么是函数编程?

函数式编程(也称为FP Functional Programming)是一种通过创建纯函数来思考软件构造的方法。它避免了在面向对象编程中观察到的共享状态,可变数据的概念。

功能语言依赖于表达式和声明而不是执行语句。因此,与依赖于本地或全局状态的其他过程不同,FP中的值输出仅取决于传递给函数的参数。

函数式编程的特点

  • 函数式编程方法侧重于结果,而不是过程
  • 重点是要计算的内容
  • 数据是不可变的
  • 函数式编程将问题分解为'函数
  • 它建立在数学函数的概念之上,它使用条件表达式和递归来执行计算
  • 它不支持迭代,如循环语句和条件语句,如If-Else

函数式编程的历史

  • 功能编程的基础是Lambda Calculus。它是在20世纪30年代开发的,用于功能应用,定义和递归
  • LISP是第一个函数式编程语言。麦卡锡于1960年设计了它
  • 在70年代后期,爱丁堡大学的研究人员定义了ML(元语言)
  • 在80年代早期,Hope语言为递归和等式推理添加了代数数据类型
  • 在2004年的功能语言创新'Scala'。

函数式编程语言

任何FP语言的目标都是模仿数学函数。但是,函数编程的基本计算过程是不同的。

这里是一些最着名的函数式编程语言:

  • Haskell
  • Python
  • SML
  • Clojure
  • Scala
  • Erlang
  • Clean
  • F#
  • ML/OCaml Lisp / Scheme
  • XSLT
  • SQL
  • Mathematica

基本函数编程术语和概念

image

  • 不可变数据
    不可变数据意味着您应该能够轻松地创建数据结构,而不是修改已存在的数据结构。

  • 参考透明度
    功能程序应该像第一次那样执行操作。因此,您将了解在程序执行期间可能发生或可能不发生的事情及其副作用。在FP术语中,它被称为参照透明度。

  • 模块化
    模块化设计提高了生产力。小模块可以快速编码并且具有更大的重复使用机会,这肯定会导致程序的更快开发。除此之外,模块可以单独测试,这有助于您减少单元测试和调试所花费的时间。

  • 可维护性
    可维护性是一个简单的术语,这意味着FP编程更容易维护,因为您不必担心意外更改给定函数之外的任何内容。

First-class是一种定义,归因于对其使用没有限制的编程语言实体。因此,
First-class可以出现在程序的任何地方。

  • 闭包
    闭包是一个内部函数,即使在父函数执行后也可以访问父函数的变量。

  • 高阶函数
    高阶函数要么将其他函数作为参数,要么将它们作为结果返回。

高阶函数允许部分应用或currying。此技术一次将一个函数应用于其参数,因为每个应用程序返回一个接受下一个参数的新函数。

  • 纯函数
    “纯函数”是一个函数,其输入被声明为输入,并且不应隐藏它们。
Function Pure(a,b)
{
	return a+b;
}
  • 非纯函数
    纯函数作用于它们的参数。如果不返回任何东西,它效率不高。而且,它为给定的参数提供相同的输出
int z;
function notPure(){
	z = z+10;
}

函数组合

函数组合结合了两个或更多功能来制作新功能。

  • 共享共享状态
    共享状态是OOP编程中的重要概念。它正在向对象添加属性。例如,如果HardDisk是对象,则可以将存储容量和磁盘大小添加为属性。

副作用是在被调用函数之外发生的任何状态变化。任何FP编程语言的最大目标是通过将其与其他软件代码分离来最小化副作用。在FP编程中,从其他部分中消除副作用至关重要.

参考资料

函数式编程的好处

  • 允许您避免混淆代码中的问题和错误
  • 更容易测试和执行单元测试和调试FP代码。
  • 并行处理和并发
  • 热代码部署和容错
  • 使用更短的代码提供更好的模块化
  • 提高开发人员的生产力
  • 支持嵌套函数
  • 函数构造,如懒惰地图和列表等。
  • 允许有效使用Lambda Calculus

函数编程的局限性

  • 函数式编程范式并不容易,因此初学者很难理解
  • 在编码期间很难维护尽可能多的对象
  • 需要大量的嘲弄和广泛的环境设置
  • 重用非常复杂,需要不断重构
  • 对象可能无法正确表示问题

函数编程与面向对象编程

  • FP使用不可变数据。OOP使用Mutable数据。
  • FP遵循基于声明式编程的模型。OOP遵循命令式编程模型。
  • FP重点是:“你在做什么。在计划中。” OOP的重点是“你如何进行编程”。
  • FP支持并行编程。OOP不支持并行编程。
  • FP的函数没有副作用。OOP方法会产生很多副作用。
  • FP使用带递归的函数调用和函数调用执行流控制。OOP流控制过程使用循环和条件语句进行。
  • FP陈述的执行顺序不是很重要。OOP陈述的执行顺序很重要。
  • FP支持“数据抽象”和“行为抽象”。OOP支持“数据抽象”。

结论

  • 函数编程或FP是基于一些基本定义原则思考软件构建的一种方式
  • 功能编程概念侧重于结果,而不是过程
  • 任何FP语言的目标都是模仿数学函数
  • 一些最着名的函数式编程语言:1)Haskell 2)SM 3)Clojure 4)Scala 5)Erlang 6)Clean
  • “纯函数”是一个函数,其输入被声明为输入,并且不应隐藏它们。产出也被宣布为产出。
  • 不可变数据意味着您应该能够轻松地创建数据结构,而不是修改已存在的数据结构
  • 允许您避免混淆代码中的问题和错误
  • 还书代码并不容易,因此初学者很难理解
  • FP使用不可变数据,而OOP使用Mutable数据

11MVC

什么是MVC?

MVC是一种架构模式,它将应用程序分为三个主要逻辑组件

  • 模型 Model
  • 视图 View
  • 控制器 Controller

MVC将业务逻辑层和表示层相互分离。它传统上用于桌面图形用户界面(GUI)。如今,MVC架构已经成为设计Web应用程序和移动应用程序的流行。

MVC的历史

  • MVC架构于1979年由Trygve Reenskaug首次讨论
  • MVC模型于1987年首次在Smalltalk编程语言中引入。
  • 在1988年的一篇文章中,MVC首次被接受为一般概念
  • 最近,MVC模式被广泛用于现代Web应用程序中

MVC的特点

  • 高度可测试,可扩展和可插拔的框架
  • 提供对HTML和URL的完全控制
  • 利用Django、flask、ASP.NET,JSP,等提供的现有功能。
  • 清晰的逻辑分离:模型,视图,控制器。分离任务即:业务逻辑,UI逻辑和输入逻辑
  • SEO友好L的URL路由。强大的URL映射,用于可理解和可搜索的URL
  • 支持测试驱动开发(TDD)

MVC架构

MVC架构图

image

三个重要的MVC组件是:

  • 模型:它包括所有数据及其相关逻辑

  • 视图:向用户显示数据或处理用户交互

  • Controller:Model和View组件之间的接口
    让我们详细看看这个组件:

  • 视图
    View是表示数据表示的应用程序的一部分。

视图由从模型数据收集的数据创建。视图请求模型提供信息。

该视图还表示聊天,图表和表格中的数据。例如,任何客户视图都将包含所有UI组件,如文本框,下拉列表等。

  • Controller
    Controller是处理用户交互的应用程序的一部分。控制器解释来自用户的鼠标和键盘输入,通知模型和视图以适当地改变。

Controller向模型发送命令以更新其状态(例如,保存特定文档)。控制器还将命令发送到其关联视图以更改视图的显示(例如,滚动特定文档)。

  • 模型
    模型组件存储数据及其相关逻辑,表示在控制器组件或任何其他相关业务逻辑之间传输的数据。例如,Controller对象将从数据库中检索客户信息。它操纵数据并发送回数据库或使用它来呈现相同的数据。

它响应来自视图的请求,并响应来自控制器的指令以更新自身。它也是负责维护数据的模式的最低级别。

MVC示例

让我们看看日常生活中的模型视图控制器:

例1:点餐
  • 假设你去一家餐馆。你不会去厨房准备你可以在家里做的食物。相反,你只是去那里等待服务员来。
  • 现在服务员来找你,你只需要点食物。服务员不知道你是谁,你想要什么,他只是写下你的食物订单的细节。
  • 服务员到厨房。但她不准备你的食物。
  • 厨师准备你的食物。服务员会将您的订单连同您的餐桌号码一起交给他。
  • 厨师然后为你准备食物。他用成分来烹饪食物。我们假设您的订单是蔬菜三明治。然后,他需要从冰箱中取出的面包,西红柿,土豆,辣椒,洋葱,小块,奶酪等
  • 厨师最后把食物交给服务员。现在服务员的工作就是把这些食物搬到厨房外面。
  • 现在,服务员知道您订购的食品以及如何送达。

在这种情况下,

试图=你
服务员=控制器
库克=模型
冰箱=数据

例2:汽车驱动

汽车驱动机制是MVC模型的另一个例子。

每辆车都包含三个主要部分。
View =用户界面:(变速杆,面板,方向盘,制动器等)
控制器 - 机制(引擎)
模型 - 储存(汽油)
汽车从发动机运行从存储中获取燃料,但它仅使用提到的用户界面设备运行。

流行的MVC Web框架

这里是一些流行的MVC框架的列表。

MVC的优势:主要优势

这里是使用MVC架构的主要好处。

  • 易于代码维护,易于扩展和扩展
  • MVC模型组件可以与用户分开测试
  • 更容易支持新型客户
  • 可以并行地执行各种组件的开发。
  • 它通过将应用程序划分为三个单元来帮助您避免复杂性。型号,视图和控制器
  • 它仅使用Front Controller模式,通过单个控制器处理Web应用程序请求。
  • 为测试驱动开发提供最佳支持
  • 它适用于由大型Web设计人员和开发人员团队支持的Web应用程序。
  • 提供干净的关注点分离(SoC eparation of concerns)。
  • 搜索引擎优化(SEO Search Engine Optimization)友好。
  • 所有分类和对象彼此独立,以便您可以单独测试它们。
  • MVC允许将控制器上的相关动作逻辑分组在一起。

使用MVC的缺点

  • 难以阅读,更改,单元测试和重用此模型
  • 框架导航可能有时间复杂,因为它引入了新的抽象层,这要求用户适应MVC的分解标准。
  • 没有正式的验证支持
  • 增加了数据的复杂性和低效率
    -与现代用户界面结合有难度
    -需要多个程序员进行并行编程。
    -需要了解多种技术。
    -在Controller中维护大量代码

参数 |3层体系结构 |MVC体系结构
通信|这种类型的体系结构模式永远不会直接与数据层通信。|所有层使用三角形拓扑直接通信。
用法 |3层:广泛用于Web应用程序,其中客户端,数据层和中间件a在物理上独立的平台上运行。 |通常用于在单个图形工作站上运行的应用程序。

小结

  • MVC是一种架构模式,将应用程序分为1)模型,2)视图和3)控制器
  • 模型:它包括所有数据及其相关逻辑
  • 视图:向用户显示数据或处理用户交互
  • Controller:Model和View组件之间的接口
  • MVC架构于1979年由Trygve Reenskaug首次讨论
  • MVC是一个高度可测试,可扩展和可插入的框架
    一些流行的MVC框架是Django、flask、tornada、Rails,Zend Framework,CodeIgniter,Laravel,Fuel PHP等。
posted @ 2023-05-19 11:51  磁石空杯  阅读(46)  评论(0编辑  收藏  举报