以大三本科生角度談計算機學習:關於開源產品與學習書籍
轉載請注明出處:https://blog.csdn.net/zbf8441372
作為程序猿,除了技術書籍,我們還應該多讀一些鍛煉思維,甚至和心理學相關的書。
這篇文章寫給現在的自己——作為階段性總結和後續發展的指向標,也寫給幾年後的自己——當有一天我回過頭來,看我這拙劣的文筆和幼稚的想法的時候,會不會忍俊不禁。
讀者?
這篇文章不適合科研型的人士,所以這裏不會有數學,不會有算法的分析和討論。隻要你打算做的是Java開發者或者對開源技術有學習興趣和熱情,肯定有合你胃口的地方。歡迎大家線上線下的交流,提供我的qq郵箱369447122@qq.com(好吧,用qq郵箱的人弱爆了= =)
現在流行什麼?
對技術的接觸,還僅半年,但我看到了很多東西。每當看到一些開源的產品和主流技術,都讓我興奮不已,甚至覺得為了學這些東西,連吃飯和睡覺都是在浪費時間。以下這些東西隻是我狹隘的眼見所捕獲到的。
Hadoop:
hadoop家族已經算不上一種新的技術了,現在用它的人非常多,我認為大數據時代下,hadoop必須是大家都熱衷的一個大產品。主要的三大組員HDFS,MapReduce和Zookeeper,此外還有Hbase,Hive,Pig等等。《hadoop權威指南》一書對其各部分的介紹還是很基礎的,推薦可以看看《Hadoop in action》以及《Pro Hadoop》。話說權威指南這套書好像不咋滴,in action這套才是王道(個人認為)。
HDFS,MapReduce和Zookeeper三大利器,我相對熟一點的是Zookeeper。總之,阿裏的一位架構師說,這三個東西,你要是都搞好了,那就打遍天下無敵手了!不僅僅是用用,深入剖析他的源代碼,考慮他的設計和理念才是關鍵。HDFS是參照與Google的三駕馬車之一的GFS而設計的吧,如果我沒記混的話。MapReduce這種編程模式可以適用到許多經典的機器學習,數據挖掘算法,可以看看NIPS06年的一篇文章, Map-Reduce for Machine Learning on Multicore,介紹了LWLB, NB, GDA, k-means,PCA,EM,SVM等算法並行化的可行性。具體的,Apache的Mahout項目實現了機器學習算法的hadoop框架實現,具體可以看看《Mahout in action》一書。
NoSQL:
不要說現在已經不流行SQL了,因為no SQL了嘛。那我會噴血的。話說,一次聽Peter Chen(ER圖設計者)做報告的時候,竟然就是這麼說的。我想說,這位大師怎麼連NoSQL的概念都不知道?= =NoSQL家族配合分布式大數據的處理,為底層提供了更強大的支持。包括Hbase,MongoDB,Redis,Cassandra,CouchDB。哇,聽上去就激動人心,對我誘惑力十足。隻可惜到目前隻是涉獵了一丁點,實在沒有精力去仔細研讀其中一個以及它的源代碼。推薦https://blog.nosqlfan.com/newslist NoSQL fan的網站。裏麵的資料匯總非常不錯,書籍也很多!
不同的NoSQL適用不同的場合和環境。Hbase的列存儲結合Mapreduce做分布式運算和中間結果存儲巴拉巴拉。多說就說錯話了,還得好好了解之。
搜 索:
搜索的時代可能快過去了。目前社交網站也許更火些。不過全文檢索方麵的Lucene這個東西,還是很有價值去學習的。《開發自己的搜索引擎 Lucene+Heritrix》是本好書,想好好學習呢,還是得讀《lucene in action》。
SOA:
現在許多產品都是麵向服務的概念。包括雲計算。SOA的技術有很多,我熟的是OSGi框架。具體介紹可以關注淘寶林昊(國內OSGi先驅)的博客和他寫的介紹OSGi的兩本書。當然也有《OSGi in action》和更加深入的《OSGi in depth》。國內運用OSGi的人還是有一些的,他的設計理念是相當好的,關於他的介紹我之前的博客裏也有,就不多扯啦。
Node.js:
國內,應該是淘寶內部部分員工在主推,了解不是很多,就參加過一次技術沙龍,知道了這個東西,不多說。
雲計算:
現在什麼都能和雲扯上關係。微軟的Azure雲操作係統代表著微軟對雲的邁進。他也有自己的三駕馬車。具體見我之前淺析Azure架構的文章。近日還看到,Azure上還要部署hadoop的東西,微軟也加入了hadoop這個大家庭。
看什麼書?
好吧,我這麼一個小白也敢來說看什麼書,簡直不知天高地厚。
大家耳熟能詳的一些書籍這裏就不列舉了,詳見劉偉鵬的博客https://mindhacks.cn/2011/11/04/how-to-interview-a-person-for-two-years/ 中 “怎樣花兩年時間去麵試一個人”一文。當時這篇文章是讓我茅塞頓開的一篇博文,我也出於對其人的敬仰,拜讀了《暗時間》一書,很讓人有共鳴。推薦大家可以抽空讀一讀。
聽說麵試微軟前必看的十本書:
Code: The Hidden Language of Computer Hardware and Software (《編碼的奧秘》)
Computer System: A Programmer’s Perspective (《深入理解計算機係統》) / Windows via C/C++ (《Windows核心編程》 / 《程序員的自我修養》
Code Complete 2(《代碼大全》)/ The Pragmatic Programmer (《程序員修煉之道》,我也把這本書稱為《代碼小全》)
Programming Pearls (《編程珠璣》) / Algorithms / Algorithm Design / 《編程之美》
The C Programming Language
The C++ Programming Language / Programming: Principles and Practice Using C++ / Accelerated C++
The Structure and Interpretation of Computer Programs (《計算機程序的構造和解釋》)
Clean Code / Implementation Patterns
Design Patterns (《設計模式》) / Agile Software Development, Principles, Patterns, and Practices
Refactoring (《重構》)
Head First係列從書都蠻不錯的,閱讀起來快,很快。推薦《Head first 設計模式》《Head first OOA&D》
《重構》《設計模式》(推薦除了看那本薄薄的原版《設計模式》外,其他解釋,進一步闡述這本書的設計模式書籍也許更有益,推薦清華大學出版社的《研磨 設計模式》,而且這本書是基於Java語言)這類書一定是必看的
《編程珠璣》《代碼之美》這類書還沒看過,不過我會把這幾本放到優先級比較低的地方。一來,有了實戰積累再看;二來,不像《重構》《設計模式》看了之後可能沒有顯著性用處,個人認為。
《編程之美》挺不錯的,看起來像在做腦筋急轉彎,哈哈。
in action書籍和NoSQL的書以上或者下文還會提到,你感興趣於那些方麵,就去看那些書吧。(其實這部分我想強調的,就隻有這一點~哈哈)
關注開源產品
Apache係列的開源產品我關注過很多了,包括Karaf, Camel, ActiveMQ, Mahout, ServiceMix, ACE, Maven, Amdatu。給我最大的體會是,Apache這些東東,除了運用了最主流的一些技術,把他們變成大家都可以用的工具之外,各自的產品又嫁接在一起,形成一種技術產品的融合和互相搭建實現,讓我賞心悅目!比如ServiceMix就是一個基於OSGi的大容器,是一個ESB(消息服務總線),他能容納Camel,ActiveMQ(MQ中最熱的產品之一,還有Storm中的ZeroMQ)這樣的產品,形成一整套的東西。
Storm(最近很火的感覺,以後有時間一定好好看看), Yahoo的S4(可能比較老了)
MongoDB,Redis這樣的就不說了,實在是太熱了,NoSQL中必須得真正熟悉一個,我覺得。
基本功?
應該具備哪些基本功?就從淘寶的Taojob上https://www.tbdata.org/about-us/departments對職位的基本要求和素質來看,我認為我們需要:
1. java基礎:J2EE各種技術和框架(包括JSP,Servlet,Spring,Hibernate,Structs2, EJB),js相關(Ext JS庫,JSON,Ajax,Node.js, jquery,jvm內部實現(主要內存管理這塊),設計模式和重構(實現低耦合,高內聚的模塊化代碼),分布式java編程和java並發編程,java core中java特性的東西(反射機製)
2. 一種腳本語言:Python(萬能語言不解釋),javascript(在Unity3D下寫過遊戲的腳本,製作前台特效和網頁上動態的東西)
3. 網絡知識:這裏牽涉到linux環境下,對集群的管理和環境配置,網絡的基礎知識和操作係統知識是很有用的。《TCP/IP詳解》也是必讀的書
4. 傳統的RDBMS數據庫要熟悉一種(如MySQL,熟讀他的手冊,特別關於他的拓展特性,比如和memcached的聯係和嫁接),NoSQL也要熟悉一種,推薦MongoDB,Redis,Hbase(讀過他們的源代碼,知道每種NoSQL的特點和適用情境)
5. 服務器(集群)配置、管理能力:至少得會服務器批量係統的安裝,許多分布式環境的搭建
6. 關注開源產品和新技術,我個人關注架構,搜集過包括facebook,Amazon,Taobao,支付寶,ebay,wiki,Twitter,MySpace,livejournal,Qcon,douban等等的架構發展情況和各類技術運用。我想做一位架構師,還會關注包括Qcon,infoQ(每月8號有月刊),GitHub,open-open。你可以沒有用過這些東西,但是你不能沒有聽過thrift,Avro,memcached,Ehcache,NginX等等。真正新的東西還都是在論文中,凡是出書了的技術都是老的了。論文才是新技術的發源地。
7. 各類數據挖掘/機器學習算法的(java)實現(參看DM工具weka的代碼),並且參考用mapreduce實現(參看Apache Mahout),這是個Big Data時代。(每次都想起海賊王裏的台詞= =)
8. vim或者Emacs編輯器熟用一種。不要停留在Notepad++之類的編輯器之上。vim是“編輯器之神”,而Emacs則是“神的編輯器”,強大的像一個操作係統。
9. hadoop這快就不用說了,我覺得這是一個很好,很值得去學習的技能
10. 全文搜索的lucene(很好上手,實用,可以直接使用包裝過了的Compass框架)
11. 耐心和恒心。我相信勤能補拙,我相信記錄是最好的記憶方式。還有多跟讀一些業界的著名人士的博文。每個公司核心團隊成員的開發經曆和開發經驗。(好吧,我看的最多的是淘寶林昊的博客,誰叫他是國內OSGi的先驅者呢,其次就是劉偉鵬,哈哈,領悟到技術之外的好多東西,強烈推薦大家去學習學習~)
就匆匆忙忙寫了這麼些,主要是給自己一個參考和監督,讓自己更好地把握。微軟筆試和考試周正在臨近,很可惜,近期無法接觸我喜愛的東西了,o(︶︿︶)o
最後更新:2017-04-02 18:44:44
上一篇:
FireFox導入導出Cookies和收藏夾的方法
下一篇:
MongoDB 全文檢索和標簽功能
RPC框架幾行代碼就夠了
ExtJs學習筆記(1)ItemSelector (用戶關係左右選擇組件)
sitemap在網站中還有這些作用
【JAVA大數訓練】大明A+B
jquery form 插件
magento 1.4 -- 推薦插件 -- 產品頁計算運費插件(Estimate Shipping on the Product Page)
ssi
ASP.NET中Get和Post的用法
http://www.blogjava.net/killme2008/archive/2007/09/03/142344_zh.html
HTML5開發桌麵應用:選擇node-webkit還是有道heX