你对编程的“道”和“术”的理解

道可道,非常道。下面能说出来的,不是我所理解的全部。有的人可能看见道和术就会想到封建迷信那一套中去。其实你完全可以把道与术看作是对知识的一种古朴的分类。什么是道?道这个词起源于「老子」, “道生一, 一生二, 二生三”,道是本源。宇宙中的一切都遵循于「道」,此为大道。而人类对世界的理性理解,也可称为「道」。比如某人在某个领域钻研的久了,人们常常会说此人掌握了门道。因为他可以掌握那个领域的变化,可以预测走向,因为他深知那个领域的“道”。对于计算机来说也是一样,但是计算机的世界更加直观。程序运行遵循的规律是什么?程序运行遵循的规律背后是什么? 如果把计算机看作一个完整的世界,那么“计算机之道”是指:这个世界是如何运作的。这个世界是由:计算模型、操作系统、网络I/O、各种协议等等基础构建组合而成的。编程,可以说是程序员每天在计算机世界的耕耘劳作,如果不遵循计算机之道,试问会怎么样? 假如现实世界中,农民们不按农作物生长的规律来耕作,会怎么样?那么编程之道是什么? 编程之道就是你要顺应计算机之道,计算机的世界,就是程序员的“天”,不要做出有违“天”道的事情,否则你的程序肯定是无法运行的。广大程序员在计算机世界中不断的创造各种事物,也改造着这个世界。久而久之,随着计算机技术的发展,计算机的世界也在不断的进化,程序员们根据多年的耕耘总结了不少思想,发明了各种各样的语言工具,极大的提高了程序员的生产效率,程序员们终于摆脱了茹毛饮血、钻木取火、刀耕火种的原始生活。计算机的世界风云变幻。编程之道也随之升级了。你得掌握(这又涉及一个学习之道)各个思想的本质,什么OO思想、设计模式、lambda演算、函数式编程、并发模型、网络I/O等等,只有这样你才能做到以道(语言背后的思想)驭器(语言工具)。但是不管什么语言工具,其背后都得遵循「计算机之道」。什么是术?术是能力,是知识、方法、策略和经验的集合; 术也是可解决实际问题的流程和策略;是可以提高效果和效率的技巧。孙子兵法有云:道为术之灵, 术为道之体; 以道统术, 以术得道。 术的总结、优化都得有一个战略指导思想,那就是「道」,否则没有战略,任何战术都是偶然的、侥幸的。而好的经验、好的方法好的技巧又可以加深对「道」的理解。编程中的术,也是一样。在实际编程中总结的各种最佳实践,都是属于术的范围。工具怎么用?工具该用在哪些场景?工具用在哪些场景最适合?工具的存在是为了解决什么问题?场景是如何演变的?如何解决?有哪些改进?等等等,各种细节的思考与实践,构成了术。这就是我理解的编程中的「道」与「术」,我想不仅仅是编程,这对各个领域各个行业都适用吧。谢邀。
■网友
Geoffrey James写了一本书详细讲了什么是编程的“道”。我把前面节选出来给你看一下——
第一章 虚空Thus spake the master programmer:"When you have learned to snatch the error code from the trap frame, it will be time for you to leave."师曰:“惑中取错之日,可出山矣。”
1.1Something mysterious is formed, born in the silent void. Waiting alone and unmoving, it is at once still and yet in constant motion. It is the source of all programs. I do not know its name, so I will call it the Tao of Programming.If the Tao is great, then the operating system is great. If the operating system is great, then the compiler is great. If the compiler is greater, then the applications is great. The user is pleased and there is harmony in the world.The Tao of Programming flows far away and returns on the wind of morning.有物混成,先天地生。致虚极,守静笃,静若处子,动若脱兔,可以为程序母。吾不知其名,字之曰道。


推荐阅读