大多数人在入门之后,都会遇到一个比较大的“瓶颈期”:这个阶段,你已经了解了编程语言的基本语法,可以看懂入门书上的所有例子,但是合上教程却又无法写出一个完整的代码,对于接下来的学习又缺少方向。以至于对编程这件事情感到迷茫,甚至自我怀疑。

这是种很普遍的感受,也是很正常的现象,而且不仅是在学编程上,大家都是一样的 ,这就是猿粪。

有种现象在心理学上被称为“达克效应”,指的是:人在对一件事认知不足的时候往往会高估自己的水平;在经过适当的学习和训练之后,就会认识到事情的复杂度和自己的不足,转而对自己产生否定;继续坚持,走出这一阶段,就会客观看待,进入稳定的成长期

所以,如果开始感到迷茫,至少说明你已走上正确的道路,比起很多刚刚接触甚至还未接触编程就觉得自己可以三个月成为软件工程师的人,你已经超越了一个阶段。

可以说,几乎所有的程序员都是这么过来的,包括我自己。你们看到教程前几课里的那个猜数字游戏,我刚开始学编程时,做了一个多星期;大一的暑假折腾了近两个月,才完成一个很蹩脚的黑白棋。以我的经验来看,这个过程甚至不只是一个达克效应的曲线这么简单,而是无数个小的达克效应:你总是会不停地面对自信和自我怀疑

无论你的心态(纵轴)如何变化,你对于编程的认知(横轴)一定是增长的

那么问题来了,我们该如何面对这种起伏

在软件工程领域有个概念叫做“迭代式开发”。最传统的“瀑布式开发”是遵循 需求->设计->开发->测试 这一开发流程,每一步都完善之后进入下一个阶段,直到最后交付成品,一步到位。这看起来是个很有效的模型,但实际中有太多不可预知的因素,造成了大量软件的开发失败。“迭代式开发”则在其基础上做了改变,虽然同样是从需求到测试这一流程,但并不再是一步到位,而是把产品拆分成很多小版本,每次迭代只需要实现一部分功能,之后再根据实际情况调整下一版本。如今的互联网产品几乎都是基于类似的迭代开发方式。

迭代开发的好处显而易见,但到了学习这件事上,很多人就还没想通这一点,潜意识里还是觉得应该一步到位。你可能觉得编程学习是这样的过程:

但其实,它更类似于这样:

除了一开始很基本的一些语法外,后续的进阶内容很少是线性发展的,通常都是多个知识点的结合。所以你必然会在第一次遇到某个概念时茫然。对此,你要做的并不是寻找一个按部就班的教程(这基本不存在),而是坦然接受这种未知,不求甚解,硬着头皮往下看在第一次学习的迭代时,去构建整体的认知,勿钻牛角尖;在后续的迭代中,这些曾经孤立的知识点就会在你脑中逐渐产生化学反应,形成连接这是个不断迭代的过程,也是个量变到质变的过程。所以让程序员去给新手讲一个概念,往往很难讲明白,因为这本身就不是通过“讲解”获得的认知,你没有相关的概念,没有前9次的迭代,不可能直接领悟第10次迭代的结论

所以你以为的学习曲线可能是这样:

但实际上,它更可能是这样:

你需要不断经历反复的学习。大多数瓶颈期的问题,只是因为学习的时长还没到位,写的代码还太少。饭要一口一口吃,编程也是要一个坑一个坑地踩。但好的一方面是:你每次的迭代学习,都会得到新的认知

举个实际例子:我在爬虫教程里写,Chrome 开发者工具 Elements 里看到的源代码,是渲染后的结果,跟你用代码抓下来的不一样。这个话但凡我在爬虫相关的文章和教程中,基本都会提,但对于没有操作过人来说,这话毫无意义,你听了也不会增加任何认知。但反过来,只要你满足 1.踩过这个坑 2.看到过这句话,这个知识点的连接就形成了,并且几乎不可能再忘,因为本身并没有难理解的逻辑,只是你不知道而已。

所以说进阶靠项目,目的就是通过实践开发,把你曾经看过的点都连接起来。就像乔布斯说的:

Conneting the dots

你在向前展望的时候不可能将这些片段串连起来;你只能在回顾的时候将点点滴滴串连起来。所以你必须相信这些片段会在你未来的某一天串连起来。

you can't connect the dots looking forward; you can only connect them looking backwards. So you have to trust that the dots will somehow connect in your future.

Steve Jobs

虽然这话说的是人生大道理,但放在编程这件小事上,同样适用。

我们总是容易高估自己短期内能做到的事情,而又低估自己长期能达到的高度。

如果心态不好,急于求成,一时学不会就很容易自暴自弃。你想想看,专业的大学生再怎么不努力,好歹也学了四年呢,凭什么你觉得自己三个月就能跟别人竞争?要是抱着这样的心态,最后难免是21天从入门到放弃。

但说难很难,说简单也简单。难在并不是每个人都相信时间的力量,都能在尚未看到成果的阶段坚持下来,跨过绝望之谷。简单在于,只要你做得够久,就已经胜过了许多人,跟什么天赋、出身都没多大关系。

一个程序员的心路历程相关推荐

  1. 一个程序员的学习历程

    一个程序员的学习历程 转眼工作已经四年多了,一直想找个时间总结一下,却迟迟懒得动手.今天一定要强迫自己写出来,不光是为了工作过的四年,也是为了和同样作技术的朋友和即将工作的学友一起共勉. 2000年从 ...

  2. 一个阿里巴巴程序员的心路历程

    来源:创业家 作者:@放翁_文初 淘宝开放平台技术产品负责人 10月13日,关于淘宝开放平台技术部分的分享看到有些同学留言说有这样的机会和环境是幸运的,的确在阿里这些年赶上了公司的发展,赶上了互联网技 ...

  3. 关于我,一个35岁的老程序员的心路历程

      打工十余年,从盛大.网易.电魂.再到字节,再到 130w粉 的知识博主,我都经历了什么?如果你现在正为是否要在 编程行业 深耕下去而头疼,那么可以看一下我的故事,希望可以激励到你,看完一定不会让你 ...

  4. 一个程序员的奋斗历程(偶像程序员)

    明:此文为多年前的一位程序员所写,看过后个人非常感动和崇拜,贴与空间中,以自勉! 这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量. ...

  5. 一个30岁转行程序员的心路历程续

    又来给大家讲故事,这一篇应该算是续吧,时间点是两个月以后,培训班的课程还有5天结束. 前言 上一篇写作时间是5月中旬,课程过半,人很彷徨,要学的很多,会的很少,前前后后也讲了很多过去的事,这里是传送门 ...

  6. [转:有种感觉叫佩服]一个程序员的奋斗历程

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能 ...

  7. 一个程序员的奋斗历程(绝对励志!) [转]

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能 ...

  8. 一个程序员的奋斗历程

    这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望能够为国内IT的发展尽自己一份微薄的力量.最近看到很多学生朋友和我当年一样没有方向 ,所以把我的经历写出来与大家共勉,希望能 ...

  9. 一个程序员的创业历程

    原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 .作者信息和本声明.否则将追究法律责任. http://zouhui.blog.51cto.com/3827922/775880 20 ...

  10. 连载《一个程序员的成长历程》-8.步入社会,艰难起航

    百木-ITer职业交流-北京群:141588103 毕业的前半年,我就进入学校这个企业实习了.说是来做软件开发,其实是先从生产部门干起.当时每天给10块钱,一个月220块钱,虽然不多,但是已经很高兴了 ...

最新文章

  1. 我潜入清华神秘实验室,用脑机接口写了两句诗
  2. [Silverlight]使用MVVM模式打造英汉词典
  3. Java网络编程从0——》入门
  4. AJAX的安全性及AJAX安全隐患
  5. 玩转Google开源C++单元测试框架Google Test系列
  6. VS2013 异常处理
  7. python web 文件管理_我的第一个python web开发框架(23)——代码版本控制管理与接口文档...
  8. 人工智能目标检测模型总结(三)——yolov1模型(2)
  9. oracle查询所有表名_oracle删错数据了,要跑路吗,等一下,先抢救一下
  10. iOS 14.1 真机包
  11. 正则表达式学习笔记系列----1
  12. Spring搭建MVC WEB项目[转]
  13. 远程协同TeamViewer
  14. 使用js创建a标签下载文件
  15. 2020 的最后 1 天,写个年终总结吧!
  16. 谈谈公司内部的技术分享
  17. 自己写的网页放在github里面
  18. Shiro学习01:使用Shiro实现身份管理和权限验证
  19. 如何下载NCBI的ftp数据
  20. superset设置起止时间为明天

热门文章

  1. PCB需要清洗的技巧
  2. 中国医科大学2021年9月《社区护理学》作业考核试题
  3. “互联网协作如何改变商业未来”文字实录
  4. 超详细从零记录Hadoop2.7.3完全分布式集群部署过程
  5. 从零起步做到Linux运维经理, 你必须管好的23个细节
  6. 最贵新股没破发,此前弃购7.8个亿,背靠华为的这家半导体公司这么香?
  7. php的seeder是什么,laravel利用seeder实现数据表中填充数据
  8. Java入门需要了解(面向对象之接口-十四)
  9. python转码时出现'illegal multibyte sequen'错误
  10. 工作中 pyspark的小知识点