版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
不一樣的世界這一年,Clojure帶給我1關(guān)于我倒騰了10年的開發(fā)C++、C#、Ruby、ClojureWord、UML、甘特圖、燃盡圖…Scrum支持者信奉Scrum價(jià)值觀踐行4年,始于草莽,歸于無(wú)形翻譯《ProgrammingClojure2nd》正在為創(chuàng)建一個(gè)報(bào)警網(wǎng)絡(luò)而工作2話題講一個(gè)故事,講給還徘徊在Clojure門外,以及剛剛跨進(jìn)來(lái)的同學(xué)聽。3故事的開始一個(gè)歷史遺留系統(tǒng)開發(fā)階段共3人參與,耗時(shí)近4個(gè)月。上線聯(lián)調(diào)耗時(shí)1個(gè)半月。Bug不斷,修修補(bǔ)補(bǔ)1年多,仍然無(wú)法穩(wěn)定運(yùn)行。代碼規(guī)模C++頭文件:10,507C++源文件:19,351C#代碼:10,3024在時(shí)間的壓力下只顧堆碼,不管清理堆碼越多,債務(wù)越高很快就演變?yōu)楦呃J5團(tuán)隊(duì)遇到了麻煩壓力巨大彼此推諉喪失熱情紛紛逃離6債要怎么還?身邊誰(shuí)長(zhǎng)的比較倒霉,就扔給他?不好意思坑熟人,找兩個(gè)新人去堵?lián)屟??干脆找機(jī)會(huì)自己也開溜得了?這絕對(duì)不是解決問(wèn)題的辦法!7還債的選擇繼續(xù)找蟲子畢竟是一筆投資,即便它更像是債盡管用戶不滿意,但好歹它“能運(yùn)行”但是要從代碼中領(lǐng)會(huì)別人意圖是個(gè)挑戰(zhàn)面對(duì)不具備可讀性代碼時(shí),更為艱巨事實(shí)上,已經(jīng)嘗試過(guò)很多次也許最后能夠成功,但經(jīng)受考驗(yàn)的不僅僅是技術(shù)8那么,完全重寫呢,行不行?怎么證明這是更有效的方式?怎么證明這不是一次不負(fù)責(zé)任的技術(shù)沖動(dòng)?怎么證明不會(huì)重蹈覆轍?不,無(wú)法證明。這時(shí)候還不可能向其他人展示結(jié)果。9重寫的理由在一堆垃圾上耗費(fèi)再長(zhǎng)的時(shí)間,很可能最后得到的還是一堆垃圾。引入框架太過(guò)隨意的這個(gè)問(wèn)題,現(xiàn)在更加清醒了。更清楚系統(tǒng)結(jié)構(gòu)的問(wèn)題所在,也更能切中要害。手邊有了Clojure(這個(gè)理由嘛)受Clojure影響,對(duì)一切用復(fù)雜手段去解決簡(jiǎn)單問(wèn)題的做法,都難以忍受對(duì)真正要解決的是什么問(wèn)題,比以往理解的更準(zhǔn)確、更深刻(這是最重要的)10理由有很多,但關(guān)鍵還得有勇氣11需要戰(zhàn)勝恐懼對(duì)自己而言,從未應(yīng)用于實(shí)戰(zhàn)的思想、語(yǔ)言、平臺(tái)…沒有其他任何人來(lái)共同分擔(dān)責(zé)任沒有失敗的退路動(dòng)搖遇到坎坷,感覺再也走不下去的時(shí)候“還不如…”的念頭壓力時(shí)間、領(lǐng)導(dǎo)、同事、自己12開拓歷程邊學(xué)邊寫兩個(gè)半月(之前有一個(gè)月的基礎(chǔ))大范圍重構(gòu)不下10次,小型重構(gòu)無(wú)數(shù)自己一個(gè)人(閉關(guān))番茄工作法IM和郵件都是上下班開15分鐘,其他時(shí)間關(guān)掉盡可能不參加任何會(huì)議每天工作7小時(shí)左右(注意,是工作時(shí)間)周末沒有加班,即使是現(xiàn)場(chǎng)部署13開拓成果1,367行在兩種不同數(shù)據(jù)庫(kù)間同步數(shù)據(jù)銜接三個(gè)內(nèi)部子系統(tǒng)對(duì)接兩個(gè)外部系統(tǒng)需要轉(zhuǎn)換和處理SOAP、SIP、RTSP、HTTP提供了一個(gè)簡(jiǎn)單的Web配置接口現(xiàn)場(chǎng)上線聯(lián)調(diào)只用了不到一個(gè)禮拜上線后沒有任何bug報(bào)告,半年來(lái)甚至沒有重啟過(guò)服務(wù)14還沒結(jié)束作為項(xiàng)目副產(chǎn)品,創(chuàng)建了一個(gè)940行,基于JAIN的SIPDSL庫(kù)同等抽象級(jí)別的C++SIP棧用了25,869行除去即將廢棄的接口后,僅不到620行隨后的幾個(gè)月中,又與另一個(gè)外部系統(tǒng)對(duì)接通訊協(xié)議模型發(fā)生了巨變支持更多的協(xié)議命令新增代碼未超過(guò)150行,一個(gè)禮拜即完成功能開發(fā)留下充裕的重構(gòu)時(shí)間,當(dāng)然還有咖啡、鍛煉、讀書的時(shí)間bug-free,沒有了無(wú)窮無(wú)盡的bugfix,甚至都有時(shí)間看博客和網(wǎng)絡(luò)視頻了兩歲的兒子跟我好像也更熟了15那么,一切緣何而來(lái)Clojure?16我的答案是真正的理解需求Clojure17真正的理解需求找出問(wèn)題的本質(zhì)本質(zhì)的東西往往比其外表要簡(jiǎn)單得多從過(guò)往的失敗中吸取經(jīng)驗(yàn)深入分析,但要設(shè)定時(shí)限,避免思維擴(kuò)散去掉無(wú)關(guān)的枝節(jié)需求規(guī)格列出來(lái)的,與問(wèn)題的本質(zhì)大多相去甚遠(yuǎn)即便我們真的漏掉了什么,也還有彌補(bǔ)的機(jī)會(huì)相信我,這對(duì)所有人都好:客戶、隊(duì)友、老板,當(dāng)然還有自己,和自己正在從事的這份事業(yè)18核心簡(jiǎn)單的問(wèn)題讓它保持簡(jiǎn)單讓復(fù)雜的問(wèn)題變得盡可能簡(jiǎn)單幸運(yùn)的是,這也是Clojure的核心!簡(jiǎn)單!19簡(jiǎn)單的重要性“在我們看來(lái),是這兩個(gè)關(guān)鍵至極的概念驅(qū)動(dòng)著Clojure的一切:簡(jiǎn)單、強(qiáng)大?!薄禤rogrammingClojure2nd》20簡(jiǎn)單和容易是不同的簡(jiǎn)單一條線上:一個(gè)規(guī)則、一個(gè)任務(wù)、一個(gè)概念、一個(gè)維度取決于線與線之間的交錯(cuò)情況,而非線的數(shù)量是可以客觀評(píng)判的與簡(jiǎn)單對(duì)立的是:復(fù)雜容易是相對(duì)的:經(jīng)驗(yàn)、知識(shí)、能力、工具都會(huì)有影響與容易對(duì)立的是:困難簡(jiǎn)單可以讓事情變得容易,反之則不然——摘自《SimplemadeEasy》,RichHickey21什么東西容易但不簡(jiǎn)單大多數(shù)托托拽拽的快速開發(fā)技術(shù)不不不,我可沒說(shuō)是哪家公司喜歡來(lái)回折騰這種技術(shù)22Clojure的核心哲學(xué)就是讓事情變得簡(jiǎn)單語(yǔ)言構(gòu)造幾句話就能說(shuō)清楚的語(yǔ)法規(guī)則(沒有語(yǔ)法)少量的幾個(gè)特殊形式(SpecialForms)標(biāo)準(zhǔn)庫(kù)一致的規(guī)則和概念以組合的方式運(yùn)作和擴(kuò)展函數(shù)式和并行數(shù)據(jù)不可變!?。。ㄉ踔劣绊懥宋覍慍++代碼的方式)直面現(xiàn)實(shí)中的“狀態(tài)”問(wèn)題(STM)強(qiáng)調(diào)“值”的作用直截了當(dāng)易于傳輸、利于測(cè)試語(yǔ)言獨(dú)立,更通用23簡(jiǎn)單的益處易于編寫同一時(shí)刻只關(guān)注一個(gè)點(diǎn)使大腦進(jìn)入流狀態(tài),保持清醒和專注易于測(cè)試不牽涉過(guò)多的其他因素便于構(gòu)造模擬數(shù)據(jù),也利于驗(yàn)證易于理解別人更可能是兩個(gè)月后的自己避免隱晦的bug更容易達(dá)到“明顯沒有錯(cuò)誤”,而不是“沒有明顯的錯(cuò)誤”能更高效的進(jìn)行REPL體驗(yàn)式開發(fā)(這實(shí)在太重要了)24如何讓代碼保持簡(jiǎn)單一切復(fù)雜的問(wèn)題都可以通過(guò)分解變成足夠簡(jiǎn)單的問(wèn)題,不要因?yàn)槿魏卫碛善茐暮?jiǎn)單性DSL一切,如果值得的話盡可能熟悉標(biāo)準(zhǔn)庫(kù),尤其是序列庫(kù)(map、reduce、filter等等)避免引入難以駕馭的庫(kù)或者框架,更要避免讓它們侵入你的核心仔細(xì)分割那些少數(shù)不得不處理狀態(tài)的部分,記得關(guān)好它們,不要讓它們到處亂跑程序的大部分應(yīng)該是純函數(shù)選擇好的組合方式,并不斷嘗試用更好的方式重新組合它們?nèi)绻娴挠錾蠌?fù)雜的大麻煩,請(qǐng)參考第一條25對(duì)問(wèn)題領(lǐng)域和方案進(jìn)行抽象——DSL最簡(jiǎn)潔的領(lǐng)域表達(dá)方式定義領(lǐng)域問(wèn)題描述問(wèn)題的解決方案(與命令式的方法完全不同)具有最佳的可讀性,即使讀者并不熟悉Clojure語(yǔ)言也能領(lǐng)會(huì)直接使用領(lǐng)域中的詞匯深層次的復(fù)用對(duì)領(lǐng)域問(wèn)題的自然分解對(duì)詞匯加以組合(決定說(shuō)什么和怎么說(shuō),想象一下我們自然語(yǔ)言的工作方式)26小心框架框架能幫助我們快速跨過(guò)門檻但也可能會(huì)在我們想更進(jìn)一步時(shí)絆倒我們想要真正掌控不是易事框架會(huì)幫我們掩蓋一些問(wèn)題但不代表問(wèn)題會(huì)自動(dòng)消失只是我們暫時(shí)可以不去關(guān)注框架有很多通用型方面的設(shè)計(jì)決策其中的大部分可能對(duì)我們沒有什么幫助過(guò)多的間接層次,增加了復(fù)雜度27要重新造輪子嗎視需要而定功能、性能、安全性、可控程度信賴值得信賴的,小心那些可疑的Clojure社區(qū)的很多庫(kù):小巧、專注、可組合,很容易通過(guò)讀代碼理解其內(nèi)部機(jī)制大多數(shù)C++、.NET和Java框架:總是試圖包羅萬(wàn)象,引入前務(wù)必要充分驗(yàn)證,確保帶來(lái)的是價(jià)值而不是麻煩自己造的輪子也可能演變?yōu)橐粋€(gè)更適用的框架與問(wèn)題最匹配復(fù)雜度可控28總結(jié)一下,我學(xué)到了什么讓Clojure哲學(xué)成為自己的信仰29當(dāng)Clojure的哲學(xué)成為一種信仰時(shí)我會(huì)讓工具服務(wù)于問(wèn)題,而不是讓問(wèn)題來(lái)遷就工具僅因?yàn)闀?huì)用斧頭,所以就用它來(lái)削蘋果嗎,NO!Clojure可以制造斧頭,也可以制造水果刀,明智的從中選擇必要時(shí),甚至不必堅(jiān)持Clojure簡(jiǎn)短總是好的,我會(huì)勤于維護(hù),保持代碼身材能用3行解決就不用5行除非3行的讀起來(lái)不如5行的清晰30當(dāng)Clojure的哲學(xué)成為一種信仰時(shí)盡可能忘掉我懂得這些技術(shù),除非發(fā)現(xiàn)其他所有的方法都會(huì)影響代碼的可讀性:多重方法(Multimethods)宏(它很強(qiáng)大,但大多數(shù)的蚊子不需要大炮)不進(jìn)行層層封裝,因?yàn)檫@是不必要的有值,還有對(duì)值進(jìn)行處理的函數(shù)就很好了定義DSL,通過(guò)組合來(lái)描述高層概念只要具有良好的可讀性,那就越直接越好(比如調(diào)用Java和.NET)31當(dāng)Clojure的哲學(xué)成為一種信仰時(shí)我會(huì)花更多地時(shí)間來(lái)重構(gòu)仔細(xì)斟酌命名,讓它們保持一致,且詞能達(dá)意尋求更好的組合方式,使得句子的表達(dá)力更強(qiáng)及時(shí)清理過(guò)時(shí)的代碼,避免它們干擾閱讀用宏來(lái)封裝重復(fù)出現(xiàn)的模式,并給它取個(gè)好名字32當(dāng)Clojure的哲學(xué)成為一種信仰時(shí)會(huì)盡可能讓代碼進(jìn)入良性循環(huán)保持代碼可讀更容易修改節(jié)省維護(hù)時(shí)間有時(shí)間重構(gòu)代碼33當(dāng)Clojure的哲學(xué)成為一種信仰時(shí)花更多時(shí)間學(xué)習(xí)關(guān)于編程的更本質(zhì)的東西《計(jì)算機(jī)程序的構(gòu)造和解釋》《集異璧之大成》34接近尾聲,不妨來(lái)做一個(gè)對(duì)比提提神35由某些公司/組織主導(dǎo)的技術(shù)喲,這技術(shù)不錯(cuò),拖拖點(diǎn)點(diǎn)程序就出來(lái)了,趕快學(xué)吧。抓狂,要實(shí)現(xiàn)稍稍“高級(jí)”一點(diǎn)的功能,只能四處搜尋各種“秘籍”。漸漸適應(yīng),剛剛懂得如何避開各種各樣的陷阱。盡管總是會(huì)被bug纏身。還來(lái)不及為能記住這些知識(shí)而沾沾自喜,“新一代的技術(shù)”到來(lái)了。36但是,我們實(shí)際上想要的不過(guò)是建幾個(gè)窗口/Web頁(yè)面讀寫一下數(shù)據(jù)庫(kù)/文件有時(shí)候向別的程序發(fā)送點(diǎn)數(shù)據(jù)OMG來(lái)回倒騰意義何在!37我們花費(fèi)時(shí)間的真正價(jià)值在于解決了客戶的問(wèn)題真正的創(chuàng)造出了一些東西把代碼債變成了資產(chǎn)讓知識(shí)能夠不斷積累,而不是當(dāng)做垃圾扔掉38最后,是一篇摘自《外刊IT評(píng)論網(wǎng)》的短文39A:兄弟,你真走運(yùn),能成為一個(gè)程序員。你們有高超的技術(shù),所有人都羨慕做技術(shù)的。你們可以把任何想法變成一個(gè)應(yīng)用程序,然后能通過(guò)它掙錢,不需要依賴外人開發(fā)。我也希望能成為一名程序員。B:實(shí)際上,做一名程序員,我很痛苦。A:啊,兄弟,你什么意思?B:這種工作方式慢慢的讓我變得憂郁。我注意到,在其他程序員中——并不是全部——但很多,都有這樣的感覺。40A:什么工作方式?B:關(guān)注負(fù)面的東西,而不是正面的東西。A:做一個(gè)好的程序員需要這樣嗎?B:我的工作流程基本上是這樣:寫出代碼;運(yùn)行代碼;看到錯(cuò)誤信息;找出錯(cuò)誤,回到第一步41B:日復(fù)一日,年復(fù)一年,我就一直這樣。一直在尋找我創(chuàng)造出來(lái)的東西里面的錯(cuò)誤,很少會(huì)想到它們的好的一面。這是一個(gè)消極的反饋循環(huán)。A:瘋了B:如果不是在編輯器里,我就會(huì)在bug跟蹤系統(tǒng)里,那是一個(gè)麻煩問(wèn)題的清單。一個(gè)告訴你什么出問(wèn)題了,需要你去修改的清單。一個(gè)讓我抓狂的清單。A:兄弟,我覺得你有點(diǎn)悲觀
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五山地農(nóng)業(yè)開發(fā)租賃合同書3篇
- 二零二五年度別墅租賃合同含社區(qū)綠化養(yǎng)護(hù)責(zé)任3篇
- 二零二五年度餐廳裝修施工節(jié)能評(píng)估合同3篇
- 二零二五年度樂器展會(huì)器材租賃合同范本3篇
- 教育工作者如何推廣家庭安全常識(shí)的研究報(bào)告
- 智慧辦公創(chuàng)新的辦公模式探索
- 玉溪云南玉溪市司法局招聘編外人員筆試歷年參考題庫(kù)附帶答案詳解
- 浙江浙江工業(yè)職業(yè)技術(shù)學(xué)院資產(chǎn)管理處采購(gòu)中心編外人員招聘筆試歷年參考題庫(kù)附帶答案詳解
- 二零二五年度SSL協(xié)議安全產(chǎn)品集成與解決方案合同3篇
- 二零二五年度茶藝館店鋪轉(zhuǎn)讓及茶文化傳承協(xié)議3篇
- 2023年四川省成都市中考物理試卷真題(含答案)
- 卵巢黃體囊腫破裂教學(xué)查房
- 泵車述職報(bào)告
- 2024年山西文旅集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 恢復(fù)中華人民共和國(guó)國(guó)籍申請(qǐng)表
- 管理期貨的趨勢(shì)跟蹤策略 尋找危機(jī)阿爾法
- 瀝青化學(xué)分析試驗(yàn)作業(yè)指導(dǎo)書
- 2023年大學(xué)物理化學(xué)實(shí)驗(yàn)報(bào)告化學(xué)電池溫度系數(shù)的測(cè)定
- 腦出血的護(hù)理課件腦出血護(hù)理查房PPT
- 南京大學(xué)-大學(xué)計(jì)算機(jī)信息技術(shù)教程-指導(dǎo)書
- 扣繳個(gè)人所得稅報(bào)告表-(Excel版)
評(píng)論
0/150
提交評(píng)論