2017年,你看了啥很好的計算機的博客/書/視頻?


請問文章被收藏快200次,贊數才90是什麼情況....

先推薦2017神書:Designing Data-Intensive Applications

之前比較深入的(內部怎麼工作的深度,每個系統至少讀過一本書,有一些看過源代碼)學過Oracle,HBase,Cassandra,Redshift,Hadoop,Spark,Kafka, Storm,Zookeeper...Amazon自己的DynamoDB,Kinesis,SQS/SNS,AWS Lambda,Step Function,SimpleWorkflow,EMR...

如果我先讀了這本神書,才去學上邊這些東西,那麼我花費的時間將是原來的3分之一到5分之一左右。這本書在廣度和一定程度的深度(如果對進一步深度有要求,可以讀完此書的reference)上,概括和總結了數據系統,分散式或非分散式環境下面臨的本質問題,和解決方案的分類,看完這本,你就會理解「為什麼」這麼多的分散式系統要這麼設計。

Clean Architecture

其實是一本好書,對於心中還沒有正確方法論,做軟體感覺毫無章法,拿到一個超大需求和一個團隊,不知怎麼開始,不知道怎麼programming in the big的人來說,這甚至是比神書更重要的一本書,講系統設計的方法論的,可惜對於一個已經非常了解DDD的人來說,內容未免重複,收穫並不大,只是從另外一個角度,再次印證的DDD一些理論罷了。但是對於沒有DDD知識的人,還是強薦。(不過就算了解DDD,讀了也還是有收穫的,只是沒那麼驚艷罷了)

這本書和DDD到底在講什麼

如果說Designing Data-Intensive Applications是逍遙子百年功力,是莽牯朱蛤,是張無忌吃的昆崙山蟠桃,給你無窮的內力,那麼這些講方法論的書則是北冥神功,九陽神功,易筋經,教你如何駕馭這力量,而不是自爆而亡。

工具,知識,技術都是你這個解決問題的人的input,

解決一個問題,需要你有能力,且知對錯。資料庫,spark,hadoop等等這些,定義了一個人解決問題的能力範圍,像一個圓,你無法使用超出你認知的工具來解決問題;而對方法論的理解,則是怎麼在自己的能力限定範圍內,正確的解決問題,且不斷的正確的解決問題, 像一個箭頭,永遠朝正確的方向前進。如何讓系統隨著變化的世界演化,不僅要正確的演化,還要更快更好,這競爭的世界如逆水行舟,不進則退,只有不斷的保持正確的判斷,同時拓展自己的能力邊界,才能存活。 只有廣大的能力限定範圍,而總是走錯路, 用錯能力;和能知道方向,但是沒能力達到,都無法成功的解決問題。

你在使劍,是的,但是你的目的是殺人,直追你的目標,忘記手中長劍,才能使出最高的劍法... 而這世上又有多少劍客, 拘泥於手中快劍而落入俗套,終究無法到達登峰造極的境界....」 ---- 阿萊克西斯

詳見:阿萊克西斯:對於程序員來說,怎樣才算是在寫有「技術含量」的代碼?

軟體系統設計是一種藝術,那絕不是各種工具的堆砌,而是在千萬種解決方案中找出最簡單的方案,持續找出最簡單方案的追求。

詳見:阿萊克西斯:編程到底難在哪裡?

Type-driven Development with Idris

PLT一直是我的弱項,所以通過這本書接觸到Dependent Type的時候,我是震精的。。。(程序還tm能這麼寫!程序還能利用證明來組織類型來防止bug!)也把我引入到了《Types and Programming Languages》,《Software foundation》的不歸路上... 說實話我不知道學這些東西到底有多少我能用在工作上。。。但就是很有意思呀!

Java Testing with Spock

在成為能寫出證明式程序之前,我們還是要好好做一個凡人,寫寫unit test。這本書讓我的工作效率提高了至少%100。讓我從討厭UT,認為這是一個無腦的體力活兒。到現在真的去享受設計Test code的過程,讓test優雅起來,用動態語言groovy加上spock寫UT簡直是一種享受。如何把測試寫成函數,通過data driven table把每一個分支測到,用最精鍊最可讀的code把test寫出來,test as doc。由於UT變得好寫,把UT也可以寫得很優雅的可能性點出來, 組內好好寫UT的積極性被激發了,基本上現在coverage都是%99.

BDD in Action

讀完了好好教教你們家PM怎麼跟SDE配合。

High Performance Spark

基本講Spark的書里,這本書講的還行。除開講怎麼做,這本多了一些為什麼這樣做好的內容。

The DevOps Handbook

Agile已死,未來是DevOps的。

Serverless Architectures on AWS

其實serverless還是很多限制的,遠沒宣傳的那麼好, 了解下吧。


感謝讓我看到了這個問題,如果只推薦一本的話,我選擇這本:

《Clean Architecture: A Craftsman"s Guide to Software Structure and Design》

今天剛剛看完,個人評價本年度最佳編程書籍,醍醐灌頂,吐血推薦。


今年看過的最棒的書是 DDIA, design data intensive applications。


斯坦福的 機器視覺課程:

課程網站:Syllabus | CS 231N

Y********e 上有對應的課程視頻: https://www.youtube.com/watch?v=vT1JzLTH4G4list=PLf7L7Kg8_FNxHATtLwDceyh72QQL9pvpQ (科學有風險,上網需謹慎)

裡面從 Image processing 的 pipeline, 神經網路的 loss function 以及各種優化方法,從最基本的 CNN/RNN 到 GAN, RL 都有講。課件內容非常詳細,適合自學。

更良心的是大作業也提供源碼下載,還有 ipython notebook 指導你一步一步完成。從只使用python 和 numpy 實現一個裸的 NN/RNN/CNN , 到使用 pytorch/tensorflow 做一個 vanilla GAN 都有涉及。

MIT 的分散式系統課程: 6.824 Schedule: Spring 2017

這個就相對寒酸一點了,沒有視頻資料,課程的 lecture 也很簡陋(甚至考慮過寫一個pandoc 腳本把txt 課件轉成 ppt 那種模式的……),好在大作業就是用 Golang 實現一個 基於Raft 的kv ,反正 test case 都自帶,能不能做出來自己心裡都有數。

書:

沒看完的 PLAI 算么。。實在受不了那個 Lisp 方言了,拿 Haskell 擼了一個等價的(擼了一半)


看了很多Go還有Kubernetes相關的,估計想列也列不全了,而且他們不知道比我寫的好到哪裡去了,然而我實在太弱了,看了那麼多對我來說一點用都沒有。給Kubernetes寫個container runtime,結果搞了一個多星期,連dependency都搞不定。先跳過這個,結果發現Kubernetes里某些sysctl設置是硬編碼的,哪怕傳了什麼--containerized之類的參數,也還是要強行設置,於是Kubernetes沒有root許可權一定是運行不了的。真是麻煩。

那不用Kubernetes自己寫吧。看了好多Raft的文章,還有論文,結果一篇都看不懂。為什麼網上到處有人說Raft更容易理解?想來想去想不明白Raft到底是怎麼回事,突然發現在想Raft的時候,已經把Paxos搞明白了。那就先寫個Paxos,結果Paxos這麼簡單的東西,愣是寫了兩個星期,才寫了個殘廢出來。

看用invertible bloom filter table搞set reconciliation without prior context的論文,還有關於tagged DFA的論文,最晚也都是十多年前的東西了,竟然看了好幾天都沒一點頭緒。後來去找了對應的master還不知道phd的thesis,結果很快就看明白了。無語。

另外還有PonyORM的介紹,本來想把代碼樣子整理成照搬PonyORM的,結果看到裡面一堆Monad,愣是沒抄成。Python裡面也搞Monad?

看了一堆C++模板元相關的東西,把之前沒搞定的事搞出來了。終於能在C++里模擬Shader Language了。結果被人鄙視說這有什麼難的。

好像今年就看了這麼點東西。估計看完一本書,我要花一萬年。

為什麼我這麼弱,為什麼你們一年都能看好幾本書


收藏比贊多是什麼鬼。。。。

-----------------------------------

今年主要鑽研資料庫了,所以看的書都和資料庫相關。

  1. Architecture of a Database System
  2. Readings in Database Systems
  3. Oracle Core
  4. NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence
  5. The Linux Programming Interface

待看的

  1. A Primer on Memory Consistency and Cache Coherence

這裡要感謝一下 @阿萊克西斯 和阿里的何登成兩位前輩的推薦

還有一些很不錯的課程

CS165: Data Systems

CS265: Big Data Systems

CMU 15-721 :: Database Systems (Spring 2018)

還有待看的 15-826 — MULTIMEDIA DATABASES AND DATA MINING

補充一下博客

RFC 1180 - TCP/IP tutorial

何登成的技術博客 " 數據一致性-分區可用性-性能--多副本強同步資料庫系統實現之我見

http://smalldatum.blogspot.com/

淺談高端CPU Cache Page-Coloring(全)

Articles Papers

Posted by Facebook Engineering on 2013年3月15日

https://people.cs.clemson.edu/~dhouse/courses/405/papers/optimize.pdf

http://horicky.blogspot.com/2009/11/nosql-patterns.html

http://horicky.blogspot.com/2010/10/bigtable-model-with-cassandra-and-hbase.html

http://horicky.blogspot.com/2012/04/mongodb-architecture.html

Implementing a Key-Value Store


The Linux Programming Interface

相當知名的書,就不用放簡介了。最近幾個月在斷斷續續地看,一邊看一邊補早就應該掌握的 Linux 知識,有時候還要自己寫一些例子來調試。這個節奏距離看完遙遙無期,不過這種書本身就適合跳著看,作為 reference 查閱和作為教科書學習都很適合。


謝 @腳本少女魔理沙 邀。(*/ω\*)

Probability: Theory and Examples by Rick Durrett;不是計算機,但是是基礎的概率論,在學機器學習所以就啃完了。個人認為這本概率論比較適合入門。

Deep Learning,不解釋

CS228(有公開課)以及課本Probabilistic Graphical Models: Principles and Techniques。概率圖模型似乎沒有深度學習火,但是學完之後多了一種不同的視角,很有啟發性。

一些雜七雜八的隨機森林論文:光喻:有沒有值得推薦的隨機森林 Random Forest教材?

Barron AP Computer Science(我真的不會Java編程,技能樹完全歪了……)


《機器學習【首屆京東文學獎-年度新銳入圍作品】 》(周志華)【摘要 書評 試讀】- 京東圖書

《統計學習方法 》(李航)【摘要 書評 試讀】- 京東圖書

--------------------------給自己live做個廣告---------------------------

你不了解的微電子行業 : 你不了解的微電子行業

保研+高薪 Offer,電子信息類學生都該學的大學規劃

數字IC設計職位筆試題分析

Digital IC 設計職位筆試題分析(下)

從零學習 TCL 腳本 :從零學習 TCL 腳本

TCL 腳本:數字 IC 設計應用篇:TCL 腳本:數字 IC 設計應用篇

半導體先進工藝的器件結構和挑戰 : 半導體先進工藝的器件結構和挑戰

初學者在數字 IC 設計學習中易進入的誤區 : 初學者在數字 IC 設計學習中易進入的誤區


2017沒讀幾本好書,資料庫系統實現可以算一個,ruby元編程算半個,粗略讀了幾個分散式系統和操作系統的paper。

感觸有幾個:

- 覺得自己年紀大,基礎弱,學習起來確實比不得中學時代就寫代碼的年輕人那樣高效了。

- 基礎知識固然重要,但我認為知乎把它的重要性過於誇大了。或許「快速掌握50%的本質原理,不求100%甚解」是個不錯的學習思路。

- 這個時代許多看似新潮的概念,其實理論基礎幾十年前就已經完善。比如分散式系統協議與演算法都是幾十年老生常談了。另一方面,新輪子層出不窮,大浪拍死不少項目,工程實踐上仍大有可為。

- 實踐動手能力仍然堪憂,短期內將繼續鉗制自己的進步空間。或許應該少讀一些「xxx深度剖析」的垃圾書,多做實驗hack源碼,進步會更快。

- ruby確實不錯,但是廣告宣傳實在是吹得太過了,改天或許可以專門寫篇文章總結一下。


首先給大家推薦些網站 libgen.io, foxebook, SaltTiger博主, CoderProg, sci-hub, 各種技術類外文電子書幾乎都可以找得到, 當然了,條件允許還是買正版書支持下作者的勞動成果。

今年讀得有收穫的一本書是《Outlier Analysis, 2nd》,這本書詳細的介紹了異常分析的方方面面, 給出如何將機器學習方法應用到異常檢測場景的典型方法, 可以說是這方面的綱要性讀物。

至於博客, 推薦如下:

  1. 碼農場, 博主很用心, 其機器學習系列包含李航版統計機器學習的Python實現和自己見解,Hinton神經網路公開課, CS224n自然語言處理全系列, 良心之作, 受益匪淺。
  2. 動手學深度學習, 李沐大神親自直播講解, 使用MXNet實現, 文檔和社區討論非常贊。
  3. Advanced Algorithms, MIT 2016年的高級演算法課程, 講義很豐富, 對於夯實自己的計算機理論, 特別是近似演算法和隨機演算法大有裨益。

最後附上搜集的一些學術技巧: 計算機資源。


蕭大直播的錄播


書:

老書但是經典的csapp,從EE轉CS非常舒服過度的一本書。

還有一些分散式的經典paper

視頻:

配套課程視頻MIT-6.033,MIT-6.824,因為項目需要開始系統學習和工程應用分散式系統,目前感受就是必須打好操作系統基礎。


今年看的最棒的…B站啊233

放一些正在看的鏈接:

1.李宏毅深度學習(2017)_演講?公開課_科技_bilibili_嗶哩嗶哩

2.[MXNet/Gluon] 動手學深度學習第一課:從上手到多類分類

3.【中英雙語】機器學習(Machine Learning)- 吳恩達(Andrew Ng)

待補充。


convex optimization by Boyd

學習機器學習人工智慧的基礎課,非常重要,我去新公司面試的時候就在convex optimization上吃了虧,回來惡補

斯坦福大學有配套教材的公開課,但是語速比較快,還好有字幕,講的很好不過需要思維運轉的很快才能跟上.

我對學習這門課的童鞋的建議是:首先預習一下書本,然後去聽一下公開課,之後精讀課本,認真的完成課後習題...這門課個人認為難度還是不小的,需要堅持..

有想一起學習這門課的小夥伴可以一起交流!


在做性能優化相關的事情的時候看了:Brendan Gregg"s Homepage

在做一個新的業務線的架構設計的時候,看了很多Martin Fowler的東西

看The Log: What every software engineer should know about real-time data"s unifying abstraction, https://pdfs.semanticscholar.org/bd26/e88a61493067d520f4a91aab19e0215233c1.pdf幫助我比較深刻的理解了業務的本質以及如何設計大數據系統


The Linux Command Line

無論是當參考手冊還是自學入門都是不可多得的佳作

內容一直在更新

更重要的是他是免費的(電子版免費,紙質版可以購買)

作者功德無量(?°з°)-?


推薦一個有關統計學習的博客.

The Spectator

裡面有很多關於統計學習的tricks, 我感覺給了我很多幫助. Shakir在某一年NIPS的講座關於Variational Inference 也超級有用.

想到了再加進來.


網站

  • WildML:有很多深度學習和NLP的文章,更重要的是很多文章都是有代碼的,可以自己實踐照著寫,對新手很友好。

博客

  • 《How to Generate a Good Word Embedding?》導讀:來博士的博客,有很多關於NLP的優秀文章。

Github項目

  • pangolulu (Yu Gong):這是我follow的一個github用戶,也算是博客的一種吧。看介紹是阿里搜索團隊的工程師,寫了很多新手友好型的項目。不過現在在github上不怎麼活躍了,看看下面的幾個項目就好。
  1. pangolulu/neural-network-from-scratch,pangolulu/rnn-from-scratch:這兩個是不用任何包,只用python和numpy來實現普通的神經網路,和RNN,認真看完後能對這些網路模型有更深刻的理解。
  2. pangolulu/sentiment-analysis:這個項目是一個kaggle的比賽,我主要是拿來學習文件組織架構和代碼書寫規範,也不錯。
  • WenDesi/lihang_book_algorithm:這個項目實現了李航博士《統計學習方法》書中的演算法。雖然現在深度學習很火,但是一些傳統的機器學習方法還是很有必要去學習的,把底子打得紮實些才能走得更遠。通過學習各種演算法的實現,不僅能加深對各種機器學習演算法的理解,還能對怎麼把數學公式變成代碼有一個更直觀的認識。

視頻

  • CS231n: Convolutional Neural Networks for Visual Recognition:已經有人說過了,非常棒的一門課。即使不搞圖像,單純為了學習神經網路模型都有必要學一學這門課,建議看完視頻看課件筆記,精華都在筆記里!
  • Tutorial - tmux Basics:這個是油管上一個關於tmux使用和配置的視頻。很早就知道使用tmux遠程登錄伺服器操作很方便,但是找了些中文的教學文章還是沒搞懂怎麼用。直到偶然發現youtube上有很多這樣的教學視頻,結果花了一天就學會了。學了後才知道這種提高生產力的工具真是越早學越好。翻不了牆的話可以看我寫的筆記:tmux簡潔教程及config關鍵配置。如果能翻牆的話建議好好利用youtube這個平台,別整天看什麼脫口秀、vlog、亂七八糟的東西(好像暴露了什麼),這個平台上有很多優秀的教學視頻,對於初學者來說非常有用。

  • Python for Data Analysis, 2nd Edition(Data Wrangling with Pandas, NumPy, and IPython):這個是利用Python進行數據分析的第二版,2017年的新書,所有代碼都是用python3實現的,現在只有英文版。看完後心裡算是穩了,以後遇到數據清洗的問題也不會這裡查查那裡搜搜,學完整本書,即使現在忘了,需要用到的時候也知道查什麼。另外我把整本書做了個中文翻譯版放在了github上,地址在這裡:BrambleXu/pydata-notebook。翻譯了整本書,也算是加深了印象。

  • Python編程快速上手:通過項目的形式學習python。因為每一章都有要實現的具體任務,感覺學起來更輕鬆一些,代碼是用python3實現的。

PS:你們別只收藏不點贊啊!


java業務開發系列的

data intensive application

這本書2017年出的,系統的講述了數據密集型應用。第一章定義了什麼是數據密集型應用,說是以數據為核心,低cpu密集,高io的應用。

同時講述了如何評價一個數據密集型應用,比如可靠性,可用性,一致性。講了通過響應時間,並發數等去定量評估。

第二章講了單個資料庫的底層機制,b-tree,*表。

第三章講了

第四章數據系統的複製

*數據系統的分塊

第五章講了資料庫的隔離級別,事物,並發,競爭(我覺得這些對業務程序員也有幫助)

(記得不全了,慢慢補)


推薦閱讀:

如何評價同濟大學軟體學院?
如何理解NAT使Ipsec更複雜?
吳軍博士是一個怎樣的人?
隨身攜帶什麼東西可以標榜你喜歡數學or物理or計算機科學or ... ?
為什麼要開源?

TAG:書籍推薦 | 計算機科學 | 2017年度盤點 |