一個程序員的 2015年 的學習總結
又是一年的年終,時間依然如同往年一樣匆匆的流逝,為了讓自己覺得今年并沒有虛度,本文將回顧以下自己作為一個程序員在今年的成長。做一個學習總結,給 2015 畫上一個句號。
讀書
- 不敢止步-熊節
- Charlie and the Chocolate Factory
- Charlie and the Great Glass Elevator
- 喬布斯魔力演講
- The natural of software development
- DesignCode(Design Part)
- 我們要自學
- 程序員思維修煉(重讀)
- iOS開發進階 - 唐巧
博客
今年博客從 JavaEye 遷移到簡書。從此終于可以舒服的用 markdown 編寫博客。
由于去年總是希望一次寫一篇完整的 blog,導致去年可憐的只寫了一篇博客。今年采用KISS的方式寫博客,小的idea寫短博客,大的idea寫長一些的。隨著時間推移不斷重構博客內容,這樣負擔不會太重。
按照KISS原則,今年一共寫了 19 篇博客:
http://www.jianshu.com/users/MjqJJb/latest_articles
敏捷實踐
自從在國內項目中打拼以來,一直有一個愿景:
『不僅高效的交付高質量的軟件,而且還要交付一種高效的工作方式』
今年終于在為 Lenovo 做項目的時候,達成了個這個成就。不但成功交付超高質量的軟件,而且幫助客戶進行了敏捷團隊改造。
在于傳統企業管理模式和瀑布流開發方式的碰撞的過程中,保持敏捷團隊的優勢,并且讓敏捷跟傳統企業的 Water-Fall, KPI 進行了融合。在 Lenovo 和卓越的小伙伴們共同打造了務實的敏捷團隊實踐: Water-Scrum-Fall
對這部分內容現在只寫了一篇博客,2016 年還會繼續總結:
Sessions
- 卓有成效的程序員
- Agile in Practice
- How to encapsulate UI in OOP way
- Not only OOP in ruby
- iOS consulting Q&A session
Workshop
- How to create a iOS app
Ruby
終于在正式項目中使用 Ruby。Ruby 水平直線提升, Ruby 已經成為我的首要編程語言之一。曾經渴望使用的 Rails, 今年也有幸參與 Rails 的項目。
基于 RSpec 的 TDD/BDD 在今年有質的提升。以前習慣于從底層向上層慢慢構建代碼,TDD 屬于 classic 方式,less mock,下半年開始嘗試 mockist 方式寫測試,嘗試從上層向下層寫代碼。在按照從上向下 TDD 的時候,之前困惑的如何使用 test 定義 scope 的問題迎刃而解。
寫過的與 Ruby 相關的博客:
Eclipse Plugin
Eclipse 是我工作前 5 年中,以及學生時期主要的開發工具,今年有幸做了 eclipse plugin 開發的項目,回想起來非常激動,也終于實現了當年為 eclipse 寫 plugin 的愿望。
eclipse 背后的 OSGi 擴展性非常強大,eclipse 猶如 GUI 時代的 Emacs, 此部分掌握的內容涉及:
- eclipse plugin CI/CD
- OSGi
- eclipse SWT/JFace SDK
寫了兩篇關于 eclipse 的博客
iOS Development
雖然今年沒有參與 iOS 項目,但是整理出了《iOS中RSA加密解密算法的使用》
整理出了 iOS TDD Sample,內容包括:
- ObjC TDD: Objective C, OCHamcrest, OCMockito
- Swift TDD: Quick
- UI Test: Appium 和 RSpec 兩個方案
iOS TDD repository 地址: https://github.com/lvjian700/ios-tdd-samples
Javascript
- 一直不想使用 Angular.js, 但是今年有機會在項目中嘗試 Angular.js。 以TDD的方式寫js, Angular.js 的組織方式的確很贊
- 使用 gulp.js 搭建 front-end 基本 CI pipeline
- coffeescript, 剛開始使用感覺很贊,尤其配合 node.js 使用。雖然語法非常簡潔,但是個人還是比較喜歡直接用javascript
- 嘗試使用 Zombie.js 進行 Font-End UI test, 這個框架很輕量級,但是不適合大量的Ajax應用
- 在項目中嘗試使用 ES6, template string 和 class 都非常好用,但是項目原因沒有繼續使用ES6
編寫了2篇博客:
UX and Mobile design
Mobile design 是今年獲得的重要技能之一。花了一個月的學習了 https://designcode.io/ Design part。 現在已經基本掌握 iOS UI Design 方面的技巧。
由于 get 了這個技能,讓我在思考如何將 idea 轉換為 product 有了新的思路。當腦袋迸發出一個新 idea 時,不再是從 tech 角度思考問題,而是從 design 的角度考慮,這樣的思路更能貼近真實的用戶場景。
新的思路
- 一句話描述 idea
- 構建用戶故事,發現故事中主人公的痛點
- 使用 design 的手段驗證想法
- 最后是實現(以前始終從實現角度出發, 先想我要用 xxx 技術)
編寫一篇關于 design 的博客
在公司組織的hack中,嘗試使用新技能分析 idea 和 design app
- Survive in China
- Micro services Wall
icons模仿練習:
Survive in China App:
DevOps
以前在 DevOps 方面知識幾乎為零。今年開始涉及 AWS 和 Docker 容器化技術。 AWS 和 Docker是今年 get 的重要技能之一。
- AWS: EC2 instance, S3, CloudFormation, Route53, LoadBalance, AutoScalingGroup, AWS RDS
- Docker: docker, docker-compose
- 使用 Splunk 查詢日志
- 使用 Bamboo 搭建 CI, 終于拋棄了刀耕火種的 Jenkins
寫了 3 篇關于 Docker 入門的文章
- Run docker on your mac
- Understand images & containers of Docker
- Find and run the whales image from Docker Hub
Microservices architecture
Microservices 也是今年獲得的重要技能之一。從下半年開始參與基于Microservices 架構的項目,這個項目幫助客戶進行老系統改造。按照Microservices對老系統進行拆分,centralize 各種服務,數據。
從下半年開始,基本跟 UI 說拜拜了,每天都在跟 JSON API,部署打交道。
由于項目屬于客戶核心 API, 項目對代碼和設計質量要求非常高。這種高要求帶來很大的挑戰,也引出了很多知識:
- 更多的考慮 REST-ful API 設計,開始使用 HAL + JSON 這種 self discoverable 的 JSON 數據格式。
- 接觸 CQRS 讀寫分離的架構方式,采用 CQRS 可以將 API 中的寫入和讀取分別優化,但是副作用很大,只適合很少的場景。
- 由于 Microservices 架構推薦拆小的 API services, 這個對 DevOps 是非常大的挑戰,今年 AWS 和 DevOps 經驗大幅提升.
- Microservices 間的集成測試也是一個挑戰,目前采用Consumer Driven Contracts的方式,使用 Unit Test代替 Integration Test
這部分總結大多保存在個人的 evernote 中,由于涉及客戶的內容,暫時發布2篇博客:
總結
縱觀今年的成長,和去年一樣依然涉獵了很多方面的內容。今年成功的步入了Ruby Programmer,也算是達成了這些年的希望達到的成就。
在 Ruby 團隊中有幸跟當前 2012 RubyConfChina 講師 FredWu 共事(Slim 作者之一),這也是今年非常大的驚喜。
技術方面通過 Microservices architecture 讓我更多的思考架構和 DevOps 方面的東西。這讓我意識到軟件開發并不只是 Development, Ops 也是非常重要的環節,自動化 Ops 可以節省開發人員的生命,沒有全方位的自動化工具的支持,Microservices 會進行的非常痛苦。DevOps 和 Microservices architecture 會是2016需要持續積累的方面。
自從加入ThoughtWorks 兩年以來,終于達成了打造敏捷團隊的成就。
團隊管理,開發流程,如何同軟件開發一樣都沒有銀彈。『擁抱變化』應該永恒的目標,在項目的演進中需要及時改進團隊,需要持續關注團隊成員提升。
人始終是團隊中最有價值的部分,關注人,關注溝通,擁抱變化,輕流程和制度,這樣可以讓每個人都發揮最大的優勢。
雖然今年計劃專注于 mobile 方面,但是計劃不如變化。不過在 mobile 方面也收獲了 TDD 和 Mobile Design的能力。
我們常講軟件開發需要擁抱變化,個人成長也需要擁抱變化。 今年跳出了舒適區,步入了純英文環境的團隊,這對我來說是一個非常大的挑戰。現在正在享受這種挑戰,當然挑戰背后帶來的是飛速成長。
再見2015。在新的一年持續擁抱挑戰,繼續不斷的挑戰舒適區,繼續享受成長的快樂。
full-stack web & iOS developer. working at thoughtworks
來自: http://www.codingstyle.cn/topics/53