1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        再談如何寫好技術(shù)文檔?

        共 19824字,需瀏覽 40分鐘

         ·

        2022-04-09 21:02

        參加工作時(shí)間久一點(diǎn)的工程師應(yīng)該有這樣一個(gè)體會(huì):自己平時(shí)代碼寫得再多再好,可一旦要用文檔去描述或者表達(dá)某一個(gè)事情或者問題時(shí),都感覺非常困難,無從下手,不知道自己該寫什么不該寫什么;或者費(fèi)了九牛二虎之力寫出來的東西沒法滿足要求,需要再三去修改調(diào)整。這其中的主要原因我歸納有兩點(diǎn):
        1. 思維方式固化。大部分人平時(shí)代碼寫得太多,文字類型的表述又寫得太少。而代碼和文字明顯是兩種不同的思維方式,在代碼里陷得太深,不容易跳出來;

        2. 本身文字表達(dá)能力有限。這個(gè)跟寫代碼一樣,有人代碼質(zhì)量高、bug少;有人水平低、bug自然就多。

        以上兩點(diǎn)其實(shí)都可以通過平時(shí)多練、多寫、多梳理的方式去彌補(bǔ),比如周期性的博客總結(jié)和記錄。但是,如果你能刻意系統(tǒng)性地去補(bǔ)充一些關(guān)于“技術(shù)型寫作”的理論知識(shí),一定能夠事半功倍。這就像我們剛學(xué)編程時(shí),一頓學(xué)、一頓模仿,但是總感覺缺了點(diǎn)什么,自己再努力發(fā)現(xiàn)深度還是不夠。

        這時(shí)候,我們需要做的是看一本高質(zhì)量的經(jīng)典書籍,書籍能幫我們梳理知識(shí)點(diǎn)、總結(jié)各種碰到過的問題,從理論上解答我們心中各種疑惑,將之前的野路子“正規(guī)化”。

        下面我根據(jù)平時(shí)的一些積累,將技術(shù)型寫作的理論知識(shí)歸納成10個(gè)要點(diǎn)。

        1. 搞清楚主謂賓

        2. 不濫用代詞、過渡詞和標(biāo)點(diǎn)符號(hào)

        3. 多用強(qiáng)勢動(dòng)詞,少用形容詞和副詞

        4. 正確使用術(shù)語

        5. 正確使用段落

        6. 適當(dāng)使用列表和表格

        7. 一圖勝千言

        8. 統(tǒng)一樣式和風(fēng)格

        9. 把握好整體文檔結(jié)構(gòu)

        10. 明確文檔的目標(biāo)群體


         
        1 
        搞清楚主謂賓


        文檔主要由段落組成,段落由句子組成,而大部分句子又由“主謂賓”組成(可能有些場合省略了,但是讀者可以通過上下文輕松get到)。主謂賓是主干骨架,其他內(nèi)容可以看作是句子的修飾,主干骨架是決定句子是否垮掉的主要原因。

        現(xiàn)在很多人可能已經(jīng)忘記了句子的基本構(gòu)成,畢竟以漢語為母語的人,大概率是不太會(huì)關(guān)心這些“細(xì)節(jié)”,就像說英語的國家可能不太關(guān)心am、is、are一樣,你說哪個(gè)人家都理解。

        但是,文檔中的一句話讀起來是否別扭,大多數(shù)時(shí)候是由句子構(gòu)成決定的。在不考慮文檔上下文的情況下,如果一個(gè)句子能包含正確的主語、謂語和賓語(可選),那么它讀起來至少是很順口的。下面舉一個(gè)明顯搞不清主謂賓的例子:

        傳統(tǒng)圖像處理算法,通過計(jì)算煙火顏色特征,極易受煙火周圍環(huán)境相近顏色干擾而造成誤檢。

        盡管你能讀懂作者想要表達(dá)的意思,但是這句話讀起來還是太別扭。“傳統(tǒng)圖像處理算法”應(yīng)該算是主語,后面的“通過……”這句不完整,“極易受……干擾”這句還可以,“……造成誤檢”算是謂語賓語,但是這里用錯(cuò)了動(dòng)詞,為什么是“算法造成誤檢”,難道不是“周圍環(huán)境相近顏色干擾造成誤檢”嗎?

        這句話的主干內(nèi)容是:算法極易受……影響而……。正確的表述應(yīng)該類似下面這樣:

        因?yàn)閭鹘y(tǒng)圖像處理算法通過計(jì)算煙火顏色特征去識(shí)別煙火,所以它極易受煙火周圍環(huán)境相近顏色干擾而出現(xiàn)誤檢。

        我們用過渡詞(因?yàn)椤浴⒃瓉淼木渥硬鸪闪饲昂髢蓚€(gè)部分,前面部分的主語是“傳統(tǒng)圖像處理算法”,謂賓是“識(shí)別煙火”;后半部分的主語是“它”,謂賓是“出現(xiàn)誤檢”。經(jīng)過調(diào)整后,前后兩個(gè)部分的主語是同一個(gè):傳統(tǒng)圖像處理算法。下面再直觀看一下修改之后的句子主干骨架:

        <因?yàn)?gt;<傳統(tǒng)圖像處理算法>通過計(jì)算煙火顏色特征去<識(shí)別煙火>, <所以><它>極易受煙火周圍環(huán)境相近顏色干擾而<出現(xiàn)誤檢>。

        如果你覺得用“因?yàn)椤浴辈惶?,那么可以再換一種表述:

        傳統(tǒng)圖像處理算法通過計(jì)算煙火顏色特征去識(shí)別煙火,煙火周圍環(huán)境相近顏色的干擾極易造成誤檢。

        第一句還是跟之前一樣,主語是“傳統(tǒng)圖像處理算法”,第二句主語變成了“干擾”,謂賓是“造成誤檢”。下面我們直觀地看一下修改之后的句子主干骨架:

        <傳統(tǒng)圖像處理算法>通過計(jì)算煙火顏色特征去<識(shí)別煙火>, 煙火周圍環(huán)境相近顏色的<干擾>極易<造成誤檢>。

        最后再舉一個(gè)錯(cuò)誤的例子:

        由于誤報(bào)率與漏報(bào)率很高,因此不管是否有真實(shí)事件發(fā)生都會(huì)去留意,也會(huì)有規(guī)定的日程定點(diǎn)巡查視頻任務(wù)。

        上面這個(gè)句子的作者完全沒搞懂誰是主語,誰是謂語。感興趣的童鞋可以試著修改一下,改成你認(rèn)為正確的表述。


         
        2 
        不濫用代詞、過渡詞和標(biāo)點(diǎn)符號(hào)


        不濫用代詞和過渡詞

        中文文檔中的代詞主要有:你、我、他、她、它、其、前者、后者、這樣、那樣、如此等等,過渡詞主要有:因?yàn)?所以、不但/而且、首先/然后等等。下面這張表格列舉了一些常見的代詞和過渡詞及其常用場合:

        序號(hào)
        類型
        名稱
        常用場合舉例
        1
        代詞

        C語言中引入了“指針”的概念,作用是為了能夠提升內(nèi)存訪問速度。
        2代詞
        后者
        C語言發(fā)明于1970年代,C++語言發(fā)明于1980年代,后者主要引入了面向?qū)ο笏枷搿?br>
        3代詞

        指針能夠提升程序訪問內(nèi)存的速度,但特點(diǎn)仍存在一些缺陷。
        4代詞

        C語言的一大特性是指針,這就像C++語言和的面向?qū)ο笏枷胍粯印?br>
        5
        過渡詞
        因?yàn)?所以
        因?yàn)?/span>神經(jīng)網(wǎng)絡(luò)可以自動(dòng)提取數(shù)據(jù)特征,所以基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)技術(shù)中不再有傳統(tǒng)意義上的“特征工程”這一概念。
        6
        過渡詞
        首先/然后
        首先我們要保證有足夠多的訓(xùn)練數(shù)據(jù),然后我們再選擇一個(gè)適合該問題的神經(jīng)網(wǎng)絡(luò)模型。

        表2-1 代詞和過渡詞舉例

        代詞和過渡詞就像標(biāo)點(diǎn)符號(hào)一樣,容易被濫用。代詞濫用主要體現(xiàn)在作者在使用它們的時(shí)候并沒有搞清楚它們代表的究竟是誰,是前一句的主語、還是前一句的賓語或者干脆是前一整句話?

        過渡詞濫用主要體現(xiàn)在作者在使用它們的時(shí)候并沒有搞清楚前后兩句話的邏輯關(guān)系,是遞進(jìn)還是轉(zhuǎn)折或者是因果?(過渡詞濫用頻率要低很多,畢竟搞清楚前后句子邏輯的難度要小)接下來舉幾個(gè)濫用代詞和過渡詞的例子:

        C++語言發(fā)明于1980年代,它支持“指針”和“面向?qū)ο螅∣bject-Oriented)”兩個(gè)特性,其價(jià)值在計(jì)算機(jī)編程語言歷史上數(shù)一數(shù)二。

        上面這個(gè)句子中出現(xiàn)了兩個(gè)代詞“它”和“其”,拋開句子內(nèi)容本身對錯(cuò)不論,第二個(gè)代詞指向的對象其實(shí)并不明確,“其”指的是“指針”、“面向?qū)ο蟆边€是“C++語言”?或者是指“C++語言同時(shí)支持……兩個(gè)特性”這個(gè)陳述?像這種有歧義的場合,我們應(yīng)該少用代詞,盡量用具體的主語去代替:

        C++語言發(fā)明于1980年代,它支持“指針”和“面向?qū)ο螅∣bject-Oriented)”兩個(gè)特性,C++的價(jià)值在計(jì)算機(jī)編程語言歷史上數(shù)一數(shù)二。

        如果你一定要用代詞,那么調(diào)整一下可能更好:

        C++語言發(fā)明于1980年代,它同時(shí)支持“指針”和“面向?qū)ο螅∣bject-Oriented)”兩個(gè)特性,這個(gè)價(jià)值在計(jì)算機(jī)編程語言歷史上數(shù)一數(shù)二。

        再讀一讀,你是不是沒有感覺到歧義了?我們在“支持”前面增加了一個(gè)“同時(shí)”,然后將代詞換成了“這個(gè)”,現(xiàn)在這個(gè)代詞指的是“C++語言同時(shí)支持...兩個(gè)特性”這個(gè)陳述,修改后整個(gè)句子的意思更明確。

        我們再來看另外一個(gè)濫用代詞的例子:

        該模塊主要負(fù)責(zé)對視頻進(jìn)行解碼,輸出單張YUV格式的圖片,并對輸出的圖片進(jìn)行壓縮和裁剪,前者基于Resize方法來完成,后者基于Crop()方法完成。

        對于大部分人來講,上面這段沒什么問題。代詞“前者”指的是壓縮、“后者”指的是裁剪,原因很簡單,因?yàn)閱卧~Resize對應(yīng)的是壓縮、單詞Crop對應(yīng)的是裁剪。

        但是這段話如果拿給沒有任何知識(shí)背景的人去讀(大概率可能是找不到這種人),恐怕會(huì)存在歧義,主要原因是代詞前面提到了很多東西,“前者”和“后者”指向不明確,到底是指“解碼”、“輸出單張圖片”還是后面的“壓縮”和“裁剪”?下面這樣調(diào)整后,整段話的意思更加明確:

        該模塊主要負(fù)責(zé)對視頻進(jìn)行解碼,輸出單張YUV格式的圖片,并對輸出的圖片進(jìn)行壓縮和裁剪,壓縮基于Resize方法來完成,裁剪基于Crop()方法完成。

        我們?nèi)サ袅舜~,直接用具體的主語來代替,句子意思非常明確。如果你一定要使用代詞,那么也可以這樣調(diào)整:

        該模塊主要負(fù)責(zé)對視頻進(jìn)行解碼,輸出單張YUV格式的圖片。同時(shí),它還對輸出的圖片進(jìn)行壓縮和裁剪,前者基于Resize()方法完成,后者基于Crop()方法完成。

        上面這段話還是使用了代詞“前者”/“后者”,但是我們修改了標(biāo)點(diǎn)符號(hào),并且增加了一個(gè)過渡詞“同時(shí)……”,這樣做的目的是讓讀者知道雖然整段話說的是同一個(gè)東西,但是前后的句子已經(jīng)分開了,為我們后面使用代詞做好準(zhǔn)備。

        好的,現(xiàn)在我們來總結(jié)一下在技術(shù)型文檔編寫過程中使用代詞時(shí)的一些有價(jià)值經(jīng)驗(yàn):

        1. 代詞可以指它前面出現(xiàn)過的名詞、短語甚至整個(gè)句子,但是一定是前面出現(xiàn)過的;

        2. 代詞的位置和它要指向的目標(biāo)最好不要隔得太遠(yuǎn),1~3句話之內(nèi),超過就不要用了;

        3. 代詞的作用是減少小范圍內(nèi)某些詞匯或句子重復(fù)出現(xiàn)的頻率,要用到恰到好處;

        4. 代詞前面出現(xiàn)的混淆目標(biāo)如果太多,一定要重新調(diào)整句子,確保代詞指向無歧義。

        不濫用標(biāo)點(diǎn)符號(hào)

        接下來我們再看另一個(gè),標(biāo)點(diǎn)符號(hào)的濫用要普遍很多,其主要原因是:標(biāo)點(diǎn)符號(hào)的使用并沒有非常明確的對錯(cuò)之分。至少對大部分人而言,使用句號(hào)還是逗號(hào)其實(shí)并沒有什么嚴(yán)格的評(píng)判標(biāo)準(zhǔn),只要不出現(xiàn)“一逗到底”的極端情況,其余大概率都OK。下面這張表格是我根據(jù)以往經(jīng)驗(yàn),總結(jié)出來的應(yīng)用于技術(shù)型寫作時(shí)中文標(biāo)點(diǎn)符號(hào)使用規(guī)則:

        序號(hào)
        符號(hào)
        寫法
        使用場合
        1逗號(hào)
        ,
        前后兩句話關(guān)聯(lián)性比較大,閱讀時(shí)停頓時(shí)間短。
        2句號(hào)
        。
        前后兩句話關(guān)聯(lián)性比較小,閱讀時(shí)停頓時(shí)間稍長。
        3
        分號(hào)
        ;
        前后兩句話地位相對平等,句子的內(nèi)容和格式基本保持一致。比如列表中,如果每項(xiàng)是一個(gè)句子或者短語,那么第1至第N-1項(xiàng)結(jié)尾使用分號(hào),第N項(xiàng)結(jié)尾使用句號(hào)。
        4
        冒號(hào)

        技術(shù)型文檔中,冒號(hào)一般用在需要引入重要內(nèi)容的場合。比如當(dāng)你需要插入一張表格或者一張圖片時(shí),需要提前做一個(gè)提醒(下表列舉了常見的代詞和過渡詞:),提醒結(jié)束時(shí)補(bǔ)充一個(gè)冒號(hào)。
        5
        括號(hào)
        ()、【】
        ()一般用于解釋性的場合,負(fù)責(zé)對名詞或者句子的補(bǔ)充解釋?!尽坑玫帽容^少,我一般用于需要增加醒目標(biāo)記的名詞或短語中。
        6
        頓號(hào)
        、
        一般可以用在枚舉名詞或者短語的場合。
        7
        問號(hào)
        不用多解釋。
        8
        引號(hào)
        “”、‘’
        一般用于標(biāo)記特殊名詞、專用名詞、短語,或需要重點(diǎn)突出的名詞或短語。
        9
        分隔號(hào)
        /
        一般用于成對出現(xiàn)的名詞(舉例:因?yàn)?所以、首先/然后等等都是過渡詞),或者根據(jù)文檔上下文來判斷地位差不多的相近詞(舉例:算法的好壞直接影響最終報(bào)表中誤報(bào)/誤報(bào)率那一欄)。
        10
        破折號(hào)
        ——
        用得不多。
        11
        省略號(hào)
        ……
        不用多解釋。
        12
        感嘆號(hào)

        技術(shù)型文檔不是寫小說,用得不多。
        13
        書名號(hào)
        《》、<>
        不用多解釋。

        表2-2 常用標(biāo)點(diǎn)符號(hào)

        上面這張表格基本涵蓋了常用的中文標(biāo)點(diǎn)符號(hào),其中有一小部分在技術(shù)型文檔中不太常見,比如感嘆號(hào)、破折號(hào),這些符號(hào)多多少少帶有某種感情色彩,不太適合用于技術(shù)型文檔編寫。前面已經(jīng)簡單概括了一下各個(gè)符號(hào)的使用場合,下面挑幾個(gè)容易出錯(cuò)的再一一詳細(xì)說明:

        C++語言發(fā)明于1980年代,它衍生自C語言,主要引入了“面向?qū)ο螅∣bject-Oriented)”思想,面向?qū)ο笏枷霃?qiáng)調(diào)對數(shù)據(jù)的封裝和對功能的復(fù)用,此特性有利于開發(fā)者對代碼的維護(hù)和擴(kuò)展,目前,大部分計(jì)算機(jī)編程語言已經(jīng)支持了面向?qū)ο筇匦浴?/span>

        上面這段話屬于典型的“一逗到底”的例子。作者從C++語言說到了面向?qū)ο笏枷?,最后總結(jié)大部分計(jì)算機(jī)編程語言都支持面向?qū)ο?。我們?nèi)绻麑⒄卧挷痖_來看,其實(shí)它想表述的是3個(gè)內(nèi)容,每個(gè)內(nèi)容之間最好使用句號(hào),停頓時(shí)間稍長一些。我們調(diào)整之后的效果是:

        C++語言發(fā)明于1980年代,它衍生自C語言,主要引入了“面向?qū)ο螅∣bject-Oriented)”思想。面向?qū)ο笏枷霃?qiáng)調(diào)對數(shù)據(jù)的封裝和對功能的復(fù)用,此特性有利于開發(fā)者對代碼的維護(hù)和擴(kuò)展。目前,大部分計(jì)算機(jī)編程語言已經(jīng)支持了面向?qū)ο筇匦浴?/span>

        接下來我們再看看分號(hào)的使用。根據(jù)我個(gè)人經(jīng)驗(yàn),分號(hào)常用在列表場合,下面舉一個(gè)例子說明:

        下面是“將大象裝入冰箱”的具體步驟:

        1. 打開冰箱門;

        2. 將大象裝進(jìn)冰箱;

        3. 關(guān)上冰箱門。

        上面是一個(gè)有序列表,列表中的各項(xiàng)內(nèi)容是一個(gè)短語。當(dāng)列表中各項(xiàng)內(nèi)容是短語或者句子的時(shí)候,除最后一項(xiàng)之外其余項(xiàng)目結(jié)尾一般都使用分號(hào)(注意,同一個(gè)列表中各項(xiàng)的格式最好都保持一致,要么都是短語,要么都是單個(gè)的名詞,這個(gè)后面專門講列表的時(shí)候會(huì)提到)。如果列表中各項(xiàng)內(nèi)容只是一個(gè)名詞時(shí),那么結(jié)尾就可以不用標(biāo)點(diǎn)符號(hào):

        下面是“可以被裝進(jìn)冰箱”的動(dòng)物:

        • 狗子

        • 大象

        • 猴子

        • 鸚鵡

        上面是一個(gè)無序列表,列表中的各項(xiàng)內(nèi)容是一個(gè)名詞,這時(shí)候名詞結(jié)尾處不需要添加任何標(biāo)點(diǎn)符號(hào)。

        我們最后再來看一下小括號(hào)的使用場合。在技術(shù)型文檔中,小括號(hào)主要用于對前面的名詞、短語或者句子進(jìn)行補(bǔ)充說明,比如當(dāng)文檔中出現(xiàn)縮寫詞匯時(shí),我們會(huì)在它的后面增加一個(gè)小括號(hào),在括號(hào)里面注明該縮寫詞匯的全稱。下面舉一個(gè)使用小括號(hào)對縮寫詞匯解釋說明的例子:

        API(Application Program Interface)是系統(tǒng)對外提供的訪問接口,使用者可以按照API文檔中的接口定義去訪問系統(tǒng)中的數(shù)據(jù),并與它做一些交互。

        上面這段話主要講API是什么、可以干什么。它是Application Program Interface三個(gè)單詞的簡稱,為了讓讀者更清楚該術(shù)語的定義,作者可以選擇在第一個(gè)“API”出現(xiàn)的位置增加一個(gè)小括號(hào),并將術(shù)語全稱補(bǔ)充進(jìn)來,之后的整個(gè)文檔無需再重復(fù)該操作(后面會(huì)單獨(dú)提到術(shù)語全稱和簡稱的運(yùn)用規(guī)則)。

        除了能對縮寫詞匯進(jìn)行解釋說明之外,小括號(hào)還可以用于對前面整個(gè)句子進(jìn)行補(bǔ)充說明,再看下面這個(gè)例子:

        它是Application Program Interface三個(gè)單詞的簡稱,為了讓讀者更清楚該術(shù)語的定義,作者可以選擇在第一個(gè)“API”出現(xiàn)的位置增加一個(gè)小括號(hào),并將術(shù)語全稱補(bǔ)充進(jìn)來,之后的整個(gè)文檔無需再重復(fù)該操作(后面會(huì)單獨(dú)提到術(shù)語全稱和簡稱的運(yùn)用規(guī)則)。

        上面這段話其實(shí)前面已經(jīng)出現(xiàn)過,最后小括號(hào)里面的內(nèi)容主要是為了對它前面一句話進(jìn)行補(bǔ)充。如果補(bǔ)充性說明內(nèi)容太長,比如要好幾句話才能起到補(bǔ)充的作用,那么這個(gè)時(shí)候我們就不應(yīng)該再使用小括號(hào)了,可以考慮調(diào)整句子結(jié)構(gòu),然后將補(bǔ)充性的內(nèi)容當(dāng)作段落主體的一部分。

        關(guān)于代詞、過渡詞以及標(biāo)點(diǎn)符號(hào)濫用的內(nèi)容就講到這里,其中有一些內(nèi)容是我個(gè)人的寫作喜好,其實(shí)并沒有非常明確的對錯(cuò)之分,比如前面講到列表中分號(hào)的使用,很多人這時(shí)候可能選擇使用句號(hào)。

        大家可以根據(jù)自己的判斷去處理這種模棱兩可的場景,當(dāng)然一些比較確定的規(guī)則,比如當(dāng)列表項(xiàng)只有名詞的時(shí)候,列表項(xiàng)結(jié)尾不要使用任何標(biāo)點(diǎn)符號(hào),這一點(diǎn)還是比較確定的。


         
        3 
        多用強(qiáng)勢動(dòng)詞,少用形容詞和副詞


        強(qiáng)勢動(dòng)詞和主動(dòng)語句

        很多人可能第一次聽到“強(qiáng)勢動(dòng)詞”這個(gè)說法,陌生還難以理解。如果將它翻譯成英文,對應(yīng)的單詞應(yīng)該是“Strong Verbs”,意思是強(qiáng)有力的動(dòng)詞,你可以理解為:聽起來動(dòng)作幅度大、沖擊力強(qiáng)的那一類動(dòng)詞。打個(gè)比方,假如“走”是弱勢動(dòng)詞,那么“跳”就是強(qiáng)勢動(dòng)詞;假如拿刀“切”是弱勢動(dòng)詞,那么拿刀“砍”就是強(qiáng)勢動(dòng)詞。下面這張表格列舉了一些強(qiáng)勢/弱勢動(dòng)詞的例子:

        序號(hào)
        弱勢動(dòng)詞
        (可考慮)強(qiáng)勢動(dòng)詞
        1
        走過去
        跳過去
        2
        切肉
        砍肉
        3
        出現(xiàn)異常
        拋出異常
        4
        程序退出
        程序崩潰
        5內(nèi)存增長
        內(nèi)存泄漏
        6找不到日志文件
        日志文件丟失
        7客戶提出質(zhì)疑
        客戶投訴
        8
        任務(wù)未完成
        任務(wù)延期
        9角色權(quán)限是由管理員設(shè)置的
        管理員控制角色權(quán)限
        10
        系統(tǒng)無法正常使用API返回的結(jié)果
        系統(tǒng)無法正常解析API返回的結(jié)果

        表3-1 強(qiáng)勢/弱勢動(dòng)詞對比

        上面列出了10對強(qiáng)勢/弱勢動(dòng)詞,我們觀察可以發(fā)現(xiàn):弱勢動(dòng)詞一般無法正確表達(dá)問題/事情的真實(shí)情況。在技術(shù)型文檔編寫過程中,雖然我們不能借助詞匯使用、句子構(gòu)成以及標(biāo)點(diǎn)符號(hào)等手段去傳遞感情傾向,但是也不能掩蓋真實(shí)準(zhǔn)確的內(nèi)容表達(dá)。

        在提到強(qiáng)勢動(dòng)詞時(shí),我們還要注意“主動(dòng)語句”和“被動(dòng)語句”的區(qū)別。在技術(shù)型文檔編寫過程中,應(yīng)該盡量少使用被動(dòng)語句。下面這張表格列舉了一些主動(dòng)/被動(dòng)語句的例子:

        序號(hào)
        被動(dòng)語句
        (可考慮)主動(dòng)語句
        1
        角色權(quán)限是由管理員控制的
        管理員控制角色權(quán)限
        2
        API結(jié)果無法被系統(tǒng)正常解析
        系統(tǒng)無法正常解析API結(jié)果
        3
        圖像特征是通過CNN逐步降維的方式提取的
        CNN通過逐步降維的方式提取圖像特征
        4
        這種檢測效果無法被客戶接受
        客戶無法接受這種檢測效果
        5
        經(jīng)過研發(fā)排查發(fā)現(xiàn),這個(gè)現(xiàn)象是正常的(*)
        經(jīng)過研發(fā)排查發(fā)現(xiàn),這個(gè)屬于正常現(xiàn)象

        表3-2 主動(dòng)/被動(dòng)語句對比

        上面表中第5項(xiàng)(帶*號(hào))嚴(yán)格來講不算被動(dòng)語句,但是在技術(shù)型寫作過程中,我們應(yīng)該避免使用“……是……的。”這種句式,該句式太過口語化。盡量少用被動(dòng)語句的原因有以下三個(gè):

        1. 讀起來麻煩。讀者讀到被動(dòng)語句時(shí),需要先在腦子里將其轉(zhuǎn)換一下再去理解;

        2. 難以理解。讀者有時(shí)候很難分清被動(dòng)語句中的真實(shí)主語(甚至可能省略了主語);

        3. 字?jǐn)?shù)多。被動(dòng)語句一般更長、字?jǐn)?shù)更多。

        那么被動(dòng)語句是不是完全不讓用了呢?當(dāng)然不是。仔細(xì)的讀者可能已經(jīng)觀察到了前面在舉例的時(shí)候我們有這樣一段話:

        C++語言<發(fā)明于>1980年代,它支持“指針”和“面向?qū)ο螅∣bject-Oriented)”兩個(gè)特性,C++的價(jià)值在計(jì)算機(jī)編程語言歷史上數(shù)一數(shù)二。

        上面第一句中的“……于”其實(shí)就是被動(dòng)語句,像“C++語言發(fā)明于……”、“該文檔編輯于……”這些都算被動(dòng)語句,由于賓語(這里是C++語言)更重要,所以默認(rèn)省略了真實(shí)主語(某某發(fā)明C++語言,可是某某在這里不太重要)。這類句子結(jié)構(gòu)有一個(gè)特點(diǎn)就是:賓語比真實(shí)主語重要,所以放到句子的開頭位置。

        少用形容詞和副詞

        技術(shù)型文檔講究的是一個(gè)“準(zhǔn)”字,它不像小說、散文之類的文學(xué)作品帶有很強(qiáng)的感情色彩,也不同于網(wǎng)絡(luò)博客可以摻雜一些非正式詞匯,更不能跟Marketing Speech(營銷話語)一樣常常夸大其詞。為了做好前面說的“準(zhǔn)”,技術(shù)型文檔應(yīng)該盡量少用形容詞和副詞,因?yàn)檫@些詞語大部分都屬于“主觀”表達(dá)。下面舉幾個(gè)使用形容詞和副詞的例子:

        為了保證系統(tǒng)運(yùn)行更高效,他們嘗試盡可能壓縮圖片尺寸,事實(shí)證明這個(gè)嘗試非常成功。這樣的工作看似簡單,卻蘊(yùn)含著高技術(shù)含量。

        上面這段話使用了好幾個(gè)副詞和形容詞,比如“盡可能”、“非常”、“高”。如果是技術(shù)型文檔,這段話建議調(diào)整為:

        為了提高系統(tǒng)運(yùn)行效率,他們將圖片尺寸壓縮到原來的1/3,系統(tǒng)響應(yīng)速度提升2倍。

        我們用具體的數(shù)值替換了原來的形容詞和副詞,并且直接刪掉了最后一句話,最后一句話在技術(shù)型文檔中起不到任何作用。下面這張表格列舉了部分形容詞和副詞使用不恰當(dāng)?shù)膱龊希?/span>

        序號(hào)
        形容詞/副詞
        (可考慮)調(diào)整為
        1
        經(jīng)過優(yōu)化,接口響應(yīng)速度提升明顯
        經(jīng)過優(yōu)化,接口響應(yīng)速度提升2倍
        2
        很多人反應(yīng)現(xiàn)場誤報(bào)很多
        數(shù)據(jù)統(tǒng)計(jì)發(fā)現(xiàn),現(xiàn)場誤報(bào)率為11%
        3
        大部分客戶投訴說系統(tǒng)很不好用
        最近一個(gè)月有超過50個(gè)客戶投訴說系統(tǒng)不好用
        4
        升級(jí)依賴庫后,該函數(shù)運(yùn)行很快
        將依賴庫升級(jí)到2.3.1版本后,該函數(shù)執(zhí)行時(shí)間縮短到100ms以內(nèi)
        5
        研發(fā)同事很辛苦,每天加班很晚
        研發(fā)同事很辛苦,每天23:00之后才下班

        表3-3 形容詞/副詞使用不恰當(dāng)舉例

        最后,我們來總結(jié)一下:

        1. 優(yōu)先使用方便讀者閱讀理解的動(dòng)詞和句式(強(qiáng)勢動(dòng)詞和主動(dòng)語句);

        2. 盡量少用形容詞和副詞,用具體數(shù)值代替、或者調(diào)整句子表述。


         
        4 
        正確使用術(shù)語


        這里提到的術(shù)語分兩種:一種是計(jì)算機(jī)領(lǐng)域通用的專業(yè)術(shù)語,像SDK、面向?qū)ο?、TCP/IP、微服務(wù)等等這些名詞,它們基本已經(jīng)被大眾接受和理解,我們在編寫文檔的時(shí)候不能隨意再重新去命名、調(diào)整或者改變拼寫(將“TCP/IP”寫成“Tcp/ip”)。

        另外一種是當(dāng)前文檔需要定義的術(shù)語,這種術(shù)語只有在當(dāng)前文檔上下文中才有效。我們在編寫技術(shù)型文檔時(shí),通過自己的判斷,如果認(rèn)為文檔讀者缺乏對相關(guān)術(shù)語(不管是前面哪一種)的理解,我們都應(yīng)該在文檔靠前位置給出對術(shù)語的解釋說明,也就是我們平時(shí)文檔中常見的“名詞解釋”。

        序號(hào)名詞說明
        1SDKSoftware Development Kit,軟件開發(fā)包,開發(fā)者基于該工具包開發(fā)更豐富的高層應(yīng)用。
        2內(nèi)存泄漏通過new/malloc等方法申請的內(nèi)存在使用完后未被及時(shí)釋放,程序運(yùn)行內(nèi)存占用越來越高。
        3面向?qū)ο?/span>強(qiáng)調(diào)對數(shù)據(jù)和功能的封裝,提升代碼的可復(fù)用性、可擴(kuò)展性以及靈活性。
        4FVM(*)Front Video Manager,前端視頻管理服務(wù),負(fù)責(zé)視頻接入、分發(fā)等業(yè)務(wù)。
        5視頻大數(shù)據(jù)標(biāo)簽服務(wù)(*)對視頻進(jìn)行結(jié)構(gòu)化處理,生成結(jié)構(gòu)化標(biāo)簽,并對外提供標(biāo)簽檢索等功能。

        表4-1 名詞解釋舉例(*為自定義術(shù)語)

        有些文檔可能篇幅比較短,并不是傳統(tǒng)意義上的需求設(shè)計(jì)類文檔,比如對某個(gè)線上問題分析的結(jié)果匯報(bào)、對某個(gè)模型檢測效果的驗(yàn)證報(bào)告、或者研發(fā)階段性的工作總結(jié)。這些文檔由于本身內(nèi)容就不多,大部分可能直接進(jìn)入主題,這時(shí)候如果還要在文檔中專門增加一塊名詞解釋的版塊(并且總共也就一兩個(gè)術(shù)語),就顯得比較突兀。

        另外一種對術(shù)語進(jìn)行解釋說明的方式是用我們前面提到的小括號(hào),我們可以在術(shù)語后面增加一個(gè)小括號(hào),然后在括號(hào)里添加補(bǔ)充說明。這種方式很便捷,但是只適合簡單的場景,比如在小括號(hào)里面補(bǔ)充術(shù)語的全稱或者簡稱,或者只做簡單的解釋說明。如果對一個(gè)術(shù)語的解釋內(nèi)容很長,就不太適合用這個(gè)方法,下面舉一個(gè)錯(cuò)誤的例子:

        當(dāng)視頻離線時(shí),F(xiàn)VM(Front Video Manager,前端視頻管理服務(wù),負(fù)責(zé)視頻接入、分發(fā)等業(yè)務(wù)。)會(huì)產(chǎn)生一條告警記錄,并存入節(jié)點(diǎn)數(shù)據(jù)庫。

        上面這個(gè)術(shù)語解釋內(nèi)容太長,不太適合使用小括號(hào)的方式,這種情況要么在文檔正文中專門對FVM進(jìn)行解釋,要么在小括號(hào)中只給出FVM的英文全稱即可:

        當(dāng)視頻離線時(shí),F(xiàn)VM(Front Video Manager)會(huì)產(chǎn)生一條告警記錄,并存入節(jié)點(diǎn)數(shù)據(jù)庫。

        使用小括號(hào)去做術(shù)語解釋還需要注意一點(diǎn)的是:只需要在術(shù)語第一次出現(xiàn)的時(shí)候做一次解釋即可,不需要重復(fù)多次。下面舉一個(gè)重復(fù)的錯(cuò)誤例子:

        當(dāng)視頻離線時(shí),F(xiàn)VM(Front Video Manager)會(huì)產(chǎn)生一條告警記錄,并存入節(jié)點(diǎn)數(shù)據(jù)庫。之后節(jié)點(diǎn)數(shù)據(jù)庫會(huì)將該條告警記錄同步到平臺(tái)數(shù)據(jù)庫,平臺(tái)FVM(Front Video Manager)檢測到有新的告警記錄時(shí),會(huì)通過消息中間件通知業(yè)務(wù)系統(tǒng),業(yè)務(wù)系統(tǒng)隨后將告警信息以短信(或釘釘)的方式通知到用戶。

        上面對術(shù)語FVM的解釋重復(fù)了兩次,這種做法是錯(cuò)誤的,第二次我們可以直接去掉。

        有些術(shù)語存在全稱和簡稱,我們熟悉的SDK全稱是“Software Development Kit”,但是現(xiàn)在基本沒有人再去使用它的全稱。像這種簡稱已經(jīng)被大眾熟知的術(shù)語,我們就不能再標(biāo)新立異的去用它的全稱。

        另外一些在文檔中自定義的術(shù)語,文檔作者為了便于閱讀可能也會(huì)提供一個(gè)簡寫的版本,在這種情況下,文檔前后應(yīng)該保持一致,即:要么整篇文檔都用全稱,要么都用簡稱,盡量做到一致。下面舉一個(gè)全稱簡稱使用不一致的例子:

        IVA(Intelligent Video Analytics,智能視頻分析)服務(wù)主要負(fù)責(zé)視頻解碼、模型推理、目標(biāo)跟蹤以及目標(biāo)行為分析,該服務(wù)是整個(gè)系統(tǒng)中最復(fù)雜的一個(gè)模塊。智能視頻分析服務(wù)由張三團(tuán)隊(duì)開發(fā)完成,一共耗時(shí)6個(gè)月,人力成本開銷120萬。

        上面這段話中,前半部分作者使用“IVA”簡稱(小括號(hào)中做了全稱說明),但是在后面一句話中作者又使用了全稱“智能視頻分析”,這種做法沒有遵循統(tǒng)一原則。不僅同一段落應(yīng)該保持統(tǒng)一,整篇文檔也應(yīng)該做到統(tǒng)一,術(shù)語在文檔中第一次出現(xiàn)時(shí)是簡稱,那么整篇文檔都應(yīng)該用簡稱,反之亦然。

        最后我們來總結(jié)一下,在技術(shù)型文檔中使用術(shù)語時(shí)需要注意的一些事項(xiàng):

        1. 文檔讀者不熟悉的術(shù)語(包括通用術(shù)語和文檔自定義術(shù)語)都應(yīng)該有解釋說明;

        2. 小括號(hào)只適合簡短的術(shù)語解釋場合,括號(hào)里的內(nèi)容不能太長(一兩句短語之內(nèi));

        3. 任何方式的術(shù)語解釋只需要有一次即可(術(shù)語第一次出現(xiàn)時(shí)),不要解釋多次;

        4. 術(shù)語的全稱和簡稱要保持使用一致,要么整篇文檔都用全稱、要么都用簡稱;

        5. 對于計(jì)算機(jī)領(lǐng)域的通用專業(yè)術(shù)語,需要沿用主流用法,不要隨意再去調(diào)整。


         
        5 
        正確使用段落


        單一職責(zé)

        與面向?qū)ο缶幊讨小邦惖膯我宦氊?zé)原則”一樣,文檔中的句子(特指以句號(hào)結(jié)尾的一句話)、段落也應(yīng)該遵循“單一職責(zé)原則”。前面講標(biāo)點(diǎn)符號(hào)的時(shí)候已經(jīng)提到過,同一段話中前后關(guān)聯(lián)性不大的兩句話之間用句號(hào),這樣可以保證每句話想要表達(dá)的是相對獨(dú)立的內(nèi)容。

        段落也一樣,一個(gè)段落只陳述一個(gè)主題,可以保證段落的句子不會(huì)太多、內(nèi)容不會(huì)太長,便于讀者閱讀和理解。下面舉一個(gè)段落使用錯(cuò)誤的例子:

        Excel提供一個(gè)組織數(shù)據(jù)的高效方法。我們可以將Excel想象成一個(gè)有行和列的二維表格,每一行代表一個(gè)獨(dú)立的實(shí)體,每一列代表該實(shí)體的不同屬性。Excel還具備數(shù)學(xué)功能,比如計(jì)算平均值和方差等數(shù)學(xué)操作。如果你想使用Excel來記錄圖書信息,那么每一行代表不同的書本,每一列代表書本的屬性,比如書的名稱、價(jià)格以及出版社等等信息。

        上面這段話的第一句已經(jīng)明確了段落主題:Excel能高效地組織數(shù)據(jù)??墒?,這段話中間卻穿插了一個(gè)不相干的句子,說Excel具備數(shù)學(xué)功能,能夠做一些數(shù)學(xué)操作,這句話顯然跟本段主題不一致,我們需要將其去掉:

        Excel提供一個(gè)組織數(shù)據(jù)的高效方法。我們可以將Excel想象成一個(gè)有行和列的二維表格,每一行代表一個(gè)獨(dú)立的實(shí)體,每一列代表該實(shí)體的不同屬性。如果你想使用Excel來記錄圖書信息,那么每一行代表不同的書本,每一列代表書本的屬性,比如書的名稱、價(jià)格以及出版社等等信息。

        好的開頭語

        除了要保證段落的“單一職責(zé)”之外,我們還需要給每個(gè)段落一句“好的”開頭語。那么什么是好的開頭語呢?好的開頭語要能讓讀者讀完之后就能猜到文檔作者在本段中想要陳述的主題,其實(shí)就是概括性的句子。

        還是以上面那段話為例子,它的第一句話“Excel提供一個(gè)組織數(shù)據(jù)的高效方法”其實(shí)就是很好的開頭語,它提示本段內(nèi)容主要講Excel如何高效地組織數(shù)據(jù)。如果我們將上面那段話的開頭調(diào)整一下,那么效果明顯就差了很多:

        Excel由許許多多的單元格組成,每個(gè)單元格可以包含不同的內(nèi)容。我們可以將Excel想象成一個(gè)有行和列的二維表格,每一行代表一個(gè)獨(dú)立的實(shí)體,每一列代表該實(shí)體的不同屬性。如果你想使用Excel來記錄圖書信息,那么每一行代表不同的書本,每一列代表書本的屬性,比如書的名稱、價(jià)格以及出版社等等信息。

        讀者讀完上面第一句話后,可能還是很懵,需要讀完整段話才能明白文檔作者在本段中想要表達(dá)的意思。段落的開頭語可以通過提煉段落內(nèi)容得到,我們可以在段落寫完之后回過頭提煉一句話作為本段的開頭語,下面這段話描述代碼中循環(huán)語句的作用:

        目前幾乎所有的計(jì)算機(jī)編程語言都支持循環(huán)語句,例如,我們可以編寫代碼來判斷一個(gè)用戶命令行輸入是否等于“quit”(退出命令),如果需要判斷100萬次,那就創(chuàng)建一個(gè)循環(huán),讓判斷邏輯代碼運(yùn)行100萬次。

        上面的這段話本身沒什么問題,主要介紹循環(huán)語句的功能和應(yīng)用場合。但是如果我們提煉一下,在段落開頭增加一個(gè)更好的開頭語,效果可能會(huì)提升很多:

        循環(huán)語句會(huì)多次運(yùn)行同一個(gè)代碼塊,直到不再滿足循環(huán)條件為止。目前幾乎所有的計(jì)算機(jī)編程語言都支持循環(huán)語句,例如,我們可以編寫代碼來判斷一個(gè)用戶命令行輸入是否等于“quit”(退出命令),如果需要判斷100萬次,那就創(chuàng)建一個(gè)循環(huán),讓判斷邏輯代碼運(yùn)行100萬次。

        上面開頭第一句話就說清楚了循環(huán)結(jié)構(gòu)的特點(diǎn),讀者讀完第一句話基本就知道整段內(nèi)容要講什么。一個(gè)好的開頭語能夠節(jié)省讀者的時(shí)間,因?yàn)椴⒉皇敲總€(gè)讀者都有興趣去閱讀整段的內(nèi)容,開頭語可以給讀者“是否繼續(xù)讀下去”一個(gè)參考。

        控制段落長度

        控制段落長度并沒有一個(gè)明確的標(biāo)準(zhǔn),它只是一個(gè)非常主觀的說法。如果文檔中某個(gè)段落內(nèi)容太長(比如那種一段話就占半頁Word),作者自己應(yīng)該反復(fù)閱讀幾次再對段落做一些精簡,這樣既可以節(jié)省讀者的時(shí)間,大概率也能提升意思表達(dá)的準(zhǔn)確性。

        同樣,也不太建議文檔頻繁出現(xiàn)小段落,比如整段內(nèi)容只有一兩句話那種,這個(gè)時(shí)候可以考慮段落合并或者稍微擴(kuò)充一下內(nèi)容。

        最后我們來總結(jié)一下,在技術(shù)型文檔中如何正確使用段落:

        1. 一個(gè)段落只負(fù)責(zé)講一個(gè)內(nèi)容,兩個(gè)不同的主題應(yīng)該拆分成兩個(gè)段落去陳述;

        2. 盡量為每個(gè)段落增加一個(gè)“好的”開頭語,能夠清晰表達(dá)(或暗示)本段的主題;

        3. 要控制好段落內(nèi)容長短,“不長不短”根據(jù)自己經(jīng)驗(yàn)(比如不超5~7個(gè)句子)。


         
        6 
        適當(dāng)使用列表和表格


        文字相對來講其實(shí)是一種效率比較低的表達(dá)方式。如果你想讓人快速地去理解你要表達(dá)的意思,圖片應(yīng)該是最好的一種方式,但是圖片有一個(gè)缺點(diǎn)就是:有時(shí)候它只能從宏觀上去表達(dá),無法體現(xiàn)其中細(xì)節(jié)。

        當(dāng)我們想要盡可能直觀地去陳述內(nèi)容,又想盡可能多的包含細(xì)節(jié)時(shí),我們可以考慮使用列表或者表格。有些讀者非常抵觸大段大段的文字(尤其在技術(shù)型文檔中),一種改進(jìn)方法是前面提到的“控制段落長度”,盡量讓段落內(nèi)容精簡、單一;再一個(gè)就是看看段落內(nèi)容是否能以列表或者表格的方式去呈現(xiàn),這種方式可以給人“嚴(yán)謹(jǐn)、清晰”的感覺。

        使用列表

        列表簡單來講就是將你原來用段落方式呈現(xiàn)的內(nèi)容改用項(xiàng)目(Item)的方式去呈現(xiàn),一般它主要用于枚舉、過程描述或者要點(diǎn)歸納等場合。列表中的各項(xiàng)可以是名詞、短語,甚至是句子,各項(xiàng)目之間有嚴(yán)格順序要求的列表叫“有序列表”,相反并沒有嚴(yán)格順序要求的列表叫“無序列表”。下面是以段落的方式陳述小張今天所做的事情:

        白天在公司上班期間,小張一共修復(fù)了7個(gè)bug,做了3個(gè)代碼合并(評(píng)審),并和項(xiàng)目經(jīng)理討論了前天提的新需求。晚上回到家后,小張先做飯,然后給兒子洗澡,23:30上床睡覺。

        上面這段話本身沒什么問題,用了合理的標(biāo)點(diǎn)符號(hào)和過渡詞,讀起來清晰明了。但是,如果在技術(shù)型文檔編寫中,能將這段話改用列表的方式呈現(xiàn),起到的效果會(huì)更好:

        張白天在公司:

        • 修復(fù)了7個(gè)bug;

        • 做了3個(gè)代碼合并(評(píng)審);

        • 和項(xiàng)目經(jīng)理討論前天提的新需求。

        晚上回到家后:

        1. 做晚飯;

        2. 給兒子洗澡;

        3. 23:30上床睡覺。

        我們將原來的一段話拆成了兩個(gè)列表,并在每個(gè)列表前面做了一個(gè)“引入說明”(以冒號(hào)結(jié)束),介紹了接下來列表的背景上下文。第一個(gè)列表是無序列表,因?yàn)樵牟]有突出強(qiáng)調(diào)小張白天在公司每項(xiàng)工作之間的前后關(guān)系(無順序要求),只是一個(gè)歸納統(tǒng)計(jì);第二個(gè)列表是一個(gè)有序列表,原文很明顯強(qiáng)調(diào)了小張晚上回家之后做事的先后順序(最后一項(xiàng)還給出了具體時(shí)間)。

        在技術(shù)型文檔中,合理地運(yùn)用列表這種方式去呈現(xiàn)內(nèi)容可以給人一種“邏輯嚴(yán)謹(jǐn)、思路清晰”的感覺,讓讀者更相信你講的內(nèi)容。

        在使用列表時(shí),我們應(yīng)該確保列表中各項(xiàng)內(nèi)容結(jié)構(gòu)一致,即:要么都是名詞,要么都是短語,要么都是句子。這個(gè)原則既能保證你使用列表的初衷(邏輯嚴(yán)謹(jǐn)、思路清晰),也能讓讀者讀起來更舒服。下面是一個(gè)錯(cuò)誤使用列表的示范:

        影響系統(tǒng)檢測準(zhǔn)確性的因素有:

        • 模型;

        • 產(chǎn)品開通過程中,工程師對算法參數(shù)校準(zhǔn)程度;

        • 應(yīng)用現(xiàn)場是否有燈光照明。

        上面列表一共包含3項(xiàng),每項(xiàng)的內(nèi)容結(jié)構(gòu)各不相同,第一項(xiàng)是一個(gè)名詞,第二項(xiàng)是一個(gè)句子,第三項(xiàng)是一個(gè)短語。我們將結(jié)構(gòu)統(tǒng)一后,可以調(diào)整為下面這樣:

        影響系統(tǒng)檢測準(zhǔn)確性的因素有:

        • 模型的復(fù)雜性;

        • 部署時(shí)對算法參數(shù)校準(zhǔn)的程度;

        • 應(yīng)用現(xiàn)場是否有燈光照明。

        上面是將列表中各項(xiàng)內(nèi)容修改為短語,我們還可以換另外一種方式:

        影響系統(tǒng)檢測準(zhǔn)確性的因素有:

        • 模型類型

        • 校準(zhǔn)程度

        • 環(huán)境亮度

        上面是將列表中各項(xiàng)內(nèi)容修改為名詞,由于是名詞,每項(xiàng)結(jié)尾處不使用任何標(biāo)點(diǎn)符號(hào)(參見前面專門講標(biāo)點(diǎn)符號(hào)的章節(jié))。下面是對列表運(yùn)用的總結(jié):

        1. 列表一般用于枚舉、過程描述、要點(diǎn)歸納等場合;

        2. 需要強(qiáng)調(diào)順序的時(shí)候應(yīng)該使用有序列表,其余視情況而定;

        3. 列表中各項(xiàng)內(nèi)容結(jié)構(gòu)應(yīng)保持一致,都是名詞、短語或者句子;

        4. 每個(gè)列表前面盡量添加一個(gè)明確的“引入說明”,以冒號(hào)結(jié)束。

        使用表格

        表格其實(shí)跟面向?qū)ο笥幸欢?lián)系,大部分時(shí)候表格中的一行相當(dāng)于一個(gè)對象,表格中的列相當(dāng)于對象的屬性(字段),表格和面向?qū)ο蠼M織數(shù)據(jù)的方式本質(zhì)上是一致的。技術(shù)型文檔中表格一般用來組織與數(shù)字有關(guān)的內(nèi)容,當(dāng)然也有例外,就像前面章節(jié)中用到的表格,純粹是為了組織文本內(nèi)容。

        下面是在技術(shù)型文檔中,使用表格時(shí)可以參考的一些經(jīng)驗(yàn):

        1. 組織數(shù)字相關(guān)內(nèi)容時(shí),一定要用表格(大部分人可能已經(jīng)有這個(gè)意識(shí));

        2. 組織結(jié)構(gòu)化類型的文本內(nèi)容時(shí),盡量用表格;

        3. 每個(gè)表格都應(yīng)該配一個(gè)表格標(biāo)題,簡要說明表格內(nèi)容;

        4. 文檔中的表格應(yīng)具備一致的樣式和風(fēng)格,比如標(biāo)題字體、背景填充等。

        在技術(shù)型文檔中使用表格組織文本內(nèi)容時(shí),需要控制每個(gè)單元格的文本長度。一般情況下建議單元格中只使用短語,如果必須要用段落,也應(yīng)該控制段落中句子數(shù)量(一般建議不超過2~3句)。下面是錯(cuò)誤使用表格來組織文本內(nèi)容的示范:

        序號(hào)
        語言
        介紹
        1
        C
        C語言由貝爾實(shí)驗(yàn)室發(fā)明于1969至1973年,是一種編譯型計(jì)算機(jī)編程語言。它運(yùn)行速度快、效率高、使用靈活,常被用于計(jì)算機(jī)底層驅(qū)動(dòng)以及各種語言編譯器的開發(fā)。C語言是一種面向過程的編程語言,同時(shí)它的語法相對來講較復(fù)雜,新人入門門檻比較高。
        2
        C++
        C++語言發(fā)明于1979年,是一種編譯型計(jì)算機(jī)編程語言。它衍生自C語言,繼承了C語言的一些特性,比如使用指針直接訪問內(nèi)存,同時(shí)它也支持面向?qū)ο缶幊?,提升了代碼的可復(fù)用性、可擴(kuò)展性以及靈活性。由于C++繼承了C的大部分語法,再加上本身具備復(fù)雜的類型系統(tǒng)以及泛型編程等語言特性,新人入門門檻也比較高。
        3
        Python
        Python語言發(fā)明于1991年,是一種解釋型計(jì)算機(jī)編程語言,因此運(yùn)行速度相對要慢。Python除了支持面向?qū)ο缶幊讨?,還支持函數(shù)式編程,它語法簡單,更貼近人類自然語言,新人入門門檻較低。Python是目前人工智能領(lǐng)域最熱門的語言,對應(yīng)的工具庫非常豐富。

        表6-1 三種編程語言介紹

        上面是以表格的形式來介紹C、C++以及Python三種編程語言,但是在“介紹”那一列中的文本內(nèi)容太長,我們可以換一種表達(dá)方式:

        C
        C++
        Python
        由AT&T 貝爾實(shí)驗(yàn)室發(fā)明于1969至1973年
        由BJarne Struistrup發(fā)明于1979年
        由Guido van Rossum發(fā)明于1991年
        語法比較復(fù)雜,新人入門門檻高
        語法比較復(fù)雜,新人入門門檻較高
        語法簡單,貼近人類自然語言,新人入門門檻低
        編譯型語言
        編譯型語言
        解釋型語言
        支持面向過程編程
        支持面向過程、面向?qū)ο缶幊?br>支持面向過程、面向?qū)ο?、函?shù)式編程
        偏底層、運(yùn)行速度快、使用靈活
        繼承了C語言的一些特性,在其基礎(chǔ)之上還支持面向?qū)ο蟮忍匦?br>語法簡單,學(xué)習(xí)難度低
        一般用于驅(qū)動(dòng)、編譯器、嵌入式或者其他偏向硬件層面的開發(fā)
        一般用于游戲前后端、PC客戶端的開發(fā)
        一般用于數(shù)據(jù)科學(xué)、人工智能相關(guān)開發(fā)

        表6-2 C vs C++ vs Python

        上面表格一共還是3列,但是現(xiàn)在每列代表一種編程語言,列中的每個(gè)單元格是對該語言的描述,描述內(nèi)容都比較精簡。如果你想繼續(xù)補(bǔ)充內(nèi)容,可以對應(yīng)地增加行即可。

        表格的組織方式有多種多樣,行可以變成列、列可以變成行,并沒有嚴(yán)格的限制。我們只需要找一個(gè)適合自己的方式,比如上面這種每列代表一種語言,是因?yàn)樵搱鼍靶枰榻B的編程語言只有三種,如果數(shù)量再多點(diǎn)(或者數(shù)量不確定,后期會(huì)繼續(xù)增加),那么表格寬度就不太夠、這種組織方式就不再合適。


         
        7 
        一圖勝千言


        人類在發(fā)明文字媒介之前,用的是圖形符號(hào)。圖像(或圖形、圖片)是所有內(nèi)容表達(dá)方式中最直觀的一種,同時(shí)也能提升讀者的閱讀興趣。有人專門做過研究:在文檔中增加圖像能提升讀者對文檔的喜愛程度,不管這個(gè)圖像跟文檔內(nèi)容本身是否有關(guān)系(https://reurl.cc/RjkrK6)。

        也就是說,哪怕在文檔中插入無關(guān)緊要的圖像,讀者也更愿意去嘗試閱讀文檔中其他的內(nèi)容。我們平時(shí)看別人演示PPT時(shí),如果發(fā)現(xiàn)整頁都是文字描述,大概率就不會(huì)有認(rèn)真去聽的欲望。下面是一段對雙向鏈表的文字描述:

        雙向鏈表也叫雙鏈表,是鏈表的一種。它的每個(gè)數(shù)據(jù)節(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼節(jié)點(diǎn)和直接前驅(qū)節(jié)點(diǎn)。所以,從雙向鏈表中的任意一個(gè)節(jié)點(diǎn)開始,我們都可以很方便地訪問它的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)。在應(yīng)用雙向鏈表時(shí),我們一般構(gòu)造雙向循環(huán)鏈表,鏈表首尾相連。

        上面這段描述雙向鏈表的文字本身已經(jīng)非常清晰,對數(shù)據(jù)結(jié)構(gòu)有一定基礎(chǔ)的人看完文字基本就能理解雙向鏈表的結(jié)構(gòu)和應(yīng)用場合(基于它的特點(diǎn))。但是,如果是一個(gè)零基礎(chǔ)的小白來看這段話,可能效果就不會(huì)太好(尤其如果這段話是作為PPT中的內(nèi)容,大概不會(huì)再有更多的內(nèi)容補(bǔ)充)。如果我們在這段話后面增加一個(gè)插圖,來直觀告訴讀者雙向鏈表長什么樣:

        雙向鏈表也叫雙鏈表,是鏈表的一種。它的每個(gè)數(shù)據(jù)節(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼節(jié)點(diǎn)和直接前驅(qū)節(jié)點(diǎn)。所以,從雙向鏈表中的任意一個(gè)節(jié)點(diǎn)開始,我們都可以很方便地訪問它的前驅(qū)節(jié)點(diǎn)和后繼節(jié)點(diǎn)。在應(yīng)用雙向鏈表時(shí),我們一般構(gòu)造雙向循環(huán)鏈表,鏈表首尾相連。下圖是雙向鏈表結(jié)構(gòu)示意圖:

        圖1 雙向鏈表結(jié)構(gòu)

        上面的文本配合圖片,能讓讀者更加直觀的理解雙向鏈表的結(jié)構(gòu)特點(diǎn)。當(dāng)文檔中的文本和圖片同時(shí)出現(xiàn)時(shí),讀者大概率會(huì)先看圖片,然后再結(jié)合文字去理解,加快文檔閱讀速度。

        可抽象也可具體

        技術(shù)型文檔中的插圖不一定都得是流程圖、架構(gòu)圖、或者結(jié)構(gòu)設(shè)計(jì)圖這種非常具體的技術(shù)相關(guān)圖片,還可以是抽象的、能形象表達(dá)文檔主題的圖片。下面是在技術(shù)型文檔中使用卡通和漫畫圖片的示例:

        示例1:

        Gitlab中有Label和Tag兩個(gè)概念。

        為了便于區(qū)分,這里將Label翻譯成“標(biāo)簽”,將Tag翻譯成“標(biāo)記”(在有些地方這兩個(gè)單詞翻譯并沒有嚴(yán)格的差異)。Gitlab中標(biāo)簽的作用是為了分類、快速地檢索和過濾,用戶能通過標(biāo)簽來直觀的管理Issues,比如to-do、bug等等。

        標(biāo)記的主要作用是為了歸檔,給Commit取一個(gè)形象的別名,后期快速定位和查找。GitLab中創(chuàng)建標(biāo)記可以理解為“做記號(hào)”,建立索引。一般推薦為標(biāo)記定義一個(gè)有意義的名稱,比如以版本號(hào)為名,當(dāng)我們要發(fā)布1.0版本,對應(yīng)的標(biāo)記名稱可以是“v1.0”,如果我們要發(fā)布2.0預(yù)覽版,那么對應(yīng)的標(biāo)記名稱可以是“2.0-pre”。

        示例2:

        源碼版本控制系統(tǒng)(Source Code Version Control System)主要負(fù)責(zé)對源代碼版本進(jìn)行管理,涉及到代碼提交、撤銷、比對、分支管理、代碼合并等功能。源碼管理是軟件開發(fā)過程中非常重要的一個(gè)環(huán)節(jié),它能有效保證軟件代碼質(zhì)量。

        圖1 團(tuán)隊(duì)協(xié)作

        源碼管理并不是軟件開發(fā)周期的全部,整個(gè)軟件開發(fā)周期涉及到多個(gè)流程、多個(gè)團(tuán)隊(duì)(多人)協(xié)作完成,包括立項(xiàng)/結(jié)項(xiàng)、進(jìn)度/任務(wù)管理、需求/設(shè)計(jì)、bug管理、測試、集成上線等環(huán)節(jié)。

        突出圖中重點(diǎn)

        當(dāng)我們想為文檔添加圖片時(shí),單張圖片包含的內(nèi)容不宜太過復(fù)雜,圖片應(yīng)該能準(zhǔn)確地表達(dá)意思。如果一張圖太過復(fù)雜、或者包含了一些可能引起歧義的部分,我們可以嘗試以下兩種改進(jìn)方式:

        1. 將復(fù)雜的圖拆開,一張圖對應(yīng)一個(gè)局部細(xì)節(jié);

        2. 在圖片中將重點(diǎn)區(qū)域標(biāo)記出來,讓讀者可以一眼就發(fā)現(xiàn)重點(diǎn)。

        在技術(shù)型文檔中插入復(fù)雜的系統(tǒng)架構(gòu)圖很常見,這種時(shí)候建議遵循“先宏觀,再具體”的原則,循序漸進(jìn)。我們不要一上來就放一張大圖,還想將所有的細(xì)節(jié)都包含進(jìn)去,這種想法不太現(xiàn)實(shí),這不僅對你畫圖的技能要求很高,讀者看完也容易一臉懵。下面這張圖太過復(fù)雜:

        整個(gè)視頻分析系統(tǒng)由3大服務(wù)組成,分別是Intelligent Video Analytics、Front Video Service以及Distribute Load Balance,這3大服務(wù)一共包含15個(gè)子模塊。下面是視頻分析系統(tǒng)結(jié)構(gòu):

        圖1 視頻分析系統(tǒng)結(jié)構(gòu)

        上面這個(gè)例子中插入的這張圖既想描述3大服務(wù)之間的交互關(guān)系、又想描述各個(gè)服務(wù)內(nèi)部子模塊之間的交互關(guān)系(上面只是示意圖,實(shí)際情況可能比這個(gè)更復(fù)雜)。文檔讀者碰到這種情況可能會(huì)產(chǎn)生兩個(gè)感覺:一是圖太復(fù)雜了,很難看懂,有些地方迫于空間原因字號(hào)還小;二是我需要重點(diǎn)關(guān)注的點(diǎn)在哪里?如果遵循前面提到的“先宏觀,再具體”的原則,上面這個(gè)例子可以調(diào)整為:

        整個(gè)視頻分析系統(tǒng)由3大服務(wù)組成,分別是Intelligent Video Analytics、Front Video Service以及Distribute Load Balance。下面是視頻分析系統(tǒng)中各服務(wù)之間的關(guān)系:

        圖1 視頻分析系統(tǒng)服務(wù)交互

        其中,Intelligent Video Analytics服務(wù)主要負(fù)責(zé)對視頻解碼、推理以及行為分析等結(jié)構(gòu)化操作。該服務(wù)內(nèi)部一共包含9個(gè)子模塊,模塊之間的關(guān)系見下圖:

        圖2 Intelligent Video Analytics服務(wù)子模塊交互

        Front Video Service服務(wù)主要負(fù)責(zé)視頻接入、分發(fā)、配置管理等功能。該服務(wù)內(nèi)部一共包含3個(gè)子模塊……

        另外一種情況,插入的圖片中包含了不相干內(nèi)容,文檔作者又沒有給出醒目的標(biāo)記,讀者看完不清楚關(guān)注重點(diǎn)在哪里。下面是錯(cuò)誤的示例:

        GitLab中的Release功能主要用來對倉庫中的代碼以及其他一些相關(guān)資料文件進(jìn)行歸檔,通常用于版本發(fā)布。當(dāng)有新版本發(fā)布時(shí),用戶可以基于對應(yīng)的Commit創(chuàng)建一個(gè)Tag標(biāo)記,給它一個(gè)合理的名字,比如“v1.0-pre”(代表發(fā)布1.0預(yù)覽版),然后再基于該Tag發(fā)布版本。

        后期,其他人可以通過Release菜單快速瀏覽、檢索項(xiàng)目版本發(fā)布記錄以及對應(yīng)時(shí)間點(diǎn)的相關(guān)代碼和資料。用戶可以在GitLab主界面的左側(cè)菜單中找到Release功能入口:

        圖1 Gitlab中Release菜單

        上面圖片在介紹Release功能時(shí)給出的圖片中包含的菜單項(xiàng)太多,為了讓讀者更直觀看懂圖片關(guān)注點(diǎn),可以將圖片調(diào)整如下(左右兩種都可以):

        GitLab中的Release功能主要用來對倉庫中的代碼以及其他一些相關(guān)資料文件進(jìn)行歸檔,通常用于版本發(fā)布。當(dāng)有新版本發(fā)布時(shí),用戶可以基于對應(yīng)的Commit創(chuàng)建一個(gè)Tag標(biāo)記,給它一個(gè)合理的名字,比如“v1.0-pre”(代表發(fā)布1.0預(yù)覽版),然后再基于該Tag發(fā)布版本。

        后期,其他人可以通過Release菜單快速瀏覽、檢索項(xiàng)目版本發(fā)布記錄以及對應(yīng)時(shí)間點(diǎn)的相關(guān)代碼和資料。用戶可以在Gitlab主界面的左側(cè)菜單中找到Release功能入口:

        圖1 Gitlab中Release菜單

        有準(zhǔn)確的圖標(biāo)題

        圖片是為了讀者能夠更直觀地理解文檔內(nèi)容,但是圖片畢竟不是文字,不同的人對同一張圖片理解可能存在差異,尤其對于那種不包含任何文字的圖片。因此,在文檔中插入任何圖片時(shí),我們應(yīng)該為它定義一個(gè)合適、貼切的標(biāo)題。圖標(biāo)題一般是一個(gè)名詞或者短語,作用跟前面講到的表格標(biāo)題一樣,協(xié)助讀者理解圖片所要表達(dá)的含義。


         
        8 
        統(tǒng)一樣式和風(fēng)格


        文檔的樣式和風(fēng)格其實(shí)跟我們寫代碼一樣,寫代碼要遵守統(tǒng)一的代碼風(fēng)格(變量命名、換行規(guī)則等等),寫文檔也應(yīng)該遵守統(tǒng)一的文檔風(fēng)格。公司或者組織一般都有自己的文檔風(fēng)格規(guī)范,規(guī)范會(huì)定義好正文/標(biāo)題字體字號(hào)、頁眉頁腳、頁邊距、行間距、段前段后間距等等,按照規(guī)范寫出來的文檔風(fēng)格基本就能保持一致。

        對于沒有規(guī)范可用的場合,文檔作者可以根據(jù)自己的偏好執(zhí)行即可,保證整篇文檔的內(nèi)容遵守相同的風(fēng)格,比如文檔開頭和文檔結(jié)尾的段落間距、列表樣式、對齊方式都應(yīng)該保持一致。本篇文檔的主要規(guī)范定義如下:

        1. 頁邊距上下左右2cm;

        2. 標(biāo)題18號(hào)華文仿宋,正文12號(hào)宋體,正文中表格/圖標(biāo)題12號(hào)華文仿宋;

        3. 段前/段后間距0.5,段落行間距1.5倍,段落首行對齊不空格;

        4. 表格、圖片居中對齊,圖標(biāo)題在圖片下方、表格標(biāo)題在表格上方。

        還有另外一些比較重要的樣式定義,比如列表樣式(本篇文檔中每個(gè)列表外面套了一個(gè)表格,表格無左右邊框),還比如本篇文檔涉及到了很多舉例和示范,所有的舉例示范都在表格中,并且表格有自己的樣式(字體字號(hào)、背景顏色等等)。


         
        9 
        把握好整體文檔結(jié)構(gòu)


        把握好整體文檔結(jié)構(gòu)是一件非常困難的事情,這個(gè)其實(shí)跟前面講到的文檔內(nèi)容本身沒什么關(guān)系。文檔作者在動(dòng)筆之前需要有一個(gè)宏觀的構(gòu)思,需要在腦子里先將文檔大綱梳理一遍,一級(jí)標(biāo)題可以是什么、二級(jí)標(biāo)題又可以是什么,然后考慮將合適的內(nèi)容放到對應(yīng)的章節(jié)中去。

        優(yōu)秀的作者在正式動(dòng)手之前,可能已經(jīng)有了很長一段時(shí)間的思考準(zhǔn)備,尤其對于那種非常復(fù)雜的文檔。但是這種方式對一些人來講可能不太現(xiàn)實(shí),難度太大。那么這時(shí)候就只能考慮另外一種方式,動(dòng)手之前先在白紙上打草稿,列出來文檔大綱,然后不斷修改和調(diào)整,直到滿意為止。

        其實(shí)不管上面哪種方式,文檔結(jié)構(gòu)考驗(yàn)的是作者組織內(nèi)容的思維能力。對于一些需求、設(shè)計(jì)類型的“主流”技術(shù)型文檔,考驗(yàn)的是作者對軟件需求、系統(tǒng)架構(gòu)的理解深度,該寫什么不該寫什么,寫到什么程度,這些都需要作者考慮清楚,這類型的文檔一般有標(biāo)準(zhǔn)的模板可以參考,大家平時(shí)寫得/見得也比較多。

        對于另外一些“非主流”類型的技術(shù)型文檔,比如對某個(gè)線上問題的分析報(bào)告、技術(shù)/原型調(diào)研類文檔,這些文檔一般規(guī)模比較小、也沒什么參考標(biāo)準(zhǔn),全靠作者自己去組織。

        下面就以“對某個(gè)用戶需求做技術(shù)性反饋”為例,拋磚引玉,簡單描述一下技術(shù)型文檔結(jié)構(gòu)應(yīng)該如何去組織:

        場景說明:

        視頻分析系統(tǒng)中,客戶要求在事件錄像文件中對涉事車輛目標(biāo)(或區(qū)域)進(jìn)行高亮標(biāo)框顯示,視頻錄像在播放時(shí)會(huì)有一個(gè)醒目的多邊形提醒用戶具體事件發(fā)生位置??蛻舳恍┘夹g(shù)相關(guān)知識(shí),要求公司技術(shù)研發(fā)團(tuán)隊(duì)針對該需求給出合理的需求反饋,如果需求可實(shí)現(xiàn),評(píng)估工作難度;如果需求不可實(shí)現(xiàn),說明具體原因。

        根據(jù)上面場景說明,該需求并非硬性要求。甲方提出了一個(gè)想法,并且非常貼心地考慮到了乙方是否具備條件實(shí)現(xiàn),希望給出一個(gè)實(shí)質(zhì)性的答復(fù)。公司技術(shù)團(tuán)隊(duì)在寫反饋說明文檔之前,應(yīng)該考慮以下兩個(gè)問題:

        1. 如果正常響應(yīng)該需求,具體的方案是什么、難點(diǎn)/風(fēng)險(xiǎn)點(diǎn)各是什么;

        2. 如果不能正常響應(yīng)該需求,具體原因是什么,是否有可替代方案、替代方案是什么。

        也就是說,不管最終團(tuán)隊(duì)是否響應(yīng)該需求,我們在文檔中都要有非常實(shí)質(zhì)性的內(nèi)容,不應(yīng)該是空話、套話。下面就以“不響應(yīng)”為例,描述文檔應(yīng)該包含哪些內(nèi)容:

        序號(hào)
        節(jié)標(biāo)題名稱
        主要內(nèi)容
        1
        背景說明
        用自己的話將客戶的需求完整描述一遍,不要有任何偏差,表明我方已認(rèn)真理解過原始需求。
        2
        已有錄像邏輯
        詳細(xì)描述系統(tǒng)中目前已有的事件錄像邏輯。因?yàn)槲覀儽敬问遣豁憫?yīng)該需求,所以對后面不響應(yīng)有利的內(nèi)容一定要著重強(qiáng)調(diào)(要突出已有錄像邏輯的優(yōu)勢)。
        3
        錄像標(biāo)框邏輯
        詳細(xì)描述在事件錄像文件中對涉事目標(biāo)(或區(qū)域)進(jìn)行高亮標(biāo)框的邏輯。注意這里按照理想邏輯去描述,不用考慮任何外在限制。
        4
        錄像標(biāo)框難點(diǎn)
        結(jié)合第3點(diǎn),重點(diǎn)歸納、整理出在錄像文件中標(biāo)框的難點(diǎn),比如需要對每一路進(jìn)行解碼再去疊加圖形、視頻畫面不能壓縮否則影響分辨率等等,這些對設(shè)備性能要求非常高,會(huì)增加硬件成本。
        5
        解決方案一 (不計(jì)代價(jià)去響應(yīng))
        按照理想邏輯去響應(yīng),但是要提出前提條件或者代價(jià),比如單臺(tái)設(shè)備分析路數(shù)降低到原來的一半,硬件成本是原來的2本。(其實(shí)就是要排除這個(gè)方案)
        6
        解決方案二 (可替代方案)
        提出一種可替代的方案,可以滿足客戶最開始提出的“有醒目標(biāo)記提醒用戶”。比如當(dāng)視頻錄像播放時(shí),可以在播放器上面疊加一個(gè)高亮方框,能夠大概標(biāo)記涉事車輛目標(biāo)(或區(qū)域)。同時(shí),強(qiáng)調(diào)該方案的優(yōu)勢(比如工作周期短、對成本無影響)。
        7
        結(jié)論
        其實(shí)根據(jù)前面的描述,只要認(rèn)真讀完文檔的人基本都能知道結(jié)論是什么、應(yīng)該選哪個(gè)方案。但是這里還是要書面寫上,根據(jù)前面的描述,解決方案二有更大的優(yōu)勢,建議采用方案二。

        需要注意的是,“響應(yīng)”或者“不響應(yīng)”的決定很多時(shí)候不在技術(shù)團(tuán)隊(duì)或者寫這個(gè)文檔的人手里。雖然文檔中的內(nèi)容應(yīng)該為最終的結(jié)論服務(wù),但是總體上不應(yīng)該有偏差。


         
        10 
        明確文檔的目標(biāo)群體


        文檔的目標(biāo)群體是誰?這個(gè)其實(shí)應(yīng)該是寫文檔最開始就需要明確的東西,面對不同的群體,我們文檔的內(nèi)容、結(jié)構(gòu)包括內(nèi)容描述程度都會(huì)不同。盡早確定讀者有助于在構(gòu)思階段就明確文檔內(nèi)容邊界,哪些該寫、哪些不該寫,該寫的又應(yīng)該如何去寫,這些都是編寫文檔的大方向。

        作者:周智,前微軟(中國)Windows工程院員工,目前從事于深度學(xué)習(xí)計(jì)算機(jī)視覺相關(guān)工作,交通安防領(lǐng)域的視頻目標(biāo)檢測、跟蹤和行為分析。

        成都招聘技術(shù)合伙人20-25K:

        https://www.didaproject.com/index.php?c=show&id=104

        同時(shí)還招JAVA:

        https://www.didaproject.com/index.php?c=show&id=103 

        新鮮職位,歡迎推薦



        推薦閱讀:

        世界的真實(shí)格局分析,地球人類社會(huì)底層運(yùn)行原理

        不是你需要中臺(tái),而是一名合格的架構(gòu)師(附各大廠中臺(tái)建設(shè)PPT)

        億級(jí)(無限級(jí))并發(fā),沒那么難

        論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

        華為干部與人才發(fā)展手冊(附PPT)

        企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

        【中臺(tái)實(shí)踐】華為大數(shù)據(jù)中臺(tái)架構(gòu)分享.pdf

        華為的數(shù)字化轉(zhuǎn)型方法論

        華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)

        超詳細(xì)280頁Docker實(shí)戰(zhàn)文檔!開放下載

        華為大數(shù)據(jù)解決方案(PPT)

        瀏覽 27
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            在线看片AV| 亚洲一区二区免费视频| 熟女456| 99热最新网址| 五月天欧美性爱| 7799综合| 加勒比一区二区三区| 亚洲AV无码一区二区三区少妇| 五月天成人社区| 久久WW| 九九性爱网| 91人人妻人人爽| 欧美熟妇性爱视频| 亚洲午夜久久久久久久久久久| 无码精品一区二区| 神马午夜秋霞不卡| 久久伊人综合| 99re这里只有精品6| 欧美精品18videosex性欧美| 日韩字幕久久| 亚洲vs无码秘蜜桃少妇| 91成人电影在线| 做爰视频毛片下载蜜桃视频| 撸一撸免费视频| 色五月婷婷视频| 丹麦电影《下午》| 亚洲成人高清| 国产成人91| 韩日中文字幕| 欧美精品一卡二卡| 99操99| 亲子乱婬-一级A片| 欧美黄片AAA| 国产精品三级片| 亚洲精品a| www.激情| 日韩电影| 免费成人高清视频| 亚洲第一色婷婷| 啪啪成人视频| 日韩一级无码毛片| 日逼片A| 99免费视频在线观看| 无码A∨| 中文字幕在线观看网址最新地址| 97天天干| 亚洲成人二区| 天天躁夜夜躁av| 自慰喷水在线观看| 国产美女被| 11孩岁女精品A片BBB| 操逼综合网| 欧美A片在线观看| 毛片视频网站| 人人草人人操| 久久精品内射| 99热这里只有精| 青娱乐| 中文字幕+乱码+中文乱码91在线观看| 国产精品对白| 1024手机在线观看| 日韩无码人妻一区二区三区| 狼人亚洲伊人| 国内夫妻【20p】| 秋霞午夜福利| 日本免费一级片| 欧美日韩国产高清| 无码群交| 操逼视频免费播放| 中文在线高清字幕| 超碰人人91| 成人网站高清无码| 在线观看视频免费无码免费视频| 婷婷五月天成人| 亚洲成人网站免费观看| 狠狠操婷婷| 操B图| 亚洲无码在线资源| 操逼操逼操| 青青草大香蕉在线| 天天操天天干麻豆| 黄色性视频| 败火老熟女ThePorn视频| 少妇在厨房| 国产香蕉视频| 成人视频网| 九九久久精品| 黄色A级片| 六月伊人| 中文字幕A片无码免费看| 欧美日本在线| 特级西西西西4444级酉西88wwww特 | 亚洲免费无码视频| 国产AV毛片| 爱爱91| 欧美成人性爱网| 精品无码秘人妻一区二区三区| av天堂亚洲| 亚洲第一色网| 日韩在线综合| 尻屄视频在线观看| 成人免费a片| a在线免费观看| 五月婷婷中文| 国产传媒在线观看| 91黄色视频在线观看| 性爱乱伦视频| 亚洲免费无码视频| 中文字幕免费高清| 蜜桃视频| 操逼无码| 国产精品欧美综合在线| 午夜成人福利视频在线观看| 欧美老女人操逼群| 国产乱伦片、| WW免费视频| 日韩黄色视频在线观看| 五月天色婷婷丁香| 黄色av网站免费| a天堂在线| 69av网站| 久久精品五月天| 婷婷婷色| 日本精品人妻| 在线日韩AV| 在线免费观看亚洲| 丁香五月大香蕉| 久久久久久久久免费看无码| 蜜桃精品在线观看| 久久久国产91桃色一区二区三区 | 成人免费Av| 夜夜骑射| 白丝在线观看| 国产精品毛片VA一区二区三区| 国产成人久久777777| www.色色网| www.xxx| 在线三级片视频| 精品人妻一区二区三区阅读全文 | av资源在线播放| 在线永久看片免费的视频| 亚洲A片在线观看| 在线无码一区| 久久人人操| 欧美日韩有码视频网址大全| 亚洲欧美激情视频| 成人性生交片无码免费看人| 国产操逼无码| 中文字幕日韩一级| 日本精品人妻| 91在线无码精品秘入口三人| 97人人爱| 久久成人精品| 国产高清做爱| 国产综合亚洲精品一区二| 亚洲成人电影天堂| 特级西西人体www高清大胆| 成人福利电影| 人人干天天操| 日韩小黄片| 99综合在线| 激情婷婷五月| 色色97| 欧美大香蕉伊人网| 日本人妻在线播放| 99久久丫e6| 成人AV一区二区三区| 欧美性性生交XXXXX无码| 国产看片网站| 69视频网| 国产精品久久久久久久久久| 国产欧美二区综合中文字幕精品一 | 一级黄色免费视频| 偷拍精品视频| 日韩成人精品视频| 日韩欧美黄色| 国产性爱精品影片免费看| 国产在线一二三| 成人性爱视频免费在线观看| 日韩成人大片| 久久黄色小视频| 国产17c精品视频一二三区| 久久99深爱久久99精品| 91大香蕉| 香蕉国产在线视频| 香蕉中文在线| 国产av网站大全| AV黄色网址| 99热自拍| 久久狠| 人人草人人看人人摸| 91无码人妻精品一区二区三区四| 影音先锋国产在线| 国产三级午夜理伦三级| 无码人妻一区二区三区| 天天搞天天曰在线观看| 夜夜操狠狠操| 影音先锋在线视频观看| 日本三级韩三级99久久| 91蝌蚪| 国产海角视频| 黄色免费毛片| 一区二区A片| 日韩成人无码专区| 一级aa片| 中文字幕操逼网站| 国产性受XXXXXYX性爽| 国产avwww| 午夜福利影片| 中文无码人妻| 很很日| 91偷拍与自偷拍精品无码| 五月天一区二区三区| 亚洲天堂在线观看免费| 久草免费在线| 天天日很很操| 亚洲视频天天射| 河南熟妇搡BBBB搡BBBB| 熟妇人妻中文AV| 91成人在线观看学生和老师| 日本免费不卡视频| 天堂一区二区18| 色欲亚洲| 亚洲无码二区| 69亚洲视频| 一级片黄片| 婷婷五月综合在线| 五月丁香五月婷婷| 日韩一级无码毛片| av网站在线播放| 大香蕉国产精品视频| 老欧性老太色HD大全| 日韩午夜欧美精品一二三区| 国产免费AV在线观看| 成人福利午夜A片公司| 欧美日批| 久久久久久三级电影| 最近最火中文字幕mv歌词| 欧美午夜成人一区二区三区| 在线你懂| 欧美成人不卡| 在线三级片视频| 五月天婷婷基地| 天天色播| 国产超级无码高清在线视频观看| 亚洲成年视频| 成人三级av| 91无码一区二区三区在线| 天天干天天干天天操| 午夜AV在线观看| 成人做爰A片AAA毛真人| 久久系列观看完整指南| 一区二区成人视频| 一区二区三区四区免费观看| 免费18蜜桃久久19| 久久久极品| 日韩在线一级| 久久久久久久国产| 一级aa视频| 国产乱伦内射| 99色视频| 成人毛片在线大全免费| 成人在线毛片| 自拍偷拍综合| 五月婷婷色色网| 久草青| 日日夜夜av| 欧美成人精品无| 日韩v片| 少妇视频一区| 亚洲激情黑人| 日日久视频| 日韩久久视频| 免费一区二区三区| 九九九网站| 亚洲日本视频| 一级A片免费看| 就去色色五月丁香婷婷久久久| AA视频网站| 成人精品水蜜桃| 国产精品福利在线观看| 成人福利视频在线| 日韩中文字幕高清| 天天干天天日天天操| 日韩高清无码免费观看| 99久久99久久| 乱码少妇| 亚洲AV无码成人精品区久| 日韩高清av| 久久久久久无码日韩欧美电影 | 影音先锋色色| 西西人体大胆裸体A片| av无码在线观看| 成年人激情网| 欧美黄色毛片| 最近中文字幕2022在线观看A| 亚洲人免费视频| 青青操逼视频| 日韩中文字幕无码人妻| 亚洲无码精品一区| 亚洲日韩一区二区| 另类老妇奶性生BBwBBw偷拍| 免费A网站| 熊猫AⅤ| 日本亚洲中文字幕| 无码精品一区二区三区同学聚会| 亲子乱AV一区二区| 激情深爱五月| 国产日逼视频| 免费观看一级毛一片| h片免费在线观看| 毛片学生妹| 欧美嗯啊| 午夜乱伦| 五月六月婷婷| 精品久久久久久久久久| 国产精品一卡二卡三卡| 亚洲三级黄色视频| 丝瓜视频污APP| 五月婷视频| 精品中文字幕在线观看| 免费的黄色视频网站| 伊人小视频| 一级A片视频免费看| 中文字幕av免费观看| 激情婷婷五月| 亚洲在线观看免费| 色呦呦中文字幕| 美女在线扣穴| 精品欧美乱码久久久久久| 亚洲在线视频| 熟女人妻在线| 一级AV片| 亚洲AV无码蜜桃| 欧美自拍视频在线观看| 高清免费在线中文Av| 亚洲av男人天堂| а√在线中文网新版地址在线| 久久另类TS人妖一区二区| 国产精品的电影| 九色蝌蚪视频| 91人人妻| 国产成人777777精品综合| 中文字幕人妻无码| 亚洲国产综合AV在线| 影音先锋国产| 中字幕视频在线永久在线观看免费| 草B视频| 欧美性猛交一区二区三区精品| 求欧美精品网址| 黄色电影免费看| 国产成人av在线观看| 水蜜桃视频在线观看| 大香蕉久久伊人| 久久人妻熟女中文字幕av蜜芽| 影音先锋三级资源| 欧美成人无码A片免费| 久久大伊人| 亚洲精品无码a片| 懂色成人视频在线观看| 人人插人人爽| 操碧一区| 俺也去五月婷婷| 色秘乱码一区二区三区| 国产av三级片| 亚洲无码一级电影| 亚洲在线网站| 欧美footjob| 男女视频91| 午夜无码鲁丝片午夜精品一区二区 | 中国老太卖婬HD播放| 北京熟妇搡BBBB搡BBBB| 亚洲福利视频电影精| 影音先锋成人无码| 亚洲AV无码一区二区三竹菊| 国产精品久久久999| 综合色国产精品欧美在线观看| 欧美1区2区| 久操伊人大香蕉| 又黄又爽的网站| 91白浆肆意四溢456| 白嫩外女BBwBBwBBw| 日本肏逼视频| 国产一级a毛一级a做免费图片| 女人的天堂网| 人妻精品一区二区| 综合网在线| 99免费在线观看| 国产精品999999| 亚洲精品欧美| 人妻啪啪视频| av在线资源| 久激情内射婷内射蜜桃欧美一级 | 五月天综合网| 亚洲女人视频| 特特级毛片| 日韩免费在线播放| 色噜噜网站| 西西特级无码444www| 欧美一级免费A片| 在线观看中文字幕av| 午夜无码三级| 欧美黄色站| 无码人妻在线| 欧美色逼| 翔田千里一区二区| 国产在线97| 伊人在线视频| 欧美久久性爱| 強暴人妻一区二区三区| 久久99嫩草熟妇人妻蜜臀| 黄页网站视频| 人妻视频在线| 国产青草视频| 日韩中文性受视频| 国产女同性系列| 久久高清亚洲| 五月天无码视频| 超碰人人操97| 中文字幕在线观看福利视频| 欧美日韩国产中文字幕| 午夜老湿机| 国产免费操逼视频| 又黄又爽视频| 特黄特黄免费看| 亚洲A级| 91精品国产乱码久久久久| 久久久久久久国产精品| 欧美亚洲日韩一区二区| 大奶一区二区| 麻豆午夜成人无码电影| 三级AV在线观看| 国产1区| 中文无码熟妇人妻| 黄色性视频| 一级片无码| 噜噜噜久久久| 日本三级片在线动| 一级a片免费观看| 日韩无码a| 97福利视频| 日韩一级黄色毛片| 蜜桃视频成人版网站| 五月婷婷婷| 乱伦激情| 国产g蝌蚪| 色婷婷狠狠| 日韩精品A片| 成人毛片在线播放免费| 天天肏天天干| 久久久91人妻无码精品蜜桃ID| 成人久久久| www.99av| 欧美综合区| 无码精品ThePorn| 在线观看免费黄色| 无码婬片A片AAA毛片艳谭| 九九超碰| 久久色婷婷| 免费看V片| 中文字幕视频在线| 麻豆md0049免费| 一级a一级a爱片兔兔软件| 国产秘久久一区二区| 69成人视频| 夜夜骑免费视频| 插吧插吧网| 中日韩特黄A片免费视频| 91国产视频网站| 无码成人片| 亚洲熟女av中文字幕| 欧美爱爱视屏| 中文人妻第9页| 精品孕妇孕交无码专区| 免费A片在线| 麻豆回家视频区一区二| 国产操美女| 高清无码小视频| 午夜黄片| 三级久久久| 日韩中文字幕av在线| 国产中文人人国际| 中文字幕AV在线观看| 尤物在线免费视频| 俺也来俺也去WWW色| 99久久综合| 亚洲色综合久久五月| 88av在线播放| 美女大吊,网站视频| 永久免费视频| 日韩爆乳在线| 蜜桃在线无码| 北条麻妃无码| 福利在线播放| 国产足交视频| 欧美熟女内射| 日韩视频中文字幕| 微拍福利一区| 激情国产AV| 日韩成人片无码| 在线观看污视频| 亚洲人妻系列| 亚洲国产精品VA在线看黑人| 久草社区在线| 99久久精品国产一区色| 国产精品久久久久无码| 亚洲一区二区视频在线观看| 综合色国产精品欧美在线观看 | 无码AV一区| av女人的天堂| 欧美老妇大BBBBXXXX| 亚洲一级无码| 国产精品国产精品国产专区| 黄色视频在线免费观看网站| 午夜精品18视频国产| 大香蕉伊人在线视频| 中文字幕观看在线| 欧洲一区在线观看| 中日韩精品A片中文字幕| 91AV视频在线观看| 欧美日韩成人视频| R四虎18| av无码不卡| 国产91白浆四溢| 黄色毛片在线观看| 艳妇乳肉豪妇荡乳AV无码福利| 无码一区二区黑人猛烈视频网站 | 欧美日韩日逼视频| 日本不卡在线观看| 狼友在线视频| 91人妻无码精品一区二区| 黑人精品欧美一区二区蜜桃| 热re99久久精品国产99热| 字幕一区二区久久人妻网站| 婷婷中文字幕| 日韩精品人妻中文字幕第4区| 国产91久久婷婷一区二区| 91久久性奴调教| 成人三级视频| 亚洲天天| 午夜福利影视| 日本黄色视频大全| 免费A级| 成人影视亚洲| 操逼的网站| 亚洲AV无码乱码国产精品蜜芽| 五月天一区二区三区| 97色色视频| 精品无码一| 农村A片婬片AAA毛片| 精品麻豆| 国产丝袜人妖TS系列| 欧美MV日韩MV国产网站| 成年人性生活免费视频| 久青草视频| 91成人视频在线播放| 九色自拍视频| 亚洲无码专区视频| 麻豆999| 91久久久裸身美女| 欧美在线播放| 国产中文字幕在线视频| 欧洲亚洲视频| 夫妻-ThePorn| 久久亚洲一区| 亚洲高清视频无码| 撸一撸成人在线做爱视频。| 激情网站在线观看| a在线观看视频| 欧美高清无码在线观看| 操逼视频高清无码| 瑟瑟免费视频| 欧美成人不卡| 中文字幕激情精品| 97久久97欧美精品A片| 五月天色综合| 国产免费高清视频| 青青青青青操| 亚洲国产欧美在线| 日本天堂网站| 人妻少妇被猛烈进入中文字幕| 99re国产| 国产粉嫩| 国产午夜在线观看| 911精品国产一区二区在线| 草榴在线视频| 亚洲免费天堂| 无码观看视频| 激情五月色五月| 乱伦无码高清麻豆视频一区二区| 国内特级毛片| 日韩有码第一页| 欧美日韩一区二区在线观看| 91无码秘蜜桃一区二区三区-百度 精品人妻一区二区三区在线视频不卡 | 中文字幕浅井香舞被黑人俘虏| 亚洲激情网| 日韩人妻精品无码制服| 无码人妻系列| 嫩BBB槡BBBB槡BBBB视频-百度| 日韩爆乳一区二区三区| 日韩高清无码观看| 在线免费观看黄色网址| 久草中文在线视频| 亚洲福利久久| 肉片无遮挡一区二区三区免费观看视频| 亚洲欧美久久| 青青草青娱乐| www.国产在线| 壁特壁视频在线观看| 久久婷婷激情| 亚洲精选一区二区三区| 91欧美性爱| 激情白浆| 北条麻妃九九九在线视频| 91人妻无码精品| 求毛片网址| 韩国中文字幕HD久久精品| 91精品在线播放| 天天干天天操天天射| 波多野结衣AV在线播放| 黄色一级a片| 欧美一级在线视频| 亚洲中文免费视频| 国产成人无码精品久在线观看| 在线观看成人18| 夜夜嗨Av禁果Av粉嫩AV懂色Av| 国产一级片无码| 久操国产视频| 日韩在线视频二区| 亚洲国产av电影| 亚洲欧美激情视频| 91在线无码精品秘网站| 怡春院综合成人社区| 人人摸人人看| 在线观看免费黄色视频| 成人自拍偷拍视频| 久草福利在线观看| 青青草91| 日韩精品成人电影| 成人区精品一区二区婷婷| 色哟哟国产精品| 国产成人自拍在线| www.色悠悠| 欧美一级特黄A片免费看| 欧美激情爱爱| 亚洲精品久久久蜜桃| 九九在线观看视频| 麻豆精品一区| 天天干天天色| 亚洲va在线| 日韩黄色片网站| 日韩精品人妻中文字幕有| 熟女人妻在线观看| 欧美日韩精品一区二区三区视频播放| 高清无码在线视频观看| 五月天婷婷成人| a片视频免费| 日批动态图| 在线视频你懂| 高清无码在线视频观看| 不卡成人| 日本一本草久p| 在线视频99| 国产毛片一区| 成人无码免费视频| 日韩大鸡巴| 亚洲第一无码| 日木毛片| 亚洲欧美成人网站| 三上悠亚无码破解69XXX| 黄片小视频在线观看| 日本三级黄色| 超碰久操| 大香蕉伊人网站| 久久精品一区二区三区蜜芽的特点| 一区二区成人电影| 无码日| 男人天堂2024| 91九色在线观看| 亚洲精品日韩无码| 国模精品无码一区二区免费蜜桃| 亚洲日韩中文字幕在线| 日本久久电影| www.99| 激情丁香五月| 嫩BBB嗓BBBB榛BBBB| 丰满人妻一区二区三区视频在线不卡 | 三上悠亚无码破解69XXX| 欧美偷拍精品| 97人妻精品一区二区三区视频| a黄色片| 日本黄色中文字幕| 久草综合视频| 国产高清免费视频| 免费A片视频| 1插菊花综合网| 久久永久免费精品人妻专区| 日韩一区二区三免费高清在线观看| 日韩黄色A级片| 99AV| 好看的中文字幕av| 五月天操逼网站| 成人性爱免费网站| 在线观看免费视频黄| 欧美sesese| 人人射在线| 嫩BBB槡BBBB槡BBBB撒尿| 欧美日韩日逼| 成人天堂| 欧美在线中文字幕| 日本黄色片| 大鸡巴日| 日韩成人AV在线播放| 91大神精品| 午夜试看120秒体验区的特点 | 日韩免费高清| 黄色特级aaa片| 青青草综合| 9l蝌蚪PORNY中文| 青青草视频91| 国产一级片免费| 男人的天堂在线播放| 超碰久操| 亚洲有码在线播放| 尻屄网站| 亚洲AⅤ| 久久精品99视频| 亚洲AV片一区二区三区| 黄色A毛片| 亚洲日韩在线中文字幕| 91无码人妻精品一区二区蜜桃| 大香蕉做爱| 五月丁香花| 边摸边做| 91AV视频在线观看| 少妇无码一区| 国产亚洲婷婷| 欧美性猛交ⅩXXX无码视频| HEYZO少婦AV無碼精品| 亚洲无码高清视频在线| 大香伊人久久| 99热超碰| 免费中文字幕| 免费看黄片视频| 欧美自拍第一页| 99精品免费在线观看| 91人妻人人澡人人爽人人精| 成人av免费在线观看| 四川少妇搡bbbbb搡多人| 美女av日逼| 裸体黄色一极大片| 中文字幕日韩美| 精品亚洲一区二区三区四区五区 | 亚洲无码福利| 天堂在线视频| 国产一区视频在线| 69福利社| 日韩无码不卡视频| 欧美一级特黄A片免费看| 91小宝寻花一区二区三区三级| 爽好紧别夹喷水欧美| 麻豆精品国产| 五月丁香人妻| 18精品爽国产冫绿帽社| 99精品在线观看视频| 国产一区二区三区免费播放| 久久精品欧美| 仙踪林777777野大粗| 一本色道无码人妻精品| 免费黄色视频网站大全| 无码精品久久| 双飞人妻13p| 久久嫩草在线影院| 99久久人妻精品免费二区| 欧美操逼电影| 色五月在线观看| 午夜福利成人视频| 无码人妻一区二区三区免费九色| 亚洲AV无码一区毛片AV| 日韩精品无码人妻| 亚洲一区二区三区在线视频| 国产一区二区三区视频在线观看| 国产无遮挡又黄又爽免费网站| 特黄特黄免费看| re久久| 九九精品在线视频| 三级片在线网站| 91精品人妻一区二区三区蜜桃| 瘦精品无码一区二区三区四区五区六区七区八区 | 51妺妺嘿嘿午夜成人A片| 综合欧美国产视频二区| 大陆搡BBBBB搡BBBBBB | 国产足交| 大香蕉综合在线| 亚洲AV无码成人网站国产网站| 十八无码成人免费网站| 777777国产7777777| 麻豆视频在线| 狼友在线视频| 国产极品久久久| 亚洲三级电影在线观看| 国产精品乱| 东京热精品| 免费看特别黄色视频| 色色网站在线观看| 日本一区二区三区免费观看| 日韩十八禁| 日韩精品一区二区三区四区 | 伊人影院久久| 嫩BBB搡BBB槡BBB小号| 九九免费视频| 在线成人毛片| 国产精品91在线| 91小仙女jK白丝袜呻吟| 国产中文字幕亚洲综合欧美| 一级aa视频| 色吧| 国产美女自拍视频| 91亚洲精品久久久久蜜桃| 欧美大屌网站| a级网站| 插菊综合网| 婷婷视频网站| 欧洲三级网观看| 丝袜一区| 99视频免费看| 十八禁网站在线观看| 亚洲视频,中文字幕| 国产黄色视频免费观看| 撸一撸成人在线做爱视频。| 成年片免费观看网站免费观看,亚洲+欧... | 欧美大屌视频| 强伦轩人妻一区二区三区最新版本更新内容 | 色吧av| 在线AⅤ| 国产成人一区二区三区A片免费| 岛国无码AV在线观看| 久久99久久99| 水果派解说在线观看| 久久久久久麻豆| 人人操人人模| av大全在线观看| 亚洲三级视频| av天堂一区| 嫩BBB槡BBBB槡BBBB视频-百度| 少妇大战28厘米黑人| 人人艹在线观看| 蜜臀av在线播放| 理论片熟女奶水哺乳| 美女av免费| 动漫一区二区| 蜜桃av在线播放| 亚洲综合免费观看高清完整版在线| 国产av日韩av| 青娱乐国产在线视频| 韩国高清无码| 国产婬片lA片www777| 亚洲精品成AV人片天堂无码| 97精品| 日韩精品一区二区三区在线观看免费 | 五月婷婷俺來也| www.xxx| 国产精品视频福利| 成人影视亚洲| 日韩无码电影| 黑人人妻黑人ThePorn| 久久嫩草在线影院| Av高清无码| 亚洲网站视频| 操比一区| 免费人成视频在线| 婷婷五月情| 亚洲国产精品成人va在线观看| 老鸭窝成人视频| 97国产免费| 日逼网站国产| 日韩一区不卡| 日韩精品人妻中文字幕| 久月婷婷| 国产美女一级真毛片酒店| 国产激情小视频| 操逼专区| 天天日天天搞| 丁香五月激情综合| 亚洲AV女人18毛片水真多| 波多野结衣在线网站| 亚洲性精| 91蜜桃视频在线观看| 无码AV在线观看| 亚洲啊V| 大香蕉AV在线观看| 久色| 日韩一区二区视频在线观看| 亚洲成人观看| 大香蕉av一区二区三区在线观看 | 国产天堂| 无码专区亚洲| 青青草超碰在线| 91亚洲国产成人| 12——13女人毛片毛片|