linux 下的iconv命令可以把Windows默認GBK編碼的文件轉成Linux下用的UTF-8編碼。
Example: $ iconv -f GBK -t UTF-8 file_name -o file_name
1. 安裝命令行版的texlive: sudo apt-get install texlive-full
2. 安裝一個比較有幫助性的編輯器: sudo apt-get install texmaker
3. 安裝中文環境: sudo apt-get install latex-cjk-all
A useful webiste http://chixi.an.blog.163.com/blog/static/29359272201262952120729/
To install/upgrade to TeX Live 2012:
Add the texlive-backports PPA by typing the below (enter your password when prompted):
sudo apt-add-repository ppa:texlive-backports/ppa
Then type:
sudo apt-get update
Installation:
If you are installing TeX Live for the first time, type:
sudo apt-get install texlive
If you already have TeX Live installed and are upgrading, type:
sudo apt-get upgrade
Warning: this will also upgrade all other packages on your Ubuntu system for which upgrades are available. If you do not wish to do this, please use the previous sudo apt-get install texlive
instead.
轉自:http://blog.csdn.net/lsg32/article/details/8058491
轉載自:cool shell,作者:陳皓
From:http://coolshell.cn/articles/7992.html
先說明一下,我不希望本文變成語言爭論貼。希望下面的文章能讓我們客觀理性地了解C++這個語言。(另,我覺得技術爭論不要停留在非黑即白的二元價值觀上,這樣爭論無非就是比誰的嗓門大,比哪一方的觀點強,毫無價值。我們應該多看看技術是怎么演進的,怎么取舍的。)
周五的時候,我在我的微博上發了一個貼說了一下一個網友給我發來的C++程序的規范和內存管理寫的不是很好(后來我刪除了,因為當事人要求),我并非批判,只是想說明其實程序員是需要一些“疫苗”的,并以此想開一個“程序員疫苗的網站”,結果,@簡悅云風同學直接回復到:“不要用 C++ 直接用 C , 就沒那么多坑了。”就把這個事帶入了語言之爭。
我又發了一條微博:
@左耳朵耗子 : 說C++比C的坑更多的人我可以理解,但理性地思考一下。C語言的坑也不少啊,如果說C語言有90個坑,那么C++就是100個坑(另,我看很多人都把C語言上的坑也歸到了C++上來),但是C++你得到的東西更多,封裝,多態,繼承擴展,泛型編程,智能指針,……,你得到了500%東西,但卻只多了10%的坑,多值啊。
結果引來了更多的回復(只節選了一些言論):
那么,C++的坑真的多么?我還請大家理性地思考一下。
我們先來看一個圖——《各種程序員的嘴臟的對比》,從這個圖上看,C程序員比C++的程序員在注釋中使用fuck的字眼多一倍。這說明了什么?我個人覺得這說明C程序員沒有C++程序員淡定。
不要太糾結上圖,只是輕松一下,我沒那么無聊,讓我們來看點真正的論據。
相信用過C++的程序員知道,C++的很多特性主要就是解決C語言中的各種不完美和缺陷:(注:C89、C99中許多的改進正是從C++中所引進的)
上述的這些東西填了不知有多少的C語言編程和維護的坑。少用指針,多用引用,試試autoptr,用用封裝,繼承,多態和函數重載…… 你面對的坑只會比C少,不會多。
C++的坑真的不多,如果你能花兩到三周的時候讀一下《Effecitve C++》里的那50多個條款,你就知道C++里的坑并不多,而且,有很多條款告訴我們C++是怎么解決C的坑的。然后,你可以讀讀《Exceptional C++》和《More Exceptional C++》,你可以了解一下C++各種問題的解決方法和一些常見的經典錯誤。
當然,C++在解決了很多C語的坑的同時,也因為OO和泛型又引入了一些坑。消一些,加一些,我個人感覺上總體上只比C多10%左右吧。但是你有了開發速度更快,代碼更易讀,更易維護的500%的利益。
另外,不可否認的是,C++中的代碼出了錯誤,有時候很難搞,而且似乎用C++的人會覺得C++更容易出錯?我覺得主要是下面幾個原因:
另外,C++的編譯對標準C++的實現各異,支持地也千差萬別,所以會有一些比較奇怪的問題,但是如果你一般用用C++的封裝,繼承,多態,以及namespace,const, refernece, inline, templete, overloap, autoptr,還有一些OO 模式,并不會出現奇怪的問題。
而對于STL中的各種坑,我覺得是程序員們還對GP(泛型編程)理解得還不夠,STL是泛型編程的頂級實踐!屬于是大師級的作品,一般人很難理解。必需承認STL寫出來的代碼和編譯錯誤的確相當復雜晦澀,太難懂了。這也是C++的一個詬病。
這和Linus說的一樣 —— “C++是一門很恐怖的語言,而比它更恐怖的是很多不合格的程序員在使用著它”。注意我飄紅了“很多不合格的程序員”!
我覺得C++并不適合初級程序員使用,C++只適合高級程序員使用(參看《21天學好C++》和《C++學習自信心曲線》),正如《Why C++》中說的,C++適合那些對開發維護效率和系統性能同時關注的高級程序員使用。
這就好像飛機一樣,開飛機很難,開飛機要注意的東西太多太多,對駕駛員的要求很高,但你不能說飛機這個工具很爛,開飛機的坑太多。(注:我這里并不是說C++是飛機,C是汽車,C++和C的差距,比飛機到汽車的差距少太多太多,這里主要是類比,我們對待C++語言的心態!)
理解C++設計的最佳讀本是《C++演化和設計》,在這本書中Stroustrup說了些事:
1)Stroustrup對C是非常欣賞,實際上早期C++許多的工作是對于C的強化和凈化,并把完全兼容C作為強制性要求。C89、C99中許多的改進正是從C++中所引進。可見,Stroustrup對C語言的貢獻非常之大。今天不管你對C++怎么看,C++的確擴展和進化了C,對C造成了深遠的影響。
2)Stroustrup對于C的抱怨主要來源于兩個方面——在C++兼容C的過程中遇到了不少設計實現上的麻煩;以及守舊的K&R C程序員對Stroustrup的批評。很多人說C++的惡夢就是要去兼容于C,這并不無道理(Java就干的比C++徹底得多),但這并不是Stroustrup考慮的,Stroustrup一邊在使盡渾身解數來兼容C,另一方面在拼命地優化C。
3)Stroustrup在書中直接說,C++最大的競爭對手正是C,他的目的就是——C能做到的,C++也必須做到,而且要做的更好。大家覺得是不是做到了?有多少做到了,有多少還沒有做到?
4)對于同時關注的運行效率和開發效率的程序員,Stroustrup多次強調C++的目標是——“在保證效率與C語言相當的情況下,加強程序的組織性;能保證同樣功能的程序,C++更短小”,這正是淺封裝的核心思想。而不是過渡設計的OO。(參看:面向對象是個騙局)
5)這本書中舉了很多例子來回應那些批評C++有運行性能問題的人。C++在其第二個版本中,引入了虛函數機制,這是C++效率最大的瓶頸了,但我個人認為虛函數就是多了一次加法運算,但讓我們的代碼能有更好的組織,極大增加了程序的閱讀和降底了維護成本。(注:Lippman的《深入探索C++對象模型》也說明了C++不比C的程序在運行性能低。Bruce的《Think in C++》也說C++和C的性能相差只有5%)
6)這本書中還講了一些C++的痛苦的取舍,印象最深的就是多重繼承,提出,拿掉,再被提出,反復很多次,大家在得與失中不斷地辯論和取舍。這個過程讓我最大的收獲是——a) 對于任何一種設計都有好有壞,都只能偏重一方,b) 完全否定式的批評是不好的心態,好的心態應該是建設性地批評。
我先說說我學C++的經歷。
我畢業時,是直接從C跳過C++學Java的,但是學Java的時候,不知道為什么Java要設計成這樣,只好回頭看C++,結果學C++的時候又有很多不懂,又只得回頭看C,最后發現,C -> C++ -> Java的過程,就是C++填C的坑,Java填C++的坑的過程。
注,下面這些東西可以看到Java在填C/C++坑:
當然時代還在前進,這個演變的過程還在C#和Go上體現著。不過我學習了C -> C++ -> Java這個填坑演進的過程,讓我明白了很多東西:
我從這個學習過程中得到的最大的收獲不是語言本身,而是各式各樣的編程技術和方法,和技術的演進的過程,這比語言本身更重要!(在這個角度上學習,你看到的不是一個又一個的坑,你看到的是——各式各樣讓你可以爬得更高的梯子)
我對C++的感情有三個過程:先是喜歡地要死,然后是恨地要死,現在的又愛又恨,愛的是這個語言,恨的是很多不合格的人在濫用和凌辱它。
C++語言發展大概可以分為三個階段(摘自Wikipedia):
在《Why C++? 王者歸來》中說了 ,性能主要就是要省電,省電就是省錢,在數據中心還不明顯,在手機上就更明顯了,這就是為什么Android 支持C++的原因。所以,在NB的電池或是能源出現之前,如果你需要注重程序的運行性能和開發效率,并更關注程序的運性能,那么,應該首選 C++。這就是iOS開發也支持C++的原因。
今天的C++11中不但有更多更不錯的東西,而且,還填了更多原來C++的坑。(參看:C++11 Wiki,C++ 11的主要特性)
最后,非常感謝能和“@簡悅云風”,“@淘寶諸霸”,“@Laruence”一起討論這個問題!無論你們的觀點怎么樣,我都和你們“在一起”,嘿嘿嘿……
(全文完)
轉載Cool Shell,作者:陳皓
From:http://coolshell.cn/articles/2250.html
下面是一個《Teach Yourself C++ in 21 Days》的流程圖,請各位程序員同仁認真領會。如果有必要,你可以查看這個圖書以作參照:http://www.china-pub.com/27043
看完上面這個圖片,我在想,我學習C++有12年了,好像C++也沒有學得特別懂,看到STL和泛型,還是很頭大。不過,我應該去考慮研究量子物理和生物化學,這樣,我才能重返98年殺掉還在大學的我,然后達到21天搞定C++的目標。另外,得要特別提醒剛剛開始學習C++的朋友,第21天的時候,小心被人殺害。呵呵。
當然,上面只是一個惡搞此類圖片,學習一門技術,需要你很長的時間,正如圖片中的第三圖和第四圖所示,你需要用十年的時間去不斷在嘗試,并在錯誤中總結經驗教訓,以及在項目開發中通過與別人相互溝通互相學習來歷練自己。你才能算得上是真正學會。
這里有篇文章叫《Teach Yourself Programming in Ten Years》,網上有人翻譯了一下,不過原文已被更新了,我把網上的譯文轉載并更新如下:
在這三個小組中的每一個人基本上都是從相同的時間開始練習的(在五歲的時候)。在開始的幾年里,每個人都是每周練習2-3個小時。但是在八歲的時候,練習的強度開始顯現差異。在這個班中水平最牛的人開始比別人練習得更多——在九歲的時候每周練習6個小時,十二歲的時候,每周8個小時,十四歲的時候每周16個小時,并在成長過程中練習得越來越多,到20歲的時候,其每周練習可超過30個小時。到了20歲,這些優秀者在其生命中練習音樂總共超過 10,000 小時。與之對比,其它人只平均有8,000小時,而未來只能留校當老師的人僅僅是4,000 小時。
抱著這些想法,我很懷疑從書上到底能學到多少東西。在我第一個孩子出生前,我讀完了所有“怎樣……”的書,卻仍然感到自己是個茫無頭緒的新手。30個月后,我第二個孩子出生的時候,我重新拿起那些書來復習了嗎?不。相反,我依靠我自己的經驗,結果比專家寫的幾千頁東西更有用更靠得住。
Fred Brooks在他的短文《No Silver Bullets》(沒有銀彈)中確立了如何發現杰出的軟件設計者的三步規劃:
這實際上是假定了有些人本身就具有成為杰出設計師的必要潛質;要做的只是引導他們前進。Alan Perlis說得更簡潔:“每個人都可以被教授如何雕塑;而對米開朗基羅來說,能教給他的倒是怎樣能夠不去雕塑。杰出的程序員也一樣”。
所以盡管去買那些Java書;你很可能會從中找到些用處。但你的生活,或者你作為程序員的真正的專業技術,并不會因此在24小時、24天甚至24個月內發生真正的變化。
(全文完)
注:如果看不到圖片,請右鍵圖片獲得圖片地址,然后在瀏覽中訪問圖片地址即可~
1.去下載LINUX上使用的BIN文件,去www.java.sun.com,最終會到ORACLE網站上去,因為SUN被收購了嘛,下載JDK,名稱為jdk-6u22-linux-i586.bin,然后去www.eclipse.org,下載eclipse,筆者下載的是JAVA EE版的,文件名稱為eclipse-jee-helios-SR1-linux-gtk.tar.gz,因為這個工具多,比較適合WEB等開發。路徑
2.本人的文件目錄放在/home/heroguo/下載,使用tar命令解壓(這個具體可以去查找資料或者tar -help)eclipse,會生成eclipse文件夾。mv到/home文件夾。
3、安裝JDK,使用終端,運行下載下來的jdk-6u22-linux-i586.bin。
第一步,將目錄CD到/home/heroguo/下載。
第二步,使用命令./jdk-6u22-linux-i586.bin,等待中,直到完成。完成后,會在當前目錄下生成一個JDK1.6.0_22的文件夾。
第三步,使用mv命令將JDK1.6.0_22到/home文件夾。
4.環境變量
注意:千萬不要范和筆者一樣的錯,狂暈,寫PATH的時候,前面的$PATH 沒有寫,導致PATH路徑下所有位置被覆蓋,包括寫命令都得打完整路徑,汗死!!路徑之間用:隔開
這一步很重要:重啟ubuntu,在終端中輸入java –version,查看版本號
看到上面按要求1.6.0_22證明JDK被正確安裝了
5.用終端將當前目錄CD為 /home/heroguo/eclipse,使用命令./eclipse,可以看到eclipse開始運行了。
彈出eclipse工作目錄設置,OK基本JAVA開發環境也搞定了。
進行WEB開發,再去下個TOMCAT,由于TOMCAT7 剛出來,所以選擇了TOMCAT6,方法和WINDOWS上一樣的,就不再贅述了,哈哈,休息哈去!
轉貼:原文鏈接:
http://blog.csdn.net/guoleimail/article/details/5960244
幾年前,我寫了一套膠片,題目是《怎樣做研究》,多次在實驗室內部給學生們做報告,也曾對外講過一次,聽眾反應良好。也有網友讀過這套膠片,給我來信稱有所收獲。然而,膠片中的文字畢竟只是提綱攜領,無法充分闡述我的想法,為此,借周末一點閑暇,把《怎樣做研究》寫成一篇文章,與師友切磋。
什么是科學
科學是分科的學問,客觀地說,是起源于西方的。中國只有經驗科學,典型的如中醫。我的母親是學中醫的,我從小就對中醫耳濡目染,生了病,媽媽就會請他的老師來,一貼小藥下去,我的病就好了。因此,我對中醫一直是很信服的。然而,近些年來,中醫多受批評,發展也越來越緩慢,究其原因,中醫不是科學,或者說只是經驗科學,而非實證科學。中藥的成分以及生化功效不曾用實驗進行深入的分析,望聞問切的診斷方法完全憑經驗而無法量化,陰陽五行的理論似是而非,祖傳秘方的傳承方式與知識共享的現代思維背道而馳。因此,盡管中醫有診治的整體觀和方劑的個性化兩大優點,但其停留于經驗層面,而遲遲不能進入科學的殿堂,因此在現代社會中的發展必然步履維艱。
中醫不是科學,那到底什么是科學呢?科學(自然科學)是人們用來認識和改造自然世界的思維武器,科學研究可以分為基礎研究(理論研究)和應用研究(技術研發)。
基礎研究
萬事萬物皆有其規律,掌握并且利用這些規律就能夠為人類造福,這些規律是隱蔽在紛繁復雜的現象背后的,要識破大自然的奧秘,讀懂上帝的天書,非要下一番深入觀察和探究的功夫不可。以揭示規律為目的的研究活動屬于基礎研究,從事這些活動的學者是科學家。規律不是被創造出來的,而是早已存在的,人們只有認識規律的權利,而沒有創造規律的可能。
從根本上講,推動基礎研究的也是人們在生產生活中的一些實際需要,但是隨著基礎研究的深入,理論已經成為一個龐大的體系,理論研究早已開始按照它自有的邏輯獨立發展,而不必時時刻刻聯系實際需要,比如著名的歌德巴赫猜想,可能在百年之后,發現其有重大的應用價值,但是目前到底有什么用,誰也說不清楚。理論的價值在今天這個非常講求短期功利的社會中常常被忽視,現在有一種傾向認為只有產生實際經濟效益的科研工作才有價值,這種極端化的觀點顯然是錯誤的,我們必須承認并高度尊重理論研究者的成就。
理論研究的直接動力是科學家的好奇心,以及他們對科學榮譽的渴望。越是單純的科學家越有希望發現真理,他們的科學探索有點像迷宮探寶或者海邊拾貝,偉大的科學家都是沒有喪失童趣的人,他們在實驗室里是寧靜而愉快的,他們是樂此不疲的,很多在常人看來難以忍受的寂寞在他們看來卻是一種幸福。越是找不到答案,越是激發探索的熱情,在一次次的失敗中積累著煩悶與緊張,在終于取得突破后興奮異常。與此同時,也必須承認科學榮譽也是激勵科學家們前進的重要動力,只要別把榮譽看得高于真理,貨真價實的榮譽仍然是值得追求的。
理論上的突破對應用研究產生持續不斷的推動力,在模式識別領域,神經網絡、支持向量機、條件隨機域等等機器學習技術不斷出現,每當一項理論出現,應用研究者們爭相將其應用于自己的研究課題中,于是基于神經網絡、基于支持向量機、基于條件隨機域的某某研究就成為一個標準的論文題目。首先把某項理論應用于某個實際課題的研究工作應該說還是具有一定的創新性的,畢竟用一個新的思路、新的模型去觀察了一個舊的課題,HMM在語音識別上的成功應用就是一例。有人比喻說,理論工具仿佛是錘子,實際課題好比是釘子,一個新的錘子被打造出來,大家都借用過來砸一砸自己手頭的釘子,確屬常理。不過,需要注意的事,如果拿一個碩大無比的汽錘去砸一個纖細的大頭針就荒誕可笑了,不注意思考問題與理論的適配關系而盲目跟風的事情在學術界也是司空見慣,比如我們就曾用HMM試圖解決詞義消歧的問題,而每個多義詞的詞義跟它前后一兩個詞并沒有緊密的關系,因此詞義消歧貌似和詞性標注一樣屬于線性序列標注問題,其實是有根本差別的。
應用研究
我們是搞計算機的,計算機是一門應用科學,應用科學是由應用驅動的。時至今日,數學定理和物理學定律似乎已經被先哲們發現的差不多了,因此整個科學界中純粹搞理論研究的人越來越少,很多大學教授都和工業界有著密切的聯系,很多大企業也開辦企業研究院,這些導致應用科學的研究如火如荼。最近,國家863設立了一個"中文為核心的多語言信息處理"重點項目,總經費7000萬,這在多年前的大陸語言處理界完全是不可想象的。
應用驅動,也可以說是市場驅動。市場是一個精靈古怪的家伙,搞應用研究的人如果對市場的未來沒有一個基本準確地判斷,往往會導致選題上的偏差。二十年前,國內一些研究者開始研究漢字手寫輸入技術,開始人們覺得從鍵盤輸入漢字很困難,手寫輸入一定有前途,但是很快,拼音輸入法大面積普及,而且拼音輸入的速度遠比在手寫板上輸入漢字快得多,于是漢字手寫輸入套件根本賣不動,前景黯淡。有人開始猶豫,有人開始轉向搞印刷體漢字識別等,但忽然有一天,集成了手寫功能的商務通大量熱銷,人們忽然發現原來在手持設備上由于鍵盤太小,輸入不便,給手寫功能留下了很大的應用空間。一直專注于手寫識別的漢王公司也借著商務通的熱銷而把多年的科研成果成功地產業化了。再舉一個例子:5年前,我認為以圖像為輸入的圖像檢索沒有什么應用價值,問這些技術的倡導者,他們也只說能夠在數碼相冊中可以找到一些應用,但近來聽了微軟一些學者們的演講,他們提到可以用手機拍下一個植物的圖片,傳回服務器,在大量植物圖片庫中檢索,找到最相似的植物,并給出植物的名稱,特點等。哈哈,這對于我這個五谷不分的人來說實在是太有幫助了,可見對于一項技術是否有用實在要仔細思考,不要早下斷言。
技術和市場是一個互動的關系,有人認為技術嚴格地從用戶的現實需求出發,這個觀點總的來說沒有錯,但是忽視了技術創造需求的一面。大多數用戶往往并不了解技術發展到了什么程度,他們提不出需求來,這時技術專家們需要把技術和產品做出來給人們看,刺激、引領用戶的需求,比如數碼相機,5年前我想大多數用戶和我一樣并沒有淘汰膠卷相機的強烈要求,但當數碼相機進入市場后,人人都意識到:原來我需要這個東東。
在市場與技術的互動中,總的來說,還是市場在引導和拉動技術的發展。市場需要的是產品,產品往往集成了多項技術,因此一項被市場接受的產品能夠推動多項技術的進步。比如搜索引擎,它拉動了自然語言處理、并行計算、海量存儲設備、數據挖掘等等多項技術的發展。最近中國計算機學會設立了王選獎,在中國真正有市場眼光,能夠發明一項技術,拉動一個行業的計算機專家,王選是第一人。怎樣根據市場選擇研究方向,設計產品,調整技術形態,我在后面還有詳細闡述。
科學技術的力量
科學技術的力量是巨大的,愛因斯坦給出的公式E=M*C2,C是光速啊,質量乘以光速的平方,這是多么巨大的能量啊,愛因斯坦的理論直接導致了原子能的利用與開發。基因圖譜的發現以及后基因組時代對基因圖譜的深入分析必將為人類征服疾病提供一條嶄新的解決道路,通過對損壞的基因進行修復,將使無數患者得以康復,無數家庭重拾幸福。互聯網的發明,把全世界連為一體,過不了多久,石頭里也會嵌入芯片,在這個世界上有生命的、無生命的各種物質之間都可能進行通訊,人們的生活面貌已經徹底改變了。
當然,科學也是雙刃劍:原子彈爆炸了,核戰爭始終威脅著人類;在對基因組這套上帝給出生命密碼沒有全面理解以前,任何盲動都可能導致基因污染,以至于玩火自焚;互聯網上的虛擬生存讓人們感到更加孤獨。
怎樣做研究(二)
研究的層次
研究是分層次的,很多大科學家在晚年登上了最高層,比如錢學森在80年代倡導思維科學,他對整個科學技術體系進行了重新分類。在中國的大學里,分為一級學科,二級學科等,我就處在計算機科學技術一級學科下面的計算機應用技術二級學科下。二級學科的帶頭人稱為學科帶頭人,二級學科下面一個研究方向的帶頭人稱為學術帶頭人,我就被指定為學術帶頭人。
我的研究方向是信息檢索,信息檢索下面又有子方向,比如文本檢索、文本挖掘、跨語言檢索、跨媒體檢索等,子方向下面設立具體的科研課題,比如文本挖掘中的多文檔自動文摘課題,針對一項課題又有不同的解決辦法,基于事件抽取與集成的多文檔文摘就是利用一種具體的解決問題的方法。
總結來說,就是6個層級:
A. 一級學科
B. 二級學科
C. 研究方向
D. 子方向
E. 課題
F. 基于某種方法對課題進行的具體研究
君子思不出其位,我是學術帶頭人,因此主要在思考C類的問題,也就是和信息檢索相關的問題。一個學院的院長通常會思考A類的課題,學科帶頭人或者說是一個博士點的點長是要考慮B類問題的。一個人對相關的方向或學科有所了解,對自己的研究工作是很有好處的,只有看清了整體的學科面貌,才能知道自己處在那個位置上,自己未來的方向在哪里。我在讀博士以及在微軟做副研究員的時候,只看到E類問題,想到最多的是F類問題,因此你讓我提一個新方向,讓我對一項技術進行預測,我茫然無知。后來擔任院長助理,負責學院的成果轉化,需要了解學院里各個方向的發展狀態,使我的視野開闊了一些。盡管我凡事不求甚解,但是喜歡總結歸納,因此對信息檢索與其它學科的關系有了更多地認識,這對后來的選題很有幫助,特別是在應用研究方面,心里比較有底。
學科好比一棵大樹的樹根,研究方向如同樹干,具體的課題就是枝葉了。和學科中各個方向都相關的研究課題是最基礎的研究課題,比如在人工智能中,各類機器學習算法是圖像識別、語音識別和語言理解等各個方向都離不開的,機器學習技術提高一步,好比樹根抬高了一寸,各項應用技術也都跟著進步,因此越是基礎的研究,越會對業界產生較大較深遠的影響力。不過,基礎研究的突破比較難,而在某個應用課題上不考慮一般情況,只考慮具體需要,成功的可能性大。枝葉上的課題做多了,經過合并同類項,就會發現比較共性的基礎課題,比如我們在做問答系統、多文檔文摘、例句檢索等課題時發現復述(paraphrasing)是一個共性的問題,于是把復述單拿出來展開專門的研究,如此,可以越做越深。
學者的層次
研究有層次,學者也有層次,大致可以分為:
A. 大家(劍客):提出問題
B. 專家(俠客):解決問題
C. 學徒:修修補補
D. 抄襲者:抄來抄去
E. 搞偽科學的人:弄虛作假
A類是大家,站得高,看得遠,他們往往能夠前瞻性地提出某個學科領域中的若干重大問題,最著名的是希爾伯特的23個問題,對數學界影響深遠。提出問題其實也是解決問題的一種方式,只不過他們是在很高的層面解決問題,類似一個軟件系統分析員,他把一個復雜的工程問題分解為若干個有機聯系的子問題,然后宣布只要這幾個子問題解決了,整個大問題也就解決了。至于這幾個子問題到底怎樣解決,或者說相應的子系統到底怎樣開發,他就不管了。胡亂地提問題并不難,小孩子也會向大人提出各種各樣有趣的問題,有的大人也答不出來,問題的關鍵在于在適當的時候提出適合當前學術發展階段的關鍵性課題,這絕對不是一般人能夠做到的,這是需要具有對整個領域全面深入的理解才行的。
B類是專家,是在某個研究方向上有專長的人,他們沿著大家指出的方向探索前進,提出全新的方法體系來解決問題。比如在機器翻譯領域中,日本長尾真教授提出了基于實例的機器翻譯方法,從一個全新的視角看待機器翻譯問題。專家經驗豐富,能夠自由地駕馭課題,穩步地推動課題的進展。
C類是學徒,就是我們這些普通的研究人員了,這部分人的注意力在具體的課題上。學徒們還沒有宏大的視野,沒有捕捉全局戰略要點的本事,也還沒有在一個研究方向上提出原創性的解決之道,他們跟在拓荒者后面撿拾麥穗,他們負責對科學大廈修修補補。他們一會兒聽說了一個新的機器學習方法,趕緊在自己的課題上試一下;一會兒發現了一個以前忽略了的新的特征,立即想方設法把這個特征提取出來;一會兒為了參加一個技術評測,耐心地調一調系統參數;一會兒為了發表一篇論文構造出一個試驗來。我們每天的研究活動差不多都是在這樣進行的,很多時候在原地打轉轉。
我這樣描述學徒們的工作情景絲毫沒有貶低的意味,在達到專家的水平,證悟研究真諦以前,跌跌撞撞、渾渾沌沌是在所難免的。只要遵守誠信之道,不抄襲,不造假,點點滴滴的貢獻對科學界也是有幫助的。從更高的要求看,學徒的目標應該是成為專家,應該時常靜下心來想一想,自己的工作是否有價值,是否有新意,揣摩一下大家們、專家們到底是怎樣思考問題的,在不斷地反思與實踐中向上邁進。
D類學者根本算不上學者,他們為了評職稱等目的,對別人的論文進行抄襲拼湊,他們是思想的竊賊,對學術界毫無貢獻可言。
E類學者不僅僅是做賊了,他編造偽科學,毀壞科學界在公眾中的形象,他們是科學界的公敵。
以上的分類也只是為了討論的方便,在各類之間并沒有明確的界限,我只是依次談出我心中做學問的境界而已。
在人類已知的世界和未知的世界之間有一條動態邊界,科學家就站在這條邊界上,他們是挑戰未知世界的勇士,他們每向前邁出一步,就意味著整個人類的已知世界向前拓展了一步,由此足見科學工作的艱難和科學家的偉大。
研究又好比爬山,一座座山峰如同一個個研究領域,大家已登峰造極,一覽眾山小,把東南西北各條山路上的溝溝坎坎,把此山與他山之間的距離關系看得清清楚楚。隔行如隔山,隔行不隔道,在一個領域做到頂尖的學者已入化境,一通百通,你把另一個領域的問題講給他聽,他往往也能夠很快地抓到要害。專家已到半山腰,看不到山的全貌,但是他找到了一條通往山頂的道路,并一步一步地向上攀登著。學徒還沒有進入山門,他們一會兒仰望山頂,一會兒看看山腰,在山腳下繞來繞去找不到門徑,費力不少,卻并沒有縮短與山頂的距離。
怎樣做研究(三)
怎樣選題
前文曾提到科學研究的層次,并分了6個層級。此處所說的選題指的是從C到E三個層次上的選擇問題,即:C. 研究方向、D. 子方向、E. 課題。選擇研究方向是實驗室(Lab)主任們需要重點思考的事情,選擇子方向是研究小組(Group)的組長們需要重點思考的事情,選擇課題是研究生們需要重點思考的事情。
選擇太多,很容易讓人困惑,要想理出一個頭緒來,需要一些基本的原則。微軟的許峰雄來訪時談到了他選擇課題的三個標準:有足夠的興趣,能成為世界第一,能賺錢。(!)興趣,這個原則是非常重要的,我贊同,獲得國家最高科技獎的"黃土之父"劉東生院士是搞地球環境科學的,經常在野外作業,按常人推斷,這該是多么枯燥艱苦的工作啊,但他說:"枯燥?不!因為經常有新發現,其中的樂趣難以形容"。我堅信任何一個成功的科學家的直接工作動源都是興趣,而不是意志。(2)成為世界第一,不容易,但是應該作為一種判斷標準,如果某個領域已經非常成熟,很難有什么創新了,或者大牛云集,已經打破頭了,則應該有所回避。(3)賺錢,許峰雄是在工業研究院中工作,比較注重實用,因此他強調了"賺錢",我是在工科大學里工作,也比較偏重應用,因此是贊同"能賺錢"這個標準的。不過,"能賺錢"不等于立即賺錢,5年、10年,20年后能夠賺錢的研究課題都是值得關注的。
談談我選擇課題的一些體會:
1、 要有實際需求
一個課題必須有實際需求,可能是現實的需求,也可能是潛在的需求;可能是直接的需求,也可能是間接的需求,總之是的的確確被人們所需要的。據個反例,比如自動文摘,自動文摘是我的博士論文課題,但是實際應用需求始終不清楚,自動文摘的結果用于編輯出版,質量肯定無法保證,用于幫助人們快速瀏覽資料吧, Google提供的包含查詢詞的簡單的Snippet就起到了這個作用,因此,至今基于全文分析的單文檔自動文摘到底用到哪里,仍然不清楚,這方面的研究已經有50多年的歷史了,仍然是不死不活,總是找不到應用就無法得到政府和企業界的持續性支持,以往的付出成為雞肋。我覺得單自動文摘不是一個好課題,目前階段多文檔文摘,或者說對某個題目的自動綜述分析是非常好的題目。
2、 有較大的未知空間
以手寫體漢字識別為例,市場上已經大面積應用了,在研究上就不宜再展開。
3、 與自己以往的工作有關聯
如果你覺得自己的研究領域太窄,或者競爭對手太多,或者自己缺乏興趣,則可以適當擴展研究方向,但最好是相關性地擴展,比如從自然語言處理(NLP)擴展到信息檢索(IR),IR要用到NLP的技術,這種擴展是從底層技術到應用系統的擴展,很自然。再比如從圖片檢索擴展到視頻檢索,只是處理對象有變化,很多原有的技術優勢仍然能夠發揮。如果跳躍性太大,比如搞NLP,忽然發現做數據挖掘有前途,于是單純地轉向數據庫中數據挖掘,和文本處理完全脫節,這種做法一方面無法發揮既有的技術積累,另一方面也讓同行感覺你不夠專注,不容易得到認可。最要命的是有的人根本就沒有自己的方向,什么課題都敢接,這樣的人可以一時間讓人覺得風風火火,經費也很充足,但過不了多久就會摔落下去,因為缺乏積累,學術形象不清,公雞下蛋,干了自己不擅長的事情,在學術圈還怎么混?
4、 有可能得到國家的支持
對于資深學者,他選定一個課題后,可以寫出立項建議,去說服政府或軍方支持他的工作,從而填補國家空白,成為國內這個方向的先驅。哈工大的楊孝宗老師借鑒 CMU在wearable computing方面的研究成果,在國內率先提出穿戴計算機的概念,堅持多年,就獲得了軍方的認可。對于剛出道的年輕人,無力直接影響政府,那只有自己預先判定一個幾年后可能成為熱點的方向,先走一步,做出一些成績來,等到大氣候適宜的時候,由于他已經取得了一定的成果,也有可能被認可為這個領域的先行者,得到國家的支持。
課題的類型
對一個課題的類型要有一個判斷,是研究型的還是開發型的,如果是研究型的,要組織博士生們來攻關,鼓勵大家大膽嘗試,提出創見;如果是開發型的,要更多地召集碩士生們來做,強調利用一切現有的技術手段把技術或系統做到實用可靠。這兩者要分的比較清楚,既不能通過各種打補丁的方法,或者說一大堆小技巧來對付研究型的課題,因為那樣是做不出突破性進展的,也不能在開發類課題上總是異想天開,嘗試還很不成熟的技術。
如果是研究型課題,還要區別是基礎研究還是應用研究,基礎研究的結果不能直接被用戶使用,類似重工業,應用研究的結果最終用戶直接就能夠用上,類似輕工業。對于基礎研究,可以拋開具體應用的約束,專注于一些科學原理技術原理的突破。對于應用研究,則需要考慮用戶的需求。
課題還有長期(long term)和短期(short term)之分,長期研究的課題往往難度大,研究結果難以預料,短期項目則比較好預測,可以速戰速決。
怎樣做研究(四)
在一個具體的題目上作研究,應該遵從怎樣的程序呢?我覺得可以概括為"螺旋式深入",也就是在"閱讀","思考","實驗","寫作",再閱讀。。。這四個階段的時間分配可以根據實際情況靈活調整,剛進入課題的研究生閱讀調研花費的時間要多一些,而在一個課題上已經開展了一兩年工作的人則可能增量式地閱讀資料,閱讀時間自然比起步時少一些。專門用于思考、設計、推演的時間可能并不多,但思考是滲透在其它三個階段中不斷進行的,因此總的思考時間并不少。實驗中編程的時間應該盡可能短,用更多的時間進行實驗數據的分析。寫作是常常被中國的研究生忽略的環節,寫作的時間要足夠長。收集資料,了解別人的工作,找出問題所在,針對性地提出自己的創意,用實驗驗證自己創意的正確性,總結歸納,撰寫論文,發現新的問題,再收集資料,如此反復,這是研究活動的大致流程。
怎樣閱讀資料
收集資料、閱讀資料是從事研究工作的第一步,但是如何收集、閱讀資料卻很有學問,初學者如果沒有得到足夠的指導,常常走很多彎路。
1、 閱讀重要的論文
目前互聯網上的信息量太大了,對每一條信息的重要性、可靠性的判斷是一個人采集信息的關鍵環節。如果判斷一篇論文是否重要呢?GoogleScholar給出的引用數是一個有效指標,很多學者都引用的文章往往就是有價值的論文。有的同學覺得看中文論文容易,于是把自己能夠查到的中文論文一網打盡,反復閱讀,但是很多發表在三流刊物上為了評職晉級而炮制的論文完全沒有閱讀的價值,白白耽誤了時間。即使是英文論文,國外一樣有濫竽充數的文章,這樣的論文引用數肯定低,用引用數可能很容易地把這樣的論文淘汰掉。
計算機領域的頂級會議論文非常重要,在NLP領域有ACL,在IR領域有SIGIR,在機器翻譯領域有MT Summit,這些頂級會議的論文質量很高,內容很新,應該高度關注。期刊上的論文是一個作者或機構一個階段的研究成果的總結,通常質量較高,但由于審稿及編輯出版的周期很長,因此內容不夠新,適當關注即可。NLP領域的CL,機器翻譯中的MT,信息檢索領域的IP&M和JASIST等都是很好的期刊。進入一個領域,必須立即了解該領域有哪些頂級的國際會議和國際期刊。
2、以作者為線索理清脈絡
閱讀論文一定要注意論文的作者是誰,研究機構是哪里,以作者為線索理一理就會發現全世界搞你這個方向的也就那么幾個、十幾個研究機構、研究者,以后就跟蹤這些人的研究工作即可,還能夠發現該作者的研究工作的演進脈絡。如果拿到一篇文章就讀,讀完了也不知道作者是誰,時間長了,就會感到暈頭暈腦,不知道從哪個期刊或會議上就會冒出一篇相關文章來,讓你防不勝防。
3、 閱讀最新的論文
學術發展很快,要集中盡力閱讀近5年,特別是近3年的論文,對于5年前的論文,只看引用率最高的經典文章即可。
4、 抓住論文的要害
讀完一篇論文必須了解哪些關鍵內容呢?我覺得應該包括以下方面:作者為什么要做這項工作?要解決的是一個什么問題?作者在解決問題時遇到了怎樣的困難?為了解決他的困難他提出了什么樣的解決辦法?試驗結果是否可能真的證明他的方法好,數據是否充分,有沒有和別人的工作,別的方法進行對比?你認為他的方法是否新穎,你從中學到了什么?該方法有哪些不足,你是否立即有了新的改進方案?如果有立即記錄下來。帶著上述問題,抓住要點,做好記錄,一篇長文就會像庖丁解牛一樣轟然倒下。
5、 批判式閱讀
真理越辯越明,我們讀的是一篇學術論文,不是《圣經》,不能帶著崇敬的心理去閱讀,要像一個審稿人那樣帶著批判挑剔的心理閱讀論文,在閱讀中不斷地找出論文中的問題,選題上的,方法上的,實驗上的,表述上的,并不斷地通過積極獨立的思考給出自己認為見解。只有這樣,資料才能夠為你所用,而不會成為你的包袱。有的同學讀資料,越讀越喪失信心,發現別人做得太好了,自己的想法都被別人做完了,資料全讀完了,自己也準備換課題了,這是失敗的讀法。
中國的研究生要有信心,不要被國外所謂的名家嚇住。中國的科研水平在快速提高,科研人員的素質也在快速提高。一位美籍華裔企業家在一篇文章中寫道:"可不幸的是,除了很少頂尖學校的博士外,大部分博士所做的研究課題都是陳舊或者沒有意義的。"不知道頂尖高校的含義是什么,但是我覺得我們的研究生要對自己的國家有信心,對自己的學校有信心,對自己的倒是有信心,對自己有信心。只要我們掌握正確的研究方法,廣泛閱讀國外最新的研究成果,大膽嘗試自己人為正確的方法,充分釋放我們的聰明才智,我們就絲毫不用對國外的研究工作頂禮膜拜。在科學研究上,歐美人從內心里是瞧不起我們亞洲人,我們中國人的,以至于歐美歸來的學者們也以歐美為樣板來評估我們教育科研體制,只要和美國不一樣就是大錯特錯了,中國高校的教師們都是在誤人子弟。我奉勸每一位研究生建立不崇拜權威,不崇拜歐美,只服從真理的獨立思維模式,大膽質疑大膽批判,只有這樣才能不死于他人之言下,才能有活脫脫的自己。