有哪些明明是 bug,卻被說成是 feature 的例子?

鏡像問題:有哪些明明是feature,卻被說成bug的例子?


那我必須提一個EA遊戲《泰格·伍茲高爾夫PGA巡迴賽》的經典BUG。

一個玩家在玩這款遊戲的時候,發現了一個BUG,泰格伍茲可以站在水面打球,並且可以一桿進洞,該玩家上傳了視頻,藉此取笑EA的遊戲。

如此明顯的BUG,EA可以發布補丁,也可以封殺視頻,但是人家沒這麼做,而是用了招更牛逼的辦法。

EA直接請來了泰格伍茲,然後拍攝了一段廣告,就是泰格伍茲站在水面上揮杆,然後一桿進洞,最後配文:這不是一個BUG,他就是這麼棒。

公關的經典案例。


vans、converse這些鞋子算嗎?

網上流傳著一句話:「不開膠不vans」

無法理解……為什麼現在的人可以接受幾百上千的鞋子穿幾次就開膠?

還美名其曰:這是環保膠

所以質量差才是正品

質量差反而成了這些品牌的feature?


javascript 中的 null:既是對象,又不是對象,史稱「薛定諤的對象」。

typeof null === "object";
null instanceof Object === false

null instanceof null

會拋出異常:

Uncaught TypeError: Right-hand side of "instanceof" is not an object


這是一個歷史遺留下來的 feature(or bug?),The history of 「typeof null」

在 javascript 的最初版本中,使用的 32 位系統,為了性能考慮使用低位存儲了變數的類型信息:

  • 000:對象
  • 1:整數
  • 010:浮點數
  • 100:字元串
  • 110:布爾

有 2 個值比較特殊:

  • undefined:用 -2^{30} (?2^30)表示。
  • null:對應機器碼的 NULL 指針,一般是全零。

在第一版的 javascript 實現中,判斷類型的代碼是這麼寫的:

if (JSVAL_IS_VOID(v)) { // (1)
type = JSTYPE_VOID;
} else if (JSVAL_IS_OBJECT(v)) { // (2)
obj = JSVAL_TO_OBJECT(v);
if (obj
(ops = obj-&>map-&>ops,
ops == js_ObjectOps
? (clasp = OBJ_GET_CLASS(cx, obj),
clasp-&>call || clasp == js_FunctionClass) // (3,4)
: ops-&>call != 0)) { // (3)
type = JSTYPE_FUNCTION;
} else {
type = JSTYPE_OBJECT;
}
} else if (JSVAL_IS_NUMBER(v)) {
type = JSTYPE_NUMBER;
} else if (JSVAL_IS_STRING(v)) {
type = JSTYPE_STRING;
} else if (JSVAL_IS_BOOLEAN(v)) {
type = JSTYPE_BOOLEAN;
}

(1):判斷是否為 undefined

(2):如果不是 undefined,判斷是否為對象

(3):如果不是對象,判斷是否為數字

(4):。。。

這樣一來,null 就出了一個 bug。根據 type tags 信息,低位是 000,因此 null 被判斷成了一個對象。這就是為什麼 typeof null 的返回值是 object。

關於 null 的類型在 MDN 文檔中也有簡單的描述:typeof - javascript | MDN

在 ES6 中曾有關於修復此 bug 的提議,提議中稱應該讓 typeof null === "null"http://wiki.ecmascript.org/doku.php?id=harmony:typeof_null 但是該提議被無情的否決了,自此 typeof null 終於不再是一個 bug,而是一個 feature,並且永遠不會被修復。


說到蘋果,又想到一個……

蘋果關機門,以6、6S、6P、6SP為代表,冬天室外自動關機的現象。

很多人解釋說,因為電池在低溫環境下使用掉電很快,也容易造成壽命衰減,自動關機是為了保護電池。甚至連官方都這樣回復……

黑人問號.jpg

掉電很快?您這直接關機了,不就相當於直接掉電到0了?

壽命衰減?一塊動不動就關機的電池,不就相當於已經壞掉了嗎?

用出故障的方式來確保自己不出故障,這邏輯讓人無言以對……

評論區有幾位部分果粉太能辯了,各種專業各種邏輯證明貴果乾什麼都是對的,惹不起惹不起……弱弱的只提醒兩點:

第一,別人家的手機至少要零下15~20度才會關機,而貴果經常有在0度甚至零上幾度就關的情況,是因為貴果的電池天生嬌貴?還是用了垃圾電芯導致電壓不穩?

第二,別人家的電池一開始就比貴果大很多(前提是機身大小相似),就算衰減到90%,甚至80%,也依然比貴果的100%都大。更何況實測衰減速度並沒有什麼區別。


(以下是第一條回答)

iOS在很長一段時間內,快捷開關中沒有數據流量的按鈕,在以前那WIFI不普及、流量5元30M、10元70M的年代,這對很多人來說都是個痛點。

有些人給出的解釋是為了安全:

「因為小偷可以不用輸密碼不用解鎖,就關掉你的WIFI和數據,這樣一來找回iPhone之類的功能就失效了。」


可是(先不說直接拔卡),他們忘了,快捷開關中有一個按鈕叫【飛行模式】……

尷尬又不失禮貌的微笑.jpg

順便再吐槽下,現在WIFI到處都是、流量資費也便宜了很多,很少有人需要這個功能了,結果在iOS11給加上了……


看了一下,目前答這個題的都是男生。
其實把bug當feature這件事,彩妝護膚界才是重災區,美妝博主和淘寶賣家為了賣貨,真的是什麼瞎話都敢編……
今天就給男同胞們開開眼。

(1)
SKII的明星產品是一款叫做神仙水的爽膚水。效果很不錯,但是味道極其反人類,塗完之後就像是被一個有口臭的人舔了你全臉一樣。
很多妹子都嚮往神仙水的效果,結果生生被這個口水味逼得望而卻步。比如我,我塗完之後真的會幹嘔,只能忍痛把我買的那瓶送人了。
堅持使用的人也並不喜歡這個味道,只是她們比較勇敢,屬於為了皮膚好可以拚命的妹子,都是心一橫、氣一憋,強忍著噁心敷臉。

這很明顯就是個Bug吧,而且是會影響銷量的那種。
再說,市面上好用又好聞的護膚品也有很多啊,稍微把味道做好聞一點並不會影響產品效果。
但是賣神仙水的網紅和淘寶店主們是這麼解釋的……

????
這個邏輯是,活生生把自己的用戶逼成抖M,從此她就會覺得只有被虐才是幸福的嗎??

還有更扯的,說這個味道太臭太噁心了,一般造假的工廠仿不出來。這是廠家為了確保自己的產品不被偽造。
????
嗯,美女為了不被人照著整容,所以勇猛的往自己臉上砍了一刀。


(2)
黑完SKII,再來黑一下雅詩蘭黛 (?????????)
小棕瓶的精華和眼霜是我本人非常喜歡的,確實好用,回購過好多次,但不得不說這個產品的包裝質量實在是太差,絕沒有同價位的一線大牌能「媲美」。
好歹也是500+高端價位的產品,本來挺漂亮的蓋子,經常用上一個月就會掉漆掉的斑斑駁駁。
(網圖侵刪)

而且,因為我一直回購,發現有的掉、有的不掉,批次不同油漆的牢固程度就不同,進一步說明了這很明顯是個品控bug和產品質量問題。

再來看看淘寶店主是怎麼洗腦消費者的……

都是環保惹的禍!

環保:人在家中坐,鍋從天上來 ╮( ̄▽ ̄"")╭

還有更扯的……

……
掉漆是因為雅詩蘭黛刻意為了表現自己不注重外在、只看重內在,跟外面那些妖艷賤貨不一樣???
還順帶把國人黑了一下,星巴克表示不對此事負責。

End


彩蛋:
以下是彩妝種草界網紅們的慣用話術,都是能把bug說成feature的栗子,望妹子們周知,不要上當 (?????????)

【效果自然】,意思就是這玩意不上色,沒什麼卵用
比如說楊樹林的圓管,比如說這陣子日本賣到超火、蟬聯cosme冠軍的那個日系Opera口紅等等。
(小竅門:其實,上妝之前你先厚厚塗一層無色唇膏,然後塗任何口紅塗得淡一點,都會有這種果凍唇的「自然效果」)

【顏色獨特、大膽】,意思是這玩意不會有人買的,你塗完上街會被路人當成蛇精病

【輕薄水潤】,意思就是稀湯寡水的,干皮千萬別用
很多品牌都會出夏季專用的護膚和面膜。其實,對於干皮的妹子,天熱的時候把正常的擦少擦薄一點不就行了嗎(=?ω?)?

【清涼爽快、醒膚】,意思是這玩意很辣臉,敏感肌千萬別用
比如各種早用面膜,確實能改善賴床行為,因為像抹了一臉清涼油,能給你活生生辣精神了

其他想到再更


excel自古以來不能打開兩個同名的文件,即使兩個文件處於不同的目錄里


十幾年前在北京,有一天打開電視,發現北京交通局長考察加拿大後接受採訪:

記者:
您這次考察加拿大有何感想?

局長:
我最大的感想是對於蒙特利爾的人性化建設,蒙特利爾太發達了,超乎我們的想像。
人家蒙特利爾,為了減少交通事故,故意把平整的水泥馬路挖了許多大坑小坑,這樣開車就慢,事故就自然降低了。
我們出發前就已經有心理準備,但是真沒有料到蒙特利爾居然這樣發達。蒙特利爾真太發達了。
記者:
激動的一臉崇拜。。。。

我當時我聽的肅然起敬,發誓要移民到蒙特利爾。


歐樂b的電動牙刷,型號是9000來著。本身用的時候噪音比較大,尤其和飛利浦的超聲波比的話。
然而。。。。上京東看產品介紹頁面。。。。寫的是

猶如跑車引擎聲,聽得到的強勁。。。。
這不就是電機噪音大么,居然還能這麼寫,不要這個轟鳴行不行啊?


帶有強烈主觀意願的,不那麼切題,也不那麼有營養的回答:

假如我們把突變看成是bug,結果看成是feature,那麼進化論,或者說人類本身就是例子。

附:之所以我想來答題 之 知乎的精彩feature 之 大型施工現場:


python語言中:

&>&>&> a = ([1], [2])
&>&>&> a[0] += [3]
Traceback (most recent call last):
File "", line 1, in
TypeError: "tuple" object does not support item assignment

tuple是不可變的,所以報錯了,看起來很正常。再看看a的值?

&>&>&> a
([1, 3], [2])

這是怎麼回事?

其實這是符合python語言規範的可預期行為,只是看起來太反直覺了。

參考:python官方文檔中解釋了這個問題,stackoverflow上的回答

----------

更新:既然很多人很感興趣,我再拋出一個問題:

為什麼前幾條語句沒問題,而最後一條語句報錯?

&>&>&> a=[1, 2, 3]
&>&>&> b=[4, 5, 6]
&>&>&> [a for a in a]
[1, 2, 3]
&>&>&> a
[1, 2, 3]
&>&>&> [(a,c) for a in a for c in b]
[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
&>&>&> [(a,b) for a in a for b in b]
Traceback (most recent call last):
File "&", line 1, in &
File "&", line 1, in & UnboundLocalError: local variable "b" referenced before assignment


最近廣為流傳的那個段(真)子(事):

客人拿一件香奈兒的外套去乾洗,洗壞了,乾洗店遂打電話去香奈兒門店問如何洗滌,香奈兒工作人員回復:我們設計這件衣服的時候就沒想過需要洗滌,一般穿幾次就扔了。


然後微博下紛紛留言,愛馬仕的衫,不可水洗不可乾洗,PRADA的包,不可日晒不可雨淋,如果你的PRADA包五金質量超好,基本系莆田出品,不脫色脫皮脫膠脫線的PRADA不是真的PRADA,某大牌高跟鞋,不可沾水不可走水泥地。只能在優雅的紅毯上擺幾個POSE,否則鞋底穿孔。


然後人們紛紛感慨,有錢人的世界就是不一樣,大牌就是大牌啊。偶有質疑這些品牌做工質量者,則被冠以【買不起一次性奢侈品就不要硬買】的窮逼。


同學們你看。這是一個教科書般的公關,既回應了bug存在的原因,又無形中提升了客戶的逼格,可以可以 ,滿分~


makefile的tab頭。

寫過makefile的都知道,命令行必須以tab打頭,空格都不行。打空格後會這樣:

makefile:3: *** missing separator. Stop.

這也是極其罕見的區別對待tab和空格的場合。絕大多數其他程序,都是將tab和空格都視為空白字元統一處理的。

而這個行為的來源就是一個bug。本來makefile的作者也沒想過區別對待,但是一不小心實現錯了,然後大家覺得影響不大,都懶得修,甚至有人修了發來了補丁,都懶得merge到官方版本裡面去,於是這個彆扭的東西一直留到了現在。

這個bug埋下的雷,如果讓新手踩到就會非常頭痛。你如果在tab前不小心敲了一個空格,由於tab的特點,顯示出來的空白寬度一一個tab一模一樣。但是開了makefile就會出錯。


我默默地打開了TFS,搜索了所有被我resolve成by design的defect。

哈哈,做人最重要的就是開心。


Richard Xu:有哪些基於大神們對遊戲的深刻理解而被開發出的令人驚嘆的「非主流玩法」?

2. 牆跳Wall Jump:如果老鼠以向下的速度接觸到牆壁,會被判定為落地,因而可以再次起跳,這樣就可以爬牆了;以牆在右側為例,先按左鍵離開牆壁,再按上鍵起跳,然後在過最高點之後按右鍵貼住牆壁,此時判定為落地,再次離開牆壁、起跳、貼住牆壁……速度不能過快(以向上速度接觸牆壁就直接滑下去了)也不能過慢(否則就沒法沿著牆壁往上爬了)。
(根據Wall jump | Transformice Wiki的說法,這是a bug but a useful and unintended feature


C++的std::vector&

std::vector& - cppreference.com

解釋一下:當容器vector(動態數組)的元素類型是bool時,其行為會和通常的vector很不一致。大家對其避之唯恐不及,真正要用到vector&的時候都要用vector&之類勉強代替。

而且一開始的設計是為了省空間(每個bool佔一位元組,但實際上只用到一位),還算可以理解。但發現惹出了麻煩之後,C++標準委員會表示,「為了backward compatibility,我們就不改了,(就這樣留著這個問題坑更多的後輩吧。)」


「本飲料如有少許沉澱為天然成分,請放心飲用」——果汁這麼寫我忍了,但是碳酸飲料也這麼寫是個什麼鬼?!


某網站的二維碼自動識別。


意外懷孕,然後奉子成婚。


更新:

尊重 知乎內容與使用規範 ,刪掉一張侵權圖片..(我實在沒找到原作者,抱歉)

為了後面的童鞋看得明白,我文字描述一下吧..

《當水果工程師發現 Bug 時》

一個 Bug
重啟能不能解決?可以。不是 Bug!!
上個版本有沒有?有。不是 Bug!!
是否被果粉當成了 feature?是。不是 Bug!!
有沒有被媒體報道?還沒。不是 Bug!!!
都不是?哦那下下下個版本我們嘗試修復下...


隔音太差 → 聲浪陣陣 運動風尚

換擋乾澀 → 機械質感 鏗鏘有力

奇葩設計 → 浪漫靈感 工學藝術

古老設計 → 傳承經典 傳承榮耀

軸短車小 → 短促靈巧 打哪指哪

國產加長 → 器宇軒昂 運動依然

懸架腳軟 → 極致舒適 大家風範

屁股顛痛 → 硬派越野 男兒氣概

黑心加價 → 爆款熱銷 神車降臨

滯銷官降 → 真誠回饋 價格攪局

就不換代 → 傳奇車型 歷久彌新

頻繁推新 → 潮流前端 鋒芒畢露

降配降價 → 入門新貴 實惠之選

升配升價 → 家族旗艦 王者風範

空間賊小 → 都市精靈 靈動出行

用料粗糙 → 軍工品質 堅韌耐用

……

這次,就別在評論裡面酸酸地說媒體編輯記者「欺騙消費者」了哈,對免費媒體的基本鑒別能力大家都是有的,電視台說這葯兩個療程根治風濕腰痛也沒見誰打電話投訴對吧。

我也想天天只寫勞斯萊斯,除了「」之外全是優點,甚至有時候連「貴」都是優點,顯富嘛。

—————END—————

黃恆樂

閱車數百的媒體人 段子手 舊物控 在職研

我的首頁:知乎首頁

我的回答:知乎回答


推薦閱讀:

量子計算機會不會取代今天的計算機演算法技術?
為什麼感覺國外的程序員更專業?
程序員真的干到 35 歲就干不動了嗎?
不上網,我們會缺少什麼?又會獲得什麼?
開啟瀏覽器的「Do Not Track」後,會對瀏覽造成什麼影響?

TAG:互聯網 | 軟體開發 | 編程 | Bug | 計算機科學 |