軟件工程快速入門(下)
9年薪70萬的全棧需要什么技能?
什么是全棧開發(fā)人員?
全棧Web開發(fā)人員是一名技術(shù)專家,可以在任何應(yīng)用程序的前端和后端工作。這個人應(yīng)該熟悉3層模型的每一層。 3層由
- 表示層(處理用戶界面的主前端部分),
- 業(yè)務(wù)邏輯層(任何處理數(shù)據(jù)驗證的應(yīng)用程序的后端部分)
- 數(shù)據(jù)庫層
全棧開發(fā)人員不一定掌握所有技術(shù)。但是,專業(yè)人員應(yīng)該在客戶端和服務(wù)器端工作,并了解開發(fā)應(yīng)用程序時的情況。他或她應(yīng)該對所有軟件技術(shù)都有真正的興趣。
Stackoverflow調(diào)查開發(fā)者檔案

為什么需要全棧開發(fā)人員?
以下是您應(yīng)聘請全棧開發(fā)專業(yè)人員的一些重要原因:
- 全棧開發(fā)人員可以幫助您保持系統(tǒng)的每個部分順利運行
- 全棧開發(fā)人員可以為團(tuán)隊中的每個人提供幫助,并大大減少團(tuán)隊溝通的時間和技術(shù)成本
- 如果一個人扮演不同的角色,它可以節(jié)省公司的人員,基礎(chǔ)設(shè)施和運營成本
成為Full Stack Developer所需的技能組合

1)前端技術(shù)
全棧開發(fā)人員應(yīng)該掌握HTML5,CSS3,JavaScript等基本前端技術(shù)。了解第三方庫,如jQuery,LESS,Angular和React Js是可取的
2)開發(fā)語言
完整堆棧引擎應(yīng)該知道至少一種服務(wù)器端編程語言,如Python、Java等
3)數(shù)據(jù)庫和緩存
了解各種DBMS技術(shù)是全棧開發(fā)人員的另一個重要需求。 MySQL,MongoDB,Oracle,SQLServer被廣泛用于此目的。了解緩存機(jī)制,如varnish,Memcached,Redis。
4)基本設(shè)計能力
為了成為一個成功的全棧開發(fā)人員,還建議了設(shè)計知識。此外,該人應(yīng)該了解基本原型設(shè)計和UI / UX設(shè)計的原則。
5)服務(wù)器
希望接觸處理Apache或nginx服務(wù)器。 Linux的良好背景有助于管理服務(wù)器。
6)版本控制系統(tǒng)(VCS)
版本控制系統(tǒng)允許完整堆棧開發(fā)人員跟蹤代碼庫中所做的所有更改。 Git的知識幫助全棧開發(fā)人員了解如何獲取最新代碼,更新代碼部分,在不破壞其他開發(fā)人員代碼的情況下對其進(jìn)行更改。
7)使用API??(REST和SOAP):
了解Web服務(wù)或API對于完整堆棧開發(fā)人員也很重要。需要了解REST和SOAP服務(wù)的創(chuàng)建和使用。
8)其他:
- 能夠編寫高質(zhì)量的單元測試
- 了解構(gòu)建測試,記錄和大規(guī)模部署的自動化流程
- 安全問題的意識很重要,因為每個層都有自己的漏洞
- 對算法和數(shù)據(jù)結(jié)構(gòu)的了解也是專業(yè)全棧開發(fā)人員的基本需求
- AI與大數(shù)據(jù)知識(Python、C/C++、Java)
- 物聯(lián)網(wǎng)與硬件知識
- 985統(tǒng)招工科背景輕松助推年薪過百萬
什么是軟件棧?
軟件堆棧是程序的集合,它們一起用于產(chǎn)生特定結(jié)果。它包括操作系統(tǒng)及其應(yīng)用程序。例如,智能手機(jī)軟件堆棧包括OS以及電話應(yīng)用程序,Web瀏覽器和默認(rèn)應(yīng)用程序。
上面的完整堆棧工程師的技能組合列表可能令人生畏。您需要根據(jù)您的職業(yè)目標(biāo),項目和公司要求掌握軟件堆棧。以下是常用軟件堆棧的列表。
無論您選擇哪種堆棧,您都會發(fā)現(xiàn)架構(gòu)和設(shè)計模式在不同堆棧中的相似之處
LAMP棧
LAMP是一種廣泛使用的Web服務(wù)棧模型。它的名字“LAMP”是四個開源組件的首字母縮寫。
L = Linux:一個開源操作系統(tǒng)
A = Apache:廣泛使用的Web服務(wù)器軟件,現(xiàn)在Nginx更流行。
M = MySQL:流行的開源數(shù)據(jù)庫
P = Python/PHP等:服務(wù)器端開源腳本語言,以Python為主流。
這些上面討論的組件相互支持。許多流行的網(wǎng)站和Web應(yīng)用程序在LAMP堆棧上運行,例如:Facebook。
MERN堆棧
MERN是基于JavaScript的技術(shù)的集合:
M = MongoDB:流行的NoSQL數(shù)據(jù)庫
E = Express:輕便且可移植的Web程序框架
R = React:用于構(gòu)建用戶界面的javascript庫
N = Node.js:服務(wù)器端javascript。
Full Stack Developer的職責(zé)
作為完整堆棧開發(fā)人員,您可能參與以下活動:
- 將用戶需求轉(zhuǎn)換為新系統(tǒng)的整體架構(gòu)和實現(xiàn)
- 管理項目并與客戶協(xié)調(diào)
- 用Python / Java等語言編寫后端代碼
- 編寫優(yōu)化的前端代碼HTML和JavaScript
- 理解,創(chuàng)建和調(diào)試與數(shù)據(jù)庫相關(guān)的查詢
- 創(chuàng)建測試代碼以根據(jù)客戶要求驗證應(yīng)用程序。
- 監(jiān)控Web應(yīng)用程序和基礎(chǔ)架構(gòu)的性能
- 以快速對Web應(yīng)用程序進(jìn)行故障診斷
全棧開發(fā)人員薪酬
作為一個完整的堆棧開發(fā)者,您每年可能賺到112000美元。約年薪70萬人民幣
在這個英國,薪水范圍是40,000英鎊--70,000英鎊
全棧的神話
神話:全棧開發(fā)人員自己編寫所有類型的代碼。
事實:他或她可能知道不同的技術(shù),但不會編寫每個代碼。
神話:寫下前端和后端代碼。
一些完整的堆棧開發(fā)人員可能會編碼整個網(wǎng)站,如果他們是一名自由職業(yè)者。但這并不是他們強(qiáng)制性地編寫前端和后端代碼。
作為一個完整的堆棧工程師,您可以360度查看不同的組件,從而使軟件產(chǎn)品成功。由于這種意識,與后端或前端工程師相比,F(xiàn)ull Stack Developer可以快速創(chuàng)建原型。他們對產(chǎn)品設(shè)計和架構(gòu)的看法非常有針對性和有用。
誤區(qū):如果您在外包公司工作,您將無法成為全棧開發(fā)人員
這是一種心態(tài),而不是一種立場。為了成為全棧開發(fā)人員,您需要正確的技術(shù)知識組合。
小結(jié)
- 全棧Web開發(fā)人員是一名技術(shù)專家,可以在任何應(yīng)用程序的前端和后端工作
- 全棧開發(fā)人員可以幫助您保持系統(tǒng)的每個部分順利運行
- 成為全棧開發(fā)人員所需的技能集包括前端技術(shù),開發(fā)語言,數(shù)據(jù)庫,基本設(shè)計能力,服務(wù)器,使用API??和版本控制系統(tǒng)
- 軟件堆棧是程序的集合,它們一起用于產(chǎn)生特定結(jié)果
- LAMP代表Linux,Apache,MYSQL和Python/PHP
- MERN是MongoDB,Express,React,Node.js的完整形式
- MEAN代表MongoDB,Express,Angular.js和Node.js
- 全棧開發(fā)人員將用戶需求轉(zhuǎn)換為新系統(tǒng)的整體架構(gòu)和實現(xiàn)
- FULL STACK DEVELOPER每年可賺取高達(dá)112,000美元
- 關(guān)于Full stack開發(fā)人員的最大神話是他們自己編寫所有類型的代碼,這是不正確的
10函數(shù)式編程
什么是函數(shù)編程?
函數(shù)式編程(也稱為FP Functional Programming)是一種通過創(chuàng)建純函數(shù)來思考軟件構(gòu)造的方法。它避免了在面向?qū)ο缶幊讨杏^察到的共享狀態(tài),可變數(shù)據(jù)的概念。
功能語言依賴于表達(dá)式和聲明而不是執(zhí)行語句。因此,與依賴于本地或全局狀態(tài)的其他過程不同,F(xiàn)P中的值輸出僅取決于傳遞給函數(shù)的參數(shù)。
函數(shù)式編程的特點
- 函數(shù)式編程方法側(cè)重于結(jié)果,而不是過程
- 重點是要計算的內(nèi)容
- 數(shù)據(jù)是不可變的
- 函數(shù)式編程將問題分解為'函數(shù)
- 它建立在數(shù)學(xué)函數(shù)的概念之上,它使用條件表達(dá)式和遞歸來執(zhí)行計算
- 它不支持迭代,如循環(huán)語句和條件語句,如If-Else
函數(shù)式編程的歷史
- 功能編程的基礎(chǔ)是Lambda Calculus。它是在20世紀(jì)30年代開發(fā)的,用于功能應(yīng)用,定義和遞歸
- LISP是第一個函數(shù)式編程語言。麥卡錫于1960年設(shè)計了它
- 在70年代后期,愛丁堡大學(xué)的研究人員定義了ML(元語言)
- 在80年代早期,Hope語言為遞歸和等式推理添加了代數(shù)數(shù)據(jù)類型
- 在2004年的功能語言創(chuàng)新'Scala'。
函數(shù)式編程語言
任何FP語言的目標(biāo)都是模仿數(shù)學(xué)函數(shù)。但是,函數(shù)編程的基本計算過程是不同的。
這里是一些最著名的函數(shù)式編程語言:
- Haskell
- Python
- SML
- Clojure
- Scala
- Erlang
- Clean
- F#
- ML/OCaml Lisp / Scheme
- XSLT
- SQL
- Mathematica
基本函數(shù)編程術(shù)語和概念

-
不可變數(shù)據(jù)
不可變數(shù)據(jù)意味著您應(yīng)該能夠輕松地創(chuàng)建數(shù)據(jù)結(jié)構(gòu),而不是修改已存在的數(shù)據(jù)結(jié)構(gòu)。 -
參考透明度
功能程序應(yīng)該像第一次那樣執(zhí)行操作。因此,您將了解在程序執(zhí)行期間可能發(fā)生或可能不發(fā)生的事情及其副作用。在FP術(shù)語中,它被稱為參照透明度。 -
模塊化
模塊化設(shè)計提高了生產(chǎn)力。小模塊可以快速編碼并且具有更大的重復(fù)使用機(jī)會,這肯定會導(dǎo)致程序的更快開發(fā)。除此之外,模塊可以單獨測試,這有助于您減少單元測試和調(diào)試所花費的時間。 -
可維護(hù)性
可維護(hù)性是一個簡單的術(shù)語,這意味著FP編程更容易維護(hù),因為您不必?fù)?dān)心意外更改給定函數(shù)之外的任何內(nèi)容。
First-class是一種定義,歸因于對其使用沒有限制的編程語言實體。因此,
First-class可以出現(xiàn)在程序的任何地方。
-
閉包
閉包是一個內(nèi)部函數(shù),即使在父函數(shù)執(zhí)行后也可以訪問父函數(shù)的變量。 -
高階函數(shù)
高階函數(shù)要么將其他函數(shù)作為參數(shù),要么將它們作為結(jié)果返回。
高階函數(shù)允許部分應(yīng)用或currying。此技術(shù)一次將一個函數(shù)應(yīng)用于其參數(shù),因為每個應(yīng)用程序返回一個接受下一個參數(shù)的新函數(shù)。
- 純函數(shù)
“純函數(shù)”是一個函數(shù),其輸入被聲明為輸入,并且不應(yīng)隱藏它們。
Function Pure(a,b)
{
return a+b;
}
- 非純函數(shù)
純函數(shù)作用于它們的參數(shù)。如果不返回任何東西,它效率不高。而且,它為給定的參數(shù)提供相同的輸出
int z;
function notPure(){
z = z+10;
}
函數(shù)組合
函數(shù)組合結(jié)合了兩個或更多功能來制作新功能。
- 共享共享狀態(tài)
共享狀態(tài)是OOP編程中的重要概念。它正在向?qū)ο筇砑訉傩浴@纾绻鸋ardDisk是對象,則可以將存儲容量和磁盤大小添加為屬性。
副作用是在被調(diào)用函數(shù)之外發(fā)生的任何狀態(tài)變化。任何FP編程語言的最大目標(biāo)是通過將其與其他軟件代碼分離來最小化副作用。在FP編程中,從其他部分中消除副作用至關(guān)重要.
參考資料
- 軟件測試精品書籍文檔下載持續(xù)更新 https://github.com/china-testing/python-testing-examples 請點贊,謝謝!
- 本文涉及的python測試開發(fā)庫 謝謝點贊! https://github.com/china-testing/python_cn_resouce
- python精品書籍下載 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
函數(shù)式編程的好處
- 允許您避免混淆代碼中的問題和錯誤
- 更容易測試和執(zhí)行單元測試和調(diào)試FP代碼。
- 并行處理和并發(fā)
- 熱代碼部署和容錯
- 使用更短的代碼提供更好的模塊化
- 提高開發(fā)人員的生產(chǎn)力
- 支持嵌套函數(shù)
- 函數(shù)構(gòu)造,如懶惰地圖和列表等。
- 允許有效使用Lambda Calculus
函數(shù)編程的局限性
- 函數(shù)式編程范式并不容易,因此初學(xué)者很難理解
- 在編碼期間很難維護(hù)盡可能多的對象
- 需要大量的嘲弄和廣泛的環(huán)境設(shè)置
- 重用非常復(fù)雜,需要不斷重構(gòu)
- 對象可能無法正確表示問題
結(jié)論
- 函數(shù)編程或FP是基于一些基本定義原則思考軟件構(gòu)建的一種方式
- 功能編程概念側(cè)重于結(jié)果,而不是過程
- 任何FP語言的目標(biāo)都是模仿數(shù)學(xué)函數(shù)
- 一些最著名的函數(shù)式編程語言:1)Haskell 2)SM 3)Clojure 4)Scala 5)Erlang 6)Clean
- “純函數(shù)”是一個函數(shù),其輸入被聲明為輸入,并且不應(yīng)隱藏它們。產(chǎn)出也被宣布為產(chǎn)出。
- 不可變數(shù)據(jù)意味著您應(yīng)該能夠輕松地創(chuàng)建數(shù)據(jù)結(jié)構(gòu),而不是修改已存在的數(shù)據(jù)結(jié)構(gòu)
- 允許您避免混淆代碼中的問題和錯誤
- 還書代碼并不容易,因此初學(xué)者很難理解
- FP使用不可變數(shù)據(jù),而OOP使用Mutable數(shù)據(jù)
11MVC
什么是MVC?
MVC是一種架構(gòu)模式,它將應(yīng)用程序分為三個主要邏輯組件
- 模型 Model
- 視圖 View
- 控制器 Controller
MVC將業(yè)務(wù)邏輯層和表示層相互分離。它傳統(tǒng)上用于桌面圖形用戶界面(GUI)。如今,MVC架構(gòu)已經(jīng)成為設(shè)計Web應(yīng)用程序和移動應(yīng)用程序的流行。
MVC的歷史
- MVC架構(gòu)于1979年由Trygve Reenskaug首次討論
- MVC模型于1987年首次在Smalltalk編程語言中引入。
- 在1988年的一篇文章中,MVC首次被接受為一般概念
- 最近,MVC模式被廣泛用于現(xiàn)代Web應(yīng)用程序中
MVC的特點
- 高度可測試,可擴(kuò)展和可插拔的框架
- 提供對HTML和URL的完全控制
- 利用Django、flask、ASP.NET,JSP,等提供的現(xiàn)有功能。
- 清晰的邏輯分離:模型,視圖,控制器。分離任務(wù)即:業(yè)務(wù)邏輯,UI邏輯和輸入邏輯
- SEO友好L的URL路由。強(qiáng)大的URL映射,用于可理解和可搜索的URL
- 支持測試驅(qū)動開發(fā)(TDD)
MVC架構(gòu)
MVC架構(gòu)圖

三個重要的MVC組件是:
-
模型:它包括所有數(shù)據(jù)及其相關(guān)邏輯
-
視圖:向用戶顯示數(shù)據(jù)或處理用戶交互
-
Controller:Model和View組件之間的接口
讓我們詳細(xì)看看這個組件: -
視圖
View是表示數(shù)據(jù)表示的應(yīng)用程序的一部分。
視圖由從模型數(shù)據(jù)收集的數(shù)據(jù)創(chuàng)建。視圖請求模型提供信息。
該視圖還表示聊天,圖表和表格中的數(shù)據(jù)。例如,任何客戶視圖都將包含所有UI組件,如文本框,下拉列表等。
- Controller
Controller是處理用戶交互的應(yīng)用程序的一部分。控制器解釋來自用戶的鼠標(biāo)和鍵盤輸入,通知模型和視圖以適當(dāng)?shù)馗淖儭?/li>
Controller向模型發(fā)送命令以更新其狀態(tài)(例如,保存特定文檔)。控制器還將命令發(fā)送到其關(guān)聯(lián)視圖以更改視圖的顯示(例如,滾動特定文檔)。
- 模型
模型組件存儲數(shù)據(jù)及其相關(guān)邏輯,表示在控制器組件或任何其他相關(guān)業(yè)務(wù)邏輯之間傳輸?shù)臄?shù)據(jù)。例如,Controller對象將從數(shù)據(jù)庫中檢索客戶信息。它操縱數(shù)據(jù)并發(fā)送回數(shù)據(jù)庫或使用它來呈現(xiàn)相同的數(shù)據(jù)。
它響應(yīng)來自視圖的請求,并響應(yīng)來自控制器的指令以更新自身。它也是負(fù)責(zé)維護(hù)數(shù)據(jù)的模式的最低級別。
MVC示例
讓我們看看日常生活中的模型視圖控制器:
例1:點餐
- 假設(shè)你去一家餐館。你不會去廚房準(zhǔn)備你可以在家里做的食物。相反,你只是去那里等待服務(wù)員來。
- 現(xiàn)在服務(wù)員來找你,你只需要點食物。服務(wù)員不知道你是誰,你想要什么,他只是寫下你的食物訂單的細(xì)節(jié)。
- 服務(wù)員到廚房。但她不準(zhǔn)備你的食物。
- 廚師準(zhǔn)備你的食物。服務(wù)員會將您的訂單連同您的餐桌號碼一起交給他。
- 廚師然后為你準(zhǔn)備食物。他用成分來烹飪食物。我們假設(shè)您的訂單是蔬菜三明治。然后,他需要從冰箱中取出的面包,西紅柿,土豆,辣椒,洋蔥,小塊,奶酪等
- 廚師最后把食物交給服務(wù)員。現(xiàn)在服務(wù)員的工作就是把這些食物搬到廚房外面。
- 現(xiàn)在,服務(wù)員知道您訂購的食品以及如何送達(dá)。
在這種情況下,
試圖=你
服務(wù)員=控制器
庫克=模型
冰箱=數(shù)據(jù)
例2:汽車驅(qū)動
汽車驅(qū)動機(jī)制是MVC模型的另一個例子。
每輛車都包含三個主要部分。
View =用戶界面:(變速桿,面板,方向盤,制動器等)
控制器 - 機(jī)制(引擎)
模型 - 儲存(汽油)
汽車從發(fā)動機(jī)運行從存儲中獲取燃料,但它僅使用提到的用戶界面設(shè)備運行。
流行的MVC Web框架
這里是一些流行的MVC框架的列表。
- Django
- Flask
- tornada
- Ruby on Rails
- CakePHP
- Yii
- CherryPy
- Spring MVC
- Catalyst
- Zend Framework
- CodeIgniter
- Laravel
- Fuel PHP
- Symphony
MVC的優(yōu)勢:主要優(yōu)勢
這里是使用MVC架構(gòu)的主要好處。
- 易于代碼維護(hù),易于擴(kuò)展和擴(kuò)展
- MVC模型組件可以與用戶分開測試
- 更容易支持新型客戶
- 可以并行地執(zhí)行各種組件的開發(fā)。
- 它通過將應(yīng)用程序劃分為三個單元來幫助您避免復(fù)雜性。型號,視圖和控制器
- 它僅使用Front Controller模式,通過單個控制器處理Web應(yīng)用程序請求。
- 為測試驅(qū)動開發(fā)提供最佳支持
- 它適用于由大型Web設(shè)計人員和開發(fā)人員團(tuán)隊支持的Web應(yīng)用程序。
- 提供干凈的關(guān)注點分離(SoC eparation of concerns)。
- 搜索引擎優(yōu)化(SEO Search Engine Optimization)友好。
- 所有分類和對象彼此獨立,以便您可以單獨測試它們。
- MVC允許將控制器上的相關(guān)動作邏輯分組在一起。
使用MVC的缺點
- 難以閱讀,更改,單元測試和重用此模型
- 框架導(dǎo)航可能有時間復(fù)雜,因為它引入了新的抽象層,這要求用戶適應(yīng)MVC的分解標(biāo)準(zhǔn)。
- 沒有正式的驗證支持
- 增加了數(shù)據(jù)的復(fù)雜性和低效率
-與現(xiàn)代用戶界面結(jié)合有難度
-需要多個程序員進(jìn)行并行編程。
-需要了解多種技術(shù)。
-在Controller中維護(hù)大量代碼
參數(shù) |3層體系結(jié)構(gòu) |MVC體系結(jié)構(gòu)
通信|這種類型的體系結(jié)構(gòu)模式永遠(yuǎn)不會直接與數(shù)據(jù)層通信。|所有層使用三角形拓?fù)渲苯油ㄐ拧?br>
用法 |3層:廣泛用于Web應(yīng)用程序,其中客戶端,數(shù)據(jù)層和中間件a在物理上獨立的平臺上運行。 |通常用于在單個圖形工作站上運行的應(yīng)用程序。
小結(jié)
- MVC是一種架構(gòu)模式,將應(yīng)用程序分為1)模型,2)視圖和3)控制器
- 模型:它包括所有數(shù)據(jù)及其相關(guān)邏輯
- 視圖:向用戶顯示數(shù)據(jù)或處理用戶交互
- Controller:Model和View組件之間的接口
- MVC架構(gòu)于1979年由Trygve Reenskaug首次討論
- MVC是一個高度可測試,可擴(kuò)展和可插入的框架
一些流行的MVC框架是Django、flask、tornada、Rails,Zend Framework,CodeIgniter,Laravel,F(xiàn)uel PHP等。
浙公網(wǎng)安備 33010602011771號