0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

编程水平真的是一个量变到质变的过程吗?

朱老师物联网大讲堂 2022-07-22 09:59 次阅读

鹅厂内部,有一个关于“编程水平提升”的帖子,题主是这样写的:

我是非计算机专业出身,近一年来,发现开发相关的工作越来越多。虽然能勉强应付,但是特别害怕别人看我的代码,觉得自己的代码写很糟糕。我试图去请教前辈,怎么才能提高编码水平,前辈说多写。但是我感觉多写就一直在重复那个勉强应付的if else过程,体力搬砖,并没有什么进步。前辈说:量变才能达到质变。请问大家有好的经验可以借鉴么?多写真的会量变到质变么?这个量变的过程大概需要多久?

关于这个问题,我们来听听鹅厂程序员们的经验:
01 有效努力是量变引起质变的前提@Jianfei.说下个人的理解,量变到质变的前提是:做出的是有效的努力。那么什么是有效努力呢?

  • 无效的努力:一年的经验努力用了十年
  • 有效的努力:遇到问题问5个以上why、深度思考、不停学习、不断突破舒适区的边界

只有做出了有效的努力,才能积累知识的深度和广度,当广度和深度达到一定程度的时候,就会发生所谓的质变,质变是什么样的状态呢?

  • 学习新知识会很快,很多东西一看就知道技术的本质是什么样子
  • 遇到问题可以一眼看到问题的本质

那具体怎么做出有效的努力呢?给几个小建议:

  • 遇到需求不要着急写代码:一定要想明白为什么要写这个代码,这个代码到底要解决什么问题,这个需求的实现方案有几种?最佳方案是哪个? 怎么能优雅的来实现?脑子里能彻底想明白了这些问题,写代码只不过是分分钟的事情。
  • 遇到问题不要慌:解决问题的关键是先找到到底是谁的问题,“根因”是什么,如果不能很清晰的答上来,那就说明并没有掌握,这时候就去查资料、学习。直到吃透为止。
  • 从点开始扩展成面:当你负责的是大系统里很小的一个点时,一定要先从各种渠道去学习和理解这个系统整体,去深入理解你的上下游的架构和原理,不断扩展,进而理解整体架构

总结起来,以下三点:

  • 保持好奇心:对不懂的东西保持好奇心,并且有决心去理解和攻克
  • 持之以恒:技术本身是比较枯燥的,但是解决问题的时候成就感是很好的,一直保持下去

一切都是思维:一定要学会深度思考,不要只顾埋头干活儿,所有的问题,如果你有清晰的思路都不是问题

@Howard.这事我觉得吧,量变到质变是有的,但单纯重复简单代码是不可能质变的。我自己水平也就一般般,班门弄斧说两句,希望能抛砖引玉。其实计算机专业的大学课程就已经指出大概的学习方向了:1. 一般大一学C语言,大概掌握面向过程的程序设计思路。大多数非科班工科专业的计算机课程基本都停留在这阶段,无论用多少年MATLAB也不会改观(我用了8年matlab,我现在天天黑)。大多数脚本语言也都是这样,按照顺序把思路写下来,让计算机一步一步执行。2. 理解OOP(面向对象编程)是水平提升的一大飞跃。掌握继承、多态、封装之后是一个aha moment,原来代码还能这么写,真牛X!现在大多数的大型系统基本都是基于OOP思想设计的,OOP是你掌握编程和控制系统复杂度的一个利器。3. 学会算法与数据结构,也是代码提升的一大步。当你像洋葱一样拨开数据结构的层层外壳时,你对编程的理解就进入了一个新的阶段。什么时候用链表、什么时候用顺序表、什么时候用图、什么时候用树。什么是B数、B+树、红黑树?为什么数据库要用B+树,为什么有些场景要用红黑树。4. 学会操作系统原理,也是代码提升的一大步。当程序设计到一定阶段,想要继续提升和优化,你就必须要深挖程序所在的平台 - 操作系统了。明白操作系统底层的运作机理,你才会明白,如何调度程序能够让代码更高效,如何并行、如何多进程,如何多线程。5. 当然再往下深挖编译器和计算机组成原理(压榨CPU性能、压榨GPU性能等),依然有很大的代码提升空间,但对大多数人用处不大了。一般都是交给专业人员来深入优化。02 量变引起质变,需要找准标准+刻意练习@Zale.个人深知自己能力及知识都存在很大局限性,仅尝试分享同为非计算专业毕业生当前认知中的理解,如有不同见解欢迎沟通和补充。【结论】1、量变不一定会引起质变,而1万小时+刻意练习能极大程度上促进质变的形成
PS:为方便梳理,下面主要将量变等价于1万小时,质变等价为领域专家,质变的尝试界定详见基础知识的PS2。
2、无论如何,不要因为现在忙而放下学习和成长,视野和能力的提升会帮助你更好、更高效的解决问题。【基础知识】一、量变与质变一万小时定律起源于《异类》,指“人们眼中的天才之所以卓越非凡,并非天资超人一等,而是付出了持续不断的努力”,并提出1万小时是任何人从平凡变成世界级大师的必要条件(注意,只是必要条件)。《刻意练习》对一万小时定律进行了补充,即1万小时+刻意练习能帮你更大概率的达到专家水平(注意,会极大程度上促进你成为专家的概率)新增的刻意练习主要是指通过不断重复,将学习区的内容拉取舒适区,主要涉及以下内容:0、找准标准:有合理发展的领域或行业、能引导你的导师。主要作用是明确标准,从而引领你刻意练习的方向。1、大量重复的训练:从不会到会,秘诀就是重复。在熟悉之后就跨越舒适区,不断再将学习区中高难度的事件重复并尝试将其纳入舒适区。2、持续获得有效的反馈:反思、总结、改进3、精神高度集中:独立思考和独立练习(可引申至深度工作)总结一下核心就是:直面问题,明确标准,独立思考,持续行动,不断走出舒适区。
PS1:遇到恐慌区的事情怎么办?计算机领域中有两个重要概念分解和等价,遇到恐慌区的事务,将其分解为多个学习区和舒适区内容的总和,保证整体等价,即A(做不了)= B(可以做)+ C(可以做)+ D(可以做) + ... + Z(可以做)。PS2:如何界定质变/专家?这里的界定可能比较模糊,每个人心中的标准可能不太一致。但你既然提出了这个问题,更大概率是跟高水平框架设计、优雅的实现及公司/业界的专家相挂钩。
如果是指这些,他们在领域专业程度和贡献上都会有比较高的积累,也许我们短期很难达到。可以尝试换个角度思考,一方面,我们可以通过学习逐步成为领域内的组内专家、部门专家、公司专家、业界专家;另一方面,我们可以将看问题的视角从外部转向内部,减少外界身份或标签的界定,更多地关注自身的每一次成长,关注每一次实现是否能有更好的解决方案,关注技术所产生的价值和成就感。这样会让我们更快乐、更快速的成长,更大概率的触发专家的质变。二、稀缺与体系化稀缺在《稀缺:我们是如何陷入贫穷和忙碌的》中定义为:“拥有”少于“需要”的感觉:

书中结论一:稀缺容易触发管窥书中结论二:稀缺会进一步延续并加剧稀缺

优化方案:跳出当前"管窥"场景和视野,站在更长远的角度去思考问题。管窥:专注于某一件事物就意味着我们会忽略其他事物,也叫“隧道视野”。就像视野被局限在一个管子中,那些存在于“管子”视野之外的事务就被抑制了。

为什么忽然会提到稀缺?是希望能对提问中“开发工作逻辑简单、很多东西不懂”这里有所帮助。在完成需求的情况下,你可以跳出你原本的开发内容,去自由的了解更多你想知道的东西。可以感受到你希望自己能够快速成长的心情,那可以站在让自己快速成长的角度,更体系化、更全面的去了解技术、项目甚至领域,这对你的未来工作和发展也会很有帮助。比如去了解文章中描述的配置、存放目录甚至是项目技术选型、框架设计等等内容,当然这需要你主动花费时间。【回到编程领域】一、找准标准:从整体到局部

了解学科发展:计算机行业已经发展几十年,各个领域都有自身的体系架构,可以参考学习。
PS:能让我们更清楚的了解到自己所在的领域历史发展,当前处于什么阶段,当前需要什么,以后会要往哪个方向发展,我们需要做什么准备。

站在巨人的肩膀上:领域经典书籍、领域前沿技术、领域成熟开源项目的代码都有非常大的参考学习价值的。
PS:能帮助我们完善领域知识体系、框架设计、代码风格等很多内容。

基础知识:语言、数据结构、算法、设计模式、操作系统、计算机组成原理
PS:能让我们在遇到问题的时候,了解有哪些方法可用,如何更便捷、更高效,更普适实现。

个人实际编程:技术是由场景和需求推动的,在自己所处的领域、场景和需求中尝试做到最好。
PS:能让我们将上述学习到的所有内容进行实际的落地和尝试。

二、刻意练习:从局部到整体

优化原有代码:自己写的代码能否尝试优化,抽象,封装,甚至开源协同推广给其他人。

业务需求:新的业务需求是否有用更优的方案实现,是否可以花更多时间去仔细研究。

开源协同:参与到内外部开源协同中,接触更多的优秀代码,接触更多的业务场景和需求,详情可见技术图谱。

不断成长:不断稳固基础,不断在上述3项中成长,不断吸取领域前沿知识并反思落地,相关成长还可以分享到技术论坛

03 编程水平的提升是解决问题能力的提升@Liquan.楼主提问的真实内涵是为了提高自己的编程水平,那大多数人都会建议多写一代码,量变才会有质变。这里就要看看“量”变的量到底是代码量的积累还是其他,这里结合自身的一些经验谈谈:编程水平的提升,不仅仅是代码量的提升,归根结底是解决问题的综合能力的提升。分享一下我大学的编程故事:大学的时候参与过一些软件开发项目(C语言、网络协议实现),当时是一行代码10块钱(大括号也算一行),也就是说,像一般的学生来做,写个1-2千行代码,其实创造的收入也会有几万块,现在想想依然还是会兴奋的搓搓小手,当然前提是代码质量和功能均能够通过评审;当时因为是和传统软件厂商合作,所以项目都是严格的遵守项目流程的,采用的流程是V模型,大概会经历这几个阶段:47b0bb04-035b-11ed-9ade-dac502259ad0.png在这个流程下,前期的需求分析,概要设计和详细设计大概会占到2个多月,后期的单元测试,集成测试等也会占到2个多月,实际代码开发的时间一般不到1个月,所以真正编码的时间可能仅占整个项目的不到20%左右的时间。项目前期的需求分析、拆解以及概要设计一般是项目经理(公司的资深经理)带着几个项目骨干完成,详细的流程图、设计图和文档等,作为菜鸟一般就继续结合相关业务知识完成详细设计和编码,以及后面的功能验收等;所以说编程能力仅仅是编码实现吗?至少从这个流程中看,对业务知识的理解、详细的设计等系统性的思考会比编码占据多的多的时间。所以编程水平绝不仅仅只是把代码写好了,它是一个系统工程,归根结底还是高质量、高效地解决实际业务问题。编程水平的提升过程,在我看来应该是这样一个过程:1、能够把简单的业务需求转变成代码逻辑,并能够高效的完成;
2、针对小型的项目能够将业务的实际问题拆解成详细的需求,能够完成整体方案的设计和选型;
3、再往上就是能够完成较大项目的设计,能够设计多种方案,并且明白所有方案的优缺点以及当前业界方案的优缺点来选择最优,能够根据实际问题突破关键性难点,取得原创性的成果,最终达到系统的最优。所以对于我们来说一般做到第1.2 层面也许就够了,可以:1、多写代码,多总结思考,参考编程规范,写出高质量的代码2、将一些常用模块抽象成库,尽量的复用已有模块;3、熟悉常见的一些设计模式,并基于此解决项目中实际的问题;4、了解业界同行在相同项目上的方案,并知道优缺点。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3440

    浏览量

    92401
收藏 人收藏

    评论

    相关推荐

    热重分析仪:探索物质温度与质量变化的关键工具

    热重分析仪是一种独特的科学仪器,它利用热重法来测量物质在温度变化过程中的质量变化。这种仪器在科研、工业生产和质量控制等领域都有着广泛的应用。上海和晟HS-TGA-101热重分析仪热重分析仪的工作原理
    的头像 发表于 03-20 09:43 117次阅读
    热重分析仪:探索物质温度与质<b class='flag-5'>量变</b>化的关键工具

    智能网联汽车产业的区域布局动因与趋势分析

    我国汽车产销总量已连续14年居全球第一,推动量变转向质变成为要务,智能网联汽车正是突破口之一。
    的头像 发表于 02-20 11:35 301次阅读

    盘点2023,机器人行业大件事TOP5

    才,但是机器人行业不同其他,可以说是国家基础工业的缩影,没有过硬的技术实力,纯靠资本短期的驱动,是很难量变到质变
    的头像 发表于 01-04 09:20 245次阅读
    盘点2023,机器人行业大件事TOP5

    ADA4800A如何把15V电压变到1.5V?

    我看到ADA4800A输入输出电压没有变化,我想把15V电压变到1.5V,请问怎么解决啊
    发表于 12-21 07:39

    浅谈无人机行业从量变到质变的实例

    有个客户需要921.6K的波特率,笔者看了下XLR模块的说明书,可以满足,就信心满满地调试。结果却是X-CTU读出XLR的型号后,就无法读出具体参数了。笔者先是问了原厂技术支持,说是怀疑XLR本身有问题。
    发表于 11-30 10:48 192次阅读
    浅谈无人机行业从<b class='flag-5'>量变到</b><b class='flag-5'>质变</b>的实例

    为什么锂电池用一端时间后电池容量变低?

    为什么锂电池用一端时间后电池容量变低?
    的头像 发表于 11-27 15:45 424次阅读
    为什么锂电池用一端时间后电池容<b class='flag-5'>量变</b>低?

    包络仿真的四个步骤过程

    最近探索仿真的时候,在DF下仿真射频系统时,需要用到包络仿真(envelope simulation),所以就扒拉着看了一点ADS里面关于其的help内容。以下为翻译记录。
    的头像 发表于 11-08 14:23 463次阅读
    包络仿<b class='flag-5'>真的</b>四个步骤<b class='flag-5'>过程</b>

    编程语言的加载和执行过程

    上一章着重讲了指令,我们用汇编、C语言等工具编写的代码最终也被转化成机器指令被执行。本章进一步阐述编程语言如何被加载和执行的过程
    的头像 发表于 10-31 10:13 340次阅读
    <b class='flag-5'>编程</b>语言的加载和执行<b class='flag-5'>过程</b>

    半导体行业之半导体工业(九)

    在之前众多技术的量变积累之上,终于触发质变效应,仙童半导体公司引入了平面化技术,将之前的这些点技术集合到了一起。
    的头像 发表于 10-27 11:23 405次阅读

    大模型意味着人工智能的质变时刻已经到来!

    IBM 大中华区董事长、总经理陈旭东这样说道:“ChatGPT 的横空出世,证明了大语言模型是一条走得通、通往未来 AI 的道路,也意味着 AI 的发展经过几十年的算法、算力、数据方面的量变积累,‘质变时刻’已经到来。”
    的头像 发表于 09-15 16:23 348次阅读

    电容容量变小有什么影响?

    电容容量变小有什么影响? 电容器是在电学领域内使用范围很广的一种电子元件,它具有存储电荷的能力。在电容器里面,两个电极之间受到电压的作用会使电荷在两个电极之间移动,当电荷取走电容器内部的电量
    的头像 发表于 09-07 15:58 6532次阅读

    圆齿轮流量变送器介绍

    1、概述 圆齿轮流量变送器属于容积式流量变送器一种类型。是高精度测量体积流量的变送器。随着介质的流动使齿轮啮合转动,在流体流动的作用下,仪表进出口两端形成压差,不需要供电,一对齿轮自由旋转,其齿轮
    的头像 发表于 07-18 10:40 318次阅读
    圆齿轮流<b class='flag-5'>量变</b>送器介绍

    AI开发赋能千行百业 华为云盘古大模型3.0发布

    工信部副部长徐晓兰表示,新一代人工智能以深度学习算法为代表,引领着发展热潮。通用人工智能以大模型为代表,不断取得技术突破,实现了从感知向认知、从量变到质变的跨越。
    的头像 发表于 07-10 15:44 833次阅读

    基于PASCAL的高级编程语言——SCL编程语言

    根据该标准,可对用于可编程逻辑控制器的编程语言进行标准化。SCL 编程语言实现了该标准中定义的 ST 语言 (结构化文本) 的 PLCopen 初级水平
    发表于 06-20 10:20 1067次阅读
    基于PASCAL的高级<b class='flag-5'>编程</b>语言——SCL<b class='flag-5'>编程</b>语言

    应用113B26测量柴油机燃油喷射动量变化率

    喷射率和动量变化率是描述喷油嘴喷射过程的重要特征量,喷射率是指单位时间内流过喷油嘴的燃油质量,用于精确表征发动机工作过程中燃油进入气缸的瞬态量,动量变化率用于描述燃油的混合程度。例如,
    的头像 发表于 06-07 14:32 458次阅读
    应用113B26测量柴油机燃油喷射动<b class='flag-5'>量变</b>化率