您當前位置: 南順網絡>> 官方資訊>> 建站知識

為(wèi)了快一(yī)點為(wèi)什麽卻要慢一(yī)點

将代碼分層,當然是為(wèi)了控制複雜度,讓你的(de)管理(lǐ)井井有條。那為(wèi)什麽非得要建立多個不同的(de)獨立文件夾,再創建不同的(de)文件呢(ne)?

 

一(yī)個直接的(de)考慮是,在同一(yī)個文件下,也就是同一(yī)個文本環境之下,當然會有非常大的(de)自(zì)由度去(qù)增添代碼,沒有任何的(de)條款限制。但同樣是因為(wèi)這樣的(de)“自(zì)由”,它會讓管理(lǐ)處于失控。因為(wèi)控制複雜度,就意味着将多個不确定性的(de)東西固定下來,就需要有強制性的(de)限制,而不是自(zì)由。有了更多的(de)限制條件,才能讓你控制的(de)主體按照你的(de)思路去(qù)發展,去(qù)向同一(yī)個方向用力,而不是散沙一(yī)團。這是一(yī)個經典的(de)因為(wèi)有了更多的(de)局限性,反而讓系統發揮出更強大的(de)力量的(de)例子(zǐ)。正如(rú)山路賽車,為(wèi)了更快一(yī)點,就必須要用更小的(de)馬力。

 

所以,為(wèi)了讓你的(de)“UI部分的(de)代碼成一(yī)堆”,“數據連接的(de)代碼成一(yī)堆”,“業務邏輯的(de)代碼成一(yī)堆”,你必須給予這些部分強硬的(de)限制,讓它們隻能在特定的(de)範圍內(nèi)出現。這就需要創建不同的(de)文件夾,以及不同的(de)源代碼文件。其背後的(de)思維方式是:要用制度去(qù)控制組織,而不是依賴組織中每個成員的(de)自(zì)身素質;要用代碼去(qù)控制流程,而不是依靠腦海中的(de)行為(wèi)規範

 

另一(yī)個需要提到的(de)優勢是,通過不同的(de)文件創建以及不同文件夾的(de)劃分,可(kě)以很好地(dì)解決名字沖突。每一(yī)個模塊都可(kě)能提供一(yī)些相同的(de)功能,但卻需要不同的(de)實現。如(rú)果你将所有這些“具備相同功能但需要不同實現”的(de)函數放在同一(yī)個文本環境下,你将難以區分這些函數,并且會造成沖突。你當然可(kě)以通過增添前綴的(de)方式來解決沖突,但這樣會造成函數名的(de)臃腫。但更為(wèi)關鍵的(de)是:如(rú)果你真的(de)寫過稍微複雜一(yī)點的(de)系統,你會發現在“數量龐大的(de)一(yī)堆沒有分類”的(de)文本中尋找一(yī)個代碼片段是件多麽讓人焦躁的(de)事情!你完全無法在一(yī)堆字符中自(zì)然地(dì)觀察到內(nèi)在的(de)一(yī)緻性和(hé)規律性。而這種“混亂”以及由此産生的(de)焦慮,正是你控制複複雜度的(de)原因。

 

同樣的(de)現象還可(kě)以在數據處理(lǐ)中發現。如(rú)果你是通過Excel去(qù)處理(lǐ)簡單的(de)數據,你會發現它非常靈敏好用。可(kě)是,一(yī)旦數據之間的(de)相互依賴關系有所增加,并且還有其他合作者的(de)參與,崩潰的(de)事情就會發生。你會發現,正是因為(wèi)它的(de)類似于一(yī)張白紙的(de)高(gāo)度靈活性,你發現你竟然難以将你們商讨的(de)“規則”強制性地(dì)實施在表格之中。為(wèi)什麽?因為(wèi)你缺乏限制,缺乏代碼為(wèi)你勾勒出的(de)硬性框架。你可(kě)以任意地(dì)修改一(yī)個單元格的(de)內(nèi)容,也可(kě)以輕易地(dì)增添一(yī)些附加信息作為(wèi)旁邊的(de)備注。假以時日,你會發現你的(de)表格中的(de)信息混亂不清。雖然你已經早已向你的(de)同事、你的(de)朋(péng)友說明了該做(zuò)的(de)事情和(hé)不該做(zuò)的(de)事情,可(kě)是,這畢竟是軟性的(de)東西。違反這些規定,并不會給予違反者以壓力或懲戒。同時,它靈活的(de)增添功能,讓很多數據依賴關系成為(wèi)了一(yī)紙空文。

 

Programming,如(rú)同任何的(de)實務實踐領域,一(yī)個首要的(de)基礎是大量地(dì)建立你的(de)工程實踐經曆,這是一(yī)切的(de)前提。如(rú)果沒有真正的(de)實踐經曆,很多業界的(de)行為(wèi)規範和(hé)行為(wèi)準則是無法被正确理(lǐ)解的(de)。如(rú)同上面所舉的(de)例子(zǐ),如(rú)果你的(de)代碼複雜度不能跨過一(yī)定的(de)基準線,你是無法真正體會到“創建不同文件夾和(hé)不同文件”的(de)強烈需求的(de)。對于toy program來說,增添不同文件行為(wèi)方式,反而會減少代碼的(de)可(kě)讀性,讓代碼晦澀難懂。從入門者的(de)內(nèi)心來說,在這個層面的(de)是無法理(lǐ)解它的(de)好處的(de),因而也就無法知曉它在何種情況下才能被稱之為(wèi)好。并且,一(yī)個附帶的(de)壞處是,你往往不敢或者難以承認你無法理(lǐ)解“将代碼分裂在不同文件的(de)好處”。因為(wèi)幾乎所有有經驗的(de)從業者都會告訴你,這樣做(zuò)是好的(de)。一(yī)旦應該被提出的(de)問題被忽略,那麽你将再也無繼續深入,真正去(qù)理(lǐ)解背後的(de)“所以然”。

 

另一(yī)個容易讓你停留于表面無法做(zuò)出真正評判的(de)要點是,你會片面地(dì)去(qù)理(lǐ)解一(yī)些術語,如(rú)剛才提到的(de)“靈活性”或“局限性”。就字面意思來看,當然是越靈活越好啊。可(kě)事實是,如(rú)同上面的(de)論述,“靈活”與“局限”從來不是孤立存在的(de),也不是被孤立地(dì)評判的(de),它是需要有“語境”的(de),是由你的(de)實際問題的(de)規模和(hé)目标所決定的(de)。如(rú)果你的(de)任務不是太複雜,或者僅僅是停留于頭腦風暴的(de)設計階段,上帝視(shì)角的(de)靈活性(也就是白紙式的(de)靈活性)會給你帶來巨大的(de)優勢。另一(yī)方面,如(rú)果你需要建立某些規則,那麽你應當建立一(yī)些框架去(qù)做(zuò)限制,讓“局限性”成為(wèi)你控制複雜度的(de)強大工具。

 

更進一(yī)步,如(rú)果你讨論的(de)“語境”是代碼重構,或者集中于框架建立,“靈活”與“局限”的(de)意思或者效果又會颠倒一(yī)轉。在你的(de)框架構建中,你需要找到的(de)是一(yī)種合理(lǐ)的(de)組織方式,使你的(de)系統能夠靈活地(dì)增添新的(de)代碼。而不至于被“糟糕設計”絆住:難以找到一(yī)個合适的(de)位置去(qù)增加代碼,因為(wèi)似乎每一(yī)個代碼片段都有着特定的(de)限制性,一(yī)旦增加新的(de)片段,就會破壞原有組織。在這種情形之下,“靈活”就成了值得追求的(de)目标。

 

那麽,有了以上兩段讨論後,一(yī)個直接的(de)問題是:那我如(rú)何知道(dào)何時該追求“靈活”,何時該追求“限制”呢(ne)?或者更一(yī)般地(dì)說,如(rú)同生活中的(de)矛盾說法“膽大/魯莽,嚴密謹慎/畏首畏尾,多才多藝/三心二意”如(rú)何知道(dào)該追求什麽?又該如(rú)何知曉在什麽情況下、運用什麽樣的(de)特性或品質呢(ne)?答案即是:大量的(de)實踐!如(rú)果考察叢林生活與科班環境,它們最大的(de)分界點便是對于這些潛在規則的(de)判斷。無論你是學(xué)富五車或者具備多深厚的(de)理(lǐ)論建樹,如(rú)果你沒有在特定的(de)領域中積累足夠多的(de)實踐經曆,你将無法去(qù)獲得潛藏在背後的(de)規則信息,或者真正明白術語背後的(de)具體所指、業界規則的(de)前提條件、看似簡單的(de)業務邏輯背後所隐藏的(de)坑。而這些潛在的(de)東西,才是在叢林或者社會生活中生存的(de)重要資本。

 

愛因斯坦說,教育就是“把學(xué)校裏學(xué)到的(de)東西忘了後”剩下的(de)東西。那麽,如(rú)果真的(de)習得了教育,那麽,從科班到叢林,隻差一(yī)個隐藏信息積累的(de)過程,這是可(kě)以通過大量實踐來達到的(de)。頭腦的(de)靈活是不會因為(wèi)環境的(de)變化而改變的(de)。而如(rú)果在教育中得到的(de)隻是信息,而沒有磨練出能力,那麽在叢林中,将舉步維艱。

 


編輯:--ns868