《编程卓越之道》推荐序
什么是卓越代码(great code)?场景不同,角色不同,对卓越的定义自然有所不同。既然没有统一标准,似乎可以放过不提。然而,本书系列题为《编程卓越之道(Write Great Code)》,又如何可以轻易放过对卓越的认识?细品作者Randall Hyde采纳的定义:
卓越代码是按照一套一致的优秀软件特征编写出来的,首要考虑的是优秀软件特征。特别是,卓越代码要遵循一套规则,这套规则能够指导程序员在用源码实现算法时的决策。
单就定义而言,依旧语焉不详。关于什么是优秀软件特征,或许大家可从书中寻觅到答案。而我却透过书名,隐隐捕捉到Randall Hyde的一个观点——没有深谙计算机底层原理,不可能写出卓越的代码。——这也正是本书卷1的核心思想:understanding the machine。
听听作者自己的解释:
了解了计算机如何表示数据,就了解了高级语言的数据类型是如何转换到机器层次的;了解了CPU如何执行机器指令,就了解了高级语言应用程序中各种操作的代价;了解了内存性能,就了解了如何组织高级语言中的变量和其他数据,让缓存和内存的访问最优。
此言非虚。正如要学好Java,就有必要了解JVM的工作原理,而要彻底了解JVM,怎能不知道计算机的底层原理?以指令集为例,这是汇编程序员天天使用的基本编程要素,而Java程序员就鲜少涉猎。殊不知,这些Java程序员编写的每行代码都会编译为运行在JVM中的指令。对照来看,恰好本书介绍了短指令和长指令在空间、性能与复杂度的取舍,而JVM则采用了折中的变长指令,允许操作码后跟零字节或多字节的操作数(operand)。同一条知识,打通了从计算机底层到高级语言开发的通路。
作为一名汇编语言高手,Randall Hyde极为推崇汇编语言对程序员的助力。他在本书后记中建议:“有一种强迫自己在机器层次编写代码的方法就是使用汇编语言。”许多新生代的程序员对此建议或许不以为然,毕竟,如今使用汇编语言的机会可谓凤毛麟角,它的重要性已经淡去。
遥想当年,在我的大学时代,汇编语言还是计算机专业最重要的一门编程语言课,当然,也是公认最难啃的硬骨头。当时还能熟练编写汇编程序的我,早不记得这门语言的大部分语法了。我不知道,学习和使用汇编语言是否真的有助于写出卓越代码?我也不知道,我之所以没能写出什么卓越代码,是否与我汇编水平不高有关?但我深信,倘若具有高超的汇编开发能力,必然理解计算机底层运行的细节;倘若能很好地掌握汇编语言,学习任何一门高级语言,也就不在话下。
当软件系统规模如滚雪球一般变得越来越大时,我们已不可能像当初求伯君那样用汇编去写十几万行的WPS。虽然使用的语言不同,编程态度却应该一以贯之。然而,当我们写出动辄数百万行代码的应用系统时,是否真的思考过每条语句背后的代价?——问程序员,有多少人以写出卓越代码为己任?问代码,又有多少是深谙计算机底层原理的程序员写出来的?我们这个行业,因为竞争加速的原因,程序员变得更加的浮躁。没有办法让自己安静下来,沉心打磨基础;当开发技能成为一种快餐时,还有谁会力求编码的精益求精?又有多少人舍得花费宝贵时间来深入理解计算机?然则,“九尺之台起于垒土”,没有扎实的基础,开发的能力究竟能提升多高,编程的生涯究竟能走多远,我深表怀疑。
真的非常钦佩Randall Hyde多年如一日孜孜于《编程卓越之道》系列的写作,使之成为计算机图书中不朽的经典。而作者并不满足已经取得的成就,推陈出新,出版了本书的第二版。第二版加入了新鲜的元素,却又不损经典质量的一分一毫。如果你刚刚踏上编程之旅,我会强烈推荐你阅读本书。正所谓“磨刀不误砍柴工”,这些底层原理和底层细节,看似对你的开发没有直接帮助,但它真的可能会决定你未来的高度!是为推荐序。
《解构领域驱动设计》作者 张逸
张逸,信通院应用现代化推进中心专家委员会委员,应用现代化首席顾问,融合企业架构、领域驱动设计、微服务、云原生架构与DevOps敏捷管理方法打造了通用、开放、中立的应用现代化方法体系,以帮助企业全面实现数字化转型。
相关文章
- Python 编程 | 连载 04 - 字典与运算符
- VC++消息钩子编程「建议收藏」
- Go HTTP 编程 | 02 - netu002Fhttp 包剖析
- js函数式编程讲解
- 华为20级大佬暴力推荐!并发编程深度解析实战七天杀上GitHub榜首
- 初学者java编程软件_编写python的软件
- unix编程实践_7_事件驱动编程
- 【Java 网络编程】TCP 连接 断开 机制 ( 三次握手 | 四次挥手 )
- 【Linux 内核 内存管理】memblock 分配器编程接口 ⑤ ( memblock_free 函数 | memblock_remove_range 函数 )
- Shell脚本编程:使用shell打印九九乘法表详解程序员
- 在 Linux 中学习和实践编程技能(linux下怎么编程)
- Linux C编程:利用进程ID控制多进程运行(linuxc进程id)
- 嵌入式Linux编程实战推荐(嵌入式linux书籍推荐)
- Oracle触发器:精湛编程技巧类型概览(oracle触发器类型)
- 入门Linux编程必备:推荐5本C语言书籍(linuxc编程书籍)
- C语言编程好帮手,Linux IDE推荐(c语言linuxide)
- Linux编程指南:让你成为Linux编程高手的有力助手(linux编程书籍推荐)
- Linux编程之路推荐的软件工具集(linux编程用的软件)
- jdbcOracle 14760JDBC数据库开发编程指南(oracle-14760)
- 用MySQL和C语言编程,快速构建高效数据库应用(mysql_,c语言编程)
- ASP编程入门进阶(二十):ADO组件之显示数据记录
- 超强推荐的js编程中的简洁写法收集