大二上学期还没有看完,大二下学期继续进行阅读。
文本操纵:
1、学习一种文本操纵语言。文本操作语言对于编程的意义,就像是刳刨机对于木工活的意义。
2、文本操作的案例。
我们的测试数据有好几万条,散落在不同文件,如果需要进行合并并转换为特定格式,手动处理是无法想象的。但如果使用 Perl 几个小时就可以完成。
数据库 schema 维护。可以写一组 Perl 脚本读取数据库 schema 定义的纯文本文件,根据它生成,用于创建数据库的 SQL 语句。schema 的 XML 版本等
生成 web 文档。可以编写 Perl 程序,分析数据库 schema,C 或 C++ 源文件,及其他资源,生成 HTML 文档。
文中很多案例使用 Perl,这些工作也可以使用 Python 代替或者 Shell 里的 awk,sed 代替。
代码生成器:
1、作为程序员,有时会需要我们在不同地方重复相同信息。如果出现这种情况,你就可以考虑构建代码生成器了。代码生成器就是编写能编写代码的程序。
2、有两类代码生成器:被动代码生成器和主动代码生成器。
3、被动代码生成器是独立执行的。它可以用来生成模板,版权声明,每个新文件的标准注释等等。
4、主动代码生成器会在每次需要其结果时被使用。比如根据数据库 schema 创建代码。
5、代码生成器不一定要生成代码,它可以用来输出任何格式的内容,比如 HTML、XML、纯文本等。
比如 iOS 里的三方库 R.Swift 就是一个根据资源名自动生成对应结构体的主动代码生成器。
按合约设计:
1、注重实效的程序员会不信任自己,所以他们针对自己的错误行为进行防卫性编码。
2、按合约设计(Design By Contract,简写DBC)是 Bertrand Meyer 为 Eiffel 语言发展的概念。它的核心是用文档记载模块的权利与责任,并进行校验。它的目的是对函数做一些前置检查和后置保证,结合编译器的支持,我们能够尽早的发现代码问题。
3、DBC 有三个概念。
前条件:为了调用例程必须为真的条件。
后条件:例程保证会做的事情,其完成时的状态。
类不变项:其确保从调用者的视角来看,该条件总是为真。
4、Java 中的 iContract 框架是专为 DBC 设计的,它通过注释里的 @pre、@post、@invariant 声明这三个概念。它会读取注释并生成包含断言逻辑的源文件。Eiffel 则是通过 require、ensure、is 三个值表示对应概念。但是支持 DBC 的语言真的很少。
死程序不说谎:
1、对待程序我们通常会有“它不会发生”的心理状态,这会导致我们忽视一些问题。对于注重实效的程序员来说,如果我们忽略了一个错误,将是非常糟糕的事情。
2、我们一些异常情况,我们应该及早崩溃,用于强调问题的存在。
3、引起崩溃的时候不要造成破坏,比如申请的资源还没有释放等情况。
4、死程序带来的额危害通常比有隐患的程序要小得多。
阅读笔记个人感受部分:
1、对于文本操作,最简单像WIN+R键,输入指令就能启动一些操作。办公、娱乐、设计、绘图、排版、管理选择GUI;服务器维护、大数据、人工智能等等,可以选择CLI。日常写代码,是一件非常需要耐心的事情,尤其是那些没有技术含量重复使用到的一些代码排列组合,比如前端的一些html和css布局,简单繁杂,这个时候就会使用到一些免费代码自动生成神器,让我们提高效率。
2、注重实效的偏执:现实:你不可能写出完美的软件。
3. GUI和CLI各有各的优点和适用范围。对在开始之前接受的东西要严格,而允诺返回的东西要尽可能少。记住,如果你的合约表明你将接受任何东西,并允诺返回整个世界,那你就有大量代码要写了!面向对象的继承和多态是合约发挥作用的领域之一。