首页 > 其他分享 >代码整洁之道--读书笔记(6)

代码整洁之道--读书笔记(6)

时间:2024-09-09 22:51:24浏览次数:9  
标签:编程 读书笔记 -- 练习 人写 程序员 卡塔 测试 整洁

代码整洁之道

image-20240904225436374

简介:

本书是编程大师“Bob 大叔”40余年编程生涯的心得体会的总结,讲解要成为真正专业的程序员需要具备什么样的态度,需要遵循什么样的原则,需要采取什么样的行动。作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来者引路,助其职业生涯迈上更高台阶。

本书适合所有程序员阅读,也可供所有想成为具备职业素养的职场人士参考。

第六章:练习

image-20240909224659172

专业人士都需要通过专门训练提升自己的技能,无一例外。乐手练习音阶,球员练习绕桩,医生练习开刀和缝针,律师练习论辩,士兵练习执行任务。要想表现优异,专业人士就会选择练习。本章要讲的是程序员如何提升专业技能。

转变

任何事情,只要想做得快,都离不开练习。要想尽可能快地重复编码/测试过程,就必须能迅速做出决定。这需要识别各种各样的环境和问题,并懂得应付。

如果有两个习武者在搏斗,每个人都必须能够迅速识别出对方的意图,并且在百分之一秒内正确应对。在搏斗时,你不可能有充足的时间来研究架势,思考如何应对。这时候,你只能依靠身体的反应。

实际上,真正做出反应的是你的身体,大脑是在更高级的层面上思考。在每分钟进行许多次编码/测试的状态下,你身上的肌肉记忆了要敲哪个键。意识中较基础的部分识别情景,在百分之一秒的时间内做出合适的反应,大脑则可以放心思考更高层次的问题。

6.2 编程柔道场:

卡塔:

在武术里,卡塔是一套设计好的、用来模拟搏斗一方的招式。目标则是要逐步把整套招式练习到纯熟。习武者努力训练自己的身体来熟悉每一招,把它们连贯成流畅的套路。训练有素的卡塔看起来相当漂亮。

与之类似,编程卡塔也是一整套敲击键盘和鼠标的动作,用来模拟编程问题的解决过程。练习者不是在解决真正的问题,因为你已经知道了解决方案。相反,你是在练习解决这个问题所需要的动作和决策。

要学习热键和导航操作,以及测试驱动开发、持续集成之类的方法,找整套的卡塔来练习都是相当有效的。更重要的是,它特别有利于在潜意识中构筑通用的问题与解决方案间的联系,以后在实际编程中遇到这类问题,你马上就知道要如何解决。和习武者一样,程序员应该懂得多种不同的卡塔,并定期练习,确保不会淡化或遗忘。

真正的挑战是把一个卡塔练习到炉火纯青,你可以窥见其中的韵律。要做到这一点可不容易。

瓦萨:

两个人的练习。

瓦萨基本可以说是两个人的卡塔。其中的招式需要精确地记忆,反复演练。一个人负责攻,另一个人负责守。攻守双方互换时,各种动作要一而再、再而三地重复。

程序员可以用一种叫“乒乓”的游戏来进行类似的练习:两个人选择一个卡塔,或者一个简单问题,一个人写单元测试,另一个人写程序通过单元测试,然后交换角色。

写单元测试的程序员会极力控制解决问题的方式,他也有足够的空间来施加限制:如果程序员选择实现一个排序算法,写测试的人可以很容易地限制速度和内存,给同伴施压。这样整个游戏就非常考验人……也可以说是非常有趣。

自由练习:

多人练习。

很多编程练习场中都会玩一种叫“自由练习”的游戏。它很像由两个参与者解决问题的瓦萨,只是自由练习是有很多人参与的,而且规则是可以延续的。在自由练习中,屏幕被投影到墙上,一个人写测试,然后坐下来,另一个人写程序通过测试,再写下一个测试。桌子边的人一个个轮流接下去,或者有兴趣的人可以自己排队参加。无论怎么安排,都是非常有趣的。

6.3 自身经验的拓展

职业程序员通常会受到一种限制,即所解决问题的种类比较单一。老板通常只强调一种语言、一种平台,以及程序员的专门领域。经验不够丰富的程序员,履历和思维中都存在某种贻害无穷的盲区。经常可以看到这样的情景:程序员发现,面对行业的周期性变化造成的新局面,自己并没有做好准备。

开源:

保持不落伍的一种方法是为开源项目贡献代码,就像律师和医生参加公益活动一样。开源项目有很多,为其他人真正关心的开源项目做一点贡献,应该可以算是提升技能的最好办法了。

关于练习的职业道德:

职业程序员用自己的时间来练习。老板的职责不包括避免你的技术落伍,也不包括为你打造一份好看的履历。医生练习手术不需要病人付钱,球员练习绕桩(通常)不需要球迷付钱,乐手练习音阶也不需要乐迷付钱。所以老板没有义务为程序员的练习来买单。既然你用自己的时间练习,就不必限制在老板规定的语言和平台。可以选择你喜欢的语言,练习你喜欢的技术。

结论:无论如何,专业人士都需要练习。他们这么做,是因为他们关心自己能做到的最好结果。更重要的是,他们用自己的时间练习,因为他们知道保持自己的技能不落伍是自己的责任,而不是雇主的责任。练习的时候你是赚不到钱的,但是练习之后,你会获得回报,而且是丰厚的回报。

标签:编程,读书笔记,--,练习,人写,程序员,卡塔,测试,整洁
From: https://www.cnblogs.com/TonyCode/p/18405547

相关文章

  • 简单的SDL扫雷游戏
    #include<SDL.h>#include<iostream>#include<cstdlib>#include<ctime>#include<string>#undefmain//解除宏定义,防止与main函数冲突//常量定义constintWIDTH=9;//游戏板的宽度(格子数)constintHEIGHT=9;//游戏板的高度(格子数)constintMINES=......
  • CCPC 中国大学生程序设计竞赛 信息全收集
    前言本页面为子页面,更多信息请参阅主页面,GitHub仓库。最后更新:2024.09.092020-2024疫情及疫情后2024.9-2025赛季10th简称官方名称举办时间承办评价补题链接网络预选赛The2024CCPCOnlineContest2024-09-08在线-PTA知乎GYM哈尔滨2024-10-20东......
  • Swiper轮播图框架【前端 24】
    Swiper轮播图框架在如今的网页设计中,轮播图已成为一种不可或缺的元素,它能够以动态的方式展示图片、视频或文本信息,有效吸引用户的注意力并提升页面的互动性。在众多轮播图实现框架中,Swiper以其高度的可定制性、流畅的滑动效果以及丰富的API接口脱颖而出,成为前端开发者的首......
  • Java反射
    Java反射在Java编程世界中,反射(Reflection)是一个强大而复杂的特性,它允许程序在运行时检查或修改其自身结构(如类、接口、字段和方法等)的行为。反射API提供了丰富的功能,使得Java程序能够在编译时不知道具体类型的情况下,动态地创建对象、调用方法、访问和修改字段等。尽管反射......
  • 【C++】C++入门基础,详细介绍命名空间,缺省参数,函数重载,引用,内联函数等
    目录1.命名空间1.1使用命名空间的目的1.2 命名空间定义 1.3 命名空间使用2.缺省参数2.1 缺省参数概念2.2缺省参数分类2.3实际案例2.4 注意事项 3.函数重载3.1函数重载概念3.2函数重载原理 4.引用4.1引用的概念4.2引用的特性4.3 使用场景4.......
  • 什么是构造函数和析构函数?
    构造函数类的一种特殊的成员函数。当创造对象时自动执行,没有返回值包括(void),当没有显式定义时,系统默认生成构造函数。与类的命名相同。可以重载。可用于某些成员变量的初始化。classtest{ public: test(){};//与类的命名相同。 test(inttest_day){ _day=......
  • vue3生命周期(钩子函数)
    在Vue3中,生命周期钩子被重命名并分为了不同的阶段,以更好地描述它们的用途。这些新的生命周期钩子包括:setup():这是一个新的入口点,在beforeCreate和created之前调用。onBeforeMount/onMounted:组件挂载前/后的生命周期钩子。onBeforeUpdate/onUpdated:组件更新前/后的生命......
  • 全网最适合入门的面向对象编程教程:46 Python函数方法与接口-函数与事件驱动框架
    全网最适合入门的面向对象编程教程:46Python函数方法与接口-函数与事件驱动框架摘要:函数是Python中的一等公民,是一种可重用的代码块,用于封装特定的逻辑;事件驱动框架是一种编程模式,它将程序的控制流转移给外部事件,如用户输入、系统消息等,它事件驱动框架可以使用函数作为事......
  • (java+Seleniums3)自动化测试实战
    一.web自动化测试基础密码的加密处理--是在前端JavaScript二.seleniumIDE录制打开火狐浏览器:点击寻找更多附加组件输入:选择:跳转:点击安装完成,打开之后是这个页面:录制一个新的测试用例在一个新的工程当中:点击第一个表示正在录制成功:三.......
  • 如何使用Filter(过滤器二)
    目录一、过滤器链二、执行顺序三、示例说明一、过滤器链本片文章接如何使用Filter(过滤器一)-CSDN博客https://blog.csdn.net/u011529483/article/details/142059978?spm=1001.2014.3001.5502继续说说过滤器的执行顺序。过滤器和拦截器一样都是可以配置多个的,以链式的形......