程序员:感觉技术停滞时,该怎么办?

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

理论

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

关于「刻意练习」,不少书或文章都讲了很多案例来说明它的有效性,但总结起来就下面三点:

只在“学习区”练习,练习时注意力必须高度集中。

把训练的内容分成有针对性的小块,对每一个小块进行重复练习。

在整个练习过程中,随时能获得有效的反馈。

刻意练习是为习得真正的技能所设计的,它和获取知识不同,知识就是那些你知道即为知之,不知即无知的东西,可以通过读书获得。但技能是那些你以为你知道,但如果你没做过,就永远不会真得知道的事情。

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

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

停滞,就是这样发生的。

重复

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

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

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

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

万维钢有篇文章叫《用别人预测自己》提到了一个概念:基础比率(base rate)。

所谓基础比率,就是以前的人,做同样的事,做到的平均水平。

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

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

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

反馈

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

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

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

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

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

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

...

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

一技之长背后是一万小时,然后是两技之长,然后到十技之长么?人生哪有那么多一万小时,最后留下一点思考,也许这是下一阶段需要回答的问题。

作者:瞬息之间
文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-12-30 14:23:27

程序员:感觉技术停滞时,该怎么办?的相关文章

C++程序员在学习C#时需要注意的一些问题(一)

c++|程序|程序员|问题 本文讲述的是C++程序员在学习C#时需要注意的一些问题. C++程序员在学习C#时需要注意的一些问题(一) 1)使用接口(interface)在c#中,使用关键字interface来定义接口:而且,在c#中不能使用多重继承.  interface ICar//接口ICar {  int Speed//属性Speed  {   get;   set;  }   void Run();//接口方法  void Stop(); }  class MyCar : ICar /

PHP 程序员的技术成长规划

按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标. 本文按照目前主流技术做了一个基本的梳理,整个是假设PHP程序员不是基础非常扎实的情况进行的设定,并且所有设定都非常具体明确清晰,可能会让人觉得不适,请理解仅代表一家之言.(未来技术变化不在讨论范围) 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操

PHP程序员的技术成长规划

按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标.    本文按照目前主流技术做了一个基本的梳理,整个是假设PHP程序员不是基础非常扎实的情况进行的设定,并且所有设定都非常具体明确清晰,可能会让人觉得不适,请理解仅代表一家之言.(未来技术变化不在讨论范围) 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置

PHP程序员的技术成长规划_php文摘

按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标. 本文按照目前主流技术做了一个基本的梳理,整个是假设PHP程序员不是基础非常扎实的情况进行的设定,并且所有设定都非常具体明确清晰,可能会让人觉得不适,请理解仅代表一家之言.(未来技术变化不在讨论范围) 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操

B2C网站招聘.net程序员和技术总监(北京)

问题描述 技术总监(asp.net)1人岗位描述1.参与制定产品的发展战略,并推进产品战略的执行:2.负责网站的总体技术规划和项目实施:3.负责网站技术团队的管理带领:4.技术团队构架.研发.设计,完成网站整体搭建及产品开发:5.网站设计的整体把关,网站整体VI设计,企业CI设计:6.指导技术团队学习.交流,并不断提升整体团队技术水平:7.参与项目开发,进行网站的升级与维护;8.市场技术动态热点.焦点进行捕捉;9.配合用户需求的调研.岗位要求:1.大学本科以上学历2.在同等规模公司从事该职位3年

如何突破PHP程序员的技术瓶颈分析_php文摘

先明确我所指的PHP工程题,是指毕业工作后,主要以PHP进行WEB系统的开发,没有使用其的语言工作过.工作经验大概在3~4年,普通的WEB系统(百万级访问,千成级数据以内或业务逻辑不是特别复杂)开发起基本得心应手,没有什么问题.但他们会这样的物点: 除了PHP不使用其它的语言,可能会点shell 脚本. 对PHP的掌握不精(很多PHP手册都没有看完,库除外) 知识面比较窄(面对需求,除开使用PHP和mysql ,不知道其它的解决办法) PHP代码以过程为主,认为面向对象的实现太绕,看不懂 这些P

IT软件技术人员的职位路线(从程序员到技术总监) - 部门管理经验谈

以前写过一个文(IT从业者的职业道路(从程序员到部门经理) - 项目管理系列文章),主要介绍笔者的职业发展之路,不过该文需要后续了,因为笔者现在从事的是"产品经理"一职.从笔者的导航文([置顶]博文快速导航)里,定义了IT软件领域的职业路线,基本涵盖了IT软件领域的发展思路.后续笔者会对职业路的职业做描述,但是,本文主要从IT软件工程师的角度去描述IT软件技术人员的发展历程道路.   一.软件工程师: 软件工程师是最基本的IT软件职位,但是他做的是最重要的底层的代码编写.所以说,软件工

古城钟楼微博:葡萄城程序员演练技术的产物

2013年1月7日,一个名为"古城钟楼"的微博引起网友的强烈围观.这个每隔一个时辰就发"铛"的微博迅速爆红,吸引了众多网友关注和评论,粉丝疯涨.至2013年1月8日14时30分,其粉丝已超过28万,在一天的时间里,就暴涨了26万多. @古城钟楼 并非像部分网友猜测的那样通过人工发送,而是由西安葡萄城的两位技术爱好者开发的程序自动报时.2011年初,随着微博的逐渐普及,葡萄城的一些程序员开始关注新浪微博的应用开发,其中一位程序员看到Twitter上有英国大笨钟的报时,

好程序员 + 烂技术 = 痛苦

我所说的"关于程序员的痛苦的一种悖论"描述如下: "好的程序员大部分的时间都在干他们厌恶的事情.使用他们厌恶的技术和工具." 这是反常理的,看上去就是悖论:你会认为烂程序员才会把时间都花在烂技术上,优秀的程序员会把时间花在那些尖端的技术上.不是吗? 我在自己的体验中发现了这个悖论,直到后来我才明白为什么会是这样. 什么样的工作会让程序员们厌恶不已? 这对一些有经验的程序员来说并不是什么新闻,但我要把这向那些非编程人员解释一下: 好程序员厌恶做那些本来可以自动完成的事