全棧工程師是將來。由於技術門檻降低,致使一個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. 以軟件爲中心的哲學 基礎設施。 持續集成環境。 測試環境。 遺留系統與修改代碼。