第八十九章嚇一跳
當(dāng)蕭天收到來自曹慶陽發(fā)來的消息的時候,,也是有點(diǎn)懵的狀態(tài),。
你說你怎么接的懸賞現(xiàn)在一直有問題??!
不過,畢竟是大學(xué)一個宿舍里面的哥們,,所以蕭天也是回復(fù)了過去,。
天天:叫我一聲爸爸,爸爸幫你搞定,。
曹慶陽:別鬧,,跟你說認(rèn)真的,,我先傳給你,到時候給我搞定一下,。這個我真的找不出來好像,,不只是一點(diǎn)頭緒沒有,關(guān)鍵是有的地方是看不懂的的,,看不懂那我只能放棄了,,總不可能讓我瞎貓碰著死老鼠吧?
天天:我現(xiàn)在有點(diǎn)忙,,等著吧,,等有空的時候我?guī)湍憧匆幌滦邪桑?p> 曹慶陽:行,有你這句話,,我就放心了,。
天天:滾蛋吧你。
蕭天躺在床上,,享受著張雪帶來的服務(wù),。
吃的小臉蛋通紅的張雪看著蕭天聊天都能夠聊出笑容,不由得有些好奇,,“誰?。俊?p> “一個朋友,,你也知道,,曹慶陽,他又接了一個懸賞,,聽說是五千塊錢的,沒解決掉,。我估摸著他是在拿我當(dāng)苦力使喚呢,。”蕭天說著,,當(dāng)然當(dāng)苦力就是一句玩笑話,。
“那你幫不幫他呢,五千塊錢懸賞應(yīng)該算是簡單的任務(wù)了吧,,蕭老板你應(yīng)該能輕松解決吧,?”張雪想著這件事情,也是有點(diǎn)覺得挺有意思的,。
“那當(dāng)然,,我是誰?這么一個小懸賞肯定能解決的,,不過曹慶陽那家伙畢竟是初級程序員了,,一般來說這種懸賞應(yīng)該是小問題的,,但是竟然還沒有解決,看樣子這個懸賞有點(diǎn)坑啊,?!?p> 蕭天說起這個也是稍微的認(rèn)真了點(diǎn),那畢竟是他的新能力大觸級別的嘛,。
張雪對于這一切自然是不知道的,,她大學(xué)學(xué)的又不是這些,學(xué)的是傳媒專業(yè)的,,只不過沒有從事傳媒專業(yè)這方面的工作而已,。
“算了,不說這些了,,我們先樂呵樂呵,。”
蕭天實(shí)際上對這件事情沒有太過于放在心上,,畢竟只是一個小小的事情罷了,,在曹慶陽的眼中可能是無法解決的難題,但是現(xiàn)在在他的眼中,,其實(shí)也可能就是那么回事,。
區(qū)區(qū)小問題,不足以掛齒,。
“嗯,,對了蕭老板,我想問你一個問題啊,,你喜歡女孩多一點(diǎn)還是喜歡男孩多一點(diǎn),?”
張雪也是突然的問道,蕭天聽著這個問題,,簡直是莫名其妙啊,。
這個問題怎么回答呢?
當(dāng)然是女孩子了,,他又不是男同,,但是……
蕭天突然之間明白了什么,聲音有些磕磕巴巴的,。
“……有……有了,?”
張雪看著蕭天那個表情,也是笑了笑,,不過還是點(diǎn)了點(diǎn)頭,。
“嗯……這個月一直沒來我就發(fā)現(xiàn)有問題了。已經(jīng)快一個月了……”
不是吧,?
這么快就有了,?
蕭天愣了愣,,快一個月了,那不就是上個月做的嗎……
這……
倒也沒有什么大事情,,主要是張雪大著肚子,,她父母怎么解決呢?
蕭天有些惆悵了,。
他現(xiàn)在可沒有打算結(jié)婚的念頭啊,,頭有些疼。
孩子當(dāng)然得要了,,畢竟是他的精華結(jié)晶,。
張雪看著蕭天的表情,也是捂嘴笑了笑,,“騙你的,,你還當(dāng)真了?!?p> 蕭天的表情一瞬間又是放松了下去,,然后翻了翻白眼,“嚇我一跳,,不過為什么要問男孩女孩的問題?。俊?p> “這不是問問嘛……你又不帶那個東西,,現(xiàn)在天天都要來幾次,,遲早都要懷上?!睆堁┌琢耸捥煲谎?。
蕭天也是思考了一下,說的不錯,,不帶那個東西,,又天天日夜笙歌,那的確是很快就要懷著,。
不過……
懷著就懷著吧。
蕭天倒是不怕,,他養(yǎng)得起,,就是怕張雪會被人說閑話。
畢竟他現(xiàn)在給不了名分之類的東西,。
想到這里,,蕭天也是朝著張雪露出一抹歉意。
張雪也是了解,,他知道這個男人的想法,,畢竟已經(jīng)在一起不算短了,,她還是能夠猜透身邊這個男人的心思的。
她是有一點(diǎn)遺憾,,但是這是早就預(yù)料到的結(jié)果,,倒還不至于太難過。
當(dāng)然現(xiàn)在的氣氛不打擾蕭天再來一次白日宣音,。
……
當(dāng)百萬雄兵戰(zhàn)死沙場,,蕭天也是空閑了下來,所以蕭天也是準(zhǔn)備直接花費(fèi)一點(diǎn)時間幫曹慶陽給搞定,。
打開文件,,蕭天看著這個代碼,陷入了沉思,,他陷入沉思的原因不是因?yàn)檫@個修復(fù)漏洞很難,,相反,很簡單,,蕭天半個多小時就給它修復(fù)好了,。
他感覺到的只是修改BUG和找BUG那真的是兩個情況。
不過有些人也肯定很疑惑,,出現(xiàn)BUG是必然出現(xiàn)的情況還是程序員水平有限導(dǎo)致的,?
這個嘛……仁者見仁,智者見智,。
就比如這個——
print(“hello,, world.“)
你看,這個“程序”就是沒有BUG漏洞的……
實(shí)際上但凡有過一點(diǎn)正式開發(fā)經(jīng)驗(yàn)的程序員,,寫個簡單的hello world都能寫出BUG的恐怕不多見吧,。
別說hello world了,一個簡單的,、不涉及“隱秘”機(jī)制的百行小程序,,絕大多數(shù)資深程序員也可以直接寫成0 bug。
因?yàn)檫@些實(shí)際上是對計(jì)算機(jī)的原理深度決定的,,比如你對計(jì)算原理或者語言機(jī)制理解越深,,對你來說“隱秘”的東西就越少,寫出高質(zhì)量代碼的機(jī)率就越高,。
而且,,就像黑土平臺里面的交流板塊哪怕只是在上敲一篇一千個字的灌水文,有幾個可以保證無語法錯誤,、無錯別字且標(biāo)點(diǎn)符號使用正確呢,?
尤其這還是在機(jī)器替你寫字,使得“提筆忘字”“書寫錯誤”之類錯誤無法存在的前提下:這樣你都不能保證全對……
那么不僅大小寫敏感、而且邏輯更為曲折復(fù)雜,、容不得半點(diǎn)含糊的計(jì)算機(jī)程序呢,?
因此,有BUG漏洞那真的是無可避免,。
當(dāng)然還有一種情況,,你的程序本身是無bug的;但支持環(huán)境比較坑……
這種正常來說不算程序bug,,當(dāng)然實(shí)踐中,,你可能沒辦法坐等OS或者瀏覽器等廠商修改——所以結(jié)果就是你只好積極行動起來,在自己的程序里為別人的錯誤擦屁股……
這在業(yè)界被稱為workaround: Workaround - Wikipedia,。
正常來說,,workaround是臨時的,并且,,如果不是諸如0day之類特別關(guān)鍵,、刻不容緩的問題,搞workaround往往是出力不討好的——因?yàn)樗顺舐?,易錯,,含糊,難以理解,;而且等OS或者瀏覽器等的原始廠商修了它自己的bug,,你原本好好運(yùn)行的workaround往往反而會引起問題。
尤其是,,有時候OS或者瀏覽器廠商修復(fù)速度比較慢,、致使某種workaround反倒成為“主流技術(shù)”;那么當(dāng)“正統(tǒng)”修復(fù)方案和workaround沖突時,,OS或者瀏覽器廠商往往不得不將錯就錯,,以免搗毀那些用了workaround的實(shí)現(xiàn)……
這類復(fù)雜情況暫不討論,提它主要是為了說明,,搞清楚bug的真正發(fā)生點(diǎn)是極為重要的,。
修不到bug的根源、濫用workaround,,度過的是眼前的難關(guān),,犧牲的卻是整個項(xiàng)目的穩(wěn)固性。
類似的,,盡量把程序?qū)懙摹按蟊娀币稽c(diǎn),,沒有必要不碰新特性,也可以在很大程度上避免“遭遇官方bug”問題——如果你自己理解上再有點(diǎn)偏差,,用新特性就和作死無異了。
不過……
有的人敲字灌水都錯字連篇,,但是有人手寫幾十上百萬字的小說,,隨便截一段都差不多能進(jìn)語文課本……
所以,,人與人還是有極大差別的。
不能因?yàn)椤癓inus也寫bug”甚至“Linus也寫過低級bug”,,就認(rèn)為“我寫個一百個整數(shù)里找最大值的簡單程序出三十個bug也是正常的”——初學(xué)者搞出這事,,正常。
至于專業(yè)人員嘛……出一個都不正常,。
不僅如此,。
既然“寫長篇出bug正常,發(fā)條短信就那么十幾個字,,錯一個都不應(yīng)該”,;那么我們把長篇拆開成若干章,一章只寫三千字呢,?再把一章拆開成若干段,,一段只寫數(shù)百個字呢?
這就是為何寫程序要先做模塊設(shè)計(jì),、然后再把模塊按職責(zé)拆分成類,、類按功能拆分成函數(shù)、最后還要求一個函數(shù)不要超過一屏(大約80行)的原因了,。
經(jīng)過拆分之后,,一個一個函數(shù)填寫實(shí)現(xiàn)、然后再一個一個函數(shù)做單元測試,,測完再組合起來搞功能測試,、集成測試……
這樣寫程序,當(dāng)然還是無法杜絕bug出現(xiàn),;但出bug的機(jī)率就微乎其微了,。
而且程序和長篇小說不同。
小說里的角色,,尤其是主角和主要配角往往是貫穿始終的,,這就使得小說章與章之間存在很多內(nèi)部聯(lián)系;稍微搞不好就會導(dǎo)致前后失去呼應(yīng),,比如主角一會兒傷在左手一會兒傷在右臂,、或者前面挖個坑然后設(shè)個伏筆后面卻忘了用,等等,。
但是在程序里面,,不同模塊甚至不同函數(shù)之間,應(yīng)該是毫無瓜葛的,,每一個都可以摘出來獨(dú)立成庫——有瓜葛就說明用了全局變量或者靜態(tài)對象,,或者通過參數(shù)或者約定等傳遞了過多的東西——這就叫“低耦合”。
做到了“低耦合”,你就可以把一個復(fù)雜的大程序當(dāng)一組簡單的短文甚至短信寫,。
這樣自然就很難出錯了,。
當(dāng)然了,有些情況下,,程序邏輯非常復(fù)雜且無法拆分,,也就是所謂“無法約分的復(fù)雜性”,這種代碼就必須端起十二分小心來,,當(dāng)然即便如此,,bug出現(xiàn)率仍然要遠(yuǎn)高于其他代碼。
一般來說,,要把程序拆成“不可約分”的一組最小單元來寫,。
這個“不可約分”就是術(shù)語說的“高內(nèi)聚”:這段程序只做一件事,這件事已經(jīng)沒法拆的更簡單了,,只能把它們放在同一段代碼里一舉解決掉,。
因此,寫程序時,,事先的“謀劃”非常重要,。
一個有經(jīng)驗(yàn)的資深工程師,可以在動手前就把一個復(fù)雜的大項(xiàng)目拆成一堆幾乎互不關(guān)聯(lián)的小程序,,然后逐一實(shí)現(xiàn)它們,、實(shí)現(xiàn)完再把它們組合起來就行了。
顯然,,“謀劃”好了,,一個程序的難度降低若干個數(shù)量級都是可能的。
說實(shí)話,,在絕大部分能見到的軟件中,,都是或多或少的有bug的……
只不過,第一開發(fā)可能沒想到,,第二測試沒測到,,第三用戶沒碰到,第四客服的反饋沒收到,,那么——這就是一個“成熟穩(wěn)健”的產(chǎn)品,。