《刻意练习》:以学习编程为例

简介: 《刻意练习》是一本神奇的魔法书,它用大量的事实案例和数据来证明了刻意练习能给一个人带来的巨大改变。更为难能可贵的是,它不仅仅只是介绍刻意练习的好处,还给读者介绍了刻意练习的方法和注意事项,可以说是干货满满的一本书。

《刻意练习》是一本神奇的魔法书,它用大量的事实案例和数据来证明了刻意练习能给一个人带来的巨大改变。更为难能可贵的是,它不仅仅只是介绍刻意练习的好处,还给读者介绍了刻意练习的方法和注意事项,可以说是干货满满的一本书。


本文想以“学习编程”为例,结合《刻意练习》这本书教给我们的方式方法,阐述如何通过刻意练习来提高自己的编程水平。


关于练习


不断重复只是“天真的练习”,无法带来进步。“正确的练习”需要好导师、有目标、有反馈。所以如果想要提高编程水平,光靠一味闷着头努力写代码是不够的,有些人写了几年的CRUD,可能整体的技术水平还不及刚毕业的同学。


一个好的导师很难得,他不仅要自己在编程水平是有一定的成就,还应该具有一些教育方面的经验,才能更好的指导你。一般来说,大一点的公司都会有老人带新人的机制,可以利用这个来找一个比较好的前辈带一带。另外就是通过看书或看视频其实也是一种很不错的学习方式,写书和出视频的老师自然是具备上述条件的。


有目标指的是应该要有明确的目标,而不是一个宽泛的目标。比如“我要提高Java水平”明显就是一个宽泛的目标,无法量化。明确的目标应该是什么样子呢?比如,我要学习JVM的基础知识,我要学完23种设计模式等等。一个好的目标还应该是可分解的,有时间或成果量化的。比如,我需要在一个月内学习完Java多线程技术,第一周学习多线程模型,第二周学习多线程基本的类和接口,第三周阅读JDK里面关于多线程方面的工具类的源码,第四周写多线程案例Demo,最后产出一个Java多线程系列笔记或者博客。


有反馈指的是可以量化的反馈。比如写一篇技术博客,有多少阅读量,点赞量,评论量?写一个开源项目有多少star,做一个LeetCode有没有通过,耗时如何?

上述算是对“有目的的练习”的一个阐述。刻意练习是在有目的的练习基础上的。总结起来,有目的的练习应该具有以下四个特点:

  1. 有目的的练习具有定义明确的特定目标
  2. 有目的的练习是专注的
  3. 有目的的练习包含反馈
  4. 有目的的练习需要走出舒适区

对于任何类型的练习,这是一条基本的真理:如果你从来不迫使自己走出舒适区,便永远无法进步。


关于心理表征


《刻意练习》这本书用了大量的篇幅来介绍心理表征。作者认为,刻意练习的核心之一在于通过练习来创建大量的心理表征,然后再使用这些心理表征反过来帮助练习。

那心理表征到底是什么?

我认为它是一个人学习某样东西的时候,自己心中形成的一个体系架构。比如我们学习算法,就会形成一个关于算法的体系架构,也就是心理表征。而当我们再学习到Mysql的底层索引原理的时候,就会想到算法关于平衡树方面的知识;当我们学习JDK源码里关于集合框架的时候,就会想到链表、栈与队列、红黑树等等。

我们的知识形成了一个循环,学得越多,懂得越多。当我们积累了大量的知识以后,再学一样有关联的东西,就能快速学会。


刻意练习


刻意练习提倡“边干边学”,它使人们熟悉练习的习惯,并思考如何练习。这与我们学习编程的理念是一样的,几乎没有人会对你说:你只需要看书,看博客,看视频就能学会编程。有经验的前辈一般会告诉你,要有输入,也要有输出。学习了的东西,要通过写代码或者做笔记或者写博客的方式,让知识变成你自己的,更加牢固。

你通过写代码,不断地写代码来提高自己的编程水平,然后通过思考,反思来决定该如何写代码才能写得更好。

传统的方法也一直是先找出关于正确方法的信息,然后很大程度上让学生去运用那些知识。刻意练习则完全相反,它只聚焦于绩效和表现,以及怎样提高绩效和表现。

编程也是一样,老板和上级其实真正在意的并不是你懂多少理论,而是你写得代码质量好不好,你能不能快速地实现他们需要的功能,能不能解决技术难题。

你的代码写得比别人快,你的代码写得比别人漂亮,你能快速解决别人不能解决的难题,那你就牛逼。


关于专注与坚持

刻意练习里面有一个观点颠覆了我以前的认知。我一度认为,一个人能不能专注,能不能坚持做一件事,除了热爱,那必然是意志力越高的人越能专注和坚持。

然而刻意练习告诉我,意志力根本不存在!所谓意志力,其实是保持动机与专注的结果。


我们先来看看如何让自己保持专注,不专注的练习是没有效果的。刻意练习提供了一个观点,如果练习的时间更短,那就会有更好的注意力

对于这个观点我是绝对认同的。比如看书,如果想一次性看完一本书,那对于一般人来说绝对是非常困难的。但是如果把它拆成一章一章,每天看一点,那就会好很多。而在日常的工作中或者学习中,我们可以使用“番茄钟”来管理自己的时间与保持专注。这里不具体介绍番茄钟,有兴趣的同学自己去了解一下,亲测有用!一个番茄钟25分钟,不多不少刚刚好。


再来谈谈动机。对于一个程序员来说,动机是再明显不过的了:升职加薪变大佬。但有时候这个动机并不能转化为一种强有力的动力来促使我们去学习,去提高技术水平。而某些太强烈的动机(比如想跳槽)又很难持续保持。

《刻意练习》告诉我们,我们要保持动机,要么强化继续前行的理由,要么弱化停下脚步的理由


仍然以学习算法为例。要强化继续前行的理由,我们可以在学习到一定阶段给自己一些小的奖励,比如刷完100个算法题,给自己买个好的键盘或者耳机。还有来自朋友、同事、家人乃至默认人的鼓励也很重要。我在网上写博客分享给大家,如果读者的点赞或者好评,那也是非常能激励我们继续学习的!

而弱化停下脚步的理由。比如练习累了就合理休息一下,学习累了就暂时玩一下,如果觉得自己一个人学技术太孤独,就找一群小伙伴一起学习或者加入一个技术社区。目标要精心设置且合理,这样才能得到达到目标的成就感,不会因为达不到目标而气馁放弃。


目录
相关文章
|
云安全 安全
阿里云服务器25端口解封教程完美解决25端口开通问题
阿里云服务器25端口如何申请解封?默认阿里云25端口是封禁的,一般建议使用465端口代替,但是也可以申请解封25端口,阿小云来详细说下阿里云服务器25端口解封教程
11891 0
 阿里云服务器25端口解封教程完美解决25端口开通问题
|
存储 编译器 Linux
MinGW下载和安装教程
要知道,GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的,如果我们想在 Windows 平台使用 GCC 编译器,可以安装 GCC 的移植版本。目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种,分别为 MinGW 和 Cygwin。其中,MinGW 侧重于服务 W本节要重点给大家介绍的是 MinGw 的安装和使用。MinGw 全称 Minimalist GNU for Windows,应用于 Windows 平台,可以为我们提供一个功能有限的 Linux 系统环境以使用一些 GNU 工具,比如 GCC 编译器、gawk、bison 等等。
5826 0
MinGW下载和安装教程
|
4月前
|
Linux C++ iOS开发
C++ SDL库入门指南(从零开始学习SDL2图形与游戏开发)
本教程来源https://www.vpshk.cn/带你使用C++和SDL2从零开始创建图形窗口,涵盖环境搭建、代码解析与编译运行,适合入门游戏开发与多媒体应用,轻松掌握跨平台图形编程基础。
|
安全 Linux 数据安全/隐私保护
【Linux】深入理解linux权限
本文深入解析Linux权限管理机制,涵盖权限概念、用户角色、文件属性及操作方法。文章分为前言、权限介绍、用户与角色、文件属性、权限修改及常见问题六大板块。详细说明了权限类型(r/w/x)、角色优先级、chmod/chown指令用法,以及目录权限、umask掩码、粘滞位等重点内容。掌握这些知识,可有效提升Linux系统安全性和灵活性,是管理员必备技能。喜欢的话别忘了点赞支持哦! ❤❤❤
755 6
|
人工智能 安全 机器人
AppFlow:将Kimi大模型加入钉钉群聊
使用AppFlow将Kimi大模型(基于Moonshot)集成到钉钉的步骤概览: 1. 在AppFlow控制台创建连接流,选择钉钉机器人,触发事件为收到文本消息。 2. 添加智谱AI的“使用prompt对话大模型”动作,配置API KEY。 3. 配置模型推理后消息的发送回钉钉的动作,插入变量表示模型结果。 4. 配置Webhook地址和加签(或IP白名单),在钉钉群聊中添加机器人,启用Outgoing机制,填写AppFlow的Webhook地址。 5. 通过@机器人在群聊中与Kimi模型进行交互。 这个教程展示了如何通过AppFlow将AI模型无缝接入钉钉,提升办公效率。
960 5
|
监控 安全 BI
【亮剑】摄像头组播技术,一种一对多通信方式,通过特殊组播地址实现信息源向多个目的地同时发送数据
【4月更文挑战第30天】摄像头组播技术,一种一对多通信方式,通过特殊组播地址实现信息源向多个目的地同时发送数据,节省带宽,降低延迟。应用于安全监控、交通管理、商业分析、远程教育和智能家居等领域,提高效率,保障安全。技术关键包括组播地址管理、路由选择和成员管理,以及网络拥塞和错误控制。随着技术发展,其在数字化世界中的作用将日益显著。
591 1
订单支付异常情况处理
订单支付异常情况处理
897 1
|
存储 分布式计算 关系型数据库
|
JavaScript
Nodejs中process.cwd()与__dirname的区别
首先,上官方解释。 => process.cwd(): The process.cwd() method returns the current working directory of theNode.js process. 上面的意思就是,process.cwd()返回的是当前Node.js进程执行时的工作目录。
4947 0
|
存储 缓存 监控
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
深入解析linux内存指标:快速定位系统内存问题的有效技巧与实用方法(free、top、ps、vmstat、cachestat、cachetop、sar、swap、动态内存、cgroops、oom)
2408 0