一、学过的编程语言
我大学专业是生物信息学,学院给我们安排了很多编程语言课,首先回顾一下我所学过的编程语言。
大一下学了C++
编程语言与Linux
操作系统的一些基本操作,大二上学了数据结构与算法(C++版)
,把大一下学的C++学习的更加深入了一些。
大二下有生物统计这门课,所以就选修了R语言编程
,在做项目中把R语言熟悉了一遍,大二下还选修了数据库原理这门课,学习了SQL
语言。
大三上选修了Python
这门课,系统地学习了Python的语法与面向对象的思想以及自己实现一个类;此外我们还有一门必修课,叫生物信息学原理,需要动手编写代码实现全局序列比对、局部序列不对、mRNA序列翻译成蛋白序列等任务,我就用C++
做了这些任务,相当于把C++
复习了一遍。
大三下选修了“基于Linux的web开发”这门课,学习了HTML
、CSS
、PHP
、JavaScript
等前端后端语言,此外大三下我还选修了“R在下一代测序中的应用”这门课,主要是用R
语言中的systemPipeR
这个包来做RNA-seq
、ChIP-seq
等组学分析。
目前大四上,正在学习Java
,可以说学习的编程语言算多的了。
一个最深的感触就是,编程语言学多了以后就会有一种融会贯通的感觉,并且也更能理解面向对象编程与面向过程编程之间的差别了;此外我还可以用Python、Shell与R语言来做一些项目中遇到的小问题,就是当我遇到一个问题的时候(可能是文本匹配,数字处理等),我会下意识去想这个问题怎么用Python实现,怎么用R实现,目前也用Python写了一些比较实用的函数,学会了怎么在代码中引入自己写的模块(函数)。
二、学习方法
1 练
学编程最主要、最快速的方法就是动手写代码。
我会在老师每节课讲完以后先过一遍老师的课件,先看懂理论部分,然后看书上的代码,尽量看懂,如果我觉得这一个代码我看不懂或者我想验证一下我的猜想,我就会打开IDE来练习,多次调试代码,直到自己搞懂了这部分代码。
2 在实战中学习
回顾一下我所学过的编程语言,我发现我所学习的每一门语言都在不同的课程上进行了实战使用。
- 学习了
R语言
,做生物统计项目的时候就用了R语言
,并且大三下学习的“R在下一代测序中的应用”这门课中也使用了R语言
; - 学习了
C++
,在学数据结构
的时候就使用C++
动手编写了队列、栈、二叉树等数据结构与排序等算法,在学习生物信息学原理的时候又使用C++
编写了序列比对等程序; - 学习了
Linux(Shell)
,在与导师做项目的时候(需要在Linux
服务器上跑程序)就把Shell
给仔细地温习了一遍,积累了很多可以方便自己学习和项目的经验; - 学习了
Python
,就在做项目的时候用到了Python
(做的项目是深度学习),并且一直使用至今,现在已经可以用Python
来解决日常生活中的一点需求了。
三、经验和教训
经验真的是很多了,这里就说一下我最受用的三点经验吧
1 分步调试好再运行
分步调试的意思是指,当你要写一个程序完成一个特定的任务的时候,先想清楚这个任务可以分成几个大的步骤,当用编程语言实现每一个步骤的时候,要仔细的调试好每一个步骤,保证每一个步骤运行起来没有bug,得到的结果也是自己期望的,而不是一气呵成写完左右的步骤,最后一运行全是bug。
我的一个编程习惯:当我想测试一个想法的时候,比如读取某个文件绘制一个散点图(绘制散点图只是一个大任务中的一小步)我就会打开jupyter notebook
来一步一步地运行绘图代码,直到这个代码没有问题了,我才会把这部分代码放到我的主文件中。
2 调试经验
通过输出语句定位报错代码。当运行程序出错的时候,如果不能通过报错信息找到错误的地方,就可以在程序的不同地方(你认为可能出错的地方)加入几个输出语句,如果某条语句正确输出了而后一条语句没有输出,那可以确定是这条语句的前面出了错误,通过这样不断地加入输出语句就可以来缩小报错代码的范围,直至找到它!
3 编程经验
要有模块化思想!
具体来说,就是当遇到一个任务的时候,要学会将这个任务拆分成几个不同的、独立的但又互相连接的子任务,然后按照子任务的逻辑顺序挨个实现这些子任务。
其实要做到这一点很不容易,需要从整体的大框架上去思考自己的任务,也许你的代码要经历好多次修改才可以变得高度结构化,不过这是必经之路,只有反复审视并优化自己的代码,才能够写出简洁、模块化程度高的代码。
End
以上是我自己学习编程3年来的一点愚见,以后再思考出其他经验和教训后再来补充。