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了。結果被人鄙視說這有什麼難的。
好像今年就看了這麼點東西。估計看完一本書,我要花一萬年。
為什麼我這麼弱,為什麼你們一年都能看好幾本書
收藏比贊多是什麼鬼。。。。
-----------------------------------
今年主要鑽研資料庫了,所以看的書都和資料庫相關。
- Architecture of a Database System
- Readings in Database Systems
- Oracle Core
- NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence
- The Linux Programming Interface
待看的
- 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》,這本書詳細的介紹了異常分析的方方面面, 給出如何將機器學習方法應用到異常檢測場景的典型方法, 可以說是這方面的綱要性讀物。
至於博客, 推薦如下:
- 碼農場, 博主很用心, 其機器學習系列包含李航版統計機器學習的Python實現和自己見解,Hinton神經網路公開課, CS224n自然語言處理全系列, 良心之作, 受益匪淺。
- 動手學深度學習, 李沐大神親自直播講解, 使用MXNet實現, 文檔和社區討論非常贊。
- 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上不怎麼活躍了,看看下面的幾個項目就好。
- pangolulu/neural-network-from-scratch,pangolulu/rnn-from-scratch:這兩個是不用任何包,只用python和numpy來實現普通的神經網路,和RNN,認真看完後能對這些網路模型有更深刻的理解。
- 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 ... ?
※為什麼要開源?