原文地址: https://juejin.im/post/5c8522fef265da2db87bdc8bgit
有人問我如何作好架構設計?怎樣靈活運用設計模式?個人回答是,你作很差這些只是由於你沒有養成一個良好的編程習慣github
我爲何寫這麼多開源框架,還長期保持維護?編程
除了我想讓更多人受益於開源外,還有一點就是,我想保持我良好的編程習慣設計模式
寫業務代碼也能夠保持良好的編程習慣啊服務器
能,可是太慢!網絡
在寫業務代碼時,即便項目時間充裕,你也會忽略掉不少細節,而這些細節正是影響你進步速度的關鍵,但你本身卻很難察覺,在不知不覺間就對你的進階之路形成了很大的影響架構
因此你的進步速度很是之慢,作了多年也只是熟練而已,沒法更進一步框架
業務代碼和框架代碼最直觀的差異就是,業務代碼能夠隨意修改,而框架代碼,使用者不能直接修改post
因爲業務代碼的修改不受限制,因此一有需求變更,你就直接經過修改問題代碼的方式來快速解決問題,即便這個代碼的變更很是頻繁,但你的第一反應卻不是經過代碼設計的方式來解決後續的擴展問題,由於這看似一勞永逸的方式,會浪費你當下大量的時間學習
人類的潛意識會更注重當下付出的成本,而忽略掉將來會得到的收益
由於你上面的編碼方式,所養成的很差的編程習慣,會讓你本能的不注重代碼的耦合性、靈活性、可擴展性
因此即便你每天敲代碼,你的進步也如此之慢,由於你平時就缺少架構設計、代碼設計的鍛鍊,日積月累,你也只是搬磚的速度比以前更快一點而已
這個時候若是有一個好的 leader 能天天 review 你的代碼,還時常提醒你這些問題,只要你慢慢改爲,並養成習慣,那你的進階之路也會十分順暢
但如此好的 leader 是可遇不可求的,那咱們若是沒有一個好 leader,該如何養成一個好習慣呢?
個人建議就是作開源庫,並且儘可能作開源框架,好比架構框架、UI 框架,網絡框架、圖片框架,儘可能少作開源 App(固然若是爲了學習某項技術也是能夠的)
由於開源 App 主要是幫助你和別人學習某些技術,也是有大量的業務代碼存在的,無非就是用了一些新的技術,並且仍是你一我的寫,有些細節你更不會考慮 …
而開源框架是拿給別人調用的,因此對代碼質量要求更高,考慮的細節更多,對你的提高也越大
而且你的框架代碼是放在服務器上的,使用者沒法修改你的代碼,這就會強迫你更關注代碼的耦合性、靈活性、可擴展性,甚至是你寫業務時根本不會注重的註釋和文檔
由於使用者用得稍有不爽就會給你發起 issue,不斷地督促你優化你的代碼、註釋、文檔,不斷地幫助你培養一個良好的編程習慣
這就比如你有成百上千個好 leader 天天 review 你的代碼,並指出你的問題,給予更好的建議,並且這些 leader 中絕對藏龍臥虎,這樣日積月累下去,你怎能不成長?
個人不少編程習慣,通過不斷的糾錯,優化,糾錯,優化,已經深深的刻進個人腦子裏了
我框架用到的大多數設計模式,都不是我刻意去用的,都是遇到某些問題,或者使用者須要增長什麼功能,我爲了避免影響以前的版本,保證擴展性的前提下,去解決這些問題,而不得不去使用這些設計模式,不少狀況下,代碼已經寫完了,才知道,原來我用的是 xx 設計模式
在這種不斷優化代碼,養成的良好編程習慣下,我寫代碼時,使用設計模式已經變成了潛意識的行爲,根本說不出爲何要用這個設計模式,只由於以爲這樣用纔是最優解,這就比如拳擊手,遇到攻擊時會潛意識的躲閃、反擊同樣,這就是不斷實戰、不斷訓練的結果
個人全部開源框架加起來每月平均下載量在 5 萬左右,天天都有各類 issue 向我飛來,這些成千上萬的使用者(監督者),迫使我不斷地優化本身的代碼,甚至連每一個註釋我都精雕細琢
框架要作到知足全部人的需求太難了,但只要你不斷優化,能作到讓大部分人滿意,那對你的提高絕對是巨大的,並且你的編程習慣也會有巨大的飛躍
好比我寫註釋的編程習慣培養起來後,個人每一個開源框架,都寫了大量的註釋,描述的很是詳細,保證大部分人都能明白原理,但仍是有不少人跑過來問我文檔和註釋上已經寫了的問題
我真的是吐血,兄弟,我真不想回答,你殺了我好吧 …
一個好的習慣,堅持一天,就往目標前進一步
一個壞的習慣,持續一天,也就浪費一天時間
我作開源三年時間改掉了我不少很差的編程習慣,讓我進步飛速,因此我感謝開源
我也鼓勵更多的人積極參與開源,讓別人受益的同時,別人也讓你不斷進步
固然作開源,並不僅是代碼寫的好,就能收穫大量的 star,他還須要綜合性的能力,好比框架定位、產品需求分析、運營、推廣等不少東西,其中最重要的就是持續維護
我去年創新的新框架 AndroidAutoSize,上線一個月時間就 3k star,如今每月有 2 萬以上的下載量,超過我以前的全部開源框架,這就是由於我以前所積累的開源經驗所賜,關於 Github 的運營之道後面我也會分享的
掃碼關注個人公衆號 JessYan,一塊兒學習進步,若是框架有更新,我也會在公衆號上第一時間通知你們
Hello 我叫 JessYan,若是您喜歡個人文章,能夠在如下平臺關注我
-- The end