
[美]克里斯蒂娜·维代拉·洛佩斯
本书包含历史、基础风格、函数组合、对象和对象交互、反射和元编程、逆境、以数据为中心、并发、交互和神经网络十大部分,采用40种不同的编码风格实现同一词频任务。每一章都介绍一种编程风格,每章都先介绍编程风格的约束条件,然后给出示例程序代码,接着给出代码的详细解释。本书通过简单的计算任务来说明不同的编程风格,从而帮助读者更好地理解编写程序和设计系统的各种(不同)方式,可以用作计算机科学和软件工程专业的高级编程课程教材。本书以经常练习编程的人能够理解的方式对在线代码库中的原始代码进行了解释和补充。建议读者在阅读本书时,将之与在线代码库中提供的代码结合起来。本书的目标读者包括相关专业高年级本科生和研究生,以及其他对编程风格感兴趣的开发人员。
如果说设计模式是面向对象式软件工程的经验总结,那么编程风格可以说是面向对象式软件工程之上的一般性代码实践的经验总结。 一个杰出的母语文体学家必须首先能够辨明不同母语文体的异同,然后才能在此基础上创造新的风格。类似的,一个杰出的编程语言文体学家也应首先能够辨明该编程语言下不同编程风格的异同,然后才能在实践中根据具体情况选用最适合的编程风格表达思想、完成任务。 词频统计,可以说是最基本的文本处理任务。然而,不同编程风格主导下的代码实践却呈现出截然不同的代码内容。如果一个人只能认识“茴”字的一种写法,那么当他遇到只认识“茴”字的另一种写法的人的时候,是否还能就“茴香豆”这一概念通过文字正常交流? 作者对各种编程风格特征与演进过程的描述有着思想史家的简洁与精确。延伸阅读部分提供的历史文献少而精,有助于各编程风格的知识考古。 函数式、单子、装饰器、神经网络、异步消息队列、协程、反射、异常处理等等,这些概念很少同时出现(函数式编程的monad、设计模式中的装饰器模式、深度学习中的RNN与CNN、分布式系统的异步消息队列、作为任务调度策略的协程、用于运行时状态获取的反射机制、普通编码实践中的不同异常处理方式),但却能够在“编程风格”这一视角下分庭抗礼。若能独立发现这一点,对于以上这些内容可以说是融会贯通了。
适合至少熟悉三种不同风格的编程语言或者至少非常熟悉一门混合编程范式的语言的人阅读。 如命令式(C),面向对象式(C#, Java, C++, Python等),函数式(OCaml, Haskell, Elixir, Scheme等); 混合范式(JavaScript, TypeScript, Rust等)