作为一名合格的生信工作者,至少都要符合以下几个条件
-
熟练使用Linux
-
熟练使用高通量分析工具,如BWA, SAMtools等
-
至少熟练使用一门编程语言,C/C++, Python, Perl, Go
-
熟练使用一门统计工具且有着良好的统计素养,如R
-
生物学基础扎实
-
有自己对生物学问题的见解
这是我在生信技能树写了好多篇招聘工作发现一些共同点。学习Linux其实是理解一种哲学思想,分解任务各个击破,所以我写了
为什么生信入门一定要熟悉Linux
。 当你学会了Linux之后,那你就开始在命令行下使用Bwa, samtools这些已有的命令行工具, 这样子你已经可以走
标准化流程
了。
那么你该学习哪一门编程语言呢?那么给你一些条件语句,你判断一下
-
先看你实验室传统,他们用什么语言,你就用什么,刚开始的时候不要标新立异,不然出现了问题并且困扰你好几天的话,可能对你的自信心是巨大的打击。当然杀不死你的会让你更强大,也有可能进步飞快。
-
如果你是实验室里第一个折腾生信的学生,那么优先学Python。别跟我说Perl不Perl,目前网上资源最多的就是Python了,各种版本的入门文章还有漫画,要是太小白,还能看视频
如何“开始”学Python
-
在学会了第一门编程语言后,开始学习第二门,比如说Perl。编程语言都是解决问题的工具,每个工具都有其不同的使用范围,多学一门总是好的。并且学习N+1门的所需要的时间是学习N门的1/2。没事就学一门新的编程,回字有四种写法,Hello World可就多了去了。
假设你已经决定好用什么编程语言了,那么下一个问题就是该怎么学,是不是先买个十几本书,系统的了解一下这个编程语言的方方面面。
当然不是,难道你学习中文的时候,还得看各种语法,思考每一句用什么词最合适嘛?谁不是学会了几个最基本的结构,然后就开始去啃书,拿着本字典,看啥不会就去翻嘛?
因此,我推荐你去 http://rosalind.info 里面去刷题目,比如说我在学Go的时候做的一道题目”
Introduction to Protein Databases
“
蛋白质数据库中心UniProt提供了蛋白详细的注释,如功能描述,功能与结构,翻译后修饰。它还支持蛋白相似性搜索,分类分析和文献引用等。
已知给定一个uniprot id,可以通过链接 "http://www.uniprot.org/uniprot/uniprot_id.txt" 或 "http://www.uniprot.org/uniprot/uniprot_id" 获取关于该编号的详细描述。 通过编程的方式根据一个uniprot ID获取其参与的生物学进程(biological processes)
我使用Go的os.Args读取命令行参数中的编号,使用"net/http"获取响应, 使用"ioutil.ReadAll"获取响应中主体,返回字符数组。利用正则表达式进行解析,然后使用for循环提取出目标区段。
package main
import (
"net/http"
"fmt"
"os"
"log"
"io/ioutil"
"regexp"
)
func main(){
id := os.Args[1]
link := "http://www.uniprot.org/uniprot/" + id + ".txt"
resp, err := http.Get(link)
if err != nil{
log.Fatal(err)
}
content, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil{
log.Fatal(err)
}
re := regexp.MustCompile("P:(.*?);")
BP := re.FindAllStringSubmatch(string(content[:]),-1)
for i,n := 0, len(BP); i<n; i++{
fmt.Println(BP[i][1])
}
}
程序员面试的时候靠刷题,我们也算半个程序员了,算法题刷不了,生信题还可以考虑的