论文学习笔记(20210726)

科研人员如何学习编程

科研人员如何高效地搭建、使用各种各样的科学软件
(文章来源:Best Practices for Scientific Computing)

1 当前问题

(1) 目前大部分科研工作者缺乏软件开发的基础知识,包括:编写可维护的代码,使用版本控制,issue trackers,code review,unit testing以及task automation (不会翻译)

(2) 缺乏软件可靠性的评估

(3) 软件复用时存在的一些问题

2 建议练习

2.1 编程面对对象是人,而不是电脑

(1) A program should not require its readers to hold more than a handful of facts in memory at once
(翻译不好:意思就是人类记忆一次只能记住几个条目,每个条目是一个事实或者一系列事实集合,因此编程时应该限制完成一项任务时的项目数—>将项目拆解为简单的函数、子项目)
(2) 变量命名前后一致,可区分而且有意义
(3) 编程风格前后一致

2.2 Let the computer do the work

(1) 让计算机来执行重复性的操作
(2) 把最近的代码保存起来以便日后复用
(3) 使用 build tool 来执行命令流
脚本 —> 相同流程下使用脚本:(GNU Make工具)
指定中间数据、结果数据之间的相互依赖关系以及与程序之间的关系

2.3 增量式的改变 (Make incremental changes)

(1) 多步进行工作,频繁反馈、修正
(2) 使用版本控制 (use a version control system)
(3) 将所有手动创作的内容放入版本控制中
一些 Version Control System 软件 (Git, Subversion, Mercurial)

2.4 不要重复自己的工作(其他人的也不行)

(1) Every piece of data must have a single authoritative representation in the system(不会翻译:含义参考: link,物理常量只精确定义一次,整个代码只使用这一个值,原始数据也有其固定格式, 地理位置有其独一无二的ID)
(2) 代码模块化,不要复制粘贴
(3) 代码复用,不要重写
寻找已建立的库、包优先于为已经有解决的问题自己编写代码

2.5 查错

(1) 代码中增加标记,判断是否正确运行
(2) 使用现成的单元测试库.
(3) Turn bugs into test cases
(4) 使用 symbolic debugger

2.6 确保软件能正确工作后再去优化

(1) 使用profiler来识别bottlenecks
(2) 使用你会用的最高级别的语言来写代码

2.7 记录软件的设计及其目的,而非机制

(1) 记录接口及其设计原因,而不是如何执行(在函数代码开头记录其用处及输入输出而不是解释每句代码的功能)
(2) 代码重构优先于解释其用法
(3) 将文档内置于软件中

2.8 合作

(1) Use pre-merge code reviews
(2) Use pair programming when bringing someone new up to speed and when tackling particularly tricky problems
(3) Use an issue tracking tool

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值