专栏名称: 生信媛
生信媛,从1人分享,到8人同行。坚持分享生信入门方法与课程,持续记录生信相关的分析pipeline, python和R在生物信息学中的利用。内容涵盖服务器使用、基因组转录组分析以及群体遗传。
目录
相关文章推荐
51好读  ›  专栏  ›  生信媛

入门生信一定要学的一门编程语言,你觉得是啥

生信媛  · 公众号  · 生物  · 2018-03-28 09:29

正文

请到「今天看啥」查看全文


作为一名合格的生信工作者,至少都要符合以下几个条件

  • 熟练使用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循环提取出目标区段。

  1. package main

  2. import (

  3. "net/http"

  4. "fmt"

  5. "os"

  6. "log"

  7. "io/ioutil"

  8. "regexp"

  9. )

  10. func main(){

  11. id := os.Args[1]

  12. link := "http://www.uniprot.org/uniprot/" + id + ".txt"

  13. resp, err := http.Get(link)

  14. if err != nil{

  15. log.Fatal(err)

  16. }

  17. content, err := ioutil.ReadAll(resp.Body)

  18. resp.Body.Close()

  19. if err != nil{

  20. log.Fatal(err)

  21. }

  22. re := regexp.MustCompile("P:(.*?);")

  23. BP := re.FindAllStringSubmatch(string(content[:]),-1)

  24. for i,:= 0, len(BP); i<n; i++{

  25. fmt.Println(BP[i][1])

  26. }

  27. }

程序员面试的时候靠刷题,我们也算半个程序员了,算法题刷不了,生信题还可以考虑的







请到「今天看啥」查看全文