[程序员] 编程五年,原来我还只是一个高级新手

image-20220917011719330

我大二开始接触编程,如今已经过了五年,本以为自己即使没有多厉害,但是也好歹可以在社区指点一二了,但是最近看了这本书,发现自己不过是个高级新手而已img

今天,我就来分享,阅读此书的前半部分后,我的所思所得,也希望忙于需求和解 bug 的程序员们来驻足一下,重新审视自己的思维方式

我自己在需求中遇到编程难题时,经常是这样解决:

  1. 将报错信息或者疑惑在 google 中搜索,大概率看到 stack overflow 网站出现,往后会有 csdn ,博客园等
  2. 点进去,不看问题,先看最高赞的描述,如果意思和我的想解决的是同一个问题,就复制代码,大致改改,黏到我的项目中

如果生效并有时间,我会认真理解这段代码,确保没有副作用;如果没时间,就直接过了,反正,能跑就行

img

如果不生效,从步骤 1 再开始,如果 stack overflow 没有了,就选 csdn……

靠着上面的步骤,我曾经解决过无数问题,但是有什么问题呢?我们来看下面的模型

德雷福斯模型

这个模型,主要是按照水平将程序员分为 5 个阶段

img

下面的加粗部分是水平的核心描述词,大家可以对照下自己处于的水平

  • 新手:靠着指令清单可以解决问题,但是需要脱离情境

但是一旦遇到与清单不符的事情就没辙,比如各种装机,配环境教程,一般新手遇到与教程不符合的场景就没办法了,所以这类教程一般需要详细再详细

  • 高级新手:可以独立尝试完成任务,但是很难靠自己完全解决,高级新手不想要全局思维,以下是书中描述:

他们想要快速获取信息。例如,当学习一门新语言或 API 时,你可能会感觉到这点,你发现自己会快速浏览文档以寻找一个方法定义或参数列表。你不想在此刻寻根究底,或者重新温习一遍基础知识。

高级新手能够根据过去的经验,逐步在正确的情境中采纳建议,但比较吃力。同时,他们能够开始形成一些总体原则,但不是“全貌”。他们没有全面的理解,而且的确不想有。

​ 上面这段话,完全匹配我我解决编程遇到问题时的情景……读得我后背发凉,手心冒汗,要是我继续以前的方法,估计我就算工作十年,也仍然是一年经验循环十年的高级新手

  • 胜任者:能够建立问题域的概念模型,有效地使用它们,并解决问题,

我觉得一般每个组里面都有那么两三个人很让人很放心,几乎没有出过错,每次问进度都是顺利完成那种……

  • 精通者:需要全局思维。他们将围绕这个技术,寻找并想了解更大的概念框架

这种就属于架构师级别了,一个很大的需求,能够拆解出对应的技术栈,分配给到对应的人处理,一般这种人都能当上 leader ,或者是组里面的救火队员,仅仅凭借听你的问题描述就大致猜出问题所在

另外,精通者属于靠近专家的水平,从胜任者到精通者是质的飞跃,大部分人一生只能到胜任者

  • 专家:靠直觉工作,多的就不说了,这不是光靠努力就能达到的,不在我们今天的讨论范围

不知道你属于哪种水平,我现在,且预计未来两年内,可能都还是处于高级新手的行列,因为坦白讲,在我做需求时,我经常会遇到靠我自己无法解决的问题与知识缺漏,没有谷歌,我早失业了……

也不是说胜任者就不需要谷歌,只是也许不应该像我现在这么频繁

关注情景,系统思维

我想大多数人都处于新手或者高级新手的行列,而高级新手要想达到胜任者,其实也是质的跨越,因为有一个思维的鸿沟需要跨越,如果不是天赋异常,或者读书,靠自己恐怕很难琢磨清楚

而现在,我就要告诉你,这个鸿沟是什么,以及去尝试跨越他

我先问个问题,人是什么?

如果你没有想过这个问题,可以先思考下,再继续看


img

古人说:人是没有羽毛的两腿动物

然后有人就将鸡拔掉了羽毛,说,这就是你定义的人

那么人到底是什么?

你会发现,从这个思路上走,你需要说无数个限定词,人是,

没有羽毛,但有头发,但也可能没有头发

两腿,但也可以一条腿或者没有腿

双眼,但也可以一只眼或者没有眼

……

根本无法下定义,因为你犯了上面模型中说的“新手”错误,也就是

新手:靠着指令清单可以解决问题,但是需要脱离情境

人的状态实在太多了,任何脱离情境的指令清单都无法全部囊括,只有胜任者的问题模型 和 精通者的全局思维能够描述

比如马克思的:人是一切社会关系的总和

这句话,将人放入了社会当中,人不是独立的个体,而是系统特定功能的一部分

人的状态是无穷的,系统的一部分组合也是无穷的,无穷就可以穷尽无穷,只需要找到系统中具有共性的一部分作为人的定义即可

同样的道理

问题是什么?问题也不是独立存在的实体,是系统内部的元素交互产生的错误关系,****我解决的不是某个独立的问题,而是将系统内部某些部分的错误关系,修正了

在解决问题时,除了看问题本身,还要看到背后的系统关系,抽丝剥茧,顺藤摸瓜,不断完善,即使前路漫漫,但这是从高级新手迈向胜任者的必经之路,也是建立问题模型的必要考验

这条路注定枯燥,所以需要有效的方法,每个人的方法各不相同,但是究其本质,需要满足以下四点

  1. 需要一个明确定义的任务。
  2. 任务需要有适当难度——有挑战性但可行。
  3. 任务环境可以提供大量反馈,以便于你采取行动。
  4. 提供重复犯错和纠正错误的机会。

比起更加枯燥的理论学习,编程开发,所见即所得,也许是最适合满足上面要求的领域之一了,毕竟当编译代码的时候,编译器永远永远忠实的告诉你,你到底出了多少错误

img

从现在开始,愿看到此文的你,与我一起突破高级新手的思维桎梏吧

发表回复

您的电子邮箱地址不会被公开。