V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
little2song
V2EX  ›  程序员

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

  •  
  •   little2song · 2022-09-17 15:24:14 +08:00 · 6222 次点击
    这是一个创建于 802 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

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

    20 条回复    2022-09-19 10:56:41 +08:00
    sanyuedev
        1
    sanyuedev  
       2022-09-17 15:26:59 +08:00
    如果是使用上的问题,我会先看一下官方文档;
    hay313955795
        2
    hay313955795  
       2022-09-17 15:35:25 +08:00
    我一般选择重启项目试试看如果不行那我就重启电脑...
    shijingshijing
        3
    shijingshijing  
       2022-09-17 15:45:19 +08:00   ❤️ 55
    说实话,结尾没放个二维码或者公众号,我是很失望的。
    BreadKiller
        4
    BreadKiller  
       2022-09-17 16:08:53 +08:00
    我现在遇到问题首先都是考虑看文档了,如果文档没办法解决再去 google stack overflow 之类的。
    iceheart
        5
    iceheart  
       2022-09-17 19:30:19 +08:00 via Android
    两只黄鹂鸣翠柳,一行白露上青天
    likunyan
        6
    likunyan  
       2022-09-17 19:34:43 +08:00
    我是中级新手
    StuFish
        7
    StuFish  
       2022-09-17 19:43:30 +08:00
    我是专家新手
    ppllss
        8
    ppllss  
       2022-09-17 20:16:24 +08:00
    超级新手
    enchilada2020
        9
    enchilada2020  
       2022-09-17 20:18:53 +08:00 via Android
    我是骨灰级新手
    gzf6
        10
    gzf6  
       2022-09-17 20:34:26 +08:00 via Android
    我才刚上路呢
    ila
        11
    ila  
       2022-09-17 20:41:55 +08:00 via Android
    作者或官方的网站,文档,sample
    little2song
        12
    little2song  
    OP
       2022-09-17 21:25:18 +08:00
    @shijingshijing 有是有,但是不强求哈哈哈
    little2song
        13
    little2song  
    OP
       2022-09-17 21:27:54 +08:00
    @BreadKiller 文档根本没有重点呀,得找很久
    garyox64
        14
    garyox64  
       2022-09-17 22:45:40 +08:00
    这几个等级应该也不是完全从 1-5 晋级关系吧
    我觉得更像是知识积累和解决问题的逻辑关系,新的知识了解不多的时候,自然只能 google ,随着了解多了,会开始总结通用的东西,总结架构,思考如何自动化解决,所以我理解高级新手 阶段其实是已经开始酝酿积累了,后几个阶段大概是 水到渠成的阶段
    GP1
        15
    GP1  
       2022-09-17 23:06:00 +08:00
    你这只是从思维方面来分级的,只能算程序员生涯成长下面的子类。
    reeco
        16
    reeco  
       2022-09-18 00:04:46 +08:00 via iPhone   ❤️ 3
    大二开始算才 5 年,不是新手是啥?
    EliteOtaku
        17
    EliteOtaku  
       2022-09-18 07:51:50 +08:00
    ……其实就是个追根溯源的能力,要知其所以然
    Junzhou
        18
    Junzhou  
       2022-09-18 08:11:32 +08:00
    @reeco 大二开始,其实实际编程的工作经验也就两年(逃)
    lysS
        19
    lysS  
       2022-09-18 14:06:00 +08:00
    这玩意和哪些成功学、商业学的书差不多,没啥啥屁用。难道下次遇到具体的问题不是先把它解决了?
    xqk111
        20
    xqk111  
       2022-09-19 10:56:41 +08:00
    难以逾越的鸿沟是知道和做到,知道是知道某一个知识点(类似八股文),做到是多写代码,最后有一天能做到是知行合一(理论结合实践)。知道很重要,做到也很重要,知行合一存粹靠运气(参考平凡的世界中觉醒期的意思)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3505 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 05:00 · PVG 13:00 · LAX 21:00 · JFK 00:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.