講個故事,給你一份詳細的技術書

36 評論 25007 瀏覽 179 收藏 24 分鐘

本文以一個故事的形式,給產品新人一份技術書,如果你是產品新人,那就進來看看吧~

序言

經常有產品新人問我技術問題:是前后端的區別?數據庫是怎么樣的?如何和研發溝通?

回答的多了,就想系統化的回答,寫一本書,讓技術變得通俗易懂、有趣。

6年間,從技術小白=>工程師=>后臺、數據產品經理,2000多個日夜,為代碼、需求絞盡腦汁、也在創業路上走過,百感交集。

本書以小說故事的形式、場景化講解技術,讓枯燥的技術變得有趣。感謝一些幫助我的小伙伴,謝謝。

另提下里面的人物用的是臉萌設計的,侵刪(設計師正在設計人物)。

封面

故事背景

故事也很簡單,兩條主線,李大仁來深圳的創業故事,表妹小奈和小明的愛情故事。

  1. 小明和小奈戀愛,程序員和產品經理的愛情故事
  2. 大仁用戶量破億,一番挫折后破土而出,創業進入新階段,拿到了B輪融資

人物關系

課程目錄

前8章,總共有20章。

1. 李大仁來深創業-互聯網介紹

(1)離開廣州

“故事的小黃花 從出生那年就飄著 童年的蕩秋千 隨記憶一直……“。李大仁聽著歌,望著廣州,這座生活了快10年的城市。腦中閃過了大學生活、同事、前女友,百感交集。但是為了最初的夢想,來到深圳創業。

(2)來深創業

“各位乘客你好,列車已到站“。終于邁出了這一步,深圳或許是創業氛圍最好的地方了。

小奈:喂,表哥你在哪?

大仁:我在深圳北站。

剛到深圳,大仁決定投靠表妹那邊,表妹家里在南山,離投資人提供的孵化器也很近。大仁目前暫時住在表妹這邊。小奈今年剛畢業,在一家大公司里當產品助理,非技術專業、初入職場的她遇到了挺多阻礙。

2018年,大仁今年也30歲了。

小奈:表哥,你女朋友呢?

大仁:分了,她不同意我來深圳這邊創業。

(3)落腳

小奈:表哥,你睡這間房吧。

大仁:好的。

(4)互聯網

疲累了一天,躺在床上,大仁陷入了沉思?;ヂ摼W,是網絡與網絡之間所串連成的全球網絡,這里的網絡可以理解成一個或多個電腦,這些網絡以一組標準的網絡TCP/IP協議族相連,互聯網在信息層面把世界變成地球村。

互聯網互通是全球性的,是屬于全人類的?;ヂ摼W低成本的、高效信息交流深受大家歡迎。它是是平等的,開放的信息高速公路,是人類發展進程的一個里程碑。

(5)中國電商發展史

下圖以中國互聯網、電商發展史為例子:

(6)三巨頭BAT,崛起的TMD

中國互聯網發展了20年,百度(B)阿里(A)騰訊(T)成為中國最大的三家互聯網公司,形成了三組鼎力的格局,三家公司有各自的體系和地位,百度的搜索、阿里的電商、騰訊的社交。

頭條(T)美團(M)滴滴(D),TMD被稱為創業公司在BAT這樣巨頭下最大的成長界限,互聯網也有階層固化之勢。

(7)商戰&混戰

自2016起,阿里和騰訊的新零售之戰開始布局,什么是新零售?馬云口中的新零售是什么?

商戰:美團打車vs滴滴外賣,阿里收購餓了么、高德推出順風車、美團推出打車、收購摩拜。創業環境如此艱難,但總有人能破土而出。

想著想著居然睡著了….

2. 服務員與廚師-前后端的區別

窗外下起了雨,滴答滴答…

周末了,本該很開心才對,小奈的心情卻有點郁悶。坐在公交上,想著下午被Leader懟的話,心情十分不美麗。好不容易下班了,還下雨了,得找表哥好好傾訴。

大仁:喲喲喲,你這是怎么啦?

小奈:今天被Leader一頓懟…

大仁:為什么會被Leader懟呢?

小奈:是這樣的,我方案今天上交的時候Leader說很多地方做得不對,前后端都沒分清,微服務就更不用說了。

大仁:不要氣餒,產品上有什么問題你可以問我呀

小奈:前后端怎么區分?后端寫代碼,前端負責顯示?

大仁:這個前后端的區別,我畫張圖給你看看就知道了。

前后端區別

大仁:前端也要寫代碼的,后端寫的代碼沒有界面顯示,前端才有。好比飯店一樣,服務員是前端, 廚師是后端開發。服務員會給你端菜(看得到的前端),但是做菜的是廚師(后端處理數據返給前端)。

小奈:那前后端怎么交互?

大仁:你看到那個窗口沒有,服務員通過窗口拿菜,菜就是用戶要的數據,窗口就是接口,前后端通過接口來協作,接口是后端的工作。

小奈:哦~那后端是不是做的比較多、比較累一點。

大仁:是的,廚師累一點。

大仁:不過今時不同往日,現在客人要求高了。要求服務員長得漂亮(界面好看) 還要會耍雜技(交互好)。這樣說你可以理解么 ?

小奈:UI和UE有什么不一樣么?

大仁:視覺設計(界面設計)ui像是服務員的衣服,ue (界面交互)就是點擊這個按鈕怎么跳轉,ue像是服務員的上菜流程、手勢等。數據庫就是神奇的物料倉庫,廚師要做什么菜,需要從倉庫里取, 取得時候會自動復制了一份,這個數據庫以后再和你仔細講。

小奈:哇,理解了,表哥好厲害呀。

大仁:總結起來的話,涉及界面展示的屬于前端,當請求數據的時候,就是常見的增刪改查,屬于后端工作,后端需要提供好這些窗口,把菜放在那里,服務員就可以過去拿。

微服務vs單體應用

小奈:那微服務又是什么呢?

大仁:我再畫2張圖(產品經理就是愛畫圖)。

大仁:你們公司是搞電商的,電商后臺系統比較大而全?;旧嫌捎脩艄芾?、商品管理、訂單管理、物流管理、采購管理、資產管理、內容管理等組成。而且項目早期研發的時候,都是都所有功能堆在一起,部署在一臺服務器上。這種其實就是所謂的“單體應用”。

但是呢,隨著業務發展,流量越來越大,這種單體應用的弊端就變得明顯了。怎么理解呢?

單體應用之間各個模塊互相依賴,如果某個模塊掛了,就會影響其它模塊?;蛘咦鰞灮莼顒拥臅r候,對用戶管理和優惠券這些模塊壓力較大,但是做負載均衡的時候其它模塊也得上,浪費資源。

小奈:那怎么辦?

大仁:其實把各個模塊單獨拎出來就好了。那里需要強化就強化那里。模塊間依賴性也不會那么大。

小奈:那前期為什么不直接用微服務?

大仁:微服務其實比較花時間,但是各個服務拆分好后,對后續擴展和性能等的好處多多。所以很多創業項目前期都是單體應用,大公司除外。

為了感謝大仁悉心指導,小奈點了奶茶給大家喝,分奶茶的時候,看到大明一手鼠標一手鍵盤目不轉睛地盯著屏幕。

(1)初次見面-瀏覽器輸入url后

明來了

“叮咚叮咚”

初次見面

大仁:你去接待下我朋友,他叫小明,我們公司后端開發。

耳邊突然傳來一個甜美的聲音。

小奈:你好,你是小明吧。

小奈:你好,我是小奈,表哥現在在忙,我來招待下你。

小奈:這是給你的茶,你先在這邊坐下。

刷地一下從臉到耳根一陣通紅,木住三秒后,小明愣了下,然后雙手接過茶

人物檔案

原名黃小明,29歲,黑龍江某大學心理學專業,畢業后在五道口切過菜,某一天看懂犀牛書,從此進入前端,立志成為黑客。大仁公司后端主力開發。

小奈:你是做后端的吧,我有些技術問題可以請教你嗎?

小明:可以,具體是什么問題呢?

小奈:我想知道你們平時敲的代碼,是怎么變成網頁的?怎么放到網上去的?

小明掏出了雙肩包里面的筆記本

小明:你平時怎么看網頁的?

小奈:在瀏覽器輸入?www.hellojack.com?然后就可以了啊

小明:那你知道背后發生了什么么?我畫個圖給你看下。

小明:首先這里幾個家伙:瀏覽器(360之類)、服務器(阿里云之類)、域名商(萬網之類)、網頁文件(index.html)、web環境盒子(Nginx之類)。

小明:當你輸入地址的時候,背后的事情是這樣的。

瀏覽器打電話給域名商, hellojack.com 這個sb家地址在哪?域名商告訴他ip地址,稍等,我給你轉過去。瀏覽器就把這個地址記到小本本上了,下次就不用問域名商了。然后問服務器要東西了,你盒子里面那個東西呢?

服務器掏出盒子里的文件,切成很多小拼塊,好的,我馬上寄過去。然后順著網線傳過去,傳到瀏覽器這邊。瀏覽器就把拼塊憑起來,展示出來了,你好你的文件。

小奈:每個域名都有IP地址地,之前我都不曉得IP跟域名有什么聯系。

小明:1對1的,當然你也可以搬家。

小奈:好像懂了。

小明:那你看看我們是怎么實現的吧。

小明:我們首先就是寫代碼咯,長得像這樣子:<h1>hello jack</h1>。

保存為 index.html 后,本地打開??吹經],長這樣子,我啟動個神奇的盒子:

var express = require(‘express’);

var app = express();

app.set(‘view engine’, ‘html’);

app.engine(‘html’, require(‘ejs-mate’));

var server = app.listen(8081, function (req, res) {

console.log(“hello world”)

})

  • 瀏覽器輸入:localhost:8081
  • 瀏覽器輸入:127.0.0.1:8081

小奈:喔,原來這樣子,那怎么輸入 hellojack.com 來訪問呢?

小明:對,接下來我要把它部署到阿里云上去,我之前買的。但是域名這個我只買過 pmjishu.com 這個,我得去域名商那里買一下才行。

小奈:不用啦,我明白了。

小奈:實在太感謝你了,你好厲害喔。

只見小明又通紅著臉

小明:不用客氣,有什么不懂的問題隨時請教”

今晚好美,月亮很好看。

(2)小區與隔板間-機房和虛擬機

電腦主機vs虛擬機

小奈:一直不太明白,服務器是一個實體的機器嗎?(類似一臺主機)還是一個概念上的數據庫?本地是指的是?

大仁

  • 第一個問題:早期服務器就是一個實體的機器(物理機器)。但是虛擬機技術成熟后可以在一臺物理機器上創建很多臺虛擬機,所以這些虛擬機也可以作為服務器。類似A101和里面的隔板間。
  • 第二個問題:我們常說的服務器(后臺)是指后臺程序+數據庫,也就是主人+衣柜,衣柜是存儲衣服(數據),主人是收拾、處理衣服的。你有錢可以一個住一間大房子,沒錢或者覺得太大也可以隔出幾個小板間租給別人。目前常見的服務商是這樣子做的,可能A101這間房間住了不同創業公司的后臺。但是房間之間都是隔離的(技術成熟)。
  • 第三個問題:其實我們自己也可以搭建服務器,要和運營商申請公網IP,一月好幾千,那我們的電腦也就是服務器了。

云主機vs機房

  • 機房:類似小區,由很多服務器組成;
  • 云主機:由多臺服務器組成,共同處理計算數據。

機房,類似小區,由很多服務器組成。但是可能這些業主互不相識,也可能這一層住的都是老王家族。

云主機:類似別墅,老王家族住在別墅,他們之間是有關系的,一起合作處理一些大事。

3. 世界之窗門票-賬號與Token

(1)世界之窗

終于周末了,真開心。對小奈這種初入職場的人來說,還是很期待周末的。和表哥約好周末去世界之窗玩,放松之余,還要抓緊和表哥學習東西。

(2)賬號和門票一樣

世界之窗外面是開放的,但是如果要進去里面的話,就需要買門票了。

小奈:這個門票是不是和賬戶密碼一樣?

大仁:是的

小奈:賬號登陸是怎么實現的?

大仁:那要先給你簡單講下數據庫。

(3)數據庫是什么?

數據:舉個例子,班級里面的每個人,例如:小周,他的各個字段:年級,性別、語數英等等,周杰倫的所有信息算是一條數據。

數據表:數據表就像一個excel表格,里面存了3年1班所有學生的數據。

數據庫:數據庫可以理解成一個文件夾,里面有很多excel表格,例如3年級所有班級(1、2、3班)的excel表格。

(4)賬號密碼

大仁:這里的賬號登陸和門票進場一樣,但是稍微不同的是,它是永久性的,只要你不改密碼/不被禁用。

(5)Token則是憑據

“叮鈴叮鈴”

大仁:喂,小明啊,你也要來世界之窗么?

小明:是啊,但是我沒門票,進不去啊。

大仁:我記得你是如花酒店會員是吧?

小明:是啊。

大仁:他們有和這個酒店合作,你試一下。

小明:你好,我是如花酒店的會員,能不能進去這里玩下。

檢票員打電話給如花酒店,小明和酒店說了自己信息,酒店經理給了臨時暗號:0007,你好可以了。

Token則更像是臨時暗號,這個臨時暗號是賬號授權生成的,門票丟了得重新花錢買,token丟了重新操作下認證一個就可以了,因此token丟失的代價是可以忍受的。

(6)Cookie 和 Session

這個賬號密碼,其實還有兩個重要的概念,下回分解。

?5. 暗號和鑰匙-Cookie和Session的區別

(1)Cookie和Session的區別

小奈:表哥那個cookie和session有什么區別?

大仁:記得上次了小明和你講的故事么?, 在瀏覽器輸入url背后發現的事。?2.1 初次見面-瀏覽器輸入url后

大仁:上次輸入的網址?www.hellojack.com?,其實完整的是?http://www.hellojack.com,前面有個http前綴,它是一個協議,無狀態協議。

大仁:我來給你講個故事吧。

(2)http

很久很久以前(30年前,只有靜態html的時候),有個發快遞的人叫http。偶爾有人打電話(無來電顯示)向他買東西,他收到請求后,就會去中心倉庫克隆一份這個東西,然后把貨品塞到管道里,這樣客人就收到了。

那時候工作很輕松,小日子過的挺舒服啊。好景不長(社區、電商網站的出現),倉庫里進了很多貴重和私密物品。老板要求他記錄訂購貴重物品的客人,私密物品一定要鑒別客人身份。

(3)暗號:cookie

但是沒有來電顯示啊,鬼知道誰定的,http就很苦惱了。想了想,終于想到一個辦法了。以后客人打電話過來,我就給他個暗號。終于可以記錄了,但是又遇到了一個問題。由于暗號比較簡單,其他客人可以偽造。

(4)檔案袋和鑰匙:session和session-id

http想了很久,最后和服務器協商,讓服務器那邊建立檔案袋,并把鑰匙給客人,下次叫客人把鑰匙給他。之后客人都通過鑰匙來打開檔案袋,確定身份。如果打不開的話就證明錯了。

express 中的 cookie

express 在 4.x 版本之后,session管理和cookies等許多模塊都不再直接包含在express中,而是需要單獨添加相應模塊。

var express = require(‘express’);

// 首先引入 cookie-parser 這個模塊

var cookieParser = require(‘cookie-parser’);

var app = express();

app.listen(3000);

// 使用 cookieParser 中間件,cookieParser(secret, options)

app.use(cookieParser());

app.get(‘/’, function (req, res) {

// 如果請求中的 cookie 存在 isVisit, 則輸出 cookie

// 否則,設置 cookie 字段 isVisit, 并設置過期時間為1分鐘

if (req.cookies.jack) {

console.log(req.cookies.jack);

res.send(“welcome”);

} else {

res.cookie(‘jack’, ‘content’, {maxAge: 60 * 1000});

res.send(“no cookie”);

}

});

(6)session

cookie 雖然很方便,但是使用 cookie 有一個很大的弊端,cookie 中的所有數據在客戶端就可以被修改,數據非常容易被偽造,那么一些重要的數據就不能存放在 cookie 中了,而且如果 cookie 中數據字段太多會影響傳輸效率。為了解決這些問題,就產生了 session,session 中的數據是保留在服務器端的。

session 的運作通過一個session_id來進行,session_id通常是存放在客戶端的 cookie 中,比如:在 express 中,默認是connect.sid這個字段,當請求到來時,服務端檢查 cookie 中保存session_id 并通過這個 session_id 與服務器端的 session data 關聯起來,進行數據的保存和修改。

 

作者:深圳jack,微信公眾號:產品經理的技術課堂

本文由 @深圳jack 原創發布于人人都是產品經理。未經許可,禁止轉載

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 有意思,電子書怎么獲???產品經理的技術課堂公眾號不存在!

    來自浙江 回復
  2. 給你贊一個

    回復
  3. 圖片看不清楚

    來自澳大利亞 回復
  4. 太形象了,深入淺出,不夸張的說是我在人人看過最有趣易懂的文章了!很棒!

    來自浙江 回復
    1. 過譽了,還有很多需要改進的地方

      來自廣東 回復
  5. 感覺比喻都很形象,但是只有喻體的描述,沒有本體的描述,還是有點知其然不知其所以然

    來自四川 回復
    1. 本體可以繼續追問,可以看下2,本體描述比較多一些

      來自廣東 回復
  6. 更新了,各位。 看這里 http://www.aharts.cn/pmd/1012306.html

    來自廣東 回復
  7. 厲害,做了一年的產品還是不能夠說清楚技術之間的關系,看這個淺顯易懂

    來自浙江 回復
  8. 意猶未盡,感覺Jack還有很多話要說,聽說要出電子版,怎么第一時間獲取呢,給個公眾哈或者博客,最好是加你微信啦 ??

    來自上海 回復
    1. 公眾號: 產品經理的技術課堂

      來自廣東 回復
    2. 搜索不到這個公眾號哦

      來自河北 回復
  9. 請問是要出書嗎?我覺得寫的很好,想買!什么時候能出來 ??

    來自北京 回復
    1. 感謝,評價太高了吧。 出書流程好像挺長的,電子版估計6月寫完。 等電子版吧。

      來自廣東 回復
    2. 苦于不懂技術的小白,學習都快瘋狂了,這個感覺比喻很形象很容易理解,電子書出了一定要廣而告之啊 ??

      來自北京 回復
    3. 好的,初衷也是想消除重復的理解工作,讓技術理解標準化、變得有趣,變成一本詞典。

      來自廣東 回復
  10. 這種形式還挺好的,對于想走PM道路的我還挺受用的~

    來自廣東 回復
  11. ?? ?? 小明和小奈的愛情故事 即將展開

    來自廣東 回復
  12. 贊一個!謝謝謝謝

    來自浙江 回復
    1. 不客氣,歡迎提問。

      來自廣東 回復
  13. 簡單,通俗,易懂

    來自四川 回復
    1. 感謝認可 持續更新中

      來自廣東 回復
  14. 有錯別字

    來自上海 回復
    1. 非常感謝,請指出。

      來自廣東 回復
  15. 很棒

    來自北京 回復
  16. 還沒更完是吧?

    來自廣東 回復
    1. 是的,前面1/4,大概20章,50多篇。昨日更新到3.2 村姑與化妝師–html和css的故事 3.3 API的使用

      來自廣東 回復
    2. 在哪可以看到完整版

      來自廣東 回復
    3. 打錯, 公眾號: 產品經理的技術課堂

      來自廣東 回復
    4. 更新是在這里原文更新嗎

      來自北京 回復
    5. 這邊慢一點,微信公眾號是最新的

      來自廣東 回復
  17. 產品經理面對開發時,需要懂技術到什么程度,怎么樣才能合理溝通? 有時提出的需求技術說不會做,但在其它平臺已經實現了。

    來自廣東 回復
    1. 剛好昨天在知識星球(產品經理的技術修養)回答過這個問題。

      和你說實際案例吧,有兩個技術出身轉的產品,一個是我,一個是華為的。

      我剛轉產品的時候,很自然的會想技術細節,這時候其實開發是反感的,有種侵犯他們領域的感覺。
      華為的那位產品經理則是裝不懂,實際上他技術比開發還牛。所以還是尊重開發、相信他們的專業能力(菜鳥除外)。

      1、產品經理要懂技術,這樣才能理解開發,在一些功能實現可能性做取舍,和開發無障礙協作,順利推進工作。
      (這個則是溝通問題,其它平臺和自家平臺,在架構以及階段等很多方面可能不一樣,開發能力也不一樣,你是想知道他有沒有騙你?你可以問另一個開發,但我建議你和他搞好關系。)

      2、產品經理的溝通能力很重要,入職第一件事是融入團隊,有點像地頭蛇,大家都比較信任喜歡。
      在技術方面,懂就行(掌握一套技術論,我在研發中),最后寫代碼的還是研發,提出清晰明確需求,與開發溝通好進度。

      3、如果真的要在技術上做提升,可以學數據分析,從excel基礎函數數據透視開始。
      非要寫代碼的話建議從html和js學起。
      會技術的產品經理可以隨時驗證自己的想法

      來自廣東 回復
    2. 怎么說呢自己大學的時候自學過前端,實習做過測試,大三暑假自學了數據分析,秋招面的數據分析崗,現在的職位是數據產品,這樣的經歷對于做產品會不會有幫助?

      來自廣東 回復
  18. 緩存是存在用戶端的,進程是存在服務器端的嗎?

    來自廣東 回復
    1. 用戶端和服務端,攻和受,他們都有緩存和進程。 用戶口中的緩存是在客戶端,沒錯。 后續出一篇進程、線程、緩存詳細講解下。

      來自廣東 回復