萬泉河
WX:ZHO6371995,歡迎+
級(jí)別: 略有小成
精華主題: 0
發(fā)帖數(shù)量: 130 個(gè)
工控威望: 246 點(diǎn)
下載積分: 831 分
在線時(shí)間: 11(小時(shí))
注冊(cè)時(shí)間: 2021-06-11
最后登錄: 2024-11-07
查看萬泉河的 主題 / 回貼
樓主  發(fā)表于: 2022-12-19 09:59
1218 【萬泉河】誰有資格評(píng)價(jià)PLC程序?qū)﹀e(cuò)

誰有資格,答案當(dāng)然是從事CODE REVIEW的同事咯!
然而眾所周知,在PLC行業(yè),絕大部分的公司,是沒有CR機(jī)制的。 從來都是誰寫的程序誰自個(gè)兒調(diào)試自個(gè)兒維護(hù),一桿子負(fù)責(zé)到底。 沒有另外的人幫你CR的。我曾經(jīng)寫文章探討過關(guān)于CR的可行性,以及期待行業(yè)中最終能發(fā)展出可以通行的CR的標(biāo)準(zhǔn)。 但至少現(xiàn)在,還沒有。 所以即便有個(gè)別公司和同行同事之間有那么零星的符合CR機(jī)制的流程,但在還沒有見諸紙面的可分享的CR標(biāo)準(zhǔn)之前,我們只能認(rèn)為不存在。

那么,除此之外,還有誰擁有這樣的資格呢?

讓我們把疑問暫時(shí)放在一邊,來看一張圖,其實(shí)是一段程序。






是我在前面一篇文章《1209 【萬泉河】江湖又現(xiàn)萬線圈》中引用過的一段程序。原始程序是一名網(wǎng)友貼出的。而后面的紅線部分是被我修改之后的,修正了原程序中的bug

文章發(fā)表以及這個(gè)圖片的程序被轉(zhuǎn)發(fā)之后,在同行之間引發(fā)了不少爭(zhēng)議。我粗略估計(jì)下,支持的和反對(duì)的大概各有一半。 有一半同行支持這樣的程序?qū)懛,甚至其中的錯(cuò)誤也是這些朋友們幫忙發(fā)現(xiàn)的。我原本只看了一眼程序的寫法,對(duì)具體的邏輯根本沒關(guān)心,有錯(cuò)誤去改正即可,不算什么大事。而反對(duì)的同行中則理由各不一致,根據(jù)自身預(yù)設(shè)的立場(chǎng)高低不同,分成了幾派,后面逐類分析。

不過在分析之前,先對(duì)一種反對(duì)聲音做出反駁。有那么幾個(gè)零星的聲音,觀點(diǎn)是:這么簡(jiǎn)單的程序還用得著討論嗎?

這部分的觀點(diǎn)表達(dá)時(shí)語氣基本相同,都是用反問質(zhì)問的語氣,然而同時(shí),你又看不出他是在表達(dá)支持還是反對(duì)。其實(shí)叫我說,這樣的語焉不詳?shù)谋磉_(dá)觀點(diǎn)的習(xí)慣,恰恰證明了這些人的思考能力和水平。

答案多簡(jiǎn)單!同行們對(duì)這個(gè)問題的觀點(diǎn)分歧都基本達(dá)到旗鼓相當(dāng)了,還認(rèn)為不值得討論。那么請(qǐng)問, 什么樣的問題值得討論呢?有分歧當(dāng)然需要討論了,通過充分討論,每個(gè)人認(rèn)識(shí)到自身認(rèn)知的差距,然后整個(gè)行業(yè)的認(rèn)知水平才可以提高。那些認(rèn)為這種小事的分歧不重要,無所謂,沒必要投入太多的精力在這方面的,足以見其基本功是沒有的。做事情都是在那兒摸著石頭過河,走到哪兒算哪兒的。 當(dāng)然啦,咱也不是非要堅(jiān)持自己的觀點(diǎn)正確,你如果認(rèn)為沒必要討論,自己不感興趣,那你就視而不見不參加討論即可。沒必要阻止別人討論探討。否則就需要好好解釋下你用心何在了。

回來看反對(duì)派陣營(yíng),觀點(diǎn)中從高到低主要有三類。

1, 斥責(zé):這是典型的腳踩西瓜皮貼狗皮膏藥!
然后甚至不管三七二十一以他自己的習(xí)慣方法直接對(duì)程序方法做了修改。
2, 表示:如果我的團(tuán)隊(duì)中有這樣寫程序的成員,我會(huì)勸其離職。
3, 抱怨:不按常規(guī)寫別人不容易讀懂的程序,將來別人無法維護(hù)。非常討厭。

我對(duì)這些觀點(diǎn)自下而上逐個(gè)回復(fù)和探討:

關(guān)于維護(hù)的概念有兩種理解,可以是甲方的維護(hù)工程師,要么是自己公司后來的繼承者或者叫做接班人。

如果指的是甲方,那確實(shí)沒有辦法。收人錢財(cái)替人辦事,人家作為甲方既然對(duì)寫程序的姿勢(shì)有具體的要求,你當(dāng)然要全盤滿足。這個(gè)時(shí)候,其實(shí)你也不是什么設(shè)計(jì)師工程師,就是個(gè)嚴(yán)格的執(zhí)行者而已。甲方單位既然有完整的解決方案, 甚至有模版給你抄,你就老老實(shí)實(shí)照著抄,也不需要有什么不一樣創(chuàng)新想法在里面。遇到這樣強(qiáng)大且強(qiáng)勢(shì)的甲方,做一個(gè)溫順聽話的執(zhí)行者也不錯(cuò)。如果對(duì)此有些不滿,覺得這種行規(guī)限制了自己的自由發(fā)展空間,也不要抱怨,要抱怨只抱怨自己命不好,去錯(cuò)了行業(yè)。你只要還在這個(gè)行業(yè)謀生,就遵守他們的行規(guī)。比如整個(gè)汽車行業(yè)盛行的SICAR標(biāo)準(zhǔn),就是如此。  

而如果指的是后來的繼承者,這個(gè)指責(zé)和抱怨就非常沒有道理了。等于是后來者給先行者下了緊箍咒。而且有可能先行者在開發(fā)設(shè)備程序邏輯的時(shí)候,這個(gè)后來者還不存在, 還沒有來到公司。 卻要求先行者提前預(yù)料到后來者的智商和理解力水平,需要包容他們有可能看不懂學(xué)不會(huì),所以在系統(tǒng)設(shè)計(jì)中要避免。那么這樣的話,設(shè)計(jì)中想要應(yīng)用什么新功能新技術(shù)都要好好掂量下了。 如果未來的接班人是個(gè)笨蛋,學(xué)不會(huì)咋整呢?

總之,后來的學(xué)習(xí)者給先行的導(dǎo)師提要求設(shè)框框,是不可理喻的。

而第二檔的以團(tuán)隊(duì)頭目出現(xiàn)的,對(duì)與自己的習(xí)慣不同的同事而容不下的,我的評(píng)價(jià)是:這不是典型的武大郎開店嘛!容不下比自己個(gè)頭高的。

如果這個(gè)新同事,設(shè)計(jì)方法完全錯(cuò)誤,一團(tuán)糟,根本不能運(yùn)行,而又不聽話,如我在上篇文章中所講述的,最后還需要你這個(gè)老大來主導(dǎo)所有設(shè)計(jì)從頭再來,導(dǎo)致非但沒能給與幫助,反而幫了倒忙,那么這個(gè)助手在這個(gè)團(tuán)隊(duì)中確實(shí)沒啥必要存在了。可以在給予幾次機(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ì)排擠下屬出局,那說明你這個(gè)團(tuán)隊(duì)小頭領(lǐng)是不稱職的,公司領(lǐng)導(dǎo)把團(tuán)隊(duì)交到你手里,讓你來帶,是需要你不斷挖掘培養(yǎng)創(chuàng)新人才,提高團(tuán)隊(duì)創(chuàng)新水平的。而不是任人唯親,以己度人,把團(tuán)隊(duì)帶到武大郎的燒餅店一般越來越窩囊。

所以,真正需要卷鋪蓋走人的,或者把位置讓出來的,應(yīng)該是你自己。

對(duì)上述所有觀點(diǎn)的綜合看法,我的評(píng)價(jià)是:

我非常驚訝的是這個(gè)行業(yè)的普遍現(xiàn)象, 不善于吸取別人的長(zhǎng)處。 明明是自己看不懂的設(shè)計(jì),卻不肯承認(rèn), 然后能按自己的價(jià)值觀給出各種各樣奇談怪論的評(píng)論。
表達(dá)一下自己的謙卑和學(xué)習(xí)欣賞態(tài)度就那么難嗎?

討論中,倒是有一位群友的態(tài)度非常坦誠:憑直覺覺得這段程序是錯(cuò)的,然而研究下來它偏偏能正確運(yùn)行。不懂怎么回事。

這位群友以前搞過技術(shù),現(xiàn)在已經(jīng)放棄技術(shù)去搞市場(chǎng)銷售了。對(duì)于這樣的開放心態(tài)的人,我就十分欣賞。說明他并不是技術(shù)搞不好而轉(zhuǎn)行去做銷售,而恰恰是技術(shù)搞得好之后,才有能力從事更富有挑戰(zhàn)性的工作。

我曾經(jīng)寫過好多篇關(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í)候,總有一些人冒出來總結(jié)到:能夠正確運(yùn)行的程序就是好程序,這回,有一個(gè)能正確運(yùn)行的程序出來了,先不論它是否夠效率高,按這些人的觀點(diǎn),首先應(yīng)該接受,而不是否定,更不是不加分析直接要消滅它呀!所以在沒有CR之前, 除了程序的設(shè)計(jì)者自己,無人有資格評(píng)價(jià)程序。檢驗(yàn)程序?qū)﹀e(cuò)(注意不是好壞)的唯一標(biāo)準(zhǔn)是機(jī)器。程序只要在機(jī)器上能運(yùn)行正確,就無人有資格說錯(cuò)。

最后分析下這個(gè)程序的缺點(diǎn)。

從常理來講,大家通常建議編寫程序的風(fēng)格方法要有一致性。這個(gè)程序,前面手動(dòng)部分用的是SR,而后面的自動(dòng)部分用的啟保停。風(fēng)格極其相悖,也難怪導(dǎo)致眾多老工程師勃然大怒。

我曾經(jīng)嘗試過要把它們風(fēng)格統(tǒng)一,要么全都SR 要么全都啟保停。 然而反而有些困難。把前段改為啟保停實(shí)現(xiàn)難度相當(dāng)大,改完以后的邏輯反而不如現(xiàn)在容易閱讀。

而把后段改為SR,難度稍低了一些,也比原來容易閱讀,出錯(cuò)的機(jī)會(huì)也低多了。 至少,自動(dòng)狀態(tài)不再干擾手動(dòng)模式的邏輯了



原本T37的條件中隱含了自動(dòng)模式的條件,現(xiàn)在重復(fù)使用一下,邏輯就比較通順了。

如果程序最初的作者,用這樣的方式寫程序,或許就不會(huì)引來那么多反對(duì)聲音,甚至一不小心得罪老大丟掉飯碗的風(fēng)險(xiǎn)了。

然而,兩種程序?qū)懛ㄊ堑葍r(jià)的,能實(shí)現(xiàn)的功能是一樣的。

hsiung
Just do as you want.
級(jí)別: 家園?
精華主題: 1 篇
發(fā)帖數(shù)量: 504 個(gè)
工控威望: 927 點(diǎn)
下載積分: 8358 分
在線時(shí)間: 84(小時(shí))
注冊(cè)時(shí)間: 2008-09-04
最后登錄: 2024-11-02
查看hsiung的 主題 / 回貼
1樓  發(fā)表于: 2022-12-20 09:57
老萬的研究精神值得肯定
Evaluate your time,
Controll your life.