阅读更多

1顶
1踩

非技术

在旧文《技术方向的选择》的末尾,我写道:“停留在原地纠结,什么也不会改变。”。当做出了选择就该出发了。为了习得一门技术或技能,我们需要不断地练习,但如果一直在练习,却感觉不到进步,那么再努力的人生,也是枉然。

理论

关于习得甚或精通一门技能,最著名的理论如今恐怕是「刻意练习」,如果非要在这份练习上加上一个期限,那就是:一万小时。

关于「刻意练习」,不少书或文章都讲了很多案例来说明它的有效性,但总结起来就下面三点:
  • 只在“学习区”练习,练习时注意力必须高度集中。
  • 把训练的内容分成有针对性的小块,对每一个小块进行重复练习。
  • 在整个练习过程中,随时能获得有效的反馈。
刻意练习是为习得真正的技能所设计的,它和获取知识不同,知识就是那些你知道即为知之,不知即无知的东西,可以通过读书获得。但技能是那些你以为你知道,但如果你没做过,就永远不会真得知道的事情。

如上,刻意练习的首要一点是练习必须在学习区中进行。以程序员的编程技能为例,到了一定阶段,你感觉技术能力提升不了的原因,很可能就在于你每天都在编程写代码。程序员的工作初期基本每天就是编程写代码,在早期你不够熟练时你还能感觉到进步,这种进步就是从不熟练到熟练。但单纯的编程实战其实并不能持续地提高一个人的能力,想想体育运动员,没有一个运动员每天的过程就是参加比赛。

在程序员足够熟练了之后,每天的这种实战型工作就不会再是处于“学习区”的练习了,而是进入了“舒适区”的自动完成。真正的专业竞技体育运动员每天的日常训练都是在“学习区”的刻意练习,而上场比赛则是进入“舒适区”的自动完成。而很多熟练程序员的日常工作则是在“舒适区”的自动完成,工作之外则是另一种“舒适区”的娱乐休闲。

停滞,就是这样发生的。

重复

重复的刻意练习,让我想到了一种数字 —— 无理数。无理数,是一种无限不循环小数,取其无限不循环之意。

刻意练习的关键点之二,有针对性的重复练习。重复,这个词很误导人,重复的本身是练习过程,而非练习内容,每一次的重复过程中都会根据反馈进行有针对性的调整,以取得练习效果的进步。

一直在重复但却感觉不到进步,除了前面所说的脱离了“学习区”的低效重复,还有可能是重复的次数还不够。有时我们会不自觉地低估了习得一项技能所需要的重复练习次数。近年在我身上就有一个鲜活的例子,在工作十年后我重启了学习掌握英语这门技能的练习,但第一年完全低估了需要重复练习的次数和强度。

第一年,仅仅在每日的工作之余,花上一节课的时间(近一小时)来进行听说读写的练习,即使每日都能保障一节课的时间(实际并没能),一年下来不过区区 300 多小时,分散在听说读写四个分支上,结果就是没有哪一项在那一年结束后让我感觉到一点点的进步。

万维钢有篇文章叫《用别人预测自己》提到了一个概念:基础比率(base rate)。
引用
所谓基础比率,就是以前的人,做同样的事,做到的平均水平。

如果别人做这件事需要那么长时间,基本上你也需要那么长时间,因为你没有那么特殊,只是每个人都会觉得自己是特殊的、例外的。所以,当我一想学英语人群的基数和真正算是掌握并熟练运用这门技能的人数,以及他们所花费的时间,我就知道自己大大低估了需要重复练习的次数。

重复的刻意练习总是辛苦的,但这个过程不应当让你感觉痛苦。就像跑马拉松的人,他的目标是跑完全程到达终点,过程是很辛苦的,但如果鞋子里钻进了一颗小石子,那么就不仅仅是辛苦了,还很痛苦。先要解决痛苦的根源,才可能跑完全程到达目标。

重复,是可以没有痛苦的,但必然辛苦,从没想过会舒适的跑完全程。

反馈

在刻意练习过程中,随时能获得有效反馈其实是一件挺难的事。

就像程序员学习编程技能,谁来给你反馈呢?我们又不像是职业竞技运动员,有教练,还有各种分解技战术动作的分析师,分析你的各种赛场或训练表现,给予反馈。更谈不上针对个体的薄弱环节,随时获得反馈进行修正。

程序员最直接的反馈来自简单粗暴的 bug 或者系统故障。进一步,如果公司有一定规模可能会有测试或 QA 人员来给程序员提出反馈。更进一步,如果公司建立起了很好的代码评审文化, 那么会有其他程序员对你的代码与编程工作作出反馈。但若这些都没有,我们还能如何获得有效反馈?

在我早年的工作中,公司确实就没有能提供反馈的机制,无导师、无测试、无代码评审,就靠简单粗暴的 bug 和系统崩溃来提供反馈,我后来还是找到了两条你可以主动把握的反馈机会。第一,主动找你觉得值得信任或佩服的同事帮你找找茬,提供点反馈。第二,即使已经实现了一个功能,再想想有没有开源的类似东西,去搜一搜,看看开源的实现是怎么做的,在这个过程中就完成了通过别人的代码来向自己的实现提供反馈。但这样得做法都是在主动加重自己得工作负担,也是走出舒适区的第一步。

一些大公司都会有自己的代码维护与分析工具,并随时根据提交情况给出评测报告,这就是一种随时提供有效反馈的自动化机制,身在其中很多程序员往往忽视了这一点。

珍视,每一次反馈的机会。

...

刻意练习,一万小时,多么神奇,似乎无所不能。还有什么是一万小时刻意练习无法解决的问题吗?目前对刻意练习最大的批评是,刻意练习的案例证据多是来自“认知复杂性”较低的活动,如棋类、乐器、体育运动等,但对于“认知复杂性”较高的活动,如销售、管理、投资等作用有限。怎样通过刻意练习成为一名卓越的销售、CEO 或像巴菲特一样的投资大师,从哪里练起?练什么?怎么练?

一技之长背后是一万小时,然后是两技之长,然后到十技之长么?人生哪有那么多一万小时,最后留下一点思考,也许这是下一阶段需要回答的问题。
  • 大小: 201.4 KB
来自: 瞬息之间
1
1
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 3GPP-23501-g10(中文版).pdf

    5.6.6 建立 PDU 会话期间由 DN-AAA 服务器进行的二级身份验证/授权 106 5.6.7 应用功能对交通路由的影响 108 5.6.7.1 概述 108 5.6.7.2 在与 AFS 113 协调的基础上加强上行路径管理 5.6.8 选择性激活和停用现有 PDU ...

  • mico应用服务器端参数交互问题

    选用mico.2.3.12;.net2003(vc7) 状况: 需要在corba服务端提供一个供客户端调用的带参数的方法int xx(int y,int h); xx方法中代码要调用一个DLL的方法int zz(int* p,int* q).(DLL是客户提供的,不能改) zz方法中...

  • MICO学习笔记 (转载)

    MICO学习笔记 学习类 发信人: Mentoya (Javing...), 信区: DOC标 题: MICO学习笔记发信站: BBS 水木清华站 (Thu Dec 18 10:13:48 2003), 站内主要是参考一书.=============================用Visual C++ 开发MICO...

  • 基于消息驱动的面向对象通用C/S应用框架(三)

    1.3 CORBA分布式面向对象体系结构 公共对象请求代理结构(CORBA)是一个被软件工业界广泛认同和采纳的、用来开发分布式面向对象应用软件的体系结构,同时也是由OMG(国际对象管理组)制订的软件互操作国际标准,其...

  • 5G并行处理服务器系统,5G系统架构(一)--网元、接口和架构

    一些重要原则和观点如下: 1、与控制平面功能分离的用户平面功能,它允许CP和UP的独立可扩展性,演进和灵活部署,比如集中的位置或分布式(远端)的位置。 2、功能设计的模块化,比如使能灵活和有效的网络切片。 3、...

  • BlueTooth探索系列(一)---JSR082 API框架剪影

    如图中,SrvDscApp这个服务发现用户应用位于本地设备LocDev上,通过与蓝牙SDP客户端的接口,发送服务查询请求并接收从位于远端设备RemDevs上的SDP服务器的服务查询响应。SDP使用了面向连接的L2CAP协议来传输服务,...

  • CORBA Programming with TAO - 1.Start(基本概念)

    CORBA Programming with TAO - 1.Start(基本概念) CORBA Programming with TAO - 1.Start(基本概念) 摘要: ...CORBA是一个为简化跨平台应用而提出的规范,它独立于网络协议、编程语言和...

  • 什么是中间件?

    - 作者:浪花 -- 发布时间:2005-1-10 23:53:00 -- 什么是中间件? 一、为什么要中间件 计 算机技术迅速发展。从硬件技术看,CPU速度...从软件技术看,应用程序的规模不断扩大,特别是Internet及WWW的出 现,使计

  • Shell编程入门基础上

    Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内容。每一个合格 的Linux 系统管理员或运维工程师,都需要能够熟练地...

  • Rsync学习之旅中

    全局参数 rsyncd.conf参数 参数说明 uid=rsync 运行rsync守护进程的用户。 gid=rsync 运行rsync用户组(用户所在的组) use chroot=no 如果为true,daemon会在客户端传输文件前“chroot to the path”。...

  • 《Docker+Kubernetes微服务容器化实践》笔记1

    有的可能用到了自动部署工具直接从master节点通过jenkens生成war包在准生产服务器指定目录生成,没有问题然后通过脚本的方式,对拷到生产环境。然后重启。如果是微服务不一定少,一个完整的服务可能需要几十来配合...

  • 来来来,看看有没有适合你的物联网操作系统

    虽然 Android 占了移动设备端的大半江山,但 Android 仍然存在不少问题,比如:碎片化问题严重,在大屏幕设备上表现糟糕,以及被很多用户诟病的卡顿与体验问题。虽然卡顿的本质原因是很多无良应用的后台互相唤醒,无...

  • 2021-03-08~09~10~11~12 大数据课程笔记 day47day48day49day50day51

      在当前数据量激增的时代,各种业务场景都有大量的业务数据产生,对于这些不断产生的数据应该如何进行有效的处理,成为当下大多数公司所面临的问题。目前比较流行的大数据处理引擎Apache Spark,基本上已经取代了...

  • C++上位软件通过Snap7开源库访问西门子S7-200/合信M226ES数据块的方法

    自适应交叉连接 支持 硬件接口 RJ45 协议类型 UDP,TCP/IP 配置方式 通过编程软件MagicWorks PLC下载网络块进行配置 应用接口 支持MICO服务、UDP/PPI、TCP/Modbus、Socket,S7协议 最大连接数 8个UDP/PPI不分主从 8...

  • Php常用类库

    可以在服务器端和客户端缓存资源。它集成了PHP图片操作库Imagine来实现图片尺寸调整和剪切,然后进行缓存。Munee可以自动编译LESS、SCSS和CoffeeScript,并且可以把CSS+JS文件合并成一个单一的请求,此外,还可以对...

  • 树莓派Raspberry Pi 系统搭建和智能机器人小车的组装调试

    树莓派可以通过各种工具如SSH, TightVnc,Putty,Winscp等等实现文件交互甚至系统画面访问,不过初学者还是强烈建议买块显示屏进行初始的一些配置,所谓眼见为实,这样便于入门。这里我配置了一块微雪的7寸高清电容...

  • OFDM、OOK、PPM、QAM 的误码率模拟【绘制不同调制方案的误码率曲线】附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

  • 8c71b76fb2ec10cf50fc6b0308d3dcfc_9545878e2b97a84b2e089ece58da9e82.png

    8c71b76fb2ec10cf50fc6b0308d3dcfc_9545878e2b97a84b2e089ece58da9e82

  • Android SO逆向-对象的拷贝构造函数.pdf

    Android逆向过程学习

  • 基于S7-200 PLC的糖果包装控制系统设计与实现

    内容概要:本文详细介绍了基于西门子S7-200 PLC的糖果包装控制系统的设计与实现。首先阐述了PLC在工业自动化领域的优势及其在糖果包装生产线中的重要性。接着深入探讨了系统的硬件连接方式,包括传感器、执行机构与PLC的具体接口配置。随后展示了关键的编程实现部分,如糖果计数、包装执行、送膜控制、称重判断以及热封温度控制等具体梯形图代码片段。此外,还分享了一些实用的经验技巧,如防止信号抖动、PID参数优化、故障诊断方法等。最后总结了该系统的优势,强调其对提高生产效率和产品质量的重要作用。 适合人群:从事工业自动化控制、PLC编程的技术人员,尤其是对小型PLC系统感兴趣的工程师。 使用场景及目标:适用于糖果制造企业,旨在提升包装生产线的自动化程度,确保高效稳定的生产过程,同时降低维护成本并提高产品一致性。 其他说明:文中不仅提供了详细的理论讲解和技术指导,还结合实际案例进行了经验分享,有助于读者更好地理解和掌握相关知识。

Global site tag (gtag.js) - Google Analytics