前言
回家之前刷了兩天圖書館嫂冻,找到幾本好書伊脓,仔細(xì)閱讀后做下讀書筆記,然后準(zhǔn)備動(dòng)手開發(fā)之前都先過一遍凤优。來讓自己能夠訓(xùn)練出寫高質(zhì)量的代碼。第一本來自《The pragmatic programmer》(中文名《程序員修煉之道-從小工到專家》)
本書引申推薦書籍 《代碼大全》 《UNIX編程藝術(shù)》 早讀課微信群里有小伙伴推薦《編程匠藝》蜈彼,建議配套閱讀
正文
在所有弱點(diǎn)中筑辨,最大的弱點(diǎn)是害怕暴露弱點(diǎn)。注重實(shí)效的程序員對(duì)他的職業(yè)生涯負(fù)責(zé)柳刮,出錯(cuò)或者交付晚了都是無法避免的挖垛,我們必須誠實(shí)面對(duì)。在考慮回答之前秉颗,先在腦海里預(yù)演一遍“我試過這個(gè)了嗎”痢毒,“除此之外我沒有辦法解決了嗎”要提供各種選擇,不要找借口
dont’t repeat yourself蚕甥!一定要閱讀別人的源碼和文檔哪替。
你的知識(shí)和經(jīng)驗(yàn)是你最重要的職業(yè)財(cái)富,遺憾的是它們是有時(shí)效的菇怀,隨著知識(shí)價(jià)值的降低凭舶,你的價(jià)值也在降低。因此你需要經(jīng)營你的知識(shí)資產(chǎn)爱沟。
1.定期投資(這里我提供幾個(gè)思路:參加會(huì)議帅霜,參與社區(qū),閱讀新書呼伸,看新文章)
2.多元化是長期成功的關(guān)鍵身冀。(這里我的解讀有兩種,一是你需要掌握的技術(shù)是多元化的括享,不要局限于某個(gè)技術(shù)搂根。二,你的業(yè)務(wù)需要多元化铃辖,長期從事開發(fā)某個(gè)業(yè)務(wù)會(huì)讓你的腦袋僵化剩愧,比如開發(fā)系統(tǒng)的可以去嘗試自己寫個(gè)小游戲,PC端開發(fā)可以考慮折騰下移動(dòng)端開發(fā)娇斩,讓腦袋不停運(yùn)轉(zhuǎn)起來仁卷。)
3.定期性的重新評(píng)估和平衡資產(chǎn)(因?yàn)槟闼莆盏氖怯袝r(shí)效的,技術(shù)發(fā)展很快犬第,你需要時(shí)刻把握新技術(shù)潮流五督,憑借扎實(shí)的基礎(chǔ)快速上手。)(因此我覺得最關(guān)鍵的是不要將自己視為某個(gè)職位的開發(fā)瓶殃,而是將自己視為程序員充包,我現(xiàn)在從事某項(xiàng)專業(yè)工作開發(fā),如果需要,我可以隨時(shí)轉(zhuǎn)為別的開發(fā)基矮,因此牢固的基礎(chǔ)是必備的淆储。)可以定個(gè)目標(biāo):1.每年至少學(xué)習(xí)一種新語言2.每季度閱讀一本技術(shù)書籍3.閱讀非技術(shù)書籍
4.上課(這里可以是mooc,國內(nèi)外的都可以家浇,在現(xiàn)今知識(shí)大爆炸的時(shí)代本砰,你想學(xué)是都可以學(xué)的「直花錢的免費(fèi)的都有点额。)
5.跟上潮流(這里我提供我的部分方法:每天關(guān)注本職工作開發(fā)領(lǐng)域的文章和新聞。在程序員招聘貼中看新技術(shù)的動(dòng)態(tài)莺琳,對(duì)比自己掌握程度还棱,薄弱的自己補(bǔ)。)
6.設(shè)法把你學(xué)到的用到你的當(dāng)前的項(xiàng)目中惭等,(比如學(xué)會(huì)了面向?qū)ο笳涫郑陀闷浞绞骄幊獭W(xué)會(huì)了設(shè)計(jì)模式辞做,就用不同模式設(shè)計(jì)接口琳要,自己感受一下哪種更適合。)
曳光彈:我們需要找到某種東西秤茅,讓我們能快速稚补,直觀和可重復(fù)的從需求出發(fā),滿足最終系統(tǒng)的某個(gè)方面請(qǐng)求框喳。(類似于開發(fā)一個(gè)將接口結(jié)合的結(jié)構(gòu)课幕,它一開始只有單一功能就是連接端對(duì)端接口。但是一旦完成帖努,你就有了可演示的產(chǎn)品,可擴(kuò)展的架構(gòu)粪般,隨即你只需要把預(yù)留的內(nèi)容填充完畢即可拼余。)
原型制作是一種學(xué)習(xí)經(jīng)驗(yàn),其價(jià)值并不在于所產(chǎn)生的代碼亩歹,而在于所學(xué)到的經(jīng)驗(yàn)教訓(xùn)匙监。適合制作原型的有:架構(gòu),已有系統(tǒng)中的新功能小作,外部數(shù)據(jù)結(jié)構(gòu)或內(nèi)容亭姥,第三方工具或組件。性能問題顾稀。用戶界面設(shè)計(jì)达罗。
訓(xùn)練自己,編寫出足夠好的程序。你所制作的系統(tǒng)的范圍和質(zhì)量應(yīng)該作為系統(tǒng)需求的一部分規(guī)定下來粮揉。(質(zhì)量是個(gè)抽象巡李,但其實(shí)大多數(shù)情況下應(yīng)該是可控的,比如讓你的代碼更簡潔一點(diǎn)扶认,讓你的接口更語義化侨拦,從小細(xì)節(jié)定下質(zhì)量規(guī)范然后堅(jiān)持下去。)
嚴(yán)格遵守正交性(改動(dòng)A辐宾,絕對(duì)不會(huì)影響B(tài))讓你的代碼保持解耦狱从,避免用全局變量,避免寫相似的函數(shù)(參考?設(shè)計(jì)模式?策略模式)叠纹。修改BUG的時(shí)候也是評(píng)估整個(gè)系統(tǒng)正交性的好時(shí)候季研,當(dāng)你遇到問題時(shí),評(píng)估修正的局部化成都吊洼。運(yùn)用正交性原則训貌,可以降低各組件間的相互依賴。(這點(diǎn)我覺得尤其適合你開發(fā)中期的時(shí)候重新審視你的項(xiàng)目代碼和組件依賴冒窍。)
要持續(xù)不斷的觀察周圍發(fā)生的事情递沪,而不是你自己在做的事情。(偏個(gè)題综液,作為獨(dú)立開發(fā)者需要關(guān)注的是開源社區(qū)款慨,還有新技術(shù),新思想谬莹。)
避免考巧合編程檩奠,要深思熟慮的編程:
1.總是意識(shí)到你在做什么(這點(diǎn)很重要,因?yàn)橥阍趯懝δ苣K的時(shí)候?qū)懼鴮懼葸M(jìn)去附帽,太投入以至于忘記初衷是做什么埠戳,可能你的功能越寫越多,但是這些都不在需求之內(nèi)蕉扮。)
2.不要盲目編程(開發(fā)之前做好計(jì)劃整胃,編寫文檔,畫UML圖喳钟,或者思維導(dǎo)圖屁使,將你的思路一個(gè)個(gè)羅列出來整合。當(dāng)然小黑板方法也是可以的奔则。)
3.按照計(jì)劃行事(千萬不要多事蛮寂,就是你必須盡量在開發(fā)之前把需求標(biāo)明,不然你會(huì)在開發(fā)過程中時(shí)不時(shí)多一個(gè)需求易茬。酬蹋。。然后陷入破窗)
4.依靠可靠地事物
5.為你的假定建立文檔
6.為你的工作劃分優(yōu)先級(jí),把時(shí)間花在最重要的方面除嘹。如果你的基本原則或者基本設(shè)施不正確写半,其他都是空的。
7.不要做歷史的奴隸尉咕,不要讓已有的代碼支配將來的代碼叠蝇。如果不適用,可以把所有代碼替換年缎。準(zhǔn)備好重構(gòu)悔捶。
架構(gòu)原型中解答具體問題:
1.主要組件的責(zé)任是否得到了良好定義
2.主要組件的協(xié)作是否得到良好定義
3.耦合是否最小化
4.你能否確定重復(fù)的潛在來源
5.接口定義和各項(xiàng)約束是否可以接受
6.每個(gè)模塊在執(zhí)行過程中是否能訪問其所需要的數(shù)據(jù),能否在需要的時(shí)候進(jìn)行訪問(這段讓我思考到我們?cè)O(shè)計(jì)分析需求的時(shí)候往往是憑借個(gè)人經(jīng)驗(yàn)去組合模塊单芜,但是一些潛在的比如約束等等都不大會(huì)想到蜕该,當(dāng)然這些我也是在軟件工程這門課備考的時(shí)候所看到的,這對(duì)于開發(fā)的確是起到引領(lǐng)性的作用洲鸠。)
規(guī)劃你想說出的東西堂淡,簡略記下你想要交流的想法,并準(zhǔn)備幾種測試將講清楚扒腕。了解你的聽眾:
1.你想讓他們學(xué)到什么绢淀?
2.他們對(duì)你講的什么感興趣?
3.他們是否具備經(jīng)驗(yàn)?
4.他們想要多少細(xì)節(jié)?
5.你想要讓誰擁有這些信息瘾腰?
6.你如何促使他們聽你說話皆的?
你說什么和你怎么樣說同樣重要。
批判地思考你讀到的和聽到的蹋盆,你需要確保你資產(chǎn)的至少是準(zhǔn)確的费薄,沒有受到炒作或者跟風(fēng)的影響。(這點(diǎn)全靠經(jīng)驗(yàn)栖雾,該交的智商稅都少不了的大家楞抡。想要少交多讀書多實(shí)驗(yàn)。)
準(zhǔn)備重構(gòu)之前考慮:1.是否重復(fù)2.非正交的設(shè)計(jì)3.過時(shí)的需求4.性能
開發(fā)項(xiàng)目時(shí)的心理有時(shí)候決定了你的項(xiàng)目衰敗析藕。(這點(diǎn)深有感觸召廷,有時(shí)候開發(fā)周期延長或者自己開發(fā)之前沒有預(yù)設(shè)好風(fēng)險(xiǎn),就會(huì)出現(xiàn)破窗戶噪径,然而最后又要逼著自己去修復(fù)使項(xiàng)目達(dá)到最基本可運(yùn)行的狀態(tài)柱恤。)當(dāng)出現(xiàn)第一個(gè)破窗戶時(shí)不要等到情況迅速惡劣化数初,而是一開始就采取行動(dòng)使情勢處于可控狀態(tài)找爱。
總結(jié)
在我獨(dú)立開發(fā)過程中,我往往遇到的問題不是技術(shù)問題泡孩,而是架構(gòu)問題车摄,當(dāng)你想轉(zhuǎn)型將代碼邏輯組織關(guān)系提升一個(gè)層次,會(huì)發(fā)現(xiàn)發(fā)自內(nèi)心的無力,但是閱讀這本書的過程中我發(fā)現(xiàn)了我該從哪些方面入手去突破吮播。因此閱讀經(jīng)典的意義就在于此变屁,你往往束手無策的時(shí)候它給你點(diǎn)亮一盞燈,讓你明明接下去的路該如何走意狠。