架構(gòu)離不開數(shù)據(jù)結(jié)構(gòu)
A說:
沒有人跟帖嗎?
那我先談?wù)勎业挠^點吧,學計算機的人都學過數(shù)據(jù)結(jié)構(gòu)這門課,教材的開始就談到了一個公式:軟件= 數(shù)據(jù)結(jié)構(gòu)+算法,大家似乎認為計算軟件發(fā)展到現(xiàn)在這個公式已經(jīng)跟不上時代了,其實則不然,這個公式依舊是一條定理,就算是面向?qū)ο缶幊痰南乱淮幊趟枷氤霈F(xiàn),這個公式仍然是正確的,因為這個公式道出了計算機軟件的本質(zhì),只要計算機還是馮諾依曼計算,那么這個公式就是正確的。
面向?qū)ο蟮乃枷氪蟠蟮娜趸顺橄筮@個概念,強調(diào)自然思想,用正常的思維去分析架構(gòu)軟件,但是計算機還是抽象的概念,建模依然是抽象的,將現(xiàn)實問題轉(zhuǎn)化為計算機問題就是建模,其實也就是架構(gòu),我面試過很多人,基礎(chǔ)知識都不清楚,上來就跟我談架構(gòu),可是你有沒有想過到底什么是架構(gòu)?架構(gòu)與數(shù)據(jù)結(jié)構(gòu)和算法難道沒有關(guān)系嗎?
B說:
如果站在性能方面來說我還挺支持你的觀點的,但站在架構(gòu)層面他們還是有許多不同處的,畢竟他們的維度不同,一個是面向數(shù)據(jù)一個是面向結(jié)構(gòu)。
C說:
是的,zzxsky1986 談的屬于兩種不同邊界內(nèi)的東西,“計算機是馮諾依曼計算”是說明事物內(nèi)部原理,而架構(gòu)是指如何使用這個事物,是從事物外部來看的。
一個是事物內(nèi)部,一個是事物外部,完全不同領(lǐng)域的。
再打一個例子,汽車內(nèi)部原理和我們?nèi)绾问褂闷囃耆莾纱a事;自行車內(nèi)部原理和我們?nèi)绾悟T自行車是兩碼事,騎自行車的基礎(chǔ)和自行車自身結(jié)構(gòu)基礎(chǔ)不是一回事。
請問有考駕駛執(zhí)照時,有考你汽車內(nèi)部原理的嗎?我們知道汽車內(nèi)部原理那是修理汽車和制造汽車專業(yè)的事情。
再回到計算機軟件,計算機軟件使用基礎(chǔ)與軟件是如何在計算機內(nèi)部運行的內(nèi)部機制是兩碼事。所以,樓主作為面試官,要求程序員知識廣泛是好的,但是切不可隨便跨越邊界,讓應(yīng)聘者無法定位你們是找使用軟件的,還是找修理軟件或制造發(fā)明新軟件語言的人。
不過話說回來,盡管架構(gòu)是指應(yīng)用架構(gòu),但是應(yīng)用架構(gòu)中數(shù)據(jù)結(jié)構(gòu)知識有時還是需要的。
A說:
我認為一個架構(gòu)師,一個可以談架構(gòu)的人,應(yīng)該對原理有所了解,否則我認為談架構(gòu)是虛談。依然用汽車的例子來講,架構(gòu)師相當與一個汽車設(shè)計師,對汽車的各個子系統(tǒng)都了如指掌這樣才能造出好車,而不是一個只會開汽車的人就是汽車設(shè)計師了,要想了解軟件的原理,數(shù)據(jù)結(jié)構(gòu)是基礎(chǔ)中的基礎(chǔ)。
我僅僅想發(fā)表一下自己對中國軟件行業(yè)的現(xiàn)狀的一些感慨,中國有太多的程序員是應(yīng)用軟件程序員,中國已經(jīng)不缺乏這樣的人了,不缺會開車的人,缺的是能造車的人,我認為一個老司機對汽車的原理多少都會有些認識,但是離造車還相距甚遠,一個程序員也一樣,不能忽略基礎(chǔ),否則即使做了多年軟件充其量也就是一個coder。談架構(gòu)的資本也是建立在對原理的理解和掌握上的。