倍可親

從流行的試錯驅動(test driven)談起

作者:釣魚城  於 2022-5-27 03:23 發表於 最熱鬧的華人社交網路--貝殼村

通用分類:流水日記

當前軟體編程中一個流行的新方式是BDD (Behavior Driven Development), 即行為驅動開發。好些公司都在推行這種編程方法。大家似乎都在做,但光是這名字就讓人如墜五里雲外。所在的公司不惜花費大量的金錢,讓每個軟體程序猿去接受一到兩周的培訓,並要求在今後的程序編寫中應用推廣。學完后,同事們大都不甚了了,不得要領。不停地問頭頭,到底這種方式有多大的好處,頭頭說,他們也不清楚,是上面要求的。再問上面,回答道,聽說別人在推行,我們不跟上能行嗎?
這使人想起了一段網上的笑話,是關於大數據的。這段英文的原話用青少年性行為來說事。
「Big Data is like teenage sex: Everyone talks about it, nobody really knows how to do it, everyone thinks everyone else is doing it, so everyone claims they are doing it too」
翻譯過來就是,大數據就像青少年的性:每個青少年都在談它,其實沒人真正知道怎麼做它,但是每個人覺得其他人正在做它,因此他們聲稱自己也在做它。
初初看到,讓人忍俊不禁。
其實BDD這種方法跟其它近些年所流行的五花八門軟體編程方法一樣,像DDD(Data Driven Development), 都屬於所謂的極限編程,不外乎是為了工程化流程,提高效率,減少錯誤,寫出好的程序。願望是沒錯,效果怎麼樣,那就難說了。
這使我想起另一種在前些年非常流行的軟體開發方式,即所謂的TDD(Test Driven Development),即試錯驅動開發。 二者有些區別,但是都差不多。
前些年,我所在的團隊非常強調TDD編程。招收新人,第一件事就是問會不會先寫第一行試錯代碼,然後再寫第一行真正的代碼。如果不能,一律槍斃。這一極端的舉措是由一個印度同事推動並實施的。據說,由於他在前一個公司受到了同樣嚴苛甚至殘酷的對待,花了幾年的工夫,忍受了無數的痛苦和嘲笑,縮身擠進了這條窄窄的衚衕。到後來他自己也認為,這是天底下最好的編程方法,從此痛苦並快樂著。而今媳婦熬成了婆,在公司深得業餘時間在一起做私人投資的VP的青睞。所以斯德哥爾摩綜合征爆發,也要把過去吃的苦一股腦在他人身上重複一遍,一句話,同享苦樂。
姑且不說這TDD到底有沒有好處,但是從common sense來講,就可以聞到一股「兩個凡是」,「輿論一律」那種似曾相識的霉味。一花開后百花殺,大有黃巢君臨天下的氣概。當然印度人不知道這些有中國特色的專用名詞和與此關聯的慘痛教訓,但這並不妨礙他如此這般的行事為人。看來普天之下,人性使然,沒有例外。
看到一個個的應聘者被中途腰斬 - 最少的逗留時間是五分鐘!禮貌送人,連起碼的尊重都不要了。以至於為了找一個工程師,應聘者翩然而來,鎩羽而歸,來來回回,居然找了兩年而沒有任何結果。總覺得有什麼東西不對頭。想著該跟這位開掛的大叔溝通溝通了。於是有了這樣一段對話。
我:看來這「North America's best team」真是名不虛傳(註:這兒的美國公司也好虛名,經常自娛自樂,喜歡把高帽子往自己頭上戴,姑妄言之,姑妄聽之),寧缺毋濫啊。
他:是這個道理。想在我們這裡做事,不做到令行禁止, 動作整齊劃一,那怎麼行?
我:這TDD好是好,但總要給以前沒有這樣寫代碼的人一個適應的過程。否則這樣下去,漏掉一個比爾蓋茨或者扎克伯格豈不可惜?想當年,這些大神哪個不是直奔主題,急火急趕寫好實用代碼,就趕緊拿出來,哪裡會去寫試錯代碼? 這就跟狗發現前面有一個麵包時的情形一樣,這狗如果不是直直地跑過去,而是彎來彎去,繞著圈子,扭著舞步,這兒瞧瞧,那裡看看,就是不直奔麵包,你說這得要多彆扭有多彆扭!這會是事實嗎?除非這狗給嚇怕了。時不我待呀。
他:此一時彼一時也。時代不同了,要求也就不一樣了。那些大才是創業的,自然不同凡響。我們是守成的,是螺絲釘,擺正自己的位置,不要想入非非。
我:這似乎說的不是一回事。。。人當然有重要不重要之分,就像階級(cast)不同有區分一樣,但還不至於這些不重要的人連思想動作都必須整齊劃一,連呼吸的節奏都必須一樣,那不成了機器人了不是?那樣的話,不成了動物莊園?我們不是強調以公司為家、創造快樂的工作環境嗎?不是強調文化要多元化嗎?技術的發展和進步也是多元化的結果。因此怎麼做好工作才是王道!
他:可我認為TDD就是最好的編程手段。沒有之一!
我:說到TDD,我有一些問題。
他: 但講無妨。
我:你一直強調必須先寫一行試錯代碼,才能寫第一行真正的代碼,這是不是有形式主義之嫌?難道先寫一行真代碼,再寫一行試錯代碼,就不行了?
他:形式決定內容,帽子決定腦袋,板凳決定屁股,衣服決定身材。在我們這裡,服從是第一位的,尊卑秩序必須分清楚。另外,你要想從口中說出一句不出格的話,先要經過腦子想想是不是?腦子為你判斷對錯。你要想寫出好的實用程序,那首先得想到這程序必須有什麼樣的特性,而你難道不首先設置一定的門檻(以他的想法,就是試錯代碼)來檢驗它?
我:沒錯,但 商業計劃書(business plan) 才是一個產品的框架 - 它規定產品被接受的標準。怎麼從技術的角度去實現它,做技術的人有他們的自由度。我們這裡講的是技術範疇的實用和試錯兩個方面。從技術的角度來看,但凡一個產品出世,當然要經過多道測試檢驗,這是必須的。但是這並不需要在產品還沒有影子的時候,就要把試驗設備先搞出來。其實每一個產品從開始設計,到製造樣品,都幾乎是先造出樣機,再測試性能,直到符合設計要求。幾乎所有的產品都是這樣一遍一遍的升級,迭代,演化而來,變得成熟,完善。完全沒有必要必須是先有測試手段,才能去設計產品。人完全可以先有樣品,再設計測試手段來檢測;或者二者可以同步進行。誰先誰后都沒有錯,都可以試試,一點也不影響最後的結果。難道不是這樣嗎?
他:反正我認為TDD最符合人的思維方式。這是方法論的問題,不得含糊。
我:正相反,我認為,TDD最不符合人的思維邏輯方式。人造一個新東西,即便你腦子裡有一個最初的藍圖,但最終造出來的東西可能跟最初的藍圖相差太多。這說明什麼?只說明創造的過程是一個不斷修補,添加,捨棄,完善的過程。很多東西最後達到什麼狀態,是最初根本沒有想到過的。試想你能夠什麼東西都還沒有的時候,想得到怎麼去測試那些根本不曾想到過的性能指標嗎?你如果先寫試錯代碼,寫什麼,你怎麼寫得出來?因此我認為,這絕對不是人大腦正常的思維過程。除非你是萬物之神 - 你在創造萬物,你所想要的是智慧造物論 - 你事先知道每一樣事情,每一項功能。但我們不是神。我們是人。我們沒法預見什麼會一定發生,什麼一定不會發生。
他:有很多東西,我們是可以預見的。我們有這樣的能力並且掌握有這樣的資料。
我:你所說的能力可能是一種綜合思考能力。綜合思考能力很重要,但通常是在所有的事件已經發生過了,並且由此而產生的資料為你完全佔有的情況下才有用。大數據就是一個例證。原始資料已經在那裡了,你可以拿來分析,從中得出有益的結論。當然你可以先寫一些試錯代碼,規定哪些是你所想要的,然後再寫實用代碼。這沒有問題。但即便在這樣的情形,也不是說TDD是唯一可行的方式。絕對不是。
在大多數情況下,很多東西在最開始的階段是不可知的,甚至沒有一點感覺。你根本不清楚你會得到什麼,你怎麼去預測去試錯?這個時候,人更需要的是邏輯思維的能力,一步一步地推論,先出樣品,再進行測試。這是大多數學習的過程所經歷的軌跡。舉個最簡單的例子,就是小孩語言能力的增長過程。當嬰幼兒丫丫學語時,他們的大腦還不發達,因此只能模仿,不停地嘗試著發出清晰準確的語音,且符合語法。他們不停改進,練習,假以時日,終得正果。他們不是先通過試錯的方式,規定好必須發出這樣的音調,才去練習發音,否則就不發音。他們才不幹這樣的事情!
他:生活中也有先預判結果,再去找怎麼實現的方法。比如說那些先知就能。
我:不要裝神弄鬼。按照你的試錯先行的原理,難道你敢向你老婆提出,由於我不了解你,我們先不結婚,我們先試婚怎麼樣?你看她不扇你耳巴子,不讓你跪榴槤?
難道夫妻倆生孩子之前,必須平心靜氣在那裡商量怎麼智慧造人?預先規定好各種指標,不達標就不準生?比如說,這還沒有影子的孩子(還是處於精子卵子的分離態)生下來之後,他(她)必須有講八國外語的語言能力,籃球達到NBA水準,足球參加超級盃,外加體操柔道還有一百米跑九秒的田徑運動能力,智商必須達到250,身高至少1米9,形象男的要像阿蘭德龍,女的則似蘇菲索瑪。誰這樣計劃好了才生孩子的?你這樣做了嗎?魯迅說了,兒女是公母倆及時行樂的衍生物,是激情的副產品而已。請注意,正是激情,才產生了一切!試想誰在手忙腳亂做這些事的時候,去設計這狗屁孩子生出來是個什麼東西?只要有鼻子有眼睛,不是怪物就行了。
他:現在不是提倡優生嘛。
我:優生不是這樣強制統一在一個標準下的。雞要生蛋,你能讓它先憋著,想好了一定得保證生出來的蛋又大又圓,才能生出來,否則不合格,不準生,這能行嗎?主人所能做的,只是平常給它喂合理的飲食,有一定的活動量,以保證身體健康。寫軟體也是如此,領導所能做的,只是為程序猿創造良好的工作環境,讓他們發揮主動性,心情愉快,對他們的特點表現出信任和讚賞,只有這樣,才能激發他們做出優質的工作。而不是這樣限制,那樣強加,搞一刀切。 硬性規定右手寫字,你就絕不能用左手。難道你喜歡右手抓飯吃,左手擦屁股,你覺得這是世上最好最節能的方式,別人就再不能用勺子或筷子吃飯.用手紙上廁所?你這樣做就是把人的手束縛起來,讓人動彈不得。是把人的腦子搞僵化,不讓人自由地想問題,非要跟閣下你所思所想一模一樣才行。如果是這樣,乾脆你一個人干算了。
哈哈。這就是關於試錯驅動利弊的遐想沉思錄。明眼人從這出對話語句長短的不對稱,一眼就能看出,這不過是對往事幻化追憶的結果,半是事實,半是臆想,說得不好聽一點,自己的回答被添油加醋了。對活確曾發生過,但遠不及這樣平順自然。當時談話只不過觸及了點皮毛而巳,蜻蜓點水罷了。過後自己一番思想,覺得當時,如果,倘若,假定,如此這般應對,或許,可能,想必,更加有說服力。人就是這麼喜歡把自己變得更加正確的,儘管他只是個事後諸閣亮,門背後的關公。人只是在自己的冥想中顯得世事洞明,有不世之材似的。夢醒之後,方知不過是一枕黃梁. 聞到了飯糊了焦香的味道。權著笑談罷了。


高興

感動

同情

搞笑

難過

拍磚

支持
2

鮮花

剛表態過的朋友 (2 人)

評論 (0 個評論)

facelist doodle 塗鴉板

您需要登錄后才可以評論 登錄 | 註冊

關於本站 | 隱私權政策 | 免責條款 | 版權聲明 | 聯絡我們

Copyright © 2001-2013 海外華人中文門戶:倍可親 (http://big5.backchina.com) All Rights Reserved.

程序系統基於 Discuz! X3.1 商業版 優化 Discuz! © 2001-2013 Comsenz Inc.

本站時間採用京港台時間 GMT+8, 2024-4-22 20:01

返回頂部