科研技能養(yǎng)成
科學研究是一個發(fā)現(xiàn)問題、解決問題的過程。國內(nèi)環(huán)境中,大多數(shù)情況下,你應該是單槍匹馬在戰(zhàn)斗,所以問題的發(fā)現(xiàn)基本只有一個途徑——看論文!在看了一大堆論文以后,找到一個問題,開始想辦法解決這個問題。解決問題的過程中,你會需要眾多技能來支撐起你快速前進的步伐,這些技能基本包括:編程、參數(shù)調(diào)整、做圖、寫作、排版。
在博士的路上,我沒有像很多大牛一樣一帆風順。經(jīng)歷了很長一段世間的嘗試、思考在嘗試迭代之后,才取得了一點點結果。但是這個過程讓我積累了一個完整的經(jīng)驗鏈條。
實現(xiàn)想法永遠要記?。海?!怎么快怎么來,不要在技術細節(jié)上糾結??!
我所在的領域需要編程來實現(xiàn)自己的想法。給出以下經(jīng)驗,以供后來者借鑒:
根據(jù)自己的需要使用高級語言。
C++, C++是一種介于高性能和使用方便之間的一種語言。它比C語言性能差一丁點,但是它寫起來比C語言簡單一點。相同的功能,可能Java要比C++花的時間要短一點,但是Java的性能會比C++要慢一點。 MATLAB,MATLAB可以用來實現(xiàn)一個簡單的算法,它已經(jīng)包含了大量的函數(shù),你可以很容易的實現(xiàn)自己的算法。 Python,Python在Linux下用的時候要方便一點,Windows上時不時的給你點問題,在Linux下就好多了。Python也有好多庫可以用。 使用現(xiàn)有的代碼比如你要對圖像做個高斯濾波,不要花時間自己實現(xiàn)高斯濾波!調(diào)用現(xiàn)有的函數(shù)!
調(diào)整參數(shù)如果你用C++,不要每調(diào)整一次參數(shù),都編譯后再測試效果。比較好的辦法是將你的參數(shù)作為命令行參數(shù)傳入到的你程序里,參數(shù)處理用Boost的program option就行了。
編譯好以后,如果你用的是Windows,寫一個bat文件,列舉出你想用的參數(shù),然后依次測試。注意:不要使用命令行就測試了,這樣不要記錄下你的測試參數(shù),多做幾次就搞混了。
例如:
@echo off
me.exe --lamba 1 --result 1
me.exe --lamba 2 --result 2
me.exe --lamba 3 --result 3
me.exe --lamba 4 --result 4
或者
@echo off
for /l %%k in (1,1,4) do (
me.exe --lambda %%k --result %%k
)
推薦使用第二種方式,因為這種方式犯錯誤的概率比較小。第一種方式,你可能復制第一條然后將1改成你所需要的2,3,4。因為每次你要改兩個地方,說不定大腦一抽筋,或者被某個煩人的小伙伴打斷一下,就給搞忘記了,最終你的結果也就是錯誤的了。
做圖有兩種圖需:一種是模型圖,一種是實驗效果圖。
模型圖就是用來說明你的算法或者模型的,在論文里放點模型圖讓人可以更好的理解你的工作。比如流程圖,這里所說的可能不是一般意義的流程圖。你的流程圖中可以包含一個例子以更形象的說明算法過程。
例如下面這種圖:
上面的圖一般用TikZ來畫。這個圖估計要花差不多一個星期的時間能調(diào)整完。自己畫模型圖的時候,應該先在草紙上畫個簡單的示意圖,示意圖要多迭代兩遍再去著手用TikZ畫圖。
還有一種是實驗效果圖,比如一般的線圖、餅圖、柱狀圖等。
線圖的話,一般建議用MATLAB來畫比較好。
餅圖,柱狀圖這些可以考慮用TikZ來畫。
當然,TikZ不是一個簡單的技能,開始入門需要大約三五天的時間,要有心理準備。話又說回來,要想牛逼,總要付出點勞動代價。
寫作這是個痛苦的話題,英文寫作的確讓人頭疼,看著別人的論文各種高大上的句子,自己著實心理難受啊!咋辦呢?
寫第一篇文章的時候(不一定被接受),先從自己的算法入手,描述清楚算法就行了,不要多么牛逼的復合句式,只要無歧義就好。
至于introduction,第一篇文章,基本是改進別人現(xiàn)有的算法,一般不會有太多的創(chuàng)新,都是基于現(xiàn)有的問題的,所以寫的時候就從問題入手,剖析出現(xiàn)有算法地問題,然后來引出自己的解決方案,告訴人家自己取得了一個什么結果。在寫第一遍的時候千萬不要追求什么高級表達,這只會浪費時間,應該先把精力放到邏輯表達上。第一遍寫完以后,要改第二遍,第二遍的時候要不斷的問自己,這個句子表達的是否精確啊,這個問題是否描述清楚了呀,有沒有可能哪些地方忘記寫進去了呀等等,然后一一補充完整。弄完第二遍的時候,你基本上就不愿意再看這篇文章了,覺得都麻木了,咋辦呢?如果你有好友,或者說你們實驗室的氣氛還可以,可以找同學看看,然后讓他盡可能的發(fā)問,你就會在思考和回答這些問題的時候逐漸將自己的算法理解到更高的一個層次,再調(diào)整的時候就更加清晰了。如果你的同學們都只關心玩,不關心科研,盡管這是個悲劇的現(xiàn)象,但是你不要抱怨,抱怨也幫不了你。這種情況下,自己先出去走走,或者看看其他的問題,換換大腦。等個兩三天再反過頭來看這篇論文,再改改,這個時候千萬別輕易改動什么東西,一定要百分百確定的時候再改,而且一定要備份!要知道換完大腦的你可跟幾天前不一樣了,有些細節(jié)的東西你可能已經(jīng)忘記了。
改完三遍以后,你需要將論文給你的導師看看!如果你的導師不看,直接投就好了,如果他要看,最好追著他看,三天兩頭問咋樣了呀之類的。如果幾天以后,他叫你去跟你說他的意見,你也別太在乎,畢竟現(xiàn)在的導師基本沒有人會真正的時間在論文的內(nèi)容上。等拿回論文,象征性的改改,差不多自己投就行了。要知道你可是三思而后行的?。∷圆挥门?,投就是了。
排版說到排版,這可真是個技術活!在寫作的時候千萬別糾結排版哈!只有在投稿之前才搞下排版。寫作的時候,如果公式不是很多,最好先用word寫。如果公式實在是麻煩的多,那你就用Latex吧,不過一定要在寫之前慎重!
文章最好先用word編輯一些文字性的描述。因為word有review功能,別人可以用這個功能在這上面改動。Latex適合最終的排版。
最終排版的時候,最重要的是你的圖,最好用矢量圖,比如用MATLAB,把圖另存成pdf來添加到latex中,而不是png這類格式,更不要QQ截屏??!TikZ就是latex的一部分,直接搞成pdf就行了。
圖例插入latex的時候,也一定要注意,多余的空白實在是煩人,latex有切掉空白功能。你也可以用軟件先處理一下生成的pdf文件,我一般用pdfcrop。
latex的安裝包我強烈推薦使用texlive?。?!其他的包都不全!??!
最后祝君好運