不斷增長(zhǎng)的年紀(jì),需要盡快轉(zhuǎn)向基于模型的設(shè)計(jì)
據(jù)說(shuō),中國(guó)的手機(jī)都帶有美顏和減齡功能,每每在朋友圈里看到女同學(xué)自己拍的凍齡自拍照,總是感到穿越般的恍惚不已:難道,這就是當(dāng)年的“翠花”?
本文引用地址:http://butianyuan.cn/article/201911/406679.htm只見,那月光般柔和的臉上竟沒有一絲絲皺紋,如水的大眼睛秋波蕩漾,攝人心魂,一口細(xì)碎的小白牙洋溢著滿滿的青春氣息,仿佛在訴說(shuō)著無(wú)言的柔情蜜意。
再看那茭白的臉蛋蛋和嬌滴滴的紅唇,就像要透過(guò)手機(jī)的屏幕,貼到我的眼前,輕輕地說(shuō):我的臉龐,就像那皎潔的月光,想不想踩在我的鼻尖上,撫摸那溫柔的月光?
但是,有的時(shí)候,她們的朋友圈竟而也會(huì)有漏網(wǎng)之魚。
在受制于手機(jī)算力無(wú)法群體美顏的集體照里,歲月這把無(wú)情的照妖鏡,殘酷地揭開了昨日美女的畫皮,暴露了她們奔四的年紀(jì)!
是的,她們當(dāng)年的小伙伴-灑家,也開始奔四了。
一
中年男不一定油膩,但是肯定會(huì)間或感到精力不濟(jì),想提起神,做些深度的思考和學(xué)習(xí),但總覺腦袋里沒有足夠的電力,只能淺嘗輒止,扼腕嘆息。
保溫杯里泡上滿滿的枸杞,也無(wú)法找回當(dāng)年滿當(dāng)當(dāng)?shù)幕盍Α?/p>
對(duì)于腦力工作者而言,這絕對(duì)是個(gè)大忌!
灑家不煙不酒不油膩,鍛煉身體,不打游戲,但是,隨著慢慢地上了年紀(jì),也開始經(jīng)常感到精力不濟(jì)。其中有一個(gè)突出的表現(xiàn):越來(lái)越不愿意手寫代碼了。
這當(dāng)然不是因?yàn)闉⒓抑\求轉(zhuǎn)型,想從科研一線逃離,走向“一壺水一包煙,晃晃悠悠過(guò)一天”的管理崗位。而是靠著手寫代碼干活吃飯、掙錢養(yǎng)家的灑家,實(shí)在是覺得手工編碼越來(lái)越辛苦了。
廣大人民群眾對(duì)美好生活的期待,加上當(dāng)今世界的算力不斷增長(zhǎng),導(dǎo)致嵌入式產(chǎn)品中的代碼量呈現(xiàn)爆炸式的增長(zhǎng)。作為一名小公司的嵌入式軟件工程師,盡管自己的經(jīng)驗(yàn)與日俱增,但是悲催的是,經(jīng)驗(yàn)永遠(yuǎn)趕不上工作量增長(zhǎng)的速度,加上公司“唯利是圖”,不可能招聘更多工程師來(lái)幫忙分擔(dān),所以自然越來(lái)越累。
但是,還有另一方面同時(shí)也是最重要的原因:手寫代碼非常燒腦,喝涼水睡涼炕全靠火力壯的小伙子還能扛得住,奔四的老碼農(nóng)哪能受得了?
可是,灑家也只能默默無(wú)言兩行淚。要知道,在好多IT公司中,過(guò)了35歲就被掃地出門了,不舍得招人的領(lǐng)導(dǎo)還能聽你在這里叨逼叨地訴苦?你忙你累,你還有理了?
問君能有幾多愁,摸摸自己光禿禿的頭!
二
那么,問題來(lái)了,手寫代碼為什么會(huì)那么累撒?
記得有位經(jīng)濟(jì)學(xué)磚家說(shuō)過(guò),中國(guó)經(jīng)濟(jì)發(fā)展的所有問題都是因?yàn)橹贫葲]有理順。同理,手寫代碼累人的原因在于開發(fā)過(guò)程沒有理順。
先看看手寫代碼遵循的開發(fā)過(guò)程:需求定義->設(shè)計(jì)->實(shí)現(xiàn)->測(cè)試與驗(yàn)證。
這里的四個(gè)階段看起來(lái)貌似連貫,其實(shí)在很大程度上是各自獨(dú)立的。試為諸君細(xì)剖之。
需求定義,顧名思義,搞清楚所開發(fā)產(chǎn)品有哪些功能、性能、標(biāo)準(zhǔn)上的要求,它的輸出是一些文本文檔。
有人說(shuō),中國(guó)科技不發(fā)達(dá)的原因之一就在于漢語(yǔ)的模糊和歧義性。雖說(shuō)漢語(yǔ)毫無(wú)來(lái)由地背了這么大一個(gè)鍋著實(shí)冤枉,但是,在文檔形式的需求定義中,各色人等對(duì)需求的理解確實(shí)是“橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同”。
千人千面,無(wú)法統(tǒng)一,這就為漏洞和缺陷埋下了火藥線。
再看設(shè)計(jì)階段,設(shè)計(jì)人員按照需求文檔設(shè)計(jì)原型,選擇架構(gòu),劃分模塊。在這個(gè)階段,可能會(huì)搭個(gè)電路,買個(gè)開發(fā)板,做一些實(shí)物原型,看看自己的思路是否可行。但是顯然,這種方式非常地耗時(shí)、好成本,同時(shí)也很不完整。
到了實(shí)現(xiàn)階段,先聲明一點(diǎn),大部分嵌入式軟件工程師都是把設(shè)計(jì)階段和實(shí)現(xiàn)階段混在一起的。這個(gè)階段,工程師會(huì)借助各種開發(fā)工具,開始手工編碼代碼。手寫代碼講究個(gè)心到、眼到、手敲,用腳丫子都能想得到,這種方式特別地容易引入人為錯(cuò)誤。
最后是測(cè)試階段,也是開發(fā)過(guò)程的最后一個(gè)階段。一般,測(cè)試人員在該階段介入進(jìn)來(lái),對(duì)照著需求逐條測(cè)試。在整個(gè)鏈條的最后一環(huán)查找并修復(fù)錯(cuò)誤,會(huì)花費(fèi)很大的時(shí)間和人力成本。
各個(gè)階段之間,實(shí)際上都有一道墻橫亙?cè)谀抢铩?/p>
從需求分析到設(shè)計(jì),文本文檔的歧義性和模糊性可能會(huì)讓你誤入歧途,成為日后隱患的導(dǎo)火線。
從設(shè)計(jì)到實(shí)現(xiàn),李宗盛大哥說(shuō):“既然不是仙,難免有雜念”,灑家說(shuō):“既然有雜念,難免會(huì)智商掉線”,從而在編碼中埋下一個(gè)又一個(gè)天雷滾滾,日后劈得自己外焦里嫩。
從實(shí)現(xiàn)到測(cè)試,面對(duì)的便是一道肉墻了。測(cè)試大姐帶著豐滿的脂肪在你面前一站,一邊說(shuō)落你不遵循編碼規(guī)則的自由散漫,一邊控訴你蹩腳的編程經(jīng)驗(yàn),你說(shuō)你難堪不難堪?
三
只提問題不說(shuō)答案的都是在耍流氓。灑家風(fēng)度翩翩,自然是要臉面的。
灑家開的藥方便是,基于模型的設(shè)計(jì)(MBD)。
MBD,是以模型為核心,對(duì)算法進(jìn)行建模、驗(yàn)證,并支持文檔自動(dòng)化、自動(dòng)代碼生成。
還是按照上面的四個(gè)階段,對(duì)比一下MBD的優(yōu)勢(shì)。
在需求分析階段,MBD的輸出結(jié)果是一個(gè)可視化的模型,不同的人使用相同的模型。
它的優(yōu)勢(shì)在于:相比于文本文檔,可視化的圖形模型顯得非常清楚、明確,最關(guān)鍵的是明確統(tǒng)一且唯一的需求,便于人們的交流。灑家認(rèn)為,圖形化的模型是消解漢語(yǔ)歧義性的最佳手段,各位看官以為然否?
設(shè)計(jì)階段可以認(rèn)為是一個(gè)模型不斷細(xì)化的過(guò)程,隨著模型的細(xì)化,驗(yàn)證可以同時(shí)進(jìn)行,沒錯(cuò),傳統(tǒng)開發(fā)流程中第四個(gè)階段-測(cè)試可以提前到設(shè)計(jì)階段來(lái)進(jìn)行了。它的好處在哪里呢?
佛門有句話,“不怕念起,只怕覺遲”。在“打得念頭死,許汝法身活”的語(yǔ)境中,起心動(dòng)念是不對(duì)的,要早點(diǎn)消除,不要覺察地太遲。在軟件開發(fā)上也是如此,要盡可能在早期發(fā)現(xiàn)錯(cuò)誤,這樣會(huì)給后續(xù)的開發(fā)過(guò)程帶來(lái)很多便利。
在手寫代碼的傳統(tǒng)流程中,盡早發(fā)現(xiàn)問題靠的是“評(píng)審”,但是顯然那只適用于大公司。據(jù)我一個(gè)在大公司干過(guò)活的同學(xué)講,寫了文檔后要評(píng)審,做了設(shè)計(jì)后要評(píng)審,敲完代碼后要評(píng)審,弄完測(cè)試用例還是要評(píng)審,沒完沒了的評(píng)審,效率實(shí)在是低。
現(xiàn)在好了,MBD在“早期”設(shè)計(jì)階段便可以做測(cè)試和驗(yàn)證,從而將錯(cuò)誤的苗頭盡早地扼殺在了搖籃里。
再下一個(gè)便是實(shí)現(xiàn)階段。MBD正是在這個(gè)階段,極大地解放了碼農(nóng)的生產(chǎn)力,因?yàn)槟挥檬謱懘a啦,MBD支持自動(dòng)代碼生成!
靠機(jī)器而不是人寫代碼,這合適嗎?合理嗎?
好吧,人類是計(jì)算機(jī)的造物主,但是在這里,咱不談精神,不說(shuō)靈魂。
必須承認(rèn)的是,計(jì)算機(jī)在生成代碼方面確實(shí)要比人類的智慧高,且不說(shuō)他們支持好幾種生成方式,可以選擇效率優(yōu)先,或者RAM優(yōu)先,人家還可以自動(dòng)支持MISRA-C編碼規(guī)范,光這一條,還不得秒一大街碼農(nóng)?
沒有情感的計(jì)算機(jī)消滅了編碼階段的人為錯(cuò)誤,便是對(duì)碼農(nóng)最大的溫情!
最后一個(gè)測(cè)試階段不用說(shuō)了,因?yàn)樵贛BD設(shè)計(jì)里,這四個(gè)階段之間沒有“墻”,模型不斷細(xì)化,測(cè)試驗(yàn)證是持續(xù)進(jìn)行的,在早期就引入了驗(yàn)證,把錯(cuò)誤消滅在早期,盡可能降低了修復(fù)的成本。
四
說(shuō)到這里,老碼農(nóng)們也不要傷心,覺得脊梁骨發(fā)涼。都自動(dòng)代碼生成了,公司領(lǐng)導(dǎo)要是拿自己開刀咋辦?
需要明確的是,MBD并非完全不需要軟件工程師的聰明才智了,比如對(duì)程序中各種變量、函數(shù)的命名,無(wú)論是手寫代碼還是MBD方式都很重要,程序設(shè)計(jì)中的命名是一個(gè)充滿創(chuàng)造力的地方,一個(gè)智商不到兩歲小孩的計(jì)算機(jī)能起好名?
在MBD設(shè)計(jì)中,需要碼農(nóng)動(dòng)用自己的創(chuàng)造力來(lái)重視標(biāo)識(shí)符命名。因?yàn)楹玫拿哂袠O強(qiáng)、極精準(zhǔn)的描述能力,能夠清晰地表達(dá)函數(shù)或變量的含義,這樣會(huì)增加程序的可讀性和可維護(hù)性,也可以在一定程度上消除不必要的注釋。
其次,在底層驅(qū)動(dòng)上,也很難引用MBD方式,因?yàn)樵诤芏鄳?yīng)用領(lǐng)域中,底層驅(qū)動(dòng)是比較復(fù)雜的,輸入驅(qū)動(dòng)、輸出驅(qū)動(dòng)、通信驅(qū)動(dòng)、特殊器件的驅(qū)動(dòng)等等這些,依然是手寫代碼的天下。
還有通信、診斷、操作系統(tǒng)這些東西,用MBD很難實(shí)現(xiàn),而且也沒有優(yōu)勢(shì),還不得靠咱?
所以,通常的情景是:在一個(gè)產(chǎn)品級(jí)的開發(fā)中,會(huì)在一個(gè)大系統(tǒng)中的一個(gè)任務(wù)中或者ISR中,把MBD實(shí)現(xiàn)的算法放進(jìn)去,其它地方,仍然是手寫代碼的天下。將代碼集成到整個(gè)嵌入式系統(tǒng)的軟件中時(shí),依然需要手寫代碼的經(jīng)驗(yàn)。
那種妄圖讓MBD取代所有編碼工作,是狂妄的,也是不現(xiàn)實(shí)的。
后記
從手寫代碼到MBD,是一種開發(fā)流程思維的革命。
在這個(gè)過(guò)渡的過(guò)程中,不要有太大的負(fù)擔(dān)和畏難心理。無(wú)論是手寫代碼還是MBD的自動(dòng)代碼生成,就是個(gè)工具,一層窗戶紙的事兒。沒有捅破之前覺得很難,但是一旦捅破了,不過(guò)爾爾。
革命革命,革掉自己的命,方能迎來(lái)新生。往日種種譬如昨日死,今日種種譬如今日生。
在這個(gè)不斷增長(zhǎng)的年紀(jì),希望各位老碼農(nóng)盡早轉(zhuǎn)型到基于模型的設(shè)計(jì)上來(lái)。
我愛你們!
評(píng)論