科研实验室-科学编程箴言

上传人:1818****572 文档编号:121947309 上传时间:2020-02-28 格式:PPTX 页数:15 大小:84.60KB
返回 下载 相关 举报
科研实验室-科学编程箴言_第1页
第1页 / 共15页
科研实验室-科学编程箴言_第2页
第2页 / 共15页
科研实验室-科学编程箴言_第3页
第3页 / 共15页
科研实验室-科学编程箴言_第4页
第4页 / 共15页
科研实验室-科学编程箴言_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《科研实验室-科学编程箴言》由会员分享,可在线阅读,更多相关《科研实验室-科学编程箴言(15页珍藏版)》请在金锄头文库上搜索。

1、1 title 科学编程箴言 2 title 工程编程VS科研编程 3 title 工程编程VS科研编程 4 title 前言 规范的格式是入门的基础 任何编程需要有开阔的思维 严谨的作风 持久的耐心 比尔盖茨说 他招人的时候宁愿找一个学物理的 而不是学编程的 正确编程不仅要思维开阔还需要恒心 一旦你面对某个问题 你必须深入进去 达到一般人达不到的高度 科研编程要求绝对准确 因此必须坚持模块化编码原则 甚至为了确保准确性可以牺牲一定效率 编程技巧不是科研编程的关键 但是大众化的编程技巧需要掌握 科研编程要求尽可能明白所有关键模块的原理 而不是简单的拿来主义 需要反复揣摩细节 最好的学习方法 就

2、是认真阅读一个被行业广泛认可的文章及其程序 关键词 成对编码原则 模块化编码原则 60行代码原则 代码规范化原则 最小编程原则 完全编程原则 5 title 行数和列数的限制 1 1一个函数的长度不应该超过60行当函数长度超过60行后 应该将内部一些复杂的逻辑提炼出来 形成新的函数 然后调用之 微型重构工作也应该无处不在 而不是等项目完成后再来重构 1 2每行代码长度建议不超过80字符建议每一行代码的长度超过80字符时做折行处理 处理时请以结构清晰为原则 可以设置编辑器提醒 确保上述原则 1 3每个类原则上不超过600行 不强制 一个类不应该将很多复杂的逻辑揉合到一起来实现 我们约定当文件超过

3、600行时 要考虑将这个文件进行拆分 可以使用协议方法来分离功能代码 如果逻辑过于复杂 则应该考虑从设计上将一些内部可以独立的逻辑提炼出来 形成新的类 6 title 成对编码原则 2 2成对内存分配与释放当你写一个内存分配函数的时候 马上接写一个语句释放这块内存 然后你再在中间插上你要用这个内存作什么 这是一个正确的快速的编程方法 绝对避免在程序中开辟内存 并将该内存返回上层函数 注意 代码不仅要格式规范还要注释清楚 而且要把你的设计思路尽量写清楚 让人能够轻易读懂注释格式是非常重要的 真正要做一个有价值的程序 开发程序的思维是很重要的 这种思维就体现在代码的规范及规范的注释上面 7 tit

4、le 模块化编码原则及调试 所有的程序都是调试出来的 而不是写出来的 怎么调试就是解决问题的思路 也是创新的源泉 有的同学的调试思路就是 能够运行成功就算是调试成功 这是大错特错 是还没入门的表现 相对语法错误 逻辑错误是极难发现的 逻辑错误 意味着编程错误 意味着好的点子没有正确实现 导致很多好点子被庸人耽误了 C C 语言有着严格的语法规则 逻辑错误往往意味着语法错误 因此 如果程序能够编译运行 的确是一个不小的进展 即便如此 也根本无法避免逻辑错误 对于Python等高级语言而言 语法规则不再复杂 语法出错几率大大减小 但这也导致发现逻辑错误的机会大大减少 因此 仅仅是编译通过是绝对不行

5、的 要做好科研 要成为一个高级的程序员 就必须通过调试这一关 如果不懂调试就永远都成不了高手 调试要花一个程序员更多的时间和精力 8 title 模块化编码原则及调试 程序调试的核心在于逻辑调试 而逻辑调试的核心在于模块化编程 模块化编程的核心在于分而治之 模块拆分 一个易读的函数或者模块的长度不应该超过60行 绝对不应该超过100行 确保任何函数或者模块可单独调试 确保模块独立性 保证函数或者模块可单独调试 可以大大简化调试难度 以基于梯度的下降算法为例 其基本更新公式是xt xt alpha dir 9 title 模块化编码原则及调试 可以进行如下模块化编程设计 C ClassGradD

6、escent Public Variablelist Private Variablelist Public vectorcomputeGrad vectorxt additionalvariable computegradientoffvectorcomputeDir vectorxt additionalvariable computesearchdirectionfloatcomputeObj vectorxt additionalvariable computeobjectivevalueffloatlineSearch vectorxt additionalvariable find

7、agoodstepsizealphavoidmainGradDescent vectorxt vectordir floatalpha letxt xt alphadir 上面设计中 每个独立可以单独进行调试 甚至可以委托其他人进行调试 在写程序的时候 任何一个部分都要调试 这样就能缩小调试的规模 10 title 模块化编码原则及调试 编程小技巧 函数对齐变量对齐注释对齐成对编程等号前后需空格inta 3 函数或者变量定义时 类型名长的放在前面 类型名短的放在后面 方便对齐 例如vector比float长 因此放在前面 11 title 模块化编码原则及调试 模块化调试技巧 原因功能 输入

8、输出 预期输出调试方案 单元化 可能出错在什么地方 经验 attention 12 title 草稿撰写与科研编程 在科研编程中 草稿编写极为重要 是正确编程和创新的前提 有草稿才能做到 按图索骥 有案可查 方便代码检查和调试 有的同学做科研完全就是乱试 各种调参 各种试模块 完全不从原理上进行斟酌 成败全靠运气 甚至宁愿几个月瞎猫撞死老鼠 也不愿意认真打磨草稿 这是极其不对的 切忌毫无目的的乱试 正确的流程一定是先完成草稿 与导师进行沟通 反复打磨方案 确定方案后 先完成总体框架 然后进行模块化设计 编写伪代码并设计调试方案 模块化设计中 有必要确定关键模块 一般涉及论文关键创新点 并集中进

9、行攻关 编程时 变量名称和函数名称尽量去草稿保持一致 方便他人阅读和专家调试 13 title 面向对象编程注意事项 将功能对象化 而不是简单的函数来实现 这是c 等面向对象编程最重要的特点 这个思想其实很简单 每个函数都是一个封闭的模块 都有自己的变量 同时它又需要用到别的变量和函数 而这些函数可能是某个类所具有的 可以直接使用 那么此时就可以将这个类继承下来 既能够重复利用资源 减少工作量 也能够保证功能的独立性 在面向对象编程的方法中 一直考虑继承是一种封闭的思维方法 正确的方法是用对象接口的方法 真正的面向对象的方法是提供一种实现的接口 何时对象化 首先 如果一个功能必须是同时使用的

10、几个部分同时使用该功能 那么就要对该功能对象化 如果这些功能是串行的 那就没必要对象化 不是所有的东西都要对象化 有的功能用函数代替可能更简单 更快捷 总体原则是 如果需要对象化某个功能 一定要使这个功能的价值最大化 14 title 面向对象编程注意事项 类里面的变量是不放到函数里面去的 但是函数可以使用他们 也就相当于可将函数内部的几个参数先放到一起 调用的时候不再调用参数 也不用传递这些参数 做对象化时的一个准则是 针对不同的应用去设计程序 而不是针对一种所谓的虚拟模型去设计一个对象 也就是说 不要在程序设计的时候搞的大而全 这没有一点好处 将问题的规模缩小 更容易控制程序 编写函数时 先写真正的函数 再取函数的头和注释放到头文件中做函数的原型 一定要去除所有的编译警告 这样会使程序能够很好的运行 在面向对象编程中 程序流程图在实现某个功能 函数 时依然显得很重要 15 title 谢谢

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 实验设计

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号