“人生是你的。”这唤起了我们自己的力量,它就蕴含在我们的代码库、工作和职业生涯。 ——《程序员修炼之道》序
著名武侠小说家金庸先生在他的武学江湖中,曾写过至高无上的武学宝典《九阴真经》,还有一本与其不相上下的《九阳真经》,两部经法,一个重以柔克刚,以阴盛阳;一个重阴阳调和、刚柔互济。《九阴》和《九阳》都达到了中原武学的高峰,但只有二者相结合的“阴阳共济”才是武学最高境界。
借武学境界推而广之,各行业皆有自己的江湖“绝学”,有的重基础,有的重修养,不一而足,但归根结底,不外乎两个方向:向内修或向外修。
向外修,是修本身,你的技术,你在本职上拥有的能力和级别;向内修,是修心,是为你的外修提供源源不断的动力和供给的源泉,让你的内力自生不息,源源不竭。
在我看来,《程序员修炼之道》就是程序员的《九阳真经》,它理应成为程序员放置手边时时翻阅、研读、参照的枕边书,字典书、信仰之书。
《程序员修炼之道》副标题“通向务实的最高境界”,它不仅从哲学的高度解决了程序的设计思想,程序员的创作思维能力,还务实地告诉你如何更好地写代码,并对围绕代码可能产生的麻烦——设计、编码、启动、团队、版本控制、测试、自动化等等一系列实际问题,给出了解决原则和方案,最终达到取悦用户成就自身的更高一级梦想。
问世二十年来,《程序员修炼之道》一直雄踞程序员图书榜前列,作为一本行业专著,它并没有技术书籍那样深奥的词汇,晦涩的术语和令人难以理解的句子,当你进入编程之门,对编程世界充满着好奇与兴奋,《程序员修炼之道》就是你的《九阳真经》,它一步步把你打造成更好的更务实的程序员,直至你习成巅峰的武功绝学。
01. 程序员修炼的哲学境界——务实
程序员的进阶修炼,与其他职业的进阶之路相比,更强调思考。
弗雷德里克·布鲁克斯说:程序员,就像诗人一样,几乎仅仅工作在单纯的思考中。他们运用自己的想象,来建造自己的城堡。
一切思考,都应该脚踏实地,只有建立在务实基础上的思考,才是有水之源,有本之木。
务实的程序员有什么特质?
他们总是越过问题的表面,试着从大局着想。他们总是为自己所做的一切负责。那么,务实的哲学有哪些?
一个是选择的哲学,通过一些跨学科的哲学共识,譬如:石头汤、水煮青蛙、破窗效应等来做出选择,适时改变,积极主动地掌控机遇;
一个是工作中经常性的应用,譬如:够好即可、知识组合、批判性思维、保持交流等来发现问题,找到解决问题之道。
很多时候的很多错误,我们经常遇到,但依旧会犯错。只有内化这些思维成为编程时的本能,才能避免重复错误。
学习新的知识,建构新的知识组合和体系,可以有效避免错误发生的几率。保持批判性思维,是拥有精准知识的能力。
务实的其中一个原则——DRY(不要重复你自己)。
现实生活中,这个很难做到,我们很多时候都在重复自己,不过重复的角度和层次不同而已。有时候,你可能不会简单重复你写的代码,但你无法保证不重复你的设计原则,也许你更习惯重复你的编码习惯。我们能做的,就是努力去减少无意义的重复。
所以,作者不无深意地提醒我们DRY原则:在一个系统中,每一处知识都必须单一、明确、权威地表达。
“千里始足下,深谷起微尘,吾道亦如斯,行之贵日新。”这是一本思考之书,人为了思考才被创造出来,除了思考,还要多实践。
02. 程序员修炼的工具——代码
《程序员的修炼之道》毕竟是一本面对程序员的提升之书,它通过代码和编程来进行实践。而本书的编排是由务实哲学境界的讨论,提升思维能力后,再来讨论“术”的东西。在“术”的方面,对基础工具的运用,掌握正确的方法也不可或缺。
这些方法,原则,或者我们可以称作“元(meta)”方法,融汇作者多年实践和工作中遇到的具体问题,很生动、具体,以至于只有经过反复思考、实践,再思考之后方才能有所感悟。
一切工作,皆可利用工具。程序员或者开发者为了工作顺利进行,也同时开发了很多工具。就像作者说“使用一些工具,使效率比其他人更高。”我们并不缺乏工具,问题往往是,我们不知道该使用哪些工具,在什么情况下使用工具。
就像木工都需要一个工作台一样,Shell指令就是程序员的工作台。在Shell中,你可以调动所有能用的工具,或通过管道用各种方式把工具组合起来,可以启动应用程序、调试器、浏览器、编辑器和工具,可以搜索文件、查询系统状态,并将结果过滤输出,还可以通过Shell编程构建复杂的宏指令处理经常要做的事。
现在图形化编程很风靡,很多程序员也习惯了在IDE中成长,但如果用IDE中的图形界面去完成所有工作,就会错失环境的全部能力,你将无法把常见的任务自动化,或者无法充分利用工具所能提供的强大功能。
图形工具的好处——所见即所得,弱势也显而易见——所见即全部。
所以,就像木工定制他们自己的工作空间一样,开发人员应该定制自己的Shell。
实践出真知。只有实践,是检验真理的唯一标准。作者也利用近一半篇幅,阐述程序员在日程工作中经常会遇到的具体问题,并提供了相应的指导、建议和解决方案。完整地覆盖了程序设计理念、代码实现和项目管理等相关实践的重要事项。
03.编程只是程序员世界的一部分,而这本书探索了整个世界
据说网易、趋势等公司,给新入职程序员的员工手册,就是一本《程序员修炼之道》,希望这些新人,能够对编程这个职业有自己的认知,形成一个优秀程序员的习惯和思维能力 。
大部分新人程序员,都经历过一种盲目开发的阶段:拿到需求文档,原封不动的照着文档去写代码,根本不会去认真思考背后用户的使用逻辑,所以需求文档有一点业务逻辑偏差时,作为程序员竟然毫不知情,导致后面不得不费力返工,需整个团队花费更多的时间和精力重新修改代码。
而事实上,也有相当一部分人,在提出需求时,对自己的需求并不十分明确,他们无法确切地表达自己真正需要的是什么。
因此,程序员和需求文档之间,隔着巨大的鸿沟。
除非,在写需求文档最开始的时候,运用专业知识,多想一步,再多挖掘一步,就有可能会避免。在需求分析时,经验欠缺的开发人员和经验丰富的程序员,对于业务的理解和深入程度,是衡量开发水平的重要因素。
比如客户有一个简单的需求:比如一家以纸质书和电子书为主要业务的公司,提出一个需求“所有49元以上的订单都免运费”。
作为一个程序员,从这个简单的需求中发现了什么问题?
49元含运费吗?49元必须是都购买纸质书吗?还是允许纸质书和电子书统一结算?包邮有地区限制吗?包含境外吗?对快递公司有指定吗?
可见,对需求的认知,客户和程序员是有差距的。小到对于工具的使用,大到对于整个项目的理解。需求开始前,需求拆解阶段,不要去搜集需求,而是要挖掘需求。理解需求背后的业务逻辑,不能陷入为了开发而开发的状态。
每个开发人员都是独一无二的,拥有自己的优势和劣势,喜好和厌恶的东西,而通过学习和修炼,提升能力,获得经验,提高生产力,写出更好的软件,却是每个程序员共同的追求。
《程序员修炼之道》,强调的是修炼,这是一个全面的过程,从认知到技能,从具体做法到思维能力,可能不是那么一个愉快的过程,在不断的犯错、总结、改进、提升中,循环往复,只有经历一个个这样的过程,才能够逐渐成长。
著名心理学家艾利克森认为:对于在任何行业或领域中希望提升自己的每个人,刻意练习是黄金标准,是迄今为止发现的最强大的学习方法。
程序员的修炼,同样可以通过刻意练习的方式,有针对性地进行提高:
①以《程序员修炼之道》为标杆,按照书中的做法、习惯、建议去修正自己的行为。
在软件开发这一领域中,书中所说的思维方法、工具用法、设计理念,基本是达到一定杰出水平的表现,可把他们作为最优秀的那批人,进行临摹。
②书中提出一些挑战和练习,并且给出了参考答案,这相当于一位能够布置练习作业的导师。
根据“导师”的要求,在练习的过程中提供反馈,及时找到存在的问题。然后,学会自己检测自己、自己发现错误,并且进行相应的调整。
《程序员修炼之道》中,我最喜欢的两句话:关注你的技艺;思考你的工作。这句话,是适用于任何领域的修炼。
现代管理学之父彼得·德鲁克说过:“星期一的时候,我不希望你们说这个周末过的有多愉快,我希望你们跟我讲,你们做了些什么改变。”
修炼提升,可从今日始。
图片来自网络,侵删。