作為本科學生物,後來轉行生物信息的人,經常會被人問起,為啥學習生物信息了呢?這背後通常會帶著一些困惑,生物信息分析好不好學?
我讀書的時候,實驗室純計算機出身的人員只佔很小比例,更多的是大學期間學生物的;特別的,有個做的挺好的師兄,本科是商科出身。從這來看,像我這樣本科學生物轉行生物信息還不算是有跨度的。這也從一個側面說明,專業背景不是能否學好生信的決定因素。
想想自己大學開始自學生信的時候,可以說是一頭霧水,只知道先學習編程,查了查資料,是要學習 perl語言,但是不知道要在什麼地方寫,怎麼去運行。費了些勁,在windows上安裝好perl,寫個文本文件,改下後綴,發現文件的圖標變成了perl的圖標,雙擊就可以運行了,不會寫命令行參數,不會輸出重定向,一種傻呵呵的體驗。
後來接觸了Linux系統,體驗到在終端輸入命令的快意,才找到了編程的感覺。不過,深深印在腦海裡的還是作為一個生信小白的時候,寫一個程序不知道在哪寫,在哪運行。看過不少的教程都默認學習者會打開終端,會使用終端,會在終端運行命令。而我卻是個例外,什麼都不會。程序可以照著教程寫下來,卻不知道怎麼運行。所以在我後來寫python教程的時候(後臺回復 python 可獲取),第一部分就是介紹程序在哪兒寫,在哪兒運行,怎麼運行。(最開始學習perl,在研一時在QQ群一個同一大學學長的忽悠下,嘗試了下python,那時有些編程基礎,寒假在家看了遍《python簡明教程》就可以寫了,以後也就習慣了這個語言)。
我個人是個理解能力比較差的,尤其是在接觸新的領域時,閱讀不少教程,總覺得這些教程都是給有些基礎的人寫的,自己去學習時,需要多方嘗試,多多綜合,才能找到門路。為了方便自己學習,也為了記述學習過程,就開始寫博客去記錄,力爭從一個小白的視角、從最基礎的角度去寫作,記述哪怕是最簡單的一步操作,一個錯誤,提供一個近乎人人可以直接上手的教程 (比如虛擬系統Docker的使用教程和任務流控制管理的Airflow教程,這些文章被轉載後,在同一平臺相比於同類的教程閱讀量多了10倍,我想這正是因為簡單、可操作,為初學者接觸這些工具提供了最大的便利)。
在初步知道程序語言怎麼運行並能成功運行完示例後,就要系統地讀一本簡明教程;簡明的教程不多見,因為一般的教程都涵蓋的面比較廣,而我們初期只需要關注最基本的就好 (所以我提取了我個人認為比較重要的基礎內容,形成教程),可以找本經典書,請身邊朋友劃下重點,先從頭到尾讀一遍,不管理解多少,然後再讀一遍。讀不下去,就抄寫一遍。最好的自學方式就是守住一本教材,一遍一遍地去讀去熟悉,每看一遍都會有一些了解,從陌生到熟悉,慢慢就串起來了。然後就開始自己去寫代碼,代碼就是我們思想的體現;我在教人寫代碼時,總會讓他先描述下如果沒有程序,我們自己是如何一步步的手動處理這個問題的,模擬的是程序運行的過程。理清一遍思路之後,怎麼想的就怎麼寫,只要你敢寫,就成功了。
當然這個時候一般會遇到初學者經常犯的錯誤,寫完代碼,覺得自己寫的很對,但運行時卻總是提示錯誤。絕大多數情況下,錯誤是我們自己寫作的錯誤;起碼在最開始時,要相信是自己的錯誤,不是程序語言設計的錯誤。錯誤的種類就這麼幾種,比如引號未配對、縮進不對、少了空格、文件名不對、變量名字不一致等。這時需仔細看屏幕提示的錯誤信息,在提示的錯誤行附近反覆去查看。在之前的python教程和後續的文章中,都有或會提到經常出現的錯誤和解決辦法。
能讓程序提示的錯誤都算不上大的錯誤,而程序運行成功,不等同於程序的邏輯是對的,獲得的結果是對的。程序是我們設計的,多數情況,我們對程序的輸出結果是可以預估和判斷的,不符合預期的結果是我們最應該慎重對待的。
在能獨立寫作程序後,一方面是學以致用,在解決問題中逐步學習;這時谷歌是你最好的幫手,把你遇到的錯誤或想解決的問題的關鍵字提取出,一鍵搜索,可以幫你解決大部分問題。另一方面,則是去學習別人的代碼、學習初學時跳過的內容,利用社區中提供的優秀的模塊或包來簡化、加速自己的操作。入了門,就不需要像剛開始時,什麼操作都自己去寫了,俗語叫「自己造輪子」;可以用很多經驗更豐富的開發人員做好的輪子解決我們的問題。
關於學習周期,如果能靜下心去學習的話,1個月的時間是足夠的。如果不時還能有人給你點播,2-3周就差不多了。關鍵的關鍵是去背、去抄,書讀百遍其義自見。
生信寶典至今除了寫文章,也能提供些幫助。
程序學習心得生物信息之程序學習
Linux 學習Linux學習-文件和目錄
Linux學習-文件操作
Linux學習 - 文件內容操作(1)
Linux學習 - 管道、標準輸入輸出
Linux學習-常見錯誤和快捷操作
Linux學習-環境變量和可執行屬性
Linux學習-文件排序和FASTA文件操作
Linux伺服器數據定期同步和備份方式
查看伺服器配置信息
ssh免密碼登錄遠程伺服器
R繪圖學習R語言學習 - 入門環境Rstudio
R語言學習 - 入門環境Rstudio
R語言學習 - 熱圖繪製 (heatmap)
R語言學習 - 基礎概念和矩陣操作
R語言學習 - 熱圖美化
R語言學習 - 熱圖簡化
Python學習Pandas,讓Python像R一樣處理數據,但快
Python學習極簡教程 (一)
Python學習教程(二)
Python學習教程(三)
Python學習教程 (四)
Python學習教程(五)
Python學習教程 (六)
生信傻瓜生信寶典之傻瓜式 (一) 如何提取指定位置的基因組序列
生信寶典之傻瓜式 (二) 如何快速查找指定基因的調控網絡
生信寶典之傻瓜式 (三) 我的基因在哪裡發光 - 如何查找基因在發表研究中的表達
生信人寫程序生信人寫程序1. Perl語言模板及配置
生信人寫程序2. Editplus添加Perl, Shell, R, markdown模板和語法高亮
NGS軟體測序數據可視化 (一)
測序數據可視化 (二)- IGV
測序數據可視化 (三) - UCSC genomebrowser
測序數據可視化 (四)- Epigenomebrowser
Cytoscape教程(一)
RepeatMasker安裝和使用
Rfam 12.0+本地使用 (最新版教程)
測序文章數據上傳找哪裡
輕鬆繪製各種Venn圖
ETE構建、繪製進化樹
分子對接來一場蛋白和小分子的風花雪月
不是原配也可以-對接非原生配體
簡單可視化-送你一雙發現美的眼睛
你需要知道的那些前奏
其它用了Docker,媽媽再也不擔心我的軟體安裝了 - 基礎篇
參考文獻中雜誌名字格式混亂問題一次解決