为了快一点为什么却要慢一点
原文首發(fā)于我的微信公眾號(hào):GeekArtT.
將代碼分層,當(dāng)然是為了控制復(fù)雜度,讓你的管理井井有條。那為什么非得要建立多個(gè)不同的獨(dú)立文件夾,再創(chuàng)建不同的文件呢?
?
一個(gè)直接的考慮是,在同一個(gè)文件下,也就是同一個(gè)文本環(huán)境之下,當(dāng)然會(huì)有非常大的自由度去增添代碼,沒(méi)有任何的條款限制。但同樣是因?yàn)檫@樣的“自由”,它會(huì)讓管理處于失控。因?yàn)榭刂茝?fù)雜度,就意味著將多個(gè)不確定性的東西固定下來(lái),就需要有強(qiáng)制性的限制,而不是自由。有了更多的限制條件,才能讓你控制的主體按照你的思路去發(fā)展,去向同一個(gè)方向用力,而不是散沙一團(tuán)。這是一個(gè)經(jīng)典的因?yàn)橛辛烁嗟木窒扌?#xff0c;反而讓系統(tǒng)發(fā)揮出更強(qiáng)大的力量的例子。正如山路賽車(chē),為了更快一點(diǎn),就必須要用更小的馬力。
?
所以,為了讓你的“UI部分的代碼成一堆”,“數(shù)據(jù)連接的代碼成一堆”,“業(yè)務(wù)邏輯的代碼成一堆”,你必須給予這些部分強(qiáng)硬的限制,讓它們只能在特定的范圍內(nèi)出現(xiàn)。這就需要?jiǎng)?chuàng)建不同的文件夾,以及不同的源代碼文件。其背后的思維方式是:要用制度去控制組織,而不是依賴(lài)組織中每個(gè)成員的自身素質(zhì);要用代碼去控制流程,而不是依靠腦海中的行為規(guī)范。
?
另一個(gè)需要提到的優(yōu)勢(shì)是,通過(guò)不同的文件創(chuàng)建以及不同文件夾的劃分,可以很好地解決名字沖突。每一個(gè)模塊都可能提供一些相同的功能,但卻需要不同的實(shí)現(xiàn)。如果你將所有這些“具備相同功能但需要不同實(shí)現(xiàn)”的函數(shù)放在同一個(gè)文本環(huán)境下,你將難以區(qū)分這些函數(shù),并且會(huì)造成沖突。你當(dāng)然可以通過(guò)增添前綴的方式來(lái)解決沖突,但這樣會(huì)造成函數(shù)名的臃腫。但更為關(guān)鍵的是:如果你真的寫(xiě)過(guò)稍微復(fù)雜一點(diǎn)的系統(tǒng),你會(huì)發(fā)現(xiàn)在“數(shù)量龐大的一堆沒(méi)有分類(lèi)”的文本中尋找一個(gè)代碼片段是件多么讓人焦躁的事情!你完全無(wú)法在一堆字符中自然地觀察到內(nèi)在的一致性和規(guī)律性。而這種“混亂”以及由此產(chǎn)生的焦慮,正是你控制復(fù)復(fù)雜度的原因。
?
同樣的現(xiàn)象還可以在數(shù)據(jù)處理中發(fā)現(xiàn)。如果你是通過(guò)Excel去處理簡(jiǎn)單的數(shù)據(jù),你會(huì)發(fā)現(xiàn)它非常靈敏好用。可是,一旦數(shù)據(jù)之間的相互依賴(lài)關(guān)系有所增加,并且還有其他合作者的參與,崩潰的事情就會(huì)發(fā)生。你會(huì)發(fā)現(xiàn),正是因?yàn)樗念?lèi)似于一張白紙的高度靈活性,你發(fā)現(xiàn)你竟然難以將你們商討的“規(guī)則”強(qiáng)制性地實(shí)施在表格之中。為什么?因?yàn)槟闳狈ο拗?#xff0c;缺乏代碼為你勾勒出的硬性框架。你可以任意地修改一個(gè)單元格的內(nèi)容,也可以輕易地增添一些附加信息作為旁邊的備注。假以時(shí)日,你會(huì)發(fā)現(xiàn)你的表格中的信息混亂不清。雖然你已經(jīng)早已向你的同事、你的朋友說(shuō)明了該做的事情和不該做的事情,可是,這畢竟是軟性的東西。違反這些規(guī)定,并不會(huì)給予違反者以壓力或懲戒。同時(shí),它靈活的增添功能,讓很多數(shù)據(jù)依賴(lài)關(guān)系成為了一紙空文。
?
Programming,如同任何的實(shí)務(wù)實(shí)踐領(lǐng)域,一個(gè)首要的基礎(chǔ)是大量地建立你的工程實(shí)踐經(jīng)歷,這是一切的前提。如果沒(méi)有真正的實(shí)踐經(jīng)歷,很多業(yè)界的行為規(guī)范和行為準(zhǔn)則是無(wú)法被正確理解的。如同上面所舉的例子,如果你的代碼復(fù)雜度不能跨過(guò)一定的基準(zhǔn)線(xiàn),你是無(wú)法真正體會(huì)到“創(chuàng)建不同文件夾和不同文件”的強(qiáng)烈需求的。對(duì)于toy program來(lái)說(shuō),增添不同文件行為方式,反而會(huì)減少代碼的可讀性,讓代碼晦澀難懂。從入門(mén)者的內(nèi)心來(lái)說(shuō),在這個(gè)層面的是無(wú)法理解它的好處的,因而也就無(wú)法知曉它在何種情況下才能被稱(chēng)之為好。并且,一個(gè)附帶的壞處是,你往往不敢或者難以承認(rèn)你無(wú)法理解“將代碼分裂在不同文件的好處”。因?yàn)閹缀跛杏薪?jīng)驗(yàn)的從業(yè)者都會(huì)告訴你,這樣做是好的。一旦應(yīng)該被提出的問(wèn)題被忽略,那么你將再也無(wú)繼續(xù)深入,真正去理解背后的“所以然”。
?
另一個(gè)容易讓你停留于表面無(wú)法做出真正評(píng)判的要點(diǎn)是,你會(huì)片面地去理解一些術(shù)語(yǔ),如剛才提到的“靈活性”或“局限性”。就字面意思來(lái)看,當(dāng)然是越靈活越好啊。可事實(shí)是,如同上面的論述,“靈活”與“局限”從來(lái)不是孤立存在的,也不是被孤立地評(píng)判的,它是需要有“語(yǔ)境”的,是由你的實(shí)際問(wèn)題的規(guī)模和目標(biāo)所決定的。如果你的任務(wù)不是太復(fù)雜,或者僅僅是停留于頭腦風(fēng)暴的設(shè)計(jì)階段,上帝視角的靈活性(也就是白紙式的靈活性)會(huì)給你帶來(lái)巨大的優(yōu)勢(shì)。另一方面,如果你需要建立某些規(guī)則,那么你應(yīng)當(dāng)建立一些框架去做限制,讓“局限性”成為你控制復(fù)雜度的強(qiáng)大工具。
?
更進(jìn)一步,如果你討論的“語(yǔ)境”是代碼重構(gòu),或者集中于框架建立,“靈活”與“局限”的意思或者效果又會(huì)顛倒一轉(zhuǎn)。在你的框架構(gòu)建中,你需要找到的是一種合理的組織方式,使你的系統(tǒng)能夠靈活地增添新的代碼。而不至于被“糟糕設(shè)計(jì)”絆住:難以找到一個(gè)合適的位置去增加代碼,因?yàn)樗坪趺恳粋€(gè)代碼片段都有著特定的限制性,一旦增加新的片段,就會(huì)破壞原有組織。在這種情形之下,“靈活”就成了值得追求的目標(biāo)。
?
那么,有了以上兩段討論后,一個(gè)直接的問(wèn)題是:那我如何知道何時(shí)該追求“靈活”,何時(shí)該追求“限制”呢?或者更一般地說(shuō),如同生活中的矛盾說(shuō)法“膽大/魯莽,嚴(yán)密謹(jǐn)慎/畏首畏尾,多才多藝/三心二意”如何知道該追求什么?又該如何知曉在什么情況下、運(yùn)用什么樣的特性或品質(zhì)呢?答案即是:大量的實(shí)踐!如果考察叢林生活與科班環(huán)境,它們最大的分界點(diǎn)便是對(duì)于這些潛在規(guī)則的判斷。無(wú)論你是學(xué)富五車(chē)或者具備多深厚的理論建樹(shù),如果你沒(méi)有在特定的領(lǐng)域中積累足夠多的實(shí)踐經(jīng)歷,你將無(wú)法去獲得潛藏在背后的規(guī)則信息,或者真正明白術(shù)語(yǔ)背后的具體所指、業(yè)界規(guī)則的前提條件、看似簡(jiǎn)單的業(yè)務(wù)邏輯背后所隱藏的坑。而這些潛在的東西,才是在叢林或者社會(huì)生活中生存的重要資本。
?
愛(ài)因斯坦說(shuō),教育就是“把學(xué)校里學(xué)到的東西忘了后”剩下的東西。那么,如果真的習(xí)得了教育,那么,從科班到叢林,只差一個(gè)隱藏信息積累的過(guò)程,這是可以通過(guò)大量實(shí)踐來(lái)達(dá)到的。頭腦的靈活是不會(huì)因?yàn)榄h(huán)境的變化而改變的。而如果在教育中得到的只是信息,而沒(méi)有磨練出能力,那么在叢林中,將舉步維艱。
?
?
?
?
如果你喜歡我的文章或分享,請(qǐng)長(zhǎng)按下面的二維碼關(guān)注我的微信公眾號(hào),謝謝!
?
轉(zhuǎn)載于:https://www.cnblogs.com/kid551/p/6599484.html
總結(jié)
以上是生活随笔為你收集整理的为了快一点为什么却要慢一点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SDWebImage实现分析
- 下一篇: 笔记本能连上WIFI网络,但是无法上网怎