產(chǎn)品經(jīng)理須知的“技術(shù)黑話(huà)”
文章梳理了一些技術(shù)術(shù)語(yǔ),以比較通俗的方式來(lái)解釋和介紹,希望對(duì)于非技術(shù)背景的產(chǎn)品經(jīng)理們有所幫助。
產(chǎn)品經(jīng)理在實(shí)際工作中經(jīng)常會(huì)遇到一些“技術(shù)黑話(huà)”,這些技術(shù)語(yǔ)言讓非技術(shù)背景的產(chǎn)品經(jīng)理們經(jīng)常不知所云,帶來(lái)了一些溝通和理解的問(wèn)題,這里梳理了一些但不全的技術(shù)術(shù)語(yǔ),以比較通俗的方式來(lái)解釋和介紹,希望對(duì)于非技術(shù)背景的產(chǎn)品經(jīng)理們有所幫助。
1.?類(lèi)、對(duì)象、抽象和實(shí)例
在技術(shù)的世界里,有一類(lèi)編程語(yǔ)言叫面向?qū)ο缶幊?,例如典型的面向?qū)ο笳Z(yǔ)言Java。說(shuō)到面向?qū)ο?,不得不提的幾個(gè)概念是類(lèi)、對(duì)象、抽象和實(shí)例。這些技術(shù)術(shù)語(yǔ)會(huì)經(jīng)常在工程師的討論中出現(xiàn),非技術(shù)背景的產(chǎn)品經(jīng)理該如何理解這些概念呢?接下來(lái)具體介紹這些技術(shù)術(shù)語(yǔ)分別代表什么意思。
首先介紹第一個(gè)概念“抽象”。我們說(shuō)某一個(gè)概念聽(tīng)起來(lái)非常抽象的意思是不具體的事物,對(duì)應(yīng)的反義詞是具象。抽象在技術(shù)術(shù)語(yǔ)里的意思是提煉出一個(gè)通用模板,然后基于模板做具象化的實(shí)現(xiàn)。例如,在現(xiàn)實(shí)世界中關(guān)于人的分類(lèi),會(huì)有男人、女人、老人和小孩,如果將這個(gè)具體的分類(lèi)抽象出一個(gè)類(lèi)別,得到的抽象結(jié)果就是人。所以,人就是一個(gè)抽象出來(lái)的分類(lèi),也就是技術(shù)術(shù)語(yǔ)里面的“類(lèi)”。在編程語(yǔ)言的世界中,通過(guò)程序語(yǔ)言描述現(xiàn)實(shí)世界中的事物時(shí),使用的就是抽象的方法,將一類(lèi)事物抽象成一個(gè)類(lèi),就得出了程序世界中的一個(gè)基本模型。
有了基本模型后,可以基于抽象出來(lái)的模型(類(lèi))產(chǎn)生很多具體的實(shí)例,也就是基于類(lèi)實(shí)例化的具體對(duì)象。例如,將“人”這個(gè)類(lèi)實(shí)例化為兩個(gè)對(duì)象,分別是男人和女人,也可以實(shí)例化為其他對(duì)象,例如小孩和老人,甚至可以實(shí)例化為具體的人,例如Maggie和Ryan。這一系列的過(guò)程如圖所示。
從上述流程中可以看出,工程師做的工作就是根據(jù)產(chǎn)品需求將現(xiàn)實(shí)世界中的事物抽象成程序世界中的一個(gè)個(gè)類(lèi),然后根據(jù)需要實(shí)例化很多對(duì)象,不同對(duì)象間通過(guò)相互協(xié)作完成一個(gè)具體的產(chǎn)品功能。
非技術(shù)背景的產(chǎn)品經(jīng)理在工作中也可以試著以這種技術(shù)思維的方式定義產(chǎn)品需求,先從產(chǎn)品角色開(kāi)始抽象出具體的類(lèi),然后分別定義這些角色在整個(gè)產(chǎn)品流程中需要完成哪些關(guān)鍵動(dòng)作,從而定義出具體的對(duì)象。這樣既有利于明確需求和用戶(hù)角色,也能培養(yǎng)非技術(shù)背景產(chǎn)品經(jīng)理的技術(shù)思維。
2.?工程師口中的“打印”是什么意思
在與工程師的配合中,你一定聽(tīng)說(shuō)過(guò)“打印”這個(gè)詞,通常場(chǎng)景是在調(diào)試產(chǎn)品問(wèn)題或進(jìn)行開(kāi)發(fā)測(cè)試時(shí)。工程師口中的“打印”和我們使用打印機(jī)打印文件究竟有什么區(qū)別呢?對(duì)非技術(shù)背景的產(chǎn)品經(jīng)理而言,聽(tīng)到這個(gè)既熟悉又陌生的詞匯時(shí),該如何理解呢?
首先,“打印”這個(gè)詞在大多數(shù)場(chǎng)景下是指我們將文件或圖片通過(guò)打印機(jī)從計(jì)算機(jī)世界輸出到現(xiàn)實(shí)世界中,意味著一種結(jié)果的輸出。工程師口中的“打印”一詞,表示的是一種結(jié)果輸出,只是這種結(jié)果并不會(huì)輸出到現(xiàn)實(shí)世界,只是將程序運(yùn)行的結(jié)果“打印”到命令控制臺(tái)上。
工程師在編寫(xiě)程序代碼時(shí),需要不斷測(cè)試程序片段運(yùn)行是否正確,例如編寫(xiě)一個(gè)加法的程序片段,當(dāng)代碼編寫(xiě)完成后,工程師需要測(cè)試加法程序是否運(yùn)行正確,所以會(huì)輸入兩個(gè)參數(shù)然后查看程序的運(yùn)行結(jié)果,程序運(yùn)行結(jié)果輸出到命令控制臺(tái)的過(guò)程就叫作“打印”。
工程師在調(diào)試問(wèn)題程序的過(guò)程中,也會(huì)經(jīng)常用到打印技術(shù),將每一塊代碼的執(zhí)行結(jié)果輸出到控制臺(tái),用來(lái)查看具體問(wèn)題出在哪個(gè)環(huán)節(jié)。因?yàn)榇a的運(yùn)行過(guò)程是不可見(jiàn)的,所以通過(guò)“打印”的方式能讓代碼的運(yùn)行過(guò)程和結(jié)果可視化。
3.?工程師口中的“寫(xiě)死”是什么意思
在與工程師討論產(chǎn)品需求或者工程師相互討論技術(shù)方案時(shí),經(jīng)常會(huì)聽(tīng)到“寫(xiě)死”這個(gè)術(shù)語(yǔ)?!皩?xiě)死”這個(gè)詞嚴(yán)格來(lái)說(shuō)不算一個(gè)標(biāo)準(zhǔn)的技術(shù)術(shù)語(yǔ),而是工程師用來(lái)描述一種技術(shù)實(shí)現(xiàn)方案的說(shuō)法。
例如,要設(shè)計(jì)一個(gè)下拉選擇框用來(lái)切換不同的城市,這個(gè)產(chǎn)品需求在技術(shù)層面有兩種實(shí)現(xiàn)方案,第一種是將城市數(shù)據(jù)放在服務(wù)器端,客戶(hù)端通過(guò)請(qǐng)求數(shù)據(jù)接口將城市數(shù)據(jù)獲取回來(lái)再顯示在下拉列表中。第二種是將城市列表數(shù)據(jù)存放在客戶(hù)端,客戶(hù)端從本地讀取城市列表并展示在下拉列表中。
第一種方式是一種相對(duì)靈活的方案,當(dāng)城市數(shù)據(jù)有變化時(shí),只需要調(diào)整服務(wù)端的數(shù)據(jù)內(nèi)容即可,客戶(hù)端不用做任何修改,但需要開(kāi)發(fā)一個(gè)專(zhuān)門(mén)的數(shù)據(jù)接口獲取這部分?jǐn)?shù)據(jù)。第二種方式就是工程師所說(shuō)的“寫(xiě)死”,將數(shù)據(jù)集寫(xiě)死在本地,這樣可以省去數(shù)據(jù)接口的開(kāi)發(fā),也能快速實(shí)現(xiàn)想要的效果。
這兩種不同的實(shí)現(xiàn)方式在很多產(chǎn)品設(shè)計(jì)環(huán)節(jié)中都會(huì)體現(xiàn),例如一些客戶(hù)端的文案或者圖片會(huì)經(jīng)常變化,這時(shí)就不太適合將需要變化的數(shù)據(jù)“寫(xiě)死”在本地,合理的方案是將變化的數(shù)據(jù)存儲(chǔ)在服務(wù)端,客戶(hù)端通過(guò)數(shù)據(jù)接口靈活地獲取這部分?jǐn)?shù)據(jù)。
當(dāng)然,也不是所有的數(shù)據(jù)都不適合“寫(xiě)死”在本地,例如性別數(shù)據(jù),無(wú)非就是男和女,不必專(zhuān)門(mén)為了它開(kāi)發(fā)一個(gè)數(shù)據(jù)接口,我們得根據(jù)具體需求和使用場(chǎng)景判斷哪些數(shù)據(jù)應(yīng)該寫(xiě)死。
4.?架構(gòu)和框架
架構(gòu)和框架是工程師經(jīng)常提及的兩個(gè)技術(shù)概念,另外,在技術(shù)職能中還有架構(gòu)師這一崗位。對(duì)非技術(shù)背景的產(chǎn)品經(jīng)理而言,該如何理解和區(qū)分這兩個(gè)技術(shù)概念呢?通過(guò)一個(gè)例子就可以非常直觀地理解二者。在修建房屋時(shí),會(huì)有一個(gè)總設(shè)計(jì)師負(fù)責(zé)設(shè)計(jì)整體藍(lán)圖和規(guī)劃,這個(gè)工作可以理解為是架構(gòu)師的工作,而房屋設(shè)計(jì)結(jié)構(gòu)和規(guī)劃本身是房屋的架構(gòu)。
架構(gòu)工作完成后就進(jìn)入具體的施工環(huán)節(jié),施工時(shí)可以選擇從頭開(kāi)始一磚一瓦的加,也可以使用現(xiàn)有的房屋框架,基于成熟的房屋框架一層一層累加,后期只需要做整合和裝修工作即可使用現(xiàn)成的框架,既能降低施工難度,也能提高施工效率。
在技術(shù)領(lǐng)域,架構(gòu)這個(gè)詞是對(duì)系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)和規(guī)劃,通常由經(jīng)驗(yàn)比較豐富的架構(gòu)師或者高級(jí)工程師完成,架構(gòu)的好壞直接決定了后期系統(tǒng)的穩(wěn)定性和可擴(kuò)展性??蚣軇t是指利用現(xiàn)有的成熟技術(shù)框架簡(jiǎn)化開(kāi)發(fā)過(guò)程,例如針對(duì)企業(yè)級(jí)應(yīng)用的開(kāi)發(fā)框架J2EE,就提供了很多現(xiàn)成的組件來(lái)降低開(kāi)發(fā)的復(fù)雜度,如今很多系統(tǒng)的開(kāi)發(fā)都會(huì)使用一些比較成熟的開(kāi)發(fā)框架替代純自主開(kāi)發(fā),這樣既能保證系統(tǒng)質(zhì)量,也能提高開(kāi)發(fā)效率。
5. ?控件和組件
任何一個(gè)網(wǎng)頁(yè)或者App產(chǎn)品都是由大量的輸入框、按鈕、文本展示框構(gòu)成的,產(chǎn)品中的這些最小界面元素組成單元就叫作控件。一個(gè)按鈕是一個(gè)控件,一個(gè)輸入框也是一個(gè)控件。如圖所示為幾個(gè)基本控件(輸入框、文本展示框和按鈕)。
組件是一種功能更全面的升級(jí)版控件,或者可以把組件理解成多個(gè)控件的組合。例如,Android和iOS開(kāi)發(fā)中經(jīng)常使用的Tab組件,如圖所示。
大部分產(chǎn)品都設(shè)計(jì)為底部有幾個(gè)模塊,點(diǎn)擊不同的底部按鈕可以在不同的模塊之間切換,實(shí)現(xiàn)展示和切換的就是Tab組件,它包含了頁(yè)面容器展示、按鈕等一系列功能,將這些細(xì)粒度的控件組合到一起來(lái)完成復(fù)雜功能,這就是組件。
6.?進(jìn)程與線(xiàn)程
工作中經(jīng)常會(huì)聽(tīng)到工程師討論進(jìn)程和線(xiàn)程。例如,涉及一些復(fù)雜功能的技術(shù)實(shí)現(xiàn)方案時(shí),工程師會(huì)說(shuō)現(xiàn)在已經(jīng)同時(shí)開(kāi)了幾個(gè)線(xiàn)程在處理。進(jìn)程和線(xiàn)程究竟是什么?它們之間有什么關(guān)系呢?本節(jié)主要介紹進(jìn)程和線(xiàn)程的概念。
當(dāng)我們點(diǎn)擊手機(jī)屏幕上的一個(gè)App按鈕(啟動(dòng)一個(gè)產(chǎn)品)時(shí),系統(tǒng)會(huì)為這個(gè)產(chǎn)品的運(yùn)行分配系統(tǒng)資源(例如CPU和存儲(chǔ)空間),分配好資源后,產(chǎn)品會(huì)在這個(gè)資源區(qū)域運(yùn)行應(yīng)用程序。這里所說(shuō)的運(yùn)行應(yīng)用程序就是進(jìn)程,也可以理解為每一個(gè)正在運(yùn)行的App都是一個(gè)進(jìn)程。
例如,我們?cè)谑謾C(jī)上使用微信或者微博,就有分別屬于微信和微博的系統(tǒng)進(jìn)程。一旦關(guān)閉應(yīng)用程序或因?yàn)橄到y(tǒng)資源緊張而自動(dòng)關(guān)閉在后臺(tái)運(yùn)行的應(yīng)用程序,進(jìn)程就會(huì)被終止,同時(shí)對(duì)應(yīng)的進(jìn)程所占用的系統(tǒng)資源也會(huì)被釋放。
相比于進(jìn)程,線(xiàn)程是一個(gè)更小的執(zhí)行單元,一個(gè)運(yùn)行中的應(yīng)用程序是一個(gè)進(jìn)程,一個(gè)進(jìn)程中可以存在多個(gè)線(xiàn)程,每一個(gè)子任務(wù)都可以理解為是運(yùn)行中的一個(gè)線(xiàn)程。我們以微博為例,運(yùn)行中的微博是一個(gè)系統(tǒng)進(jìn)程,可以上傳照片發(fā)布微博,也可以上傳視頻發(fā)布微博。
用戶(hù)上傳照片的任務(wù)在一個(gè)獨(dú)立的線(xiàn)程中運(yùn)行,上傳視頻的任務(wù)也在一個(gè)獨(dú)立的線(xiàn)程中運(yùn)行,并且這兩個(gè)任務(wù)可以同時(shí)運(yùn)行互不影響,這種方式叫異步線(xiàn)程處理,即可以并行互不干擾完成各自的子任務(wù)。當(dāng)然,還有一種線(xiàn)程處理方式叫同步線(xiàn)程,即子任務(wù)是按照一定的順序完成的。
產(chǎn)品之所以能同時(shí)完成很多功能,就是因?yàn)榫€(xiàn)程的存在,尤其是涉及需要網(wǎng)絡(luò)請(qǐng)求的一些功能時(shí),例如用戶(hù)在微信中發(fā)布朋友圈后有可能立馬去刷新朋友圈,這時(shí)可能剛剛發(fā)布的內(nèi)容還沒(méi)有上傳成功,所以在技術(shù)實(shí)現(xiàn)時(shí)會(huì)用兩個(gè)線(xiàn)程分別處理發(fā)布和獲取新信息的子任務(wù)。這樣做既能保證用戶(hù)體驗(yàn),也能保證系統(tǒng)資源被合理地分配和利用。
7.?什么是“腳本”
“腳本”這個(gè)詞在工程師口中出現(xiàn)的頻率比較高。當(dāng)需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行批量處理時(shí),工程師會(huì)說(shuō)“跑一個(gè)腳本統(tǒng)一處理一下”;當(dāng)需要查詢(xún)某一數(shù)據(jù)報(bào)表時(shí),工程師會(huì)說(shuō)“用一個(gè)腳本批量查詢(xún)”。
腳本也是一種被計(jì)算機(jī)執(zhí)行的程序,為什么叫腳本呢?可以把腳本理解成拍戲用的劇本,劇本里會(huì)按照角色及對(duì)白把要拍的戲清晰地列出來(lái),導(dǎo)演和演員會(huì)嚴(yán)格按照劇本表演。腳本就是一種面向計(jì)算機(jī)的劇本,是一個(gè)可被計(jì)算機(jī)執(zhí)行的文件,文件里是一系列計(jì)算機(jī)指令,這些指令會(huì)按照順序被計(jì)算機(jī)解析并執(zhí)行。
例如需要對(duì)數(shù)據(jù)庫(kù)中所有用戶(hù)數(shù)據(jù)添加一個(gè)數(shù)據(jù)項(xiàng),一個(gè)一個(gè)添加顯然是不可能的,通過(guò)一個(gè)批量操作一次性地完成是效率最高的做法,此時(shí)就會(huì)用到腳本。通過(guò)腳本寫(xiě)一個(gè)新增數(shù)據(jù)項(xiàng)的命令,然后執(zhí)行腳本,所有的數(shù)據(jù)就會(huì)被批量執(zhí)行同樣的操作。圖14-4所示是在Mac電腦環(huán)境下使用命令行執(zhí)行的一個(gè)查詢(xún)某一文件夾下所有文件的命令。
在第3行執(zhí)行了一個(gè)名為“l(fā)s”的命令,這個(gè)命令的作用是列出當(dāng)前文件夾下的所有文件或子文件夾的名稱(chēng),第4行到第5行是當(dāng)前文件夾下所有文件或子文件夾的名稱(chēng)。如果把“l(fā)s”命令單獨(dú)寫(xiě)成一個(gè)文件,這個(gè)包含一條指令的文件就是一個(gè)腳本文件。實(shí)際應(yīng)用中,腳本文件通常會(huì)由多個(gè)指令組合而成,經(jīng)過(guò)計(jì)算機(jī)的解析和執(zhí)行來(lái)完成一個(gè)復(fù)雜的處理任務(wù)。
8.?同步處理和異步處理
同步和異步是開(kāi)發(fā)技術(shù)中的兩個(gè)概念,計(jì)算機(jī)通過(guò)解析和運(yùn)行程序完成相應(yīng)的操作。在程序執(zhí)行過(guò)程中會(huì)涉及同時(shí)處理多個(gè)任務(wù)或者同一時(shí)間只處理一個(gè)任務(wù)的情況。在前面的章節(jié)中我們介紹過(guò)什么是進(jìn)程和線(xiàn)程,一個(gè)進(jìn)程中包含多個(gè)執(zhí)行任務(wù)的線(xiàn)程。
以用戶(hù)登錄為例,登錄任務(wù)是在一個(gè)登錄線(xiàn)程中執(zhí)行的,登錄任務(wù)執(zhí)行過(guò)程中除了驗(yàn)證用戶(hù)名和密碼是否正確外,還需要處理其他子任務(wù),例如從服務(wù)器獲取用戶(hù)信息,更新本地緩存信息等。這些子任務(wù)通常會(huì)在新開(kāi)辟的子線(xiàn)程里執(zhí)行。執(zhí)行登錄的線(xiàn)程可以稱(chēng)為主線(xiàn)程,執(zhí)行獲取用戶(hù)信息的線(xiàn)程稱(chēng)為子線(xiàn)程。
在一個(gè)登錄操作過(guò)程中分別執(zhí)行兩個(gè)任務(wù),這個(gè)過(guò)程就叫作異步處理。異步處理不會(huì)造成線(xiàn)程阻塞,相當(dāng)于各自處理各自的任務(wù)。如果所有的任務(wù)都在一個(gè)線(xiàn)程中處理,那就會(huì)出現(xiàn)資源占用過(guò)多和響應(yīng)時(shí)間過(guò)長(zhǎng)的情況,例如我們?cè)谑褂靡恍┌沧緼PP時(shí)偶爾會(huì)出現(xiàn)應(yīng)用程序閃退的情況,這有可能是因?yàn)槌霈F(xiàn)了線(xiàn)程死鎖。
同步處理比較好理解,就是同一時(shí)間只執(zhí)行一個(gè)簡(jiǎn)單任務(wù),任務(wù)處理完后再執(zhí)行第二個(gè)任務(wù),同步處理適用于一些順序執(zhí)行的任務(wù),例如流水線(xiàn)處理就是典型的同步處理,流水線(xiàn)上的一個(gè)環(huán)節(jié)處理完成后再處理下一個(gè)環(huán)節(jié)的任務(wù)。
#專(zhuān)欄作家#
唐韌(Ryan),《產(chǎn)品經(jīng)理必懂的技術(shù)那點(diǎn)事兒》作者,人人都是產(chǎn)品經(jīng)理專(zhuān)欄作家,微信公眾號(hào):唐韌,國(guó)內(nèi)早期移動(dòng)開(kāi)發(fā)者,轉(zhuǎn)型產(chǎn)品經(jīng)理,目前在創(chuàng)業(yè)公司負(fù)責(zé)產(chǎn)品工作。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來(lái)自 PEXELS,基于 CC0 協(xié)議
簡(jiǎn)單明了,我喜歡!
這么通俗易懂的嗎
灰常感謝??
我們的技術(shù)日常黑話(huà):
壞了壞了,系統(tǒng)掛了
我曹,錯(cuò)誤日志把空間占滿(mǎn)了
你打開(kāi)的方式不對(duì)
額,數(shù)據(jù)庫(kù)死鎖
給我權(quán)限
壞了我刪錯(cuò)一個(gè)表
用戶(hù)為什么要這樣操作?這樣操作就不會(huì)報(bào)錯(cuò)了
卡住重啟下就可以了
奇怪測(cè)試環(huán)境沒(méi)有問(wèn)題啊
看了可能是這個(gè)問(wèn)題–》但這段代碼有點(diǎn)看不懂;–》 不知道SB寫(xiě)的,也不寫(xiě)注釋?zhuān)?#8211;》好像是我寫(xiě)的;–》算了,重構(gòu)吧。
干得漂亮
評(píng)論應(yīng)該加一個(gè)點(diǎn)贊功能
有所收獲,明白了 “寫(xiě)死”
技術(shù)出身的報(bào)到
解釋的很贊,通俗易懂
給贊,希望多發(fā)布一些關(guān)于程序開(kāi)發(fā)上的基礎(chǔ)知識(shí),畢竟非技術(shù)出身的產(chǎn)品很多啊,,,