編程是大眾化需求嗎?關於設計和編程的思考
現在大部分時間都是在作圖,設計海報,信息圖,活動相關的東西,越來越少接觸代碼,偶爾看一些技術文章就感覺頭疼,而且學了也基本用不上。我觀察的趨勢是,編程越來越集中在極少數人手裡,但是難度也變得很高,想學一點基礎就能用上越來越不可能了,因為所有用到編程的技術都變得非常工程化,非常複雜,而且感覺大部分時間都是在改別人的東西,利用現有的框架和庫。從零開始寫的需求其實很少,當然了,改別人的東西,也要求對技術有充分的理解。
比如說,最近發現有些公用的調查系統竟然支持創建統計表單,也就是用圖形化實現了過去需要用代碼做到的邏輯,比如心理測試這種,過去要寫的話,除了業務邏輯之外,要考慮程序本身的很多邏輯,而實際上,只有業務邏輯才是必須的,也就是,只要表達出要實現功能所需要的判斷條件就可以,其他無論是用圖形還是代碼來完成都只是手段。
又比如像現在米家APP已經完全實現了通過圖形對智能設備進行編程,也就是可以通過設置感測器的條件,比如溫度、濕度、空氣質量、是否有人經過、門窗是否打開,然後來控制任意設備運行,這些都不是寫死的,而是可以讓用戶自己操作,自己設計邏輯,也就是說,其實這已經實現了一種傻瓜化的編程。
這讓我想到究竟什麼才是編程的本質,我自己最早接觸編程,其實只是一些前端的網頁方面的效果,比如網頁幻燈片,標籤切換,比較複雜的菜單,局部懸停等,這些其實都只是對頁面DOM的簡單控制,其中的邏輯也不算複雜,後來也寫過心理測試頁面程序,感覺無論是用PHP還是JavaScript,其實背後的邏輯都是相近的,問題的關鍵還是在於心理測試本身的統計方法的邏輯,至於用哪種程序,簡單的還是複雜的,甚至用怎樣的庫或框架,並不重要。
當然了,這些所謂的簡化編程工具,還是需要一些比較正式的程序去寫,工程複雜了,代碼的邏輯也變得複雜,但是只要這些基礎程序一次性搭建好,以後就不用再重複寫了,就像智能家庭的APP寫好了,所有用戶都可以自己操作,而不用接觸代碼了,基礎程序只需要少數的人更新迭代就可以了。從我自己很有限的經驗來看,編程的歷史就是經歷了這樣的過程。最初的程序員大部分時間都在考慮代碼的邏輯,而不是業務的邏輯,隨著發展,程序員越來越多的關心業務的邏輯,程序本身反而開始淡化了,或者說,只需要少數精英程序員優化編程語言,開發出各種框架和庫,之後其實大多數的程序員就能比較簡單的開展工作了。當然了,程序還是變得越來越複雜,但這種複雜其實是業務本身越來越複雜。
舉個可能不太恰當的例子,就像現在汽車或者很多複雜的機械或電子設備,都依賴電腦檢測和維修,甚至已經不可維修,變得越來越像黑箱,反而在很早期的時候,有很多高人是可以用很簡單的工具維修汽車,電視機,現在似乎越來越不可能了,像手機這種東西壞了之後很多人直接就扔掉了,其中有一個因素就是集成化程度越來越高,維修變得很困難,失去了價值,因為已經不能有人對所有一切都非常了解,而且也沒有如此多的合適的工具。
我自己並非專職的程序員,並不從事一線開發工作,就算用到編程解決的問題也很簡單,基本上都在前端範圍內,但是現在前端已經變得非常工程化,各種框架和庫層出不窮,是變化非常快的領域,我記得自己最早是先學CSS和HTML開始的,這只是描述頁面結構和樣式的語言,不是編程語言,後來自然要學JS,為了改別人的程序還學了一點PHP,為了補基礎,還學了一點C,出於興趣還學了Python,但是我真正實際用到的其實只有JS,更準確說,基本上有需求都是寫的jQuery,也許在很多真正的程序員看來,我這樣的並不算是程序員,或者說,只能是大眾裡面有寫程序興趣的人,好吧,其實我也覺得自己是個作圖的。
也許我寫這篇文章,是想給自己拒絕學習新東西一個理由,因為現在學一些新的框架或者開發平台的時候,常常有種自我懷疑,感覺沒有什麼用處,因為沒有意願和能力去做一線開發,時間長了,甚至不想接觸代碼。比如現在各種MVVM框架,還有微信小程序,都了解過,也買了教程看了幾節,但是很快也都忘沒了。因為很多東西都是為解決某些問題而存在的,就像是一些特殊的工具,如果沒有用這些工具解決問題的需求和經驗,學習如何使用這些工具自然沒有必要,而且,如果將來發明了新的工具,舊的工具被淘汰了,學習舊工具的成本也就埋沒了。
這件事給我的啟發是什麼呢,是我對編程這種需求的理解,也就是說,在更為廣大的範圍內,編程是否是一種廣泛的需求呢,是否有可能全民都學會編程呢。在過去,很多人也許會認為,編程不能普及的原因是,編程語言學起來太困難了,潛在的觀點是認為,一旦編程變得傻瓜化了,一定會全民普及,然後人人都會成為程序員了。但是根據我的經驗和感覺,似乎編程變得越來越小眾了,這並不是因為大眾對編程需求減少,其實大眾對編程的需求是增加了,只不過,這些需求都被很少的一些人滿足了(這些人是專業的精英程序員),而並沒有需要每個人都學會編程,就像是有了淘寶以後,人人都可以傻瓜式開店,而不是自己學習開店的編程技術知識,或者找會編程的人來給自己開店。又比如微信公眾號代替了很多架設網站的需求。
這個觀點也許可以回答一個迷思,就是小程序這樣東西,是否會因為解決了技術上難度,而變得非常普及呢,眾所周知web是成本比較低的解決方案,而小程序是一種web的簡單實現方式,web在pc時代的確取得了主流的位置,因為它開發和使用的簡單,在移動端也開始成為主流,現在很多APP裡面都是套的web view,小程序想解決的問題是,進一步把web技術簡化,我們假設將來會出一個比小程序更簡單的東西,讓普通人很容易就可以學會如何使用,然後可以用它實現任何功能,那麼這種情況下,編程會否會迎來爆發呢。
我的看法是悲觀的,我覺得這不是一個技術性的問題,就算是技術簡單了,也只是減少了少數的專業開發人員,就像最近兩年的新聞聽說很多公司在裁員,我覺得不止是市場的問題,也可能是因為技術的發展趨勢決定了,對中低端程序員的需求是下降的。也就是說,在未來可能更需要極少數純粹的技術精英,還有大多數只懂得業務邏輯的人,懂得業務邏輯的人,可以用簡單的傻瓜化的方式來工作,而給他們提供工具的,是極少數的技術精英。就像現在很多人手機、PC、PAD辦公,用一些自動化軟體辦公,但所有這些背後的技術都是複雜的,但是真正使用這些技術創造價值的,卻是不懂技術的普通人。
還有一個角度是,現在的APP其實越來越集中化,本來要很多單一APP實現的功能現在只有一個就可以滿足,就像微信成為了超級APP,豆瓣原來有很多個APP也集成為了一個。在這種情況下,越來越複雜的程序或者服務平台只能有大公司的少數人維護,這不是任何個人能夠實現的,個人能夠實現的也許只是很簡單的功能,而這種功能其實只要實現一次就是可以複製的,比如匯率計算器,不用每個人都自己開發一個匯率計算器。我的意思是,程序本身的模式是很有限的,商業模式也是有限的,打車只有一個滴滴就可以了,共享單車也用不了那麼多,最終只留下一兩家就可以,因為無論開發多少個程序,模式無非就是那些,而想開創一種新模式卻很難,甚至是歷史性的進步,比如搜索引擎,facebook,微博,電商等,這些模式的創新不可能像公眾號一樣想開多少就能開多少。
也就是說,就算是編程傻瓜化了,能夠想出來的新點子也是很少的,如果所有人都在開發相同的重複的東西又是沒有價值的。開發一種新模式,就像是修一條新道路,只要路修好了,大家都上去走就可以了,不用每個人都單獨為自己修一條路。而像微博、公眾號這種東西,每個人都可以開一個,是因為它們上面傳送的是內容,是有差異性的,如果所有公眾號都發一樣的文章,其實只保留一個就可以了。也就是說,自媒體的爆發並不意味著,程序也可以爆發。
如果做一些不用負責任的猜想,將來很可能絕大多數程序員都會失業,唯一能夠保留的就是與人工智慧相關的程序員,現在人工智慧的應用其實主要在非結構領域,比如圖像識別,翻譯,等通過簡單邏輯無法實現的方面,其實也可以認為,這不是沒有邏輯,而是邏輯極大複雜,已經超出簡單的二元判斷的範疇,而是用很多的概率和統計演算法實現的,只不過人類大腦已經沒有能力理解了。
從我現在所了解的,我覺得將來人工智慧也是可以實現現在只能通過編程實現的功能,它的編碼方式可能完全不同,我們也無法理解,但是達到的效果是相同的,或者另一種可能是,這些需求編程實現的需求已經全部實現了,所有這種低端編程的需求的模式,都是非常有限的,人類只要一次性編碼完成,將來就不需要了,就像是怎樣蓋草棚的技術,怎樣製造弓箭的技術,這種需求,在未來不會增加了,甚至不會存在了。
其中還有一個原因是,未來社會的信息量會越來越大,而越來越多的智能需求其實是與數據相關的,而且數據與數據之間都是相關的,也就是處理數據之間的關係也變得非常困難,這些都只能用人工智慧的方法去處理,比如說將來程序要重複了解一個人,然後持續跟蹤其行為和數據,根據這些來輔助個人,比如推薦商品,或者幫助個人解決問題,這都不是傳統的編程方式能夠解決的。現在的翻譯全面轉向人工智慧,還有各種助理也轉向人工智慧,就是這種趨勢的證明。而且因為數據要互通的原因,很難避免的也要走向集中化,只有擁有數據的機構,才有使用人工智慧的需求和資格。而大眾能夠學到的編程,也許只是蓋草棚,造弓箭這樣的技術,是沒有價值的。
說回來,再談談對設計的看法。其實我在題目裡面加上了設計,並不只談編程,也是想把設計當做和編程可以對照的一個領域。大概在兩年前,我發現編程和設計其實很像:「從比較抽象的層面來說,都是先選擇一個對象,然後根據某種方法,對它的屬性進行修改,程序的選擇器就相當於photoshop裡面的選擇工具組,編程的各種方法就相當於PS裡面的調色或者濾鏡工具,方法下面還有屬性,就像每一個調整工具下面還有各種選項,風格和模板就是框架和庫 。」 這是我曾經寫在微博上的一段話。用不太嚴謹的說法,在技術層面,做設計也有點像是面向對象的編程。
做設計的過程,也像是在寫一個程序,但是很大的不同是,做設計的需求和文案每次都是不同的,比如每次有一個新的活動,這個活動一定是有一些個性的,活動主題不可能完全一樣,文案出自不同人,也會有很大不同,然後不同的設計師根據文案做出來的設計稿也會很不同,比如每次到了XX節日,這種情況下按理說同質化應該很明顯,但實際上我們在不同地方看到的設計也是很不同的,還有不同商家同一類型的產品,廣告設計也很不一樣。(PS:此處不談工業設計,因為工業設計牽扯到使用上的合理性,就像汽車四個輪子,手機都是一塊屏幕。)
編程無論使用哪種語言,無論用怎樣的技術,最終出來的效果都是基本一致的,就像 Android和IOS是不同的語言平台,但是上面的APP用起來都一樣。但是設計就不同了,設計本身就有很大的混沌性,首先需求本身就是模糊的,寫文案的人各有自己的想法,不同的設計師理解文案也是根據自己的經驗,而且還要結合當前的很多流行趨勢和特殊要求,也就是說,設計並不像程序那樣只有一種模式,而是有幾乎無數種可能的模式,而每次設計的過程,都是創造一種新的模式。設計也可以流行,就像扁平化一樣,但是在上面承載的東西卻是沒有限制的,用扁平風格設計出來的東西卻有獨特性。
而且從需求層面,對審美的需求和對功能的需求也完全不同,功能只要一次性實現就可以了,然後每次都可以重複使用,無論哪種技術開發的,使用效果上都基本一致,但是視覺上帶來的不同卻可能帶來完全不同的行為,還有像用戶體驗設計,雖然也需要通過技術實現,但本質上還是更接近於設計的範疇。現在的趨勢是越來越側重前端,也許正是因為設計越來越重要的原因,因為底層的技術無論多麼複雜,從模式上來說,還是很簡單的。而設計層面的東西,並沒有單一的模式,有無限的可能性。
「做設計是最有無限可能性的工作,也是最痛苦的工作,你經常要面對的是模糊的描述和要求,幾行簡短的文字,拍攝極差的照片,然後你要從素材和想像力的汪洋中拼湊出一種可能性,簡直就像是從無到有的創世;除此之外,還要面對千奇百怪的客戶和他自己也未必清楚的需求,還有違約,翻臉無情,腳踩兩隻船,對設計價值的貶低…」,以前寫在微博上的一段話。
做設計有理性的層面,接近像編程那樣精確的部分,比如處理圖片的技術,還有有一定規則的部分,比如排版的原理,顏色運用的原則,但是也有很大的模糊的部分,比較依賴直覺的,近乎於人工智慧的範疇,比如說,看文案的過程就是自然語言理解,需要用過去通過經驗訓練形成的理解力去解釋文本,然後形成初步設計方案的過程也是,還有尋找素材的過程,也是從無數圖片裡面識別出最適合設計方案的樣本,這和深度學習分類圖片的原理基本一致。之所以現在還沒有一個傻瓜式的軟體能夠自動完成設計,就是這個原因,它並不是一個傳統編程能夠解決的問題,做設計的過程是十分依賴經驗,也很耗費精力的,有時候用幾個小時找素材找靈感也是正常的。
現在通過深度學習,人工智慧也可以完成一些藝術繪畫,理論上將來通過大量的設計案例的訓練數據,來讓人工智慧完成設計,我覺得早晚有一天是可以實現的,但是這並不容易,時至今日,設計仍然有很大的人性因素,無論是需求方還是設計方,都是根據經驗來判讀,也許將來人工智慧直接就可以通過大數據統計出哪種設計方案最流行,效果最好,然後自動找到最合適的素材,甚至文案都不用人工去寫了嗎,人工智慧可以自動判斷哪些語言是最能讓人心動的。不過我認為,設計比藝術要難得多,這個時代的設計師也比藝術家偉大,因為設計是有目標的,而藝術更為寬泛,缺乏統一的標準,而且設計是可以獲得明顯價值的,可以促進商業效率,更接近第三隻手。或者換一種說法,設計性比藝術性要更難。
說回來,其實現在設計領域的很多技術也開始應用人工智慧,比如像photoshop新版在處理人像上就有點向美圖APP靠攏,操作很簡化了,可以通過圖形界面拖動滾動條調整人的五官,還有像圖像自動填充,很多演算法也屬於AI的範疇,更不用說現在很火的一些美顏的APP,無論是圖片還是視頻,都可以讓普通用戶操作調整,而不必精通修圖的技術,所以其實在圖像領域也可以發現編程領域的趨勢,就是很多面向大眾的消費級軟體能力越來越高,取代了很多專業軟體的地位,而專業軟體在能力增強的同時也簡化了操作。
最後,這大概是我最後一篇文章,很久沒更新,因為感覺自己沒有想說的東西。加入知乎這幾年,從最初感覺知乎是任何有思想見識的人都可以發表觀點的地方,可以得到認真對待的地方,變成了現在感覺只是少數的專業的或者有影響力的人在說話的地方,而我感覺自己並不是一個在某一領域特別專業的人,也不是一個有影響力的人,而且更關鍵的,失去了某種喜歡和人討論的熱情。不過,這也不算是一種遺憾吧。
PS:封面圖是曾經用純CSS3+HTML5寫的幻燈片壓縮後的代碼
推薦閱讀:
※Object Detection(1):R-CNN實踐
※透過認知智能剖析商業本質(iPIN CEO楊洋)丨硬創公開課
※綜藝節目也玩人工智慧?假噱頭還是真科普?