我老爸常對我說,「孩子,別太著急。慢點來,你完成工作的速度會更快。」
我曾在舊金山灣區的很多高科技創業公司工作過。現在已經有52歲,我編程的速度不快,卻經過深思熟慮再開始。我就像是一個寫代碼的設計師;隨著你的深入閱讀,這一點將會變得非常顯而易見。
最近,我和一些年輕的程序員一起做項目,他們信仰快速開發,迭代修改,這使得我緩慢的編程遇到了困難。這份工作,鼓勵我們在同一個代碼倉庫里面工作,就好像是一大鍋湯,如果我們一起不停的大力攪動,一個奇跡就會從中誕生。
實際上并不會
這幫程序員信仰“所有的工程師都是可以被取代的”這種謬論,因而沒有人需要為這些代碼的任何方面負責;任何一個程序員可以在任何時候,改變代碼的任何部分。畢竟,我們有像Github 這樣特別贊的服務,來管理和合并來自任意數量的程序員們提交的任意數量異步開發的代碼。只要每個人都頻繁的提交(commit),不破壞任何東西,那么所有的東西都會好好的。
扯犢子
你不能期許省略設計過程。這一過程在人類文明開始時就存在了。當下最新最靈巧的開發工具,不論它多么靈巧,也不能替代那些建造了大教堂、鐵路和拍出長篇電影的最佳實踐和現實中的合作。
任何編程都沒能創造這樣一個工具,可以減少軟件開發的時間,讓一群猴子以它們可以接受的速度來工作。
心律不齊
在這樣一群信仰快速開發的程序員中,做一個我這樣緩慢編程的程序員的代價,就是某種形式的心律不齊——因為我自己的編程節奏都被其他程序員那機槍似的迭代開發搞亂了。我的編程風格是這樣,由一些不同尺寸和時間尺度的弧線組成,開始是時候是探索、試驗和出錯,使用一些hacks和臨時變量。基本上是在做一些構建工作。程序初露端倪。稍后,我會回頭去做些修改。最后結束的時候,是完整實現的代碼(「打掃戰場」是完成我這個工作循環的一個必要的部分)我編寫代碼的這一流程與策略、設計方案、架構的出現是同步的。
有時候,當一個成熟的方案出現后,我會回頭重新開始。因為我覺得我會有更好的點子。有時候我錯了,有時候我是對的。在一個方案完整的呈現在我面前之前,我是沒有辦法去知道對錯的。
總之,先回到“一鍋湯程序員”吧。問題是這樣的:總體上,軟件生態系統并沒有停一停的意思——沒有機會去引入設計過程,那么怎么能有人,而且是快速開發程序員,做出好的設計呢?
那些認為快速編程和慢速編程一樣(除了速度以外)的程序員,他們并不理解設計過程。同樣,神經學家現在認為,像流體一樣穿過大腦的神經元放電會產生顳混響,這和思考,意識息息相關,好的設計是需要花費時間的。
慢速編程運動
維基百科記載:「慢速編程運動是慢速運動的一部分。這是一種軟件開發哲學,強調仔細的設計,高質量的代碼,軟件測試 和思考。 盡量避免豆腐渣工程,垃圾代碼和過快的軟件發布。」
維基百科同時還這樣描述「慢速軟件開發」:「作為『敏捷開發』運動的一部分,世界上各個軟件開發者團體期待更有預見性的項目,意在獲得可持續的職業生涯,同時保持工作和生活的平衡。他們進行了諸如結對編程,代碼審查和代碼重構等實踐。這產生了更多可靠的,健壯的軟件」
在舊金山灣區,那些由風險投資支持著的軟件開發,火急火燎地開在快車道上。
資金被投資在研發過程中的那些非自然的需求上,實際上應該把它留給設計演進過程中那些符合自然節奏的點。快,并不總是一件好事。實際上,放慢速度有時候意味著快。數字科技是如何侵占我們自然的節奏的,這一個主題在 Rushkoff 的Present Shock 中有所闡述。
還有一個問題:對科技近乎宗教般的癡迷——以及對工具的迷戀。人們想知道為什么軟件很糟糕(沒錯,它很糟糕)。軟件之所以這樣糟糕,主要是因為紙上談兵。快速開發的程序員會編寫一些工具,來幫助他們使用其他的一些工具,他們利用這些工具來編寫自己的代碼。
這就是我為什么認為我們需要一些年長的人,女性、教育者和藝術家參與到軟件開發中。更多人與人的交流,更少工具與人的交流。我指的不是做一些外圍的工作,提供問詢或是裝飾UI。我的意思是深入內部——確保軟件能夠和用戶產生共鳴。
我慶幸自己不是打字員
我的一位朋友是一個成熟的女程序員,她曾有過這樣精彩的吐槽:「軟件開發不是比誰打字快。」每個人都明白這一點,但是時常這樣提醒自己也不是什么壞事。
Brendan Enrick討論過這樣的問題。實際上,程序員們不停地用手指在鍵盤上猛戳,就好像這種肢體活動是和編程同步的。但是實際上編程是這樣一種行為,它把思考、設計、語言、邏輯和一些心理層面的東西變成某種可以存放在電腦內存中的形式。
我的夫人經常會走到小院里,問我:「你在編程嗎?」通常情況下我的回答是「是的」。實際上我正在用鉗子修剪枝葉,或是到處施肥。
植物、泥土和剪刀和編程有很大的關系,就像與鍵盤和發光的屏幕一樣。
我們正在從工業時代和經濟紀元過渡到一個可持續發展的年代。是的,新的軟件和新的商業需要增長。但是需要具有可持續性,它們要慢慢的,有愛的增長。就像美酒,就像寶貝。
-
工程師
+關注
關注
59文章
1573瀏覽量
68680 -
編程
+關注
關注
88文章
3642瀏覽量
94076
發布評論請先 登錄
相關推薦
![](https://file1.elecfans.com/web3/M00/05/24/wKgZPGd9BIKAasMYAAP9Ml_injM792.jpg)
![](https://file1.elecfans.com/web3/M00/03/3A/wKgZPGdlPVGAXA8HABFHYewc6WA055.png)
![](https://file1.elecfans.com/web1/M00/F3/FA/wKgaoWciDI6ABdEhAAJtvu-cw_c556.jpg)
![](https://file1.elecfans.com/web2/M00/07/FB/wKgZombz6VuAFeotAAIjSCj1HKI007.jpg)
尋求專業工程師幫助設計USB多口充電器
![](https://file1.elecfans.com/web2/M00/FF/40/wKgaomahti2AV26dAAMiNIjdnKg435.jpg)
![](https://file1.elecfans.com/web2/M00/EB/14/wKgaomZXAd-AWEwjAAuV2RdwuSM130.png)
![](https://file1.elecfans.com/web2/M00/E5/09/wKgZomZB1aqAfoLMAALwKMk88bw153.jpg)
![](https://file1.elecfans.com/web2/M00/DF/FB/wKgZomY1H9uAdzzJAAMwQMmJ0js548.jpg)
![](https://file1.elecfans.com/web2/M00/DE/DE/wKgZomYwuQ-AegjsAAISSibiD4I286.jpg)
為何國外工程師偏愛使用for(;;)來實現MCU死循環?
![為何國外<b class='flag-5'>工程師</b>偏愛使用for(;;)來實現MCU死循環?](https://file1.elecfans.com/web2/M00/C7/64/wKgaomYKKiOAK5wZAAARYlyfX1A944.png)
![](https://file1.elecfans.com/web2/M00/C5/1E/wKgaomXxdsmAENR6AAKEdyutPEU736.jpg)
![](https://file1.elecfans.com/web2/M00/C1/46/wKgaomXUeXuAXDwNAAJ_XqvplMU996.jpg)
評論