做卓有成效的程序员
(轉載)http://timyang.net/misc/productive-programmer/
做卓有成效的程序員
Tuesday, May 25th, 2010 by Tim | Tags: DRY, programmer, YAGNI
最近閱讀了《卓有成效的程序員》(The Productive Programmer) 一書,此書雖是2009年出版,但是介紹內容的價值并不會隨著時間過去而降低,相信5-10年后對于大部分開發者仍然具有借鑒價值。
大部分章節是介紹具體的方法來如何提高程序員工作效率。記住具體的技巧未必有太大價值,很多人都認同一種觀點就是,讀一本書最終的目標是忘記其中所有的觀點,但是它會潛移默化影響了你以后的思維和或觀點,包括你的行為。因此我認為此書直接的影響就是幫助思考開發過程的方法和問題,思考以前的慣例是否存在問題。比如最近在設計某個產品刪除功能的時候,一位同事突然提到是否產品將來有需要查看行為歷史,如果需要記錄歷史,刪除的流程就會變復雜,不但影響刪除功能的實現,還會影響后端數據的規模,從而進一步會影響架構的設計。因而我的直覺是這是一個過早優化,也就是書中第9章講的YAGNT(You Ain’t Gonna Need It 你不需要這個特性)。由于第一時間的質疑,這個可能需要耗費大量開發時間的特性被暫停,對于項目本身或許是一件好事。
此外書中一些敏捷的思路也會帶來一些間接影響,我還意識到過去一些非敏捷方法可能會給項目帶來風險,一個過去的項目,開發完成之后逐漸變得臃腫,和大部分后端服務相似,需要依賴一些特定的數據庫及其他依賴環境。由于不希望開發環境與真實環境差距太大,開發環境也全部按真實環境最小單元的配置來進行,這就導致開發依賴的環境很多
內部依賴
MySQL master/slave
分表
Memcached(多個)
外部依賴
Message Queue(消息隊列)
用戶及鑒權服務
internal HTTP service
導致的問題
需要特定的環境才能開發,比如公司配好的環境中
無法在家中或咖啡館干活,因為系統跑不起來,無法看到效果
一旦部分依賴環境有問題,則無法開工,只能等著服務恢復
一旦幾天沒跟進代碼,可能就由于環境設置的變化而無法獨自啟動工程。
這些問題就導致代碼改進的工作令人生畏,要像Google那樣做到任何對代碼感興趣的人可以patch代碼的意愿都會變成”mission impossible”。因此對于這個項目來說,最急需的一個改進是分析依賴,讓項目能夠隨時隨地可以方便的跑起來,大家可以很簡單的改進代碼,對改進的代碼進行測試驗證,測試之后新的代碼基本可以無風險的運行到線上環境去。否則臃腫的項目只會降低大家的貢獻的熱情,最后變成一個死氣沉沉的工作任務。
你的項目中的慣例是否存在問題呢?比如Java中POJO中無用的get/set方法,比如一些使用c/c++來“優化”項目中的瓶頸而走向時間泥潭的經歷,比如貴公司是否又在雄心勃勃要做一個自己的框架,事實上這個框架對于項目本身毫無價值。諸如此類的情況會非常多,這本書主要介紹的是程序員要如何提高自身的效率,但我覺得程序員更多的也應思考團隊的效率改進并發出聲音。
做卓有成效的程序員
Tuesday, May 25th, 2010 by Tim | Tags: DRY, programmer, YAGNI
最近閱讀了《卓有成效的程序員》(The Productive Programmer) 一書,此書雖是2009年出版,但是介紹內容的價值并不會隨著時間過去而降低,相信5-10年后對于大部分開發者仍然具有借鑒價值。
大部分章節是介紹具體的方法來如何提高程序員工作效率。記住具體的技巧未必有太大價值,很多人都認同一種觀點就是,讀一本書最終的目標是忘記其中所有的觀點,但是它會潛移默化影響了你以后的思維和或觀點,包括你的行為。因此我認為此書直接的影響就是幫助思考開發過程的方法和問題,思考以前的慣例是否存在問題。比如最近在設計某個產品刪除功能的時候,一位同事突然提到是否產品將來有需要查看行為歷史,如果需要記錄歷史,刪除的流程就會變復雜,不但影響刪除功能的實現,還會影響后端數據的規模,從而進一步會影響架構的設計。因而我的直覺是這是一個過早優化,也就是書中第9章講的YAGNT(You Ain’t Gonna Need It 你不需要這個特性)。由于第一時間的質疑,這個可能需要耗費大量開發時間的特性被暫停,對于項目本身或許是一件好事。
此外書中一些敏捷的思路也會帶來一些間接影響,我還意識到過去一些非敏捷方法可能會給項目帶來風險,一個過去的項目,開發完成之后逐漸變得臃腫,和大部分后端服務相似,需要依賴一些特定的數據庫及其他依賴環境。由于不希望開發環境與真實環境差距太大,開發環境也全部按真實環境最小單元的配置來進行,這就導致開發依賴的環境很多
內部依賴
MySQL master/slave
分表
Memcached(多個)
外部依賴
Message Queue(消息隊列)
用戶及鑒權服務
internal HTTP service
導致的問題
需要特定的環境才能開發,比如公司配好的環境中
無法在家中或咖啡館干活,因為系統跑不起來,無法看到效果
一旦部分依賴環境有問題,則無法開工,只能等著服務恢復
一旦幾天沒跟進代碼,可能就由于環境設置的變化而無法獨自啟動工程。
這些問題就導致代碼改進的工作令人生畏,要像Google那樣做到任何對代碼感興趣的人可以patch代碼的意愿都會變成”mission impossible”。因此對于這個項目來說,最急需的一個改進是分析依賴,讓項目能夠隨時隨地可以方便的跑起來,大家可以很簡單的改進代碼,對改進的代碼進行測試驗證,測試之后新的代碼基本可以無風險的運行到線上環境去。否則臃腫的項目只會降低大家的貢獻的熱情,最后變成一個死氣沉沉的工作任務。
你的項目中的慣例是否存在問題呢?比如Java中POJO中無用的get/set方法,比如一些使用c/c++來“優化”項目中的瓶頸而走向時間泥潭的經歷,比如貴公司是否又在雄心勃勃要做一個自己的框架,事實上這個框架對于項目本身毫無價值。諸如此類的情況會非常多,這本書主要介紹的是程序員要如何提高自身的效率,但我覺得程序員更多的也應思考團隊的效率改進并發出聲音。
總結
- 上一篇: 如何修改网游服务器,定期修改网游服务器密
- 下一篇: Python实现新版正方教务系统爬虫(二