萬(wàn)泉河
WX:ZHO6371995,歡迎+
級(jí)別: 略有小成
|
1218 【萬(wàn)泉河】誰(shuí)有資格評(píng)價(jià)PLC程序?qū)﹀e(cuò) 誰(shuí)有資格,答案當(dāng)然是從事CODE REVIEW的同事咯! 然而眾所周知,在PLC行業(yè),絕大部分的公司,是沒(méi)有CR機(jī)制的。 從來(lái)都是誰(shuí)寫(xiě)的程序誰(shuí)自個(gè)兒調(diào)試自個(gè)兒維護(hù),一桿子負(fù)責(zé)到底。 沒(méi)有另外的人幫你CR的。我曾經(jīng)寫(xiě)文章探討過(guò)關(guān)于CR的可行性,以及期待行業(yè)中最終能發(fā)展出可以通行的CR的標(biāo)準(zhǔn)。 但至少現(xiàn)在,還沒(méi)有。 所以即便有個(gè)別公司和同行同事之間有那么零星的符合CR機(jī)制的流程,但在還沒(méi)有見(jiàn)諸紙面的可分享的CR標(biāo)準(zhǔn)之前,我們只能認(rèn)為不存在。 那么,除此之外,還有誰(shuí)擁有這樣的資格呢? 讓我們把疑問(wèn)暫時(shí)放在一邊,來(lái)看一張圖,其實(shí)是一段程序。 是我在前面一篇文章《1209 【萬(wàn)泉河】江湖又現(xiàn)萬(wàn)線(xiàn)圈》中引用過(guò)的一段程序。原始程序是一名網(wǎng)友貼出的。而后面的紅線(xiàn)部分是被我修改之后的,修正了原程序中的bug。 文章發(fā)表以及這個(gè)圖片的程序被轉(zhuǎn)發(fā)之后,在同行之間引發(fā)了不少爭(zhēng)議。我粗略估計(jì)下,支持的和反對(duì)的大概各有一半。 有一半同行支持這樣的程序?qū)懛ǎ踔疗渲械腻e(cuò)誤也是這些朋友們幫忙發(fā)現(xiàn)的。我原本只看了一眼程序的寫(xiě)法,對(duì)具體的邏輯根本沒(méi)關(guān)心,有錯(cuò)誤去改正即可,不算什么大事。而反對(duì)的同行中則理由各不一致,根據(jù)自身預(yù)設(shè)的立場(chǎng)高低不同,分成了幾派,后面逐類(lèi)分析。 不過(guò)在分析之前,先對(duì)一種反對(duì)聲音做出反駁。有那么幾個(gè)零星的聲音,觀(guān)點(diǎn)是:這么簡(jiǎn)單的程序還用得著討論嗎? 這部分的觀(guān)點(diǎn)表達(dá)時(shí)語(yǔ)氣基本相同,都是用反問(wèn)質(zhì)問(wèn)的語(yǔ)氣,然而同時(shí),你又看不出他是在表達(dá)支持還是反對(duì)。其實(shí)叫我說(shuō),這樣的語(yǔ)焉不詳?shù)谋磉_(dá)觀(guān)點(diǎn)的習(xí)慣,恰恰證明了這些人的思考能力和水平。 答案多簡(jiǎn)單!同行們對(duì)這個(gè)問(wèn)題的觀(guān)點(diǎn)分歧都基本達(dá)到旗鼓相當(dāng)了,還認(rèn)為不值得討論。那么請(qǐng)問(wèn), 什么樣的問(wèn)題值得討論呢?有分歧當(dāng)然需要討論了,通過(guò)充分討論,每個(gè)人認(rèn)識(shí)到自身認(rèn)知的差距,然后整個(gè)行業(yè)的認(rèn)知水平才可以提高。那些認(rèn)為這種小事的分歧不重要,無(wú)所謂,沒(méi)必要投入太多的精力在這方面的,足以見(jiàn)其基本功是沒(méi)有的。做事情都是在那兒摸著石頭過(guò)河,走到哪兒算哪兒的。 當(dāng)然啦,咱也不是非要堅(jiān)持自己的觀(guān)點(diǎn)正確,你如果認(rèn)為沒(méi)必要討論,自己不感興趣,那你就視而不見(jiàn)不參加討論即可。沒(méi)必要阻止別人討論探討。否則就需要好好解釋下你用心何在了。 回來(lái)看反對(duì)派陣營(yíng),觀(guān)點(diǎn)中從高到低主要有三類(lèi)。 1, 斥責(zé):這是典型的腳踩西瓜皮貼狗皮膏藥! 然后甚至不管三七二十一以他自己的習(xí)慣方法直接對(duì)程序方法做了修改。 2, 表示:如果我的團(tuán)隊(duì)中有這樣寫(xiě)程序的成員,我會(huì)勸其離職。 3, 抱怨:不按常規(guī)寫(xiě)別人不容易讀懂的程序,將來(lái)別人無(wú)法維護(hù)。非常討厭。 我對(duì)這些觀(guān)點(diǎn)自下而上逐個(gè)回復(fù)和探討: 關(guān)于維護(hù)的概念有兩種理解,可以是甲方的維護(hù)工程師,要么是自己公司后來(lái)的繼承者或者叫做接班人。 如果指的是甲方,那確實(shí)沒(méi)有辦法。收人錢(qián)財(cái)替人辦事,人家作為甲方既然對(duì)寫(xiě)程序的姿勢(shì)有具體的要求,你當(dāng)然要全盤(pán)滿(mǎn)足。這個(gè)時(shí)候,其實(shí)你也不是什么設(shè)計(jì)師工程師,就是個(gè)嚴(yán)格的執(zhí)行者而已。甲方單位既然有完整的解決方案, 甚至有模版給你抄,你就老老實(shí)實(shí)照著抄,也不需要有什么不一樣創(chuàng)新想法在里面。遇到這樣強(qiáng)大且強(qiáng)勢(shì)的甲方,做一個(gè)溫順聽(tīng)話(huà)的執(zhí)行者也不錯(cuò)。如果對(duì)此有些不滿(mǎn),覺(jué)得這種行規(guī)限制了自己的自由發(fā)展空間,也不要抱怨,要抱怨只抱怨自己命不好,去錯(cuò)了行業(yè)。你只要還在這個(gè)行業(yè)謀生,就遵守他們的行規(guī)。比如整個(gè)汽車(chē)行業(yè)盛行的SICAR標(biāo)準(zhǔn),就是如此。 而如果指的是后來(lái)的繼承者,這個(gè)指責(zé)和抱怨就非常沒(méi)有道理了。等于是后來(lái)者給先行者下了緊箍咒。而且有可能先行者在開(kāi)發(fā)設(shè)備程序邏輯的時(shí)候,這個(gè)后來(lái)者還不存在, 還沒(méi)有來(lái)到公司。 卻要求先行者提前預(yù)料到后來(lái)者的智商和理解力水平,需要包容他們有可能看不懂學(xué)不會(huì),所以在系統(tǒng)設(shè)計(jì)中要避免。那么這樣的話(huà),設(shè)計(jì)中想要應(yīng)用什么新功能新技術(shù)都要好好掂量下了。 如果未來(lái)的接班人是個(gè)笨蛋,學(xué)不會(huì)咋整呢? 總之,后來(lái)的學(xué)習(xí)者給先行的導(dǎo)師提要求設(shè)框框,是不可理喻的。 而第二檔的以團(tuán)隊(duì)頭目出現(xiàn)的,對(duì)與自己的習(xí)慣不同的同事而容不下的,我的評(píng)價(jià)是:這不是典型的武大郎開(kāi)店嘛!容不下比自己個(gè)頭高的。 如果這個(gè)新同事,設(shè)計(jì)方法完全錯(cuò)誤,一團(tuán)糟,根本不能運(yùn)行,而又不聽(tīng)話(huà),如我在上篇文章中所講述的,最后還需要你這個(gè)老大來(lái)主導(dǎo)所有設(shè)計(jì)從頭再來(lái),導(dǎo)致非但沒(méi)能給與幫助,反而幫了倒忙,那么這個(gè)助手在這個(gè)團(tuán)隊(duì)中確實(shí)沒(méi)啥必要存在了。可以在給予幾次機(jī)會(huì)后酌情考慮請(qǐng)其另謀高就了。 但現(xiàn)在的情況是,程序設(shè)計(jì)方法明明是可行的, 設(shè)備是可以正常運(yùn)行的,甚至有可能最終的設(shè)計(jì)比你遵從傳統(tǒng)方法的更有優(yōu)勢(shì)。 但現(xiàn)在僅僅是因?yàn)椴环夏愕牧?xí)慣, 甚至可能是因?yàn)樽龀隽四憧床欢母呒?jí)的設(shè)計(jì),你就容不下,就要千方百計(jì)排擠下屬出局,那說(shuō)明你這個(gè)團(tuán)隊(duì)小頭領(lǐng)是不稱(chēng)職的,公司領(lǐng)導(dǎo)把團(tuán)隊(duì)交到你手里,讓你來(lái)帶,是需要你不斷挖掘培養(yǎng)創(chuàng)新人才,提高團(tuán)隊(duì)創(chuàng)新水平的。而不是任人唯親,以己度人,把團(tuán)隊(duì)帶到武大郎的燒餅店一般越來(lái)越窩囊。 所以,真正需要卷鋪蓋走人的,或者把位置讓出來(lái)的,應(yīng)該是你自己。 對(duì)上述所有觀(guān)點(diǎn)的綜合看法,我的評(píng)價(jià)是: 我非常驚訝的是這個(gè)行業(yè)的普遍現(xiàn)象, 不善于吸取別人的長(zhǎng)處。 明明是自己看不懂的設(shè)計(jì),卻不肯承認(rèn), 然后能按自己的價(jià)值觀(guān)給出各種各樣奇談怪論的評(píng)論。 表達(dá)一下自己的謙卑和學(xué)習(xí)欣賞態(tài)度就那么難嗎? 討論中,倒是有一位群友的態(tài)度非常坦誠(chéng):憑直覺(jué)覺(jué)得這段程序是錯(cuò)的,然而研究下來(lái)它偏偏能正確運(yùn)行。不懂怎么回事。 這位群友以前搞過(guò)技術(shù),現(xiàn)在已經(jīng)放棄技術(shù)去搞市場(chǎng)銷(xiāo)售了。對(duì)于這樣的開(kāi)放心態(tài)的人,我就十分欣賞。說(shuō)明他并不是技術(shù)搞不好而轉(zhuǎn)行去做銷(xiāo)售,而恰恰是技術(shù)搞得好之后,才有能力從事更富有挑戰(zhàn)性的工作。 我曾經(jīng)寫(xiě)過(guò)好多篇關(guān)于評(píng)價(jià)程序好壞的標(biāo)準(zhǔn),當(dāng)然,那些標(biāo)準(zhǔn)都是基于效率的,評(píng)價(jià)一個(gè)好的程序和壞的程序的標(biāo)準(zhǔn)是有利于效率的提高。 那個(gè)時(shí)候,總有一些人冒出來(lái)總結(jié)到:能夠正確運(yùn)行的程序就是好程序,這回,有一個(gè)能正確運(yùn)行的程序出來(lái)了,先不論它是否夠效率高,按這些人的觀(guān)點(diǎn),首先應(yīng)該接受,而不是否定,更不是不加分析直接要消滅它呀!所以在沒(méi)有CR之前, 除了程序的設(shè)計(jì)者自己,無(wú)人有資格評(píng)價(jià)程序。檢驗(yàn)程序?qū)﹀e(cuò)(注意不是好壞)的唯一標(biāo)準(zhǔn)是機(jī)器。程序只要在機(jī)器上能運(yùn)行正確,就無(wú)人有資格說(shuō)錯(cuò)。 最后分析下這個(gè)程序的缺點(diǎn)。 從常理來(lái)講,大家通常建議編寫(xiě)程序的風(fēng)格方法要有一致性。這個(gè)程序,前面手動(dòng)部分用的是SR,而后面的自動(dòng)部分用的啟保停。風(fēng)格極其相悖,也難怪導(dǎo)致眾多老工程師勃然大怒。 我曾經(jīng)嘗試過(guò)要把它們風(fēng)格統(tǒng)一,要么全都SR, 要么全都啟保停。 然而反而有些困難。把前段改為啟保停實(shí)現(xiàn)難度相當(dāng)大,改完以后的邏輯反而不如現(xiàn)在容易閱讀。 而把后段改為SR,難度稍低了一些,也比原來(lái)容易閱讀,出錯(cuò)的機(jī)會(huì)也低多了。 至少,自動(dòng)狀態(tài)不再干擾手動(dòng)模式的邏輯了 原本T37的條件中隱含了自動(dòng)模式的條件,現(xiàn)在重復(fù)使用一下,邏輯就比較通順了。 如果程序最初的作者,用這樣的方式寫(xiě)程序,或許就不會(huì)引來(lái)那么多反對(duì)聲音,甚至一不小心得罪老大丟掉飯碗的風(fēng)險(xiǎn)了。 然而,兩種程序?qū)懛ㄊ堑葍r(jià)的,能實(shí)現(xiàn)的功能是一樣的。 |
---|---|
|