第三十八章 兩個(gè)必要條件
讓梁實(shí)誠(chéng)生氣的原因是這樣,任何一段程序都不能孤立的執(zhí)行,而需要有一個(gè)對(duì)應(yīng)的庫(kù)文件。
打一個(gè)形象的比方,庫(kù)文件就是一個(gè)執(zhí)行任務(wù)的工人,程序就是我們寫(xiě)在紙上給他安排的工作,程序員就是安排工作的老板。
庫(kù)文件之間可以有很大差別,不同庫(kù)文件之間的智力,工作效率,以及語(yǔ)言之間的差別。
如果庫(kù)文件足夠聰明,那么安排工作的老板也就是程序員可以比較省心,只需要用一些簡(jiǎn)單通俗的話,就可以命令這個(gè)工人,剩下的他自己都懂要怎么做。
如果庫(kù)文件比較笨,那么這個(gè)工人就是屬于一問(wèn)三不知的那種,想要給他安排任務(wù),老板可就得多費(fèi)一番口舌了,基本是間間事都得詳細(xì)說(shuō)明。
也就是對(duì)于不同水平的工人,需要用不同方式的語(yǔ)言下達(dá)命令。
如果工人足夠聰明,甚至老板和工人之間與暗語(yǔ)交流也不是問(wèn)題。
同時(shí)為了表達(dá)同樣的意思,下達(dá)同樣的命令,不同使用不同庫(kù)文件的時(shí)候,編程的規(guī)則是不一樣的。
簡(jiǎn)而言之一句話,想要運(yùn)行一段程序,必須有對(duì)應(yīng)的庫(kù)文件。萬(wàn)能編輯器捕捉到的程序不能直接給其他電子設(shè)備安裝使用。
一段程序必須有對(duì)應(yīng)的庫(kù)文件,兩個(gè)明明要放在一起使用的東西竟然拆開(kāi)賣(mài)!
當(dāng)然他還有另一個(gè)選擇,就是在沒(méi)有庫(kù)文件的情況下,去猜程序的含義與邏輯,然后自己手動(dòng)轉(zhuǎn)換。
這就是讓梁實(shí)誠(chéng)感到郁悶的地方,雖然極不情愿,他還是查看了任務(wù)。
【隱藏任務(wù)-童心未眠
目標(biāo)讓一萬(wàn)名不滿(mǎn)十二歲的小孩獲得他們想要的禮物。
時(shí)限兩年之內(nèi)
進(jìn)度0/10000】
看起來(lái)不是一個(gè)簡(jiǎn)單的任務(wù)。
現(xiàn)在梁實(shí)誠(chéng)的第一目標(biāo)是,通過(guò)萬(wàn)能編輯器的幫助來(lái)開(kāi)發(fā)無(wú)人駕駛的程序。
他退出了界面,開(kāi)始權(quán)衡利弊的盤(pán)算起,自己接下來(lái)的路線。
首先把之前拍攝與捕捉到的司機(jī)駕駛汽車(chē)的程序,復(fù)制到電腦里進(jìn)行研究,這次生成的程序量并不小,達(dá)到了200MB左右。
然后逐個(gè)打開(kāi),并手動(dòng)解讀起來(lái),嘗試了一段時(shí)間后,發(fā)現(xiàn)想要完全解讀其中的含義,對(duì)于自己一個(gè)人來(lái)說(shuō)是不可能完成的任務(wù)了。
這時(shí)候梁實(shí)誠(chéng)才發(fā)現(xiàn)自己能力有限,數(shù)據(jù)量太大。
不僅這次數(shù)據(jù)量極大,而且程序內(nèi)容的復(fù)雜度也更高,解讀同樣的數(shù)據(jù)需要花更長(zhǎng)時(shí)間。
解讀過(guò)程就是聯(lián)系上下文,以及部分能直接看懂的內(nèi)容,猜測(cè)全文的意思,不僅不可能用電腦來(lái)完成這份工作,這樣的事情即便交給普通的程序員也是不行的,公司中只有幾位像梁實(shí)誠(chéng)這樣的有獨(dú)立開(kāi)發(fā)解決方案的人才有這個(gè)能力。
那么接下來(lái)的選擇只有兩個(gè)。
方法一,雇傭一大群和自己水平相當(dāng)?shù)能浖こ處?,一起研究整個(gè)這200MB的數(shù)據(jù)的含義,并消耗大量時(shí)間,最終徹底搞懂,這些文件講了什么意思,獲得知識(shí),然后根據(jù)這些知識(shí)去開(kāi)發(fā)程序。
方法二,要么只能想辦法搞到對(duì)應(yīng)的庫(kù)文件,完成系統(tǒng)給定的任務(wù),再根據(jù)庫(kù)文件開(kāi)發(fā)對(duì)應(yīng)的編輯程序,然后就可以直接把這200MB的程序用電腦轉(zhuǎn)換后,直接刷給自動(dòng)汽車(chē)的固件里,并正常運(yùn)行。
梁實(shí)誠(chéng)重新反思了下,系統(tǒng)給的那個(gè)任務(wù),幫助一萬(wàn)個(gè)小孩獲得他們想要的禮物??!這是一個(gè)天書(shū)級(jí)別的難題,就算自己變成圣誕老人都搞不定,別說(shuō)是挨個(gè)搞清楚他們的愿望,這年頭哪怕是給個(gè)機(jī)會(huì)讓自己接觸到一萬(wàn)名小孩都很困難,真執(zhí)行下去指不定什么時(shí)候被警察叔叔盯上。
雖然還是厚著年皮,去了最近的一家幼兒園,有小孩200多名,和校長(zhǎng)商量后,以打廣告為幌子,親自了解了每一個(gè)孩子的愿望,記錄在冊(cè),挨個(gè)購(gòu)買(mǎi),落實(shí)到位。
但明明自己給200多個(gè)小孩一人一個(gè)禮物,系統(tǒng)任務(wù)的進(jìn)度條上卻顯示28/10000。
也就是說(shuō)這幫小孩真不好伺候,明明按照他們自己說(shuō)出來(lái)的愿望購(gòu)買(mǎi)的禮物,送到他們手里的時(shí)候已經(jīng)不是他們想要獲得的禮物了。
最終梁實(shí)誠(chéng)認(rèn)為這個(gè)任務(wù)在這個(gè)時(shí)代是不可能完成的,再這樣繼續(xù)下去指不定出什么亂子,于是果斷放棄了系統(tǒng)給的這條路。
現(xiàn)在他還剩第三條路可以走,無(wú)視系統(tǒng)的任務(wù)獎(jiǎng)勵(lì),自己強(qiáng)行開(kāi)發(fā)對(duì)應(yīng)的庫(kù)文件。
通過(guò)這些已有的200MB程序進(jìn)行逆向工程,反推出它們使用的庫(kù)文件。
他覺(jué)得可以嘗試一下。
打開(kāi)代理軟件,進(jìn)入GitHub網(wǎng)站,雖然自己并沒(méi)有頭緒,但他知道這里高手如云。
想要引起高手的注意,并誘使他們對(duì)于這個(gè)復(fù)雜的過(guò)程給與詳細(xì)說(shuō)明是不容易的。
不過(guò)他有一個(gè)好辦法,這是一個(gè)以前百試不爽的招數(shù)。
首先他拿出了之前那個(gè)萬(wàn)能編輯器捕捉到的一些程序,發(fā)到了貼子里。
然后故意裝傻,說(shuō)出幾個(gè)容易得到新手支持的錯(cuò)誤觀點(diǎn),若是能看懂這些程序的高手,可能就會(huì)果斷指出問(wèn)題。
再等到新手圍觀的時(shí)候,大量新手們表示不理解,支持貼主。
這時(shí)候那個(gè)高手就不得不詳細(xì)講解,更多的事情。
這一招對(duì)其他程序員特別有效,這就是程序員的性格,這招有一個(gè)專(zhuān)門(mén)的名字坎寧漢姆定律。
于是梁實(shí)誠(chéng)曬出了自己的貓用手洗臉的樣子,并且把捕捉到的貓走路的程序也發(fā)了上去,并寫(xiě)到。
“有一位高人給我了一段程序,據(jù)說(shuō)輸入到Mega2560單片機(jī)里,就可以讓用舵機(jī)帶動(dòng)的機(jī)器小貓,也做出用手洗臉的動(dòng)作?!?p> 接下來(lái)他等待著真正高手的出現(xiàn),等待有人指出他犯下的基本錯(cuò)誤,指出這段程序不可能在Arduino中執(zhí)行。
最好是有人能看懂這段程序的含義,并說(shuō)明這段程序其實(shí)會(huì)讓機(jī)器小貓走貓步,而不是洗臉。
但是盼望了很久以后,并沒(méi)有得到有效回應(yīng),只有一群人在那里留言表示不明覺(jué)厲,以及各種表情包。
似乎這次失算了,沒(méi)有人明白那段程序是在干什么,就在梁實(shí)誠(chéng)打算放棄的時(shí)候,突然看到了一個(gè)簡(jiǎn)短的留言,
“你的MSN號(hào)是多少?我有話想要和你說(shuō)?!?