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