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

    文章

    3595

    浏览量

    93600
收藏 人收藏

    评论

    相关推荐

    esp32采集三ads1256数据,读取到的数据噪音很大,然后每个adc的噪音水平还不样,为什么?

    ,然后每个adc的噪音水平还不样,是什么原因呢? 有测过信号线的波形 这个miso是不是不太正常 还有如果想更换通讯方式的话,这个ads1256能直接接RS485总线吗,有没有相关的参考资料,求求啦,真的很需要帮助
    发表于 11-20 06:40

    功率电感在电路中感量变化大的原因

    电子发烧友网站提供《功率电感在电路中感量变化大的原因.docx》资料免费下载
    发表于 11-04 10:22 0次下载

    用OPA857做了跨阻放大器,在测量过程出现了放大波形失真的情况,怎么解决?

    本人用OPA857做了跨阻放大器,在测试过程中使用电阻和方波信号源(电压除去电阻依旧是电流输入)。 但是在测量过程出现了放大波形失真的
    发表于 08-28 06:42

    plc编程st语言怎么编

    控制。下面是基本的ST语言编程指南,包括如何开始编写简单的程序。 1. 基本结构 ST程序通常包含变量声明、函数(或
    的头像 发表于 08-25 10:05 922次阅读

    OPA875输出信号质量变差是什么原因导致的?

    时,直流的输出信号较为平稳,如下图所示。 当DAC60096接入输入,给出电压值时,引入了相当大的噪声,导致直流信号的质量变差。 但DAC本身给出的信号质量是较平稳的,请问信号质量变差的原因是什么以及如何改善呢?
    发表于 08-02 07:47

    如何手搓自定义的RPC 远程过程调用框架

    种常用的技术,能够简化客户端与服务器之间的交互。本文将介绍如何基于Netty(网络编程框架)实现自定义的简单的RPC框架。 首先简单介绍
    的头像 发表于 07-22 12:17 834次阅读
    如何手搓<b class='flag-5'>一</b><b class='flag-5'>个</b>自定义的RPC 远程<b class='flag-5'>过程</b>调用框架

    PLC出故障了吗?6方法为您排除PLC使用过程中出现的故障

    PLC是现代工业自动化系统中的核心组成部分,负责监控和控制各种设备和过程。然而,在使用时PLC出现问题了,如何判断其是真的损坏还是暂时性的故障,可能是难题。以下是
    的头像 发表于 03-13 09:49 1012次阅读
    PLC出故障了吗?6<b class='flag-5'>个</b>方法为您排除PLC使用<b class='flag-5'>过程</b>中出现的故障

    分享调测电量计过程中发现的电阻问题

    今天,给大家先分享,调测电量计过程中发现的电阻问题,盲猜99%的工程师小白不了解这个特性。
    的头像 发表于 03-12 16:48 696次阅读
    分享<b class='flag-5'>一</b><b class='flag-5'>个</b>调测电量计<b class='flag-5'>过程</b>中发现的电阻问题

    MAVLink在应用编程中的编程原理和思路

    嵌入式开发过程中,UART、 CAN、 USB等通信基本离不开通信协议。 下面给大家分享种通信协议(MAVLink)在应用编程中的编程原理和思路。
    发表于 03-08 12:45 797次阅读
    MAVLink在应用<b class='flag-5'>编程</b>中的<b class='flag-5'>编程</b>原理和思路

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

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

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

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

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

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

    Saber中如何更好地提高仿真的收敛性()

    在仿真过程中,由于仿真模型的不连续性,或者模型没有适当地表征/参数化,或者当求解器无法求解控制模型行为的方程时,可能就会出现仿真的收敛问题。
    的头像 发表于 12-05 14:43 1550次阅读
    Saber中如何更好地提高仿<b class='flag-5'>真的</b>收敛性(<b class='flag-5'>一</b>)

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

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

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

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