作為程序員,尤其是工廠自動(dòng)化領(lǐng)域的程序員,有一個(gè)詞我們必須要熟悉,那就是“互斥”,互斥是什么意思呢?簡(jiǎn)單地說(shuō),就是A事件的發(fā)生與B事件的發(fā)生不應(yīng)該同時(shí)進(jìn)行,這在軟件開發(fā)領(lǐng)域其實(shí)非常常見,自動(dòng)化領(lǐng)域你不做好互斥,那就是人命關(guān)天的事情你沒(méi)去做,最終可能攤上大事。
![]()
為什么要說(shuō)互斥呢?不知道大家看新聞了沒(méi)有,那就是夜晚有一輛正在高速路上高速行駛的車輛,駕駛?cè)耸褂密噧?nèi)智能語(yǔ)音功能想要關(guān)閉車內(nèi)燈光,結(jié)果,智能語(yǔ)音助手直接把全車燈光都關(guān)了,其中就包括前大燈。此時(shí),高速路上黑漆漆一片,包括駕駛?cè)嗽趦?nèi)的全車人員都陷入了恐慌之中……
這件事情本身我不評(píng)論,我不是搞車子的,什么為什么沒(méi)有實(shí)體按鍵,我都不關(guān)心,我關(guān)心的是,寫這個(gè)車機(jī)的項(xiàng)目團(tuán)隊(duì)此時(shí)一定如履薄冰,因?yàn)樗麄兎噶艘粋€(gè)軟件開發(fā)的基本錯(cuò)誤,那就是沒(méi)有互斥!
首先,時(shí)間節(jié)點(diǎn)是晚上,其次車輛正在高速行駛(掛在D檔),那么,此時(shí)關(guān)閉車輛大燈有沒(méi)有隱患?駕駛員要求正在高速行駛的車輛關(guān)閉車輛大燈這個(gè)要求有沒(méi)有問(wèn)題?
顯然,在大部分情況下是有問(wèn)題的,我們還得假設(shè)一些特殊情況,比如說(shuō)有些地方的夜晚的確比較明亮,不需要開大燈,或者駕駛員選擇在高速行駛時(shí)關(guān)閉大燈有他自己特殊情況存在,那么此時(shí)如果車機(jī)就硬性規(guī)定不讓關(guān)閉大燈,似乎也不合理。
那么,常年做軟件開發(fā)的人一定知道,那就是敏感操作需要做一次確認(rèn),比如說(shuō),當(dāng)駕駛員要求車機(jī)關(guān)閉車內(nèi)燈光時(shí),車機(jī)如果有確認(rèn)功能,那么車機(jī)應(yīng)該詢問(wèn):“是否確認(rèn)關(guān)閉全車燈光?”
注意,這么做的好處是,讓駕駛員知道車機(jī)是怎么理解自己的命令的,如果車機(jī)當(dāng)時(shí)有向駕駛員確認(rèn),當(dāng)駕駛員聽到“關(guān)閉全車燈光”,注意“全車”這兩個(gè)詞很重要,說(shuō)明車機(jī)理解的是它收到的命令是把車子所有燈光全關(guān)掉。
此時(shí),駕駛員聽到車機(jī)是這么理解的,自然會(huì)選擇重新糾正自己對(duì)車機(jī)的命令了!
這就像現(xiàn)在很多車子在行駛過(guò)程中車門會(huì)自動(dòng)落鎖一樣,如果你真的要開門,通過(guò)駕駛員側(cè)的解鎖按鈕也是可以開門的,因?yàn)橐欢ㄊ怯刑厥馇闆r支撐著這套邏輯的。
像這種既互斥,又可以解的情況一般都是需要做二次確認(rèn)的,我們叫“主動(dòng)互斥,敏感操作,二次確認(rèn)”。
有人會(huì)說(shuō):如果他通過(guò)物理按鍵或者在車機(jī)屏幕上操作關(guān)閉車子大燈呢?
沒(méi)必要杠,有人還把油門當(dāng)剎車使呢!
總得來(lái)說(shuō),我覺(jué)得這次事件把整個(gè)車機(jī)團(tuán)隊(duì)都開除我都覺(jué)得不為過(guò),因?yàn)樗麄円呀?jīng)犯了一個(gè)軟件開發(fā)最危險(xiǎn)的錯(cuò)誤,一般這種情況,如果是在自動(dòng)化行業(yè),沒(méi)有做互斥,你都過(guò)不了項(xiàng)目驗(yàn)收!
軟件開發(fā)的基本原則其實(shí)就是把用戶當(dāng)傻子,一個(gè)傻子會(huì)做出任何事情,因此,我們寫軟件時(shí)做好防呆的同時(shí),也要做好互斥!
此次事件,首先車機(jī)測(cè)試人員估計(jì)是要下崗了,因?yàn)樽鳛橐幻麥y(cè)試人員,你就是要以傻子的角度去看待車機(jī)的每一項(xiàng)功能,把任何可能出現(xiàn)的工況都考慮進(jìn)去,而不僅僅只是測(cè)試軟件有沒(méi)有BUG、會(huì)不會(huì)崩潰。
然后寫這個(gè)功能的程序員估計(jì)也是要下崗了,但凡是一個(gè)稍微有點(diǎn)經(jīng)驗(yàn)的程序員,寫這塊邏輯的時(shí)候就應(yīng)該會(huì)想到這個(gè)互斥邏輯,那就是高速行駛并且是晚上的情況下,是否應(yīng)該向駕駛員確認(rèn),甚至于,有些車機(jī)可以識(shí)別是否是主駕命令,非主駕命令在此時(shí)如果理解的是關(guān)閉全車燈光時(shí)應(yīng)該不予理會(huì)!
這是一個(gè)程序員的基本職業(yè)素養(yǎng),高層次的邏輯你可能想不到,但是這種稍微想下就能想到的問(wèn)題,即使產(chǎn)品經(jīng)理沒(méi)有提,你也應(yīng)當(dāng)能想到!而不是產(chǎn)品文檔上怎么寫,我就怎么寫!
我們過(guò)去在軟件開發(fā)過(guò)程中很多需要互斥的情況,基本上都不是產(chǎn)品經(jīng)理或者測(cè)試提出來(lái)的,基本上都是我們這些當(dāng)程序員的自己憑借自己的職業(yè)經(jīng)驗(yàn)和常識(shí)得出來(lái)的,最后再反饋給項(xiàng)目組確認(rèn)是否需要添加這些互斥的情況。
其他人我不說(shuō)了,基本上都是連帶關(guān)系,出了這種事情,我估計(jì)在車機(jī)項(xiàng)目這塊是很難混下去了!
自動(dòng)化行業(yè)尤其是這樣,比如你操作一臺(tái)機(jī)器手,如果你只是僅僅操作一臺(tái)機(jī)器手去動(dòng),完全不考慮其他的話,作為一名程序員,這種項(xiàng)目我都不敢做!
就像我們公司之前設(shè)計(jì)的一個(gè)機(jī)器手項(xiàng)目,為了安全,在機(jī)械手的行程之內(nèi)加了圍欄,我就問(wèn)他們,圍欄只是一層保障,萬(wàn)一人進(jìn)入圍欄里面怎么辦?
所以,我們最終在機(jī)械手圍欄四周還加裝了雷達(dá)以及電子門鎖,雙重保障,操作機(jī)械手的時(shí)候必須保證電子門鎖是關(guān)著的,雷達(dá)是檢測(cè)是否有阻擋的(比如說(shuō)人),兩種情況任何一種被觸發(fā)都會(huì)觸發(fā)互斥!
結(jié)語(yǔ)
總之,不管這個(gè)車機(jī)是誰(shuí)寫的,或者說(shuō)是誰(shuí)寫的這個(gè)模塊,他真的要反思一下自己,為什么這么簡(jiǎn)單的工況他都沒(méi)有考慮到?當(dāng)然,責(zé)任肯定不是他一個(gè)人的,但是從我的角度來(lái)說(shuō),這個(gè)程序員如果當(dāng)初沒(méi)有提過(guò)自己的意見,那么這個(gè)程序員一定不是一個(gè)好的程序員,至少現(xiàn)在不是!
當(dāng)然,也不排除有些犟種項(xiàng)目經(jīng)理,因?yàn)槲覀円郧敖?jīng)常遇到自己提出的合理問(wèn)題被否決的事情!只能說(shuō)遇到這種項(xiàng)目經(jīng)理,那是整個(gè)公司的悲哀!
最后,我還要補(bǔ)充一句∶我們是不是對(duì)現(xiàn)在的語(yǔ)音識(shí)別準(zhǔn)確度太過(guò)自信了?
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.