文 | 一鳴
讀大學(xué)的時(shí)候我選的專業(yè)是計(jì)算機(jī),大一下學(xué)期開始學(xué)習(xí)編程。我記得有一次,一項(xiàng)編程作業(yè)出了一點(diǎn)問題,我對(duì)其反復(fù)調(diào)試以找出錯(cuò)誤,一直忙到凌晨四點(diǎn)才把問題全部解決。當(dāng)時(shí)我心里興奮難言,跟通宵寫完了一部中篇小說一樣痛快。那時(shí)候我就發(fā)現(xiàn)自己對(duì)編程感興趣,畢業(yè)之后也找了一份程序員工作。
公司里的程序員分了兩個(gè)方向,一個(gè)開發(fā)方向,一個(gè)維護(hù)方向。顧名思義,開發(fā)小組負(fù)責(zé)研發(fā)新產(chǎn)品,維護(hù)小組是在舊產(chǎn)品的基礎(chǔ)上進(jìn)行一些小改動(dòng)或者修復(fù)小毛病。大部分時(shí)間里我都呆在開發(fā)組,我認(rèn)為開發(fā)比維護(hù)更有意思。工作幾年來,我發(fā)現(xiàn)自己的興趣點(diǎn)在于創(chuàng)造,編程和寫作都能給我滿足感。盡管我喜歡編程這份工作,但也知道它并不是我此生最大的興趣所在,后來我選擇了更加純粹的創(chuàng)造性工作,當(dāng)一個(gè)小說寫作者。
幾年程序員工作的一些感悟和習(xí)慣可以很好地應(yīng)用到寫作領(lǐng)域。軟件開發(fā)中有一個(gè)術(shù)語叫“迭代式開發(fā)”,簡(jiǎn)單理解就是先做出一個(gè)功能簡(jiǎn)單但是可以運(yùn)行的系統(tǒng),然后在這個(gè)可運(yùn)行的系統(tǒng)上進(jìn)行逐步擴(kuò)充。有一個(gè)時(shí)期我負(fù)責(zé)一個(gè)大模塊的開發(fā),那也是我第一次接到大任務(wù)。那時(shí)我還不會(huì)采用迭代式開發(fā),而是習(xí)慣性采用“瀑布式開發(fā)”,先把所有的細(xì)節(jié)和功能設(shè)計(jì)好,然后再開始編程實(shí)現(xiàn)功能。
一開始光是數(shù)據(jù)表就設(shè)計(jì)了幾十個(gè),各種設(shè)計(jì)文檔寫了一堆。隨著設(shè)計(jì)工作一路下來,我發(fā)現(xiàn)那個(gè)模塊組件的復(fù)雜性超出我的想象,里面復(fù)雜多變的程序邏輯也讓我頭大如斗。這種情況就好比工頭要我建一所房子,而我卻建成了迷宮,還把設(shè)計(jì)圖弄丟了,自己困在里面無法脫身。主管見我被這個(gè)任務(wù)折騰得心力交瘁,沒有讓我跟進(jìn)后面的編碼工作。這是我工作幾年來最大的一次失敗,我一度感到羞愧郁悶。但這次失敗的經(jīng)歷讓我明白到,面對(duì)大規(guī)模任務(wù)“瀑布式開發(fā)”并不適合自己。
之后我又接了一個(gè)任務(wù),也是一個(gè)重要的系統(tǒng)功能開發(fā)。這一次我就沒有再用“瀑布式開發(fā)”,而嘗試使用“迭代式開發(fā)”。我先提取出關(guān)鍵功能,并早早把它實(shí)現(xiàn)出來,這是一個(gè)能運(yùn)行的系統(tǒng)。接下來,我再對(duì)總體功能進(jìn)行拆分,把功能要點(diǎn)羅列出來,每一次只實(shí)現(xiàn)一個(gè)功能。在這樣不斷擴(kuò)充之下,復(fù)雜的系統(tǒng)逐漸成型,實(shí)現(xiàn)過程也比我之前想象的要容易一些。
跟之前“建迷宮”的感覺很不一樣,這一次開發(fā)的條理性清晰了很多,系統(tǒng)開發(fā)的進(jìn)度,當(dāng)前的功能狀況我都能心中有數(shù)。當(dāng)然,原來的一些設(shè)計(jì)跟后面的功能相沖突,也需要及時(shí)修正而付出一些時(shí)間精力。事實(shí)上,也難保“瀑布式開發(fā)”的實(shí)現(xiàn)過程中不會(huì)出現(xiàn)矛盾,而且各種設(shè)計(jì)已經(jīng)確定下來,引發(fā)出連鎖效應(yīng)式的修改成本可能更大。最重要的是,這個(gè)過程來得舒服,還有幾分實(shí)驗(yàn)成功的樂趣。能在工作中感受到快樂,這是一件很難得的事情。
后來我開始寫長(zhǎng)篇小說,我也不知不覺地沿用了迭代式開發(fā)的方式。在寫一部小說之前,我會(huì)先設(shè)計(jì)好作品的完整性。我把作品中的一些大事件想出來,然后進(jìn)行估算,如果這一部作品包含了這些事件,它的起承轉(zhuǎn)合是不是完整了,以這些事件作為作品的主要?jiǎng)∏槭遣皇亲銐蚝每础_@些事件列表也可以理解為簡(jiǎn)單的大綱。定好大綱之后,我針對(duì)每個(gè)大事件進(jìn)行寫作,類似于迭代式開發(fā)中的功能擴(kuò)充。創(chuàng)作每個(gè)大事件的過程,也是這個(gè)模式的嵌套實(shí)現(xiàn):先定好事件,起承轉(zhuǎn)合都安排好之后再創(chuàng)作正文。我之前寫過一些關(guān)于大綱設(shè)計(jì)的文章,談到大綱的一個(gè)作用就是保持作品的完整性。大綱的價(jià)值在于,在最壞的情況之下,小說的情節(jié)也能寫到這個(gè)水平。
一開始我并不能把小說的各個(gè)細(xì)節(jié)完全想好,我只是先把關(guān)鍵事件記錄下來。每一個(gè)大事件作為一次創(chuàng)作的完整過程:包括情節(jié)構(gòu)思,寫正文,修改分章。跟編程類比,相當(dāng)于一個(gè)功能的開發(fā)過程,先設(shè)計(jì)再實(shí)現(xiàn)后測(cè)試。我發(fā)現(xiàn)這樣的寫作方式更容易保持我的創(chuàng)作熱情,我的作品有一個(gè)逐漸成型的過程,它的進(jìn)度能被我清楚感知。
作為寫作新人,我也經(jīng)歷過全憑靈感創(chuàng)作的階段。有一年我花了十個(gè)月的時(shí)間寫一部武俠小說,起初想寫六萬字左右的篇幅。寫下來收不住,結(jié)果寫了差不多十八萬字。而且這個(gè)寫作過程常常感到痛苦,不知道接下來要怎樣寫,腦子里一團(tuán)混亂。我隱約知道故事發(fā)展的方向,但細(xì)節(jié)毫無頭緒。到了后來,我回想起這個(gè)寫作過程,感覺它跟之前那次失敗的編程經(jīng)歷差不多。總體感覺是混亂,更難受的是長(zhǎng)期看不到盡頭,不知道哪一天才能將它完成。這種挫敗感一度讓我創(chuàng)作停滯,造成惡性循環(huán)。我不知道自己會(huì)不會(huì)摸索出更好的創(chuàng)作方式,而目前迭代式的創(chuàng)作模式是最適合我的。
曾經(jīng)有朋友問我,為什么從程序員轉(zhuǎn)變成小說寫作者,感覺這個(gè)兩個(gè)職業(yè)完全沒有相通的地方。這篇文章正好回答這個(gè)問題,兩者確實(shí)有相通點(diǎn):第一點(diǎn),它們都是創(chuàng)造性的工作;第二點(diǎn),工作過程相似,迭代模型可以適用于編程和寫作。
它們之間確實(shí)也有不同的地方,我感覺最明顯的一點(diǎn)就是對(duì)靈感的需求。編程工作在設(shè)計(jì)階段需要的靈感比較多,實(shí)現(xiàn)過程所需的靈感不多。甚至,編程有很多成熟的設(shè)計(jì)模式,可以直接采用相應(yīng)的設(shè)計(jì)解決對(duì)應(yīng)的問題,免去自己動(dòng)腦設(shè)計(jì)。編程的實(shí)現(xiàn)過程基本上是體力活,哪怕腦子有點(diǎn)累了,但還是知道工作應(yīng)該怎樣做下去,依然可以碼字如飛。寫作則不然,不管在設(shè)計(jì)階段還是實(shí)現(xiàn)階段,無時(shí)無刻都需要靈感。寫作者大概都有過這樣的經(jīng)歷,明明腦袋很清醒,但是沒有靈感,想寫也寫不下去。
在我看來,寫作跟編程最大的區(qū)別在于對(duì)待“復(fù)用”的態(tài)度。編程鼓勵(lì)復(fù)用,以提高工作效率,把現(xiàn)成的功能和代碼稍稍改一下就可以直接使用。編程者可以自己開發(fā)完整的組件,同一個(gè)組件可以用到多個(gè)項(xiàng)目之中。而寫作則不鼓勵(lì)“復(fù)用”。精巧的比喻只能出現(xiàn)一次,如果多次出現(xiàn)就會(huì)被讀者批評(píng),甚至作者慣用的高頻用詞被讀者發(fā)現(xiàn)了,他們也會(huì)覺得別扭。寫作者不要有“口頭禪”,發(fā)現(xiàn)了要及時(shí)修改。有趣的情節(jié)設(shè)計(jì)也只能出現(xiàn)一次,用多了讀者同樣會(huì)反感。如果某些橋段跟另一部作品類似,更有可能被指責(zé)抄襲,這可是寫作界非常嚴(yán)重的罪名。說到這里,可能有朋友會(huì)以網(wǎng)文的套路模式向我反駁。熟悉我的朋友都知道我對(duì)這種現(xiàn)象的態(tài)度,在此也不多作討論了。
更多寫作經(jīng)驗(yàn)分享請(qǐng)點(diǎn)擊:【寫作那些事】目錄
關(guān)于轉(zhuǎn)載問題:請(qǐng)聯(lián)系我的經(jīng)紀(jì)人 南方有路
青春小說《晴時(shí)有風(fēng)》已經(jīng)上市,請(qǐng)大家多多支持~