大芬村與編程
又到了星期五晚寫文章好時刻,這次聊點什麼呢?
前幾天在新聞上看到一則專題報導,介紹大陸大芬村的傳奇發展。
根據報導,大芬村是大陸最大的複製畫產製地,每年製造一百萬幅各式複製畫,約佔全中國產量 60%,主要銷往歐美。
報導中帶了許多當地的畫面與背景介紹,但最讓人印象深刻的一段則是訪問該地官員時所說的:
…當地的年輕畫家每天至少要仿畫十幅,每幅約耗一至兩小時不等,在這樣經年累月的仿繪臨摹過程中,不斷體驗世界最好的作品,在一幅幅重覆繪製過程中領悟到細節、參透了意念,最終就會產生出自已的想法…
當時看了就覺得這跟寫程式很像~雖然編程跟繪畫比起來比較不那麼藝術性,但它也不是全然的理性運作。
主要的原因是,學會基本的編程技巧很容易,學會系統分析、設計、pattern、framework也不是那麼的難,基本上只要有心六個月到一年間都可以大致摸過一遍。
但困難的地方在於,學過一遍不代表能上手,就算上手,也不見得瞭解許多細節的設計理念與哲學,而這些細節,就只能透過不斷的重覆,在許多同類型與不同類型的實作中去體會,才能慢慢吸收精華,然後產生屬於自已的想法。
這就跟大芬村的複製畫家們一樣,第一次仿『蒙納麗莎』時,鐵定只能畫個粗略,搞不好連鉛筆稿都畫的亂七八糟,等到畫了十次二十次時,開始對整幅畫的結構、色彩與平衡有了深一層的體會,等到畫到第一百、兩百次時,就可能開始看出許多原本看不到的東西,例如微小的筆觸、轉折、刷痕與染色。
在編程的世界也經常出現同樣的事,由於教課的關系,往往同一個範例在一年內要教十來次,在每次的重寫與重構過程中,就會開始對以往「只是會寫」的許多東西開始有不一樣的體認,例如看出更宏觀的架構或不一樣的設計方式;而隨者寫的次數增加,手感也就越來越好,面對問題時的敏銳度也大增,可以在很短的時間內就看出problem domain 的重點與結構,然後選用適當的策略來解決。
類似的經驗在許多方法論的學習上也曾出現過,例如 UML, pattern, XP等,看完書練習一兩次都是不夠的,只有透過在專案實作中看過十幾二十次後,才會開始對這些東西有感覺,知道那些 use case 很重要一定要詳細列出,那些 UML 圖一定要畫將來coding才走的順暢,那些 iteration 該切的更細或合併,當然,還有最重要的,那些特質的人可以放到那個位置負責什麼樣的工作(用人也是要靠試誤的啊~)。
而大芬村的畫家再下去會怎麼發展呢?
如果是很認真的畫家,在經歷幾百次重覆的臨摹後,不但看到了細節中的細節,也會開始漸漸產生自已的想法,這時某些東西會融入到人的深層去,進入細胞成為本能,然後再回饋出反芻後的精華,這時就是創作的開始。
關於模仿,還有另一個有趣的可能發展,很久很久很久以前,在雜誌上看到一位吉他大師的訪問(通常我都會記得這種人的名字,但這位真的忘了,是大一時某本 Guitar World上的專訪),記者問他是怎麼創造出這麼獨特的彈性風格?
“I used to copy note for note from the records that I could get, sometimes those phrases are so fast or the records are so worn out due to repeated playing, I can’t figure the notes out, well, then, that’s where the originality came from”
大意基本上是說:他也是從copy唱片上的歌曲開始練習,但有時某些吉他片段實在彈的太快(試試 jason becker or marty friedman)他聽不出在彈些什麼,就只好憑想像力去嚐試彈的一樣,咳,這就是「原創」的開端。(例如人家可能是閃電指真的可以一秒鐘彈二十個音,他做不到或聽不出來,結果就此發明了 double stop或slide之類的技巧)
所以模仿不見得是壞事,學習往往是從模仿開始,等內化後才有創造的機會,這點基本上應該在各個領域都是通的,只是覺得用在編程這個學門特別的適合。
另一方面,從最近密集開發的過程中,漸漸開始覺得,寫程式有 70% 是重覆性的工作,這部份是比較無聊的(例如寫server端的 vo, CRUD),有20%是藝術的創造,這部份是非常有趣的,例如設計整支程式的結構與運作流程,不斷的重構與解構再改良,至於剩下的10%,則是犯半大不小的錯然後開始debug或完全不知所芸的亂寫…
但總的來說,只要能參與並決定設計這部份,寫程式這件事就大致上是份可接受的工作 ![]()


Trackback this post | Subscribe to the comments via RSS Feed