第205章 作品相關(guān):計算機(jī)思想(1)
書名: 崛起于2009作者名: 平底鍋煎蛋本章字?jǐn)?shù): 2102字更新時間: 2018-12-31 16:30:59
本文中反復(fù)提到了一個詞,“思想”。
什么是“思想”?“思想”是個籠統(tǒng)的概念,泛指解決問題的思路和手段。
“思想”中被提及頻率最高的,當(dāng)屬“面向?qū)ο蟆彼枷搿D敲词裁词恰懊嫦驅(qū)ο蟆保?
首先說“對象”,“對象”是一個指代詞,相當(dāng)于日常用語的他、她、它,并不具體指什么東西。所以“面向?qū)ο笏枷搿本秃媒忉屃耍褪鞘褂胻a的方式,去解決問題。
世間萬物都可為對象,比如把“手機(jī)”當(dāng)做對象,那么消費者拿到手機(jī)之后,并不需要去研究手機(jī)是怎么制造的,也不需要了解手機(jī)的運動原理,反正只要知道怎么去使用它,接打電話也好還是娛樂也好,就可以了。
面向?qū)ο蟮膶崿F(xiàn),依靠的封裝、繼承、多態(tài)等方法,最終達(dá)到的目標(biāo)是是提高效率。比如說,手機(jī)就是一個封裝好的對象,讓用戶使用手機(jī)前先去理解手機(jī)的原理,這既不科學(xué)也不效率。
計算機(jī)面向?qū)ο笏枷氲恼Q生,就催生了許多面向?qū)ο蟮慕鉀Q方案,這里面最廣泛被用到的就是面向?qū)ο罂蚣堋?
面向?qū)ο罂蚣茏畲蟮淖饔帽闶欠止f(xié)作,提高開發(fā)效率。比如說甲負(fù)責(zé)項目中的某個功能,需要使用乙的開發(fā)功能,互相約定好參數(shù)和返回值即可,并不需要去關(guān)心對方代碼怎么寫的。
java是一個純面向?qū)ο笫秸Z言,大名鼎鼎的j2ee和j2me便是面向?qū)ο罂蚣堋6袌稣加新式陙碇鸩脚噬膒hp,也有著屬于自己眾多的框架,比如Yii和ci。甚至還有一些傻瓜式框架,比如ECShop、dedecms、discuz,提供給非計算機(jī)專精開發(fā)者使用。
但是值得一說的是,過分的迷信某個框架是不可取的,框架只是一種輔助手段,最終決定代碼是否優(yōu)秀的依舊還是人。
比如說Yii框架,被無數(shù)不知情的吃瓜眾吹捧過,其結(jié)構(gòu)復(fù)雜、功能完善,上手慢,但熟練以后,相較于其他框架能夠得到更高的開發(fā)效率。
但是強(qiáng)大就意味著可塑性差,DIY潛力有限,這在面對億級數(shù)據(jù)時便顯得心有余而力不足。也因此,其貌不揚(yáng)結(jié)構(gòu)簡單的ci框架,以及在其基礎(chǔ)上各種改造而來的自研發(fā)框架,便在最高的層次發(fā)揮了巨大的作用。
面相對象與之相對的便是面向過程。在面向?qū)ο笏枷肴绱藦?qiáng)勢的通知局面下,面向過程依舊有著自己的一片天地。
面向過程就是直接面對問題,像流水賬一樣一次把代碼弄出來,沒有MVC。其缺點是代碼又臭又長、可讀性和可維護(hù)性差,但是它的優(yōu)點是面向?qū)ο鬅o可取代的:少了“安排”對象的資源消耗,面向過程的執(zhí)行效率更高,在面對海量負(fù)載以及腳本任務(wù)中,面向過程都扮演著重要的角色。
由此可見,計算機(jī)行業(yè)里,并不存在說哪個技術(shù)一定是最先進(jìn)的,哪個框架一定是最完美的。適合自己的,符合當(dāng)下要求的,才是最好的。
真正的武林高手,一花一葉都是順手拈來,絕不會拘泥于某一個招式,所以本書從來不去強(qiáng)調(diào)哪門技術(shù)又或者框架,以免給人誤導(dǎo)。
就說Python這門語言,作為一門shell層執(zhí)行腳本,并且還是個面相過程式語言。恐怕十年前的人們打死也想不到,它會在AI領(lǐng)域大放光彩。
以上說的計算機(jī)面相對象,或者M(jìn)VC框架,都是狹隘的面向?qū)ο蟆V義的面向?qū)ο笏枷耄瑒t是廣泛存在于世間萬物的。
比如說手機(jī),這個說過了。再比如說菜刀切菜,菜刀的材質(zhì)有必要去弄清楚嗎?
再具體到本書中假設(shè)的情況,面向?qū)ο蟮谋举|(zhì)是分工協(xié)作,并忽視“部分”做“整體”的一個手段,是社會分工越來越細(xì)的必然產(chǎn)物。
比如說研發(fā)手機(jī),手機(jī)里每個配件的技術(shù)是怎么實現(xiàn)的,這個完全不用考慮,就可以把他們當(dāng)成“對象”,反正只要知道這些配件組裝到一起,植入系統(tǒng)后就是一個正常的手機(jī),這就夠了。
再比如研究傳感器,委托索尼研發(fā)imx,索尼怎么做到的,這不需要去深究,反正就是提出要求,得到成果。傳感器是一個對象,整個過程也是一個對象。而研究傳感器的原理,是自身技術(shù)儲備和其他儲備都達(dá)到要求后,才需要考慮的事情。
再比如說,怎么做一個物流機(jī)器人出來?都知道是SLAM,那么SLAM具體是怎么實現(xiàn)的呢?
首先是整體分為總控和個體,總控系統(tǒng)開發(fā)人員并不需要去了解具體小機(jī)器人是怎么做的,只需要按照方案來做一個基于坐標(biāo)的二維電梯程序即可。
小機(jī)器人的項目負(fù)責(zé)人也不需要事必躬親,他只需要把項目再細(xì)拆下去即可,具體可以拆解為:運動神經(jīng)系統(tǒng)、導(dǎo)航系統(tǒng)等。
導(dǎo)航系統(tǒng)負(fù)責(zé)和總控對接,處理指令并向運動系統(tǒng)分發(fā)指令,決定行進(jìn)路線、停走功能和是否卸貨。
運動系統(tǒng)依照優(yōu)先級,首先要依靠各類傳感器處理避障問題,而后解決回充問題,最后再考慮要不要接收導(dǎo)航系統(tǒng)傳來的指令。
再具體一點,避障就是一個問題,可以交給一個小型的開發(fā)團(tuán)隊去做;LDS以及紅外傳感器等,又是更小的組成部分,向避障開發(fā)組提供支持開發(fā)。
再具體一點,LDS怎么做的,激光脈沖怎么發(fā)射的,關(guān)我毛事……
這就是計算機(jī)項目的解決思路了,無論多么大的項目,都是拆分拆分再拆分,最終拆解成一個個可以實現(xiàn)的小項,從而使整個項目可以得到有效快速的執(zhí)行。
再比如說,本書中立的一個flag:怎么做一個機(jī)器人。
同樣,拆分。
機(jī)器人首先是拆分成“大腦”和軀干兩部分,大狗以及后來的科技樹,統(tǒng)統(tǒng)屬于軀干。
視覺、聽覺等非運動部分,則歸于大腦。
高度成熟的機(jī)器人,兩者缺一不可。
人類的許多動作,其實是神經(jīng)反饋的結(jié)果,比如說看到肉肉就想吃:首先得看到肉肉,然后才能指揮身體去吃。
神經(jīng)反饋后面會寫。
不說了,我餓了,要去吃肉肉了……
祝大家元旦節(jié)快樂!
鑒于元旦將至,我就斷個更慶祝一下吧……好好的節(jié)日,真的怕毒死人,下個章節(jié)可能有點毒……