2016 程序人生大串燒

12月是 tubitv 最為繁忙的一個月份。在這個月,廣告金主們留下了充沛的預算,揮舞著支票衝進節日的市場;可愛的用戶們,一年間就尋覓著這麼一個機會,半推半就的休上十天半個月的假,吃喝玩樂,不亦樂乎。高富帥白富美自然是在夏威夷,坎昆,阿斯本等地和大自然一起消磨時光,而屌絲群體,多數在家呆著,只好看!電!視!了!要說美國人對電視的熱愛,那簡直到了令人髮指的地步 —— 根據 Nilson 的統計,平均每人每天看 4.3 小時。所以你可以想像,像我們這樣的 video streaming service 是多麼歡迎聖誕季,同時又是多麼為之忐忑:求求菩薩保佑我,服務千萬不要掛。。。

寫這篇文章的時候,我瞅了一眼 github,12月份我竟然發了 35 個 pull request,review 了 38 個。元旦休息這幾天,我還發了 3 個 pull request,添了 3800 行代碼,刪了 1400 行。

所以,原本計划上月末撰寫的串燒文章,一拖再拖,拖到了現在。

(一)

2016 年我文章的產量不如 2015,但質量在穩步上升(自誇臉)。寫公眾號近三年,公眾號後台的素材總數已達到 340 篇。如果說 2014 年我寫文章更多是為了完成目標,2015 年寫文章為了迎合讀者的口味,那麼,2016 年我的文章大多是為了自己而寫,或者說,對思想的留此存照(冥想盆)。對我而言,自利的同時能夠利他,是最好的選擇。這也是為何我非常推崇 learning by teaching 的原因。

先來點形而上的:

  • 你要避免的軟體開發模式

  • 技術債:the good, the bad, and the tao

  • 談談面向對象編程

  • 談談我對工程和管理的看法

  • 軟體隨想錄:代碼與數據

軟體隨想錄:代碼與數據等數篇文章從宏觀上談談軟體開發,設計,以及管理,不管入行深淺,都值得一讀。

形而上最後還是要落地,作為一個程序員,首當其衝的就是代碼命名問題。這是個終極問題,弄懂的同學可以接下來研究:

我是誰?我生從何來,死往何處,我為何要出現在這個世界上,我的出現對這個世界來說意味著什麼,是世界選擇了我,還是我選擇了世界。我和宇宙有必然的聯繫嗎?宇宙是否有盡頭,時間是否有長短,過去的時間在哪裡消失了,未來的時間又在何處停止,我在這一刻提出的問題,還是你剛才聽到的問題嗎?

言歸正傳。

我們都說名如其人,不要小看命名,糟糕的命名會導致糟糕的代碼。我公眾號第一篇閱讀過萬(汗)的文章:代碼命名:僧敲月下門 講的就是這個問題。我想,很多人讀後有種於我心有戚戚焉的感覺,才力捧以及在朋友圈力薦它。

除了命名,另外一件但凡程序員都或多或少會遇到的事情就是重構。我特地為你準備了:代碼重構之道,重構:撰寫合格的代碼。希望能夠對你有所啟發。

隨著編程功力的提升,程序員需要隨之提升的是 抽象的能力,以及 元編程的能力(來來來,咱們元編程入個門)。可惜,寫到這裡已經曲高和寡了。

(二)

如果要硬生生把程序員分成兩個群體:會寫代碼的,不會寫代碼的。也可以這麼分:調 API 的,寫 API 的 —— 做 UI 的調完 SDK,調後端給的 API;做系統的一層層封裝 API,最後包個 REST 的皮膚扔出去。其實廣義說來,每個程序員即是寫 API 的,也是調 API 的。每一個你寫就的函數,都是一個 API。

撰寫 API,尤其是 REST API,如今越來越成為程序員的一大主要工作。為此,我準備了一套全家桶,詳細闡述我做 API 的心得:

  • 撰寫合格的REST API (2015年舊文)

  • 再談 API 的撰寫 - 總覽

  • 再談 API 的撰寫 - 架構

  • 再談 API 的撰寫 - 架構再談 API 的撰寫 - 子系統

  • 再談 API 的撰寫 - 契約

拿去不謝。2016 API 界比較重大的事件是 GraphQL 終於 production ready 了:GraphQL,你準備好了么?那麼,是不是意味著 REST API 未來有可能被淘汰呢?我覺得幾年內不會。未來更會發生的事情是 REST / GraphQL 並存。GraphQL 作為一層對外的窗口,包裹住 REST API。一個 GraphQL API,其數據源可能來自若干 REST API。二者互補。

(三)

我最最最推崇的 Professor Randy Pausch 說過:

「Fundamentals, fundamentals, fundamentals. You』ve got to get the fundamentals down because otherwise the fancy stuff isn』t going to work.」

對此,我確定一定以及肯定地贊同。在基礎知識這塊,程序君為你精心熬制了:

  • Concurrency

  • 非同步處理的腦力遊戲談談編譯和運行

  • Pipe 之美

  • 從 Pipe 到 Flow

  • ZeroMQ及其模式

ZeroMQ及其模式ZeroMQ 看上去是某個特定的應用,但其構建消息系統的思路和使用場景,如:pub / sub,router / dealer 等概念,一定要掌握。另外,都 2017 年了,如果還弄不明白 at least once / at most once 的消息傳遞機制,趕緊再翻回去看看。

程序員這一行,最怕的不是人老色衰,是未老先衰。技術從來都不是保值的,技術背後的知識才是駐顏術。當你要學習一門新的技術時,你該怎麼做?希望 如何學習一門新的技術 能夠幫到你。在過去的一年裡,我遇到很多朋友後台留言詢問學習某種技術的方法,尤其是 phoenix 在社區越來越火後,很多人尋思著放下手頭學到一半的 rails,django,來學 phoenix。對此,我發了篇文章 rails, django, phoenix,你們錯了 來闡述為何 web framework 不該是你學習甚至開發產品的中心。借用「中學為體,西學為用」的概念,我覺得「思想為體,框架為用」,切不可本末倒置,迷失在框架的茫茫苦海中跳脫不開。

(四)

代碼寫得多了,要注意 打造屬於你自己的樂高積木。這是老司機和新手最大的區別。為啥同一個功能,老司機三下五除二就能搞定?因為老司機寫代碼在搭積木,而新手手頭沒有積木,也找不到積木,只好不斷造輪子。

老人說:常在河邊走,哪能不濕鞋。作為文明時代為數不多的在刀鋒(blade)上行走的職業人,程序員繞不過去的一道坎是把系統搞崩潰。你刪除過 production database 沒?看看這篇文章:需要多麼強大的內心才能經受這一切,有則改之,無則加勉。

如果前一篇文章嚇到了你,我這備著幾碗熱騰騰,口味各異的雞湯為您雅靜:

  • old soldiers never die

  • 那堵嘆息的牆壁

  • 像經營企業一樣打造職業生涯:開播導言

  • 用Lean Canvas 自我剖析(一)

嫌之前的文章太沉悶,技術犯太濃?來來來,咱們上完陽春白雪,上下里巴人:

  • 程序員和拉條子

  • 漫談工程師的三觀

  • 春假,是每個爹的噩夢

對新產品感興趣的,2016 年您可要失望了,我總共也就寫了兩篇和新產品有關的文章:Hololens,愛之初體驗,pay as you go:當程序員盯上了車險。

(五)

2016 技術圈除了 ZeroMQ 作者的去世,對我而言還有件大事就是 rethinkdb 的亡故。我挺喜歡它的技術以及圍繞 rethinkdb 做的 horizon,還寫過一篇文章:後端傻瓜化?為其搖旗吶喊。可惜了。再一次,技術敗給了市場;理想主義的 geek 輸給了世俗。

年底前的 aws re:invent,我寫了三篇文章,都值得一讀:

  • AWS re:invent 2016:對面的序員看過來

  • AWS reinvent 2016:Primitives not framework

  • snowmobile 狂想曲

可惜時間關係,我沒空展開寫更多的內容。大家自己上 youtube 看視頻吧。

新一年了,有沒有跳槽的想法?談談系統設計的面試 幫你梳理一下如何去應對系統設計的面試,向左走,向右走 赤果果地為俺們 tubitv 做廣告招聘。偷偷地告訴你,我們今年又要開始在中國(北京)招募工程師了,nodejs 後端和 web 前端為主,懂 erlang / elixir / scala 優先,稍後我會發文詳述。

最後,老少咸宜,人見人愛的長日無痕系列:長日無痕(一),長日無痕(二),長日無痕(三)

新年快樂,謝謝讚賞!

推薦閱讀:

睡前消息【16-09-14】——科技的糾結年代
【觀點】推演第三次抵銷戰略!
勞動生產率系列(1)技術:工業革命初探
酷站推薦 - sdk.cn - SDK | API | Tools | 技術棧 | 開發者服務
高端COB集成射燈有哪些品牌,到底高端在哪些技術含量?

TAG:互联网 | 技术 | 软件开发 |