后记

王伟冰

首先,我为什么要写《高效编程十八式》。其实就是想把自己编程过程中学到的、领悟到的东西整理整理,发出来大家讨论讨论。我不是计算机专业的学生,我喜欢编程,但是在我所在的学院里像我这样的人并不多。而且我这个人交际面不广,也没有认识多少其它院系的人。所以大学里的很多时候我都是一个人在学,看编程的书,做一些自己喜欢的小项目。我不知道我现在到底属于什么水平,因为没有人可以跟我一起讨论或参照。我越来越觉得不能再这样下去,所以就想到把我学到的东西写下来,跟大家一起分享讨论。初学者看了,可能会学到一些有用的东西;牛人看了,可以帮我指出其中的不足。

我认为编程的原则比具体的语言特性重要。语言可以有很多种,原则却是通用的。不过为了用实例来阐述这些原则,在文章里我还是介绍到了C++的不少语言特性。我尽量地避免太多地去讨论C++的语言特性,以免喧宾夺主,至于效果如何,我就不知道了。从所有文章来看,C++语言的各个方面我基本上都涉及到了,但是都只是讲了最简单的情况,没有深入讨论。所以要学C++的话,看我这个是没有用的,要看专门介绍C++的书才有用。

本来我打算所有的代码都用C++写,但是由于C++语言本身的缺陷,有些东西用C++写起来不太直观,所以有的地方会用C#写。之所以选择C#,一方面是因为我对它比较熟,另一方面是它的语法和C++很接近,所以能保持总体上大致统一的风格。我尽量地避免涉及到它与C++的不同之处,使这些C#代码看起来和C++的没有太大的差别,但是本质上,C#和C++还是很不同的。

我没有讲到设计模式,因为我认为设计原则比设计模式重要。采取什么模式取决于具体问题,但是原则适用于所有问题。面对一个具体问题,只要朝着原则所认可的方向去设计,最佳的模式就自然而然地会出来。

虽然我举了这么多例子来阐述编程原则,但是我认为只有在实际的编程过程中才能真正掌握这些原则。我写的这些东西,可能会有一些启发作用吧。

我几乎没有谈到算法与数据结构,只有在性能优化那一节中提到了一点。但是这并不是说算法不重要,而是它太重要了,以至于需要另外讨论。我觉得算法可以分为两种:确定性的和不确定的性的。确定性的算法有一个明确的目标,必须把这个目标准确求出来。而不确定性的只要求出近似的解出来,甚至连要求解的目标都是不明确的。

有一些思想常常可以用来求解确定性的问题,比如贪心法、动态规划、分治、延迟加载、快速查询表、筛法等等。但是这些思想仍然依赖于具体问题,所以单靠这些思想还是会有很多问题无法解决。性能优化那一节中提到的几个原则,比如减少对数据的复制、减少重复的计算、减少对用不到的数据的计算,对于算法的设计有普遍的适用性,但是这些原则太过笼统,面对一个实际问题,你很难由这些原则直接得到一个有效的算法。所以,算法的研究依然是很必要的,也是很有挑战性的。这不仅是计算机领域的问题,也是数学领域的问题。

不确定性的问题常见于人工智能领域。像贝叶斯网络、人工神经网络、遗传算法、微粒群算法等,都是用来解决不确定性问题的算法。虽然这些算法各不相同,但我觉得,还是存在一些共同的思想的。比如离散的逻辑连续化、操作随机化、采用非线性的函数关系、群体相互作用、结果反馈等等。但是同样,这些思想还不足以解决所有问题。

有的人喜欢用严格的数学方法去分析一个智能算法的行为,我不太赞同这种做法。如果一个算法能够用数学严格分析出它的行为,那只能说明这个方法不够智能。假定你能够获取我现在所有的脑电波信息,你能够用数学的方法预测出我1分钟之后会做什么事?我觉得要想得到一个足够聪明的算法,从生物学或者心理学的角度去寻找答案可能会更好。

我想写一些关于算法的总结,但是我现在还写不出来。因为算法实在太博大精深了,我所学的还太少。我会把今后的学习重点放在算法上,包括确定性的和不确定性的算法。希望以后的某一天,我能够写出关于算法的总结。

最后,感谢gullibility、Geo、sweating等同学指正了文章中的不少错漏之处,感谢我mm帮我修改了不少错别字和病句。也欢迎大家提出更多的意见。

《高效编程十八式》后记相关推荐

  1. 《Effective C++ 3th》——后记

    像<Effective C++ 3th>这类书,在C++进阶阶段必不可少.总结而言,书中内容主要分为以下几块: 减少出错的良好编程习惯/原则: 降低资源利用的有效策略: 深入理解OOP的精 ...

  2. effective java 3th item2:考虑 builder 模式,当构造器参数过多的时候

    yiaz 读书笔记,翻译于 effective java 3th 英文版,可能有些地方有错误.欢迎指正. 静态工厂方法和构造器都有一个限制:当有许多参数的时候,它们不能很好的扩展. 比如试想下如下场景 ...

  3. effective java 3th 序

    正本基本是自己翻译,翻译绝对有错误,就是这么自信,看的时候,自己注意下,如果感觉有语句不通,那么可能就是我翻译的出现了问题,可以自己翻找原文对比下. 其中自己的见解,我写在脚注中. 在 1997 年, ...

  4. 《Effective C++ 3th》——实现

    文章目录 写精简的程序 写安全的程序 写低耦合的程序 尽可能延后变量定义式的出现时间 尽量少做转型动作 避免返回handles指向对象内部成分 为"异常安全"而努力是值得的 透彻了 ...

  5. 《Effective C++ 3th》——资源管理

    文章目录 资源如何释放? 注意资源的唯一性 由使用智能指针引出的问题 以对象管理资源 在资源管理类中小心coping行为 在资源管理类中提供对原始资源的访问 成对使用new和delete时要采取相同形 ...

  6. 《Effective C++ 3th》——设计与声明

    文章目录 友好的接口设计 member与non-member函数设计 不抛异常的swap函数设计 让接口容易被正确使用,不易被误用 设计class犹如设计type 宁以pass-by-referenc ...

  7. 《Effective C++ 3th》——继承与面向对象设计

    文章目录 Is A 确定你的public继承塑模出is-a关系 避免遮掩继承而来的名称 区分接口继承和实现继承 考虑virtual函数以外的其他选择 绝不重新定义继承而来的non-virtual函数 ...

  8. effective c++_【阅读笔记】Effective C++()

    全文参考自Effective C++, Scott Meyers 程序来自本人 https://github.com/hxz1998/ccl 1. 让自己习惯C++ C++高效编程守则视状况而变化,取 ...

  9. Effective C++笔记_条款31将文件间的编译依存关系降至最低

    Effective C++笔记_条款31将文件间的编译依存关系降至最低 这个章节,读了两遍还是不是很清楚,有一种没法和作者沟通的感觉,看来我还是一个C++的初学者呀.好吧,不多说了,回归主题,今天的笔 ...

  10. CET-4 week 3th

    CET-4 week 3th 出奇至胜 read They are only charged for the amount of power they consume on rainy days. T ...

最新文章

  1. 谷歌某程序员抱怨“招人难”:招了小半年,8个岗位才招到1个,现在又空出6个岗位!...
  2. ​AMD放出超强新算法,旧N卡也能焕发第二春
  3. python os 文件操作 chdir(path)方法
  4. oracle索引对模糊查询,Oracle索引
  5. Base64编码 - Java加密与安全
  6. 侵犯软件著作权罪量刑标准
  7. Spring Security 5.0.0正式发布
  8. Error while waiting for device: The emulator process for AVD Pixel_API_30 has terminated.
  9. Maven是个什么鬼?,没办法起床排bug...
  10. C语言判断一个数是不是质数(C笔记)
  11. Java中的类加载器ClassLoader
  12. 音阶频率对照表_八度音阶和频率的关
  13. 极限编程中的十二个最佳实践
  14. 大数据平台的SQL查询引擎有哪些
  15. Eclipse 创建JavaWeb工程
  16. DNA转换为C语言,DNA (C语言代码)
  17. 2048游戏制作html,一个自制的2048小游戏(一)
  18. 【软考】【知识产权与法律法规】
  19. #单调队列#洛谷 2698 [USACO12MAR]花盆Flowerpot
  20. Python使用Turtle画帕劳共和国国旗

热门文章

  1. 嵌入式软件开发经典面试题
  2. 阿里巴巴、阿里云Java面试题、笔试题(含答案)
  3. onchange onpropertychange 和 oninput 事件的区别
  4. QQ截图工具在win10放大的问题
  5. java 实现两个pdf文件 合并为一个pdf 文件
  6. ​​​​​​​一些常用的调光电路|MOS管调光电路-KIA MOS管
  7. java stm32wifi模块_STM32F103RE单片机驱动88W8801 WiFi模块,如何提高TCP和UDP的传输速率...
  8. Python数据可视化——matplotlib.pyplot中plt的参数详解
  9. 网络安全-php安全知识点
  10. 《信号与线性系统分析》第5版知识点总结——1.信号与系统