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