寫給程序員:我們這一代不是汽車工人
軟件開發(fā)圈是個(gè)奇怪的圈子。盡管有著低失業(yè)率、高薪水和美好前景,顯然一直處于危險(xiǎn)和衰退之中,或者迫切需要警醒。有的開發(fā)者將最近軟件開發(fā)的興旺僅僅看做是未來衰退的前兆,并且開始寫宿命型小說來警示這個(gè)即將死去的圈子。
Greg Baugues之前寫過一篇文章《我們這一代的汽車工人》。 他在文中比較了當(dāng)今的軟件開發(fā)者和60年代底特律汽車工人。Baugues的認(rèn)為取代底特律汽車工人的機(jī)器人將會(huì)同樣地取代軟件開發(fā)者。作為證據(jù),他舉了 一些例子:電子商務(wù)的Shopify,在線日志的WordPress,還有信用卡集成的Stripe。盡管競爭越來越激烈,他說軟件開發(fā)教育的需求已經(jīng)爆 發(fā),伴隨著像Treehouse和Hacker School這樣的公司提供低成本,高相關(guān)的課程,讓學(xué)生可以在大學(xué)四年里用零碎的努力和代價(jià)為開發(fā)工作做準(zhǔn)備:
不要感覺良好。不要被一種語言鎖住。不要過河拆橋。時(shí)常磨刀。學(xué)習(xí)軟技能。建立聽眾。存點(diǎn)錢。人際關(guān)系。閱讀。
幾乎在所有的觀點(diǎn)上,Baugues都沒有達(dá)到目的。首先,這里組裝(無需技能的手工活)和軟件開發(fā)(需要技能的腦力活)有性質(zhì)上的區(qū)別,讓前者自 動(dòng)化是不可避免的。自動(dòng)化創(chuàng)造力比自動(dòng)化組裝困難得多。而且底特律的汽車工人有工會(huì),處于歷史上最好的時(shí)期:工業(yè)上的功能需求旺盛,并且那時(shí)候自動(dòng)化成本 太高。對軟件開發(fā)者兩者都不成立——他們拒絕工會(huì)化(為了避免把低端功能進(jìn)行外包而受損),并且他們的功能不是輕易就能自動(dòng)化的:它就是自動(dòng)化本身。
集體的交涉和工會(huì)給了汽車工人一個(gè)舒適的中產(chǎn)階級(jí)的生活。但是最終利潤下降和開始受到全球競爭的沖擊。汽車變得更加安全,易于操作,更高效,更可 靠,更大眾。汽車工人(還有他們的工會(huì))也許料到了全球化,但是汽車工人發(fā)現(xiàn)自己在新的世界里還在用老一套規(guī)矩。另一方面,軟件開發(fā)者從1980年代已經(jīng) 步入全球化,這也許從第一天起就開始了。他們很清楚他們的工作天然的全球化,他們沒有躲藏在認(rèn)為自己是在一個(gè)有保護(hù)的有限的市場里工作的幻想中。所以似乎 Baugues的比較并不公正:不僅軟件開發(fā)和汽車制造有質(zhì)的區(qū)別,而且工人缺乏工會(huì)代表權(quán),盡管全球競爭激烈,他們還是沉浸在工會(huì)的汽車工水平的報(bào)酬 中。
但是自動(dòng)化呢?在輝煌的未來,我們都毫不費(fèi)力地將API相互連接(顯然沒有報(bào)酬),這個(gè)怎么樣?這里,Baugues將最近的5年看做是未來50年的藍(lán)圖,大聲宣稱軟件開發(fā)自動(dòng)化是既成事實(shí)。讓我們來看他給的例子。
WordPress,免費(fèi)博客平臺(tái)和開源博客軟件,2007年中期騰 飛,現(xiàn)在支持著(據(jù)有些統(tǒng)計(jì))將近20%的網(wǎng)頁。Baugues說WordPress能在“15分鐘”里完成過去要“兩個(gè)月”做的事,任何為自己或客戶建 立過WordPress站點(diǎn)的人都很清楚WordPress常常是網(wǎng)站現(xiàn)實(shí)功能的最小外殼(授權(quán),發(fā)布,和標(biāo)簽)。它把那些網(wǎng)站最開始要做的枯燥的苦活自 動(dòng)化,無關(guān)任何困難的邏輯(那個(gè)留給定制的插件)。只發(fā)日志是零成本的——只用看看Tumblr就知道了。WordPress的真正價(jià)值在于提供成熟的網(wǎng)站框架。有個(gè)聲稱說其競爭項(xiàng)目Drupal和Joomla可以做得更加令人說服。
Stripe,一個(gè)出現(xiàn)在2010年的開發(fā)者友好的信用卡API,現(xiàn)在只是聲稱有少量知名度高的客戶。到今天為止,它只是一個(gè)在支付處理界那些老牌競爭對手中更便宜,更簡單的選擇。自動(dòng)化哪去了?類似地,Shopify, 成立于2006年,是一個(gè)方便的類WordPress的在線產(chǎn)品銷售平臺(tái)。它僅僅是把過去自動(dòng)化了的——網(wǎng)頁模板,支付,多機(jī)托管拼湊到一起。 Stripe和Shopify都不是未來軟件開發(fā)自動(dòng)化的好例子。所以Baugues提到他們想要表明什么還不清楚。這些產(chǎn)品是前一代的改良,更集成,更 用戶友好,但是他們都沒有完全自動(dòng)化(也不是最軟件即服務(wù)(SaaS)的產(chǎn)品),也沒有搶開發(fā)者的工作。
自動(dòng)化引起的焦慮和存在的恐懼由來已久,往往誕生于對歷史的無知。在1960年代,倫敦絲綢紡織工積極抗議機(jī)器織布機(jī)——它可以大范圍地減少對他們 勞務(wù)的需求——甚至于要通過法律禁止它。然而,在17世紀(jì)中期機(jī)器紡織機(jī)已經(jīng)開始取代手工紡織。作為回應(yīng),1675年八月,暴亂的紡織工人走上街頭,毀掉 了大批他們能找到的紡織機(jī)。
17世紀(jì)末期,雨格諾派教徒(法國新教徒)移民進(jìn)入到紡織工業(yè)進(jìn)一步激起了倫敦紡織工的憤怒,導(dǎo)致他們恐嚇和排斥新來者。幾十年后,在1760年代 晚期,斯皮塔佛德的騷亂由紡織工組織起來,目的是要保持他們在自動(dòng)化工業(yè)和法國競爭面前獲得公平的報(bào)酬。騷亂者沒有能夠達(dá)成他們的目標(biāo),自動(dòng)化步伐并未減 弱。
19世紀(jì)早期,英國紡織工人組成的盧德派聯(lián)合來反抗自動(dòng)化。他們損壞和破壞機(jī)械并威脅要采取進(jìn)一步的暴力。終止于1813年的審判,后來停止抗議 了。從那以后,思想家諸如馬克思,海德格爾,米爾達(dá)爾,芒福德,埃呂爾就批判過技術(shù)和自動(dòng)化,然而世界依舊不停地自動(dòng)化,帶來了增長,穩(wěn)定和安全還有快速 增長的人口。這不是說自動(dòng)化天生就是好或者良性,而是說它的效應(yīng)盡管長遠(yuǎn)來看具有毀滅性,總體來說還是正面多余負(fù)面。更有意思的是自動(dòng)化尚未帶來工作簡 單,工時(shí)短的理想世界,如果有帶來什么,那就是自動(dòng)化給工人更大的壓力,讓他們比任何時(shí)候都努力工作。
因?yàn)锽augues提到了SaaS和互聯(lián)網(wǎng)產(chǎn)品,那么只有談?wù)劵ヂ?lián)網(wǎng)對軟件開發(fā)的影響才算公平?;ヂ?lián)網(wǎng)產(chǎn)業(yè)并沒有蠶食自己,而是在不斷提高門檻。十 年前,“網(wǎng)頁開發(fā)”意味著懂HTML的應(yīng)用知識(shí),一點(diǎn)點(diǎn)CSS、Perl和PHP。五年前,它意味著精通HTML和CSS,一些JavaScript,還 有PHP、Ruby、Java或者ASP中任何一門。今天,它意味著HTML和CSS的完全分離(讓設(shè)計(jì)師去考慮那些),精通PHP、 JavaScript、Python、Ruby或者Java中的至少兩門,還需要熟悉Git、包管理和持續(xù)集成這類東西。Web開發(fā)者比以前任何時(shí)候都做 得多,而且還得不斷地用業(yè)內(nèi)最新的改進(jìn)和變化去在高可靠性系統(tǒng)的約束和需求之間尋求平衡。他們線下的同行不需要太多重復(fù)自我發(fā)明。如果說有的話,就是過去 十年已經(jīng)看到了網(wǎng)頁開發(fā)里最具重復(fù)性組件的自動(dòng)化(就像汽車工人的工作)。現(xiàn)在還有程序員會(huì)重頭開始寫一個(gè)在線商店或者博客嗎?毫無疑問,現(xiàn)在我們有更多 有趣的問題需要解決。
Baugues提到的編程學(xué)校和學(xué)院也忽略了這點(diǎn)。1990年代后期我們已經(jīng)這樣把它作為一個(gè)產(chǎn)業(yè)來發(fā)展了。計(jì)算機(jī)科學(xué)大量提高招生名額,這個(gè)專業(yè) 的畢業(yè)生享受了數(shù)年的高薪。然后市場崩潰,計(jì)算機(jī)科學(xué)招生下降,失業(yè)率暴漲,工資也回到他們的正常范圍。那種在計(jì)算機(jī)科學(xué)專業(yè)的短期投入值嗎?畢業(yè)生發(fā)現(xiàn) 他們畢業(yè)即失業(yè)。更重要的是他們后來有沒有繼續(xù)做開發(fā)或者是換成別的行業(yè),把編程忘得一干二凈?類似地,如果軟件開發(fā)的市場明天崩潰,有十年開發(fā)經(jīng)驗(yàn)的開 發(fā)者轉(zhuǎn)投別的行業(yè)不會(huì)發(fā)生。而是會(huì)有來自“駭客學(xué)校”新生產(chǎn)出來的畢業(yè)生,他們只參加了3個(gè)月的課程學(xué)習(xí)如何制作Python應(yīng)用,他們會(huì)跑得最快。他們 的知識(shí)基礎(chǔ)薄弱——他們不但缺少每個(gè)開發(fā)者都要經(jīng)過數(shù)年才獲取到的關(guān)鍵的經(jīng)驗(yàn)知識(shí)體系,而且還缺少網(wǎng)頁開發(fā)學(xué)校或者博客上學(xué)不到的計(jì)算機(jī)科學(xué)理論知識(shí)。如 果比賽是通過編程教學(xué)機(jī)構(gòu),那今天的軟件開發(fā)者沒有什么可擔(dān)心的。這是一個(gè)沒有入門門檻的領(lǐng)域,新一代不成熟的開發(fā)者不但不是威脅,而且是一個(gè)巨大的機(jī) 會(huì)。
自動(dòng)化不會(huì)對軟件產(chǎn)業(yè)構(gòu)成威脅。對于每個(gè)封裝某個(gè)業(yè)務(wù)處理的API,還需要寫一個(gè)應(yīng)用程序,適當(dāng)?shù)臅r(shí)候還需要有支持的API。對于每個(gè)履行某種功能 的庫和app,還要有新用法。對于每個(gè)需要被自動(dòng)化的處理系統(tǒng),還有一個(gè)開發(fā)者工作等著。今天存在的數(shù)量龐大的軟件應(yīng)該給悲觀者一個(gè)暫停的機(jī)會(huì) —— 也許有一個(gè)嶄新的軟件開發(fā)產(chǎn)業(yè)正在將舊的產(chǎn)業(yè)淘汰,這個(gè)產(chǎn)業(yè)不會(huì)關(guān)注諸如支付處理或博客這種乏味的問題,而是旨在用過去二十年中來之不易的成果來解決困難 度以指數(shù)級(jí)增長的問題。
軟件開發(fā)是為數(shù)不多的能夠持續(xù)提煉自身的產(chǎn)業(yè)之一。不像制衣或醫(yī)療或汽車業(yè),軟件是難以捉摸且無形。軟件開發(fā)者是問題的解決人,他們常用某種很抽象 方式解決問題。它讓一類特別樂觀的人去想那種人才的自動(dòng)化,并且讓一類特別悲觀的人去認(rèn)為它永遠(yuǎn)這樣。(It takes a special sort of optimism to consider that kind of talent automatable, and a special sort of pessimism to think it will ever be so.)