8种提升程序猿编程能力的方法+编程思维四个核心:分解、抽象、模式识别和算法

2023-10-27

8种提升程序猿编程能力的方法

对于程序员来说,提高自己的编程能力,算是给自己定的职业发展目标之一,不过定一个成为编程大神的目标很容易,具体做起来可能就不是一件简单的事了。首先,既然决定“我要变得更好”,得先知道“更好”是什么样子的。另外,不能“想变得更好”,却没有任何具体可行的措施。
在这里插入图片描述
本文分享 8 个成为编程大神的可行经验,供读者参考。

1. 警惕“我了解”,“我知道”的学习态度

比如希望学习C语言,那第一步要意识到自己不懂 C语言,都懂的话,干嘛还学呢?这听起来像是一句废话,但是太多的计算机专业的学生毕业时,都会有一种傲慢的“我最了解”的虚张声势,并且迫切的希望向每一个同事证明这一点。然而又有太多的例子证明,持这种态度的程序员往往在技术上进步的都比较慢,所以,在深入学习中,“我了解它”,“我知道它”的态度会妨碍你学习任何新的东西。

现在想想,一般声称自己“精通xx语言”的都是菜鸟。

2. 不“自我欣赏”

若希望成为程序员大神,得从各个前辈的经验中学习。但是要小心,经验也有可能会让我们重复不良行为和养成不良习惯。我们都遇到过有八年“经验”的程序员……但是他的“经验”是:同一年的经验,重复了八次。为了避免这种情况,需要时刻反省自己做的每件事,问问自己,“我怎样才能使这个更好呢?“
在这里插入图片描述
新手程序员会欣赏自己写出的“优美”代码,并且编写出测试用例证明它们是可以正常工作。这一点,似乎很多“有经验”的老手程序员也常这么做。不过,优秀的程序员应该积极寻找自己写的代码中可能错误的地方,写出的各种测试用例的目的也在于查找错误,而不是欣赏自己的代码在自己的测试用例中的完美运行。因为他们知道最终用户会发现程序中的错误和漏洞的。

3. 程序运行起来不是停止,而是开始

的确,程序员的第一步工作应该编写出符合规范的高质量软件,不过一般的程序员一旦把功能实现就会退出,然后继续下一步。一旦“完成”就停止的这种做法,就像是随手拍一张快照,期待它成为一件艺术品。优秀的程序员把功能实现只是开始,还要继续对其精雕细琢,写出稳定性更强,性能更优的程序。
加粗样式
这个过程的一部分就是文章开头提到的“更好”的含义。加快速度有意义吗?是更容易记录?更可重复使用?还是更可靠?答案因每个应用程序而异,但是对待程序的态度却是一致的。

4. 写三次(个人比较看中这点)

一般的程序员编写可以正常工作的软件,优秀的程序员编写工作性能更好的软件。但是工作性能更好的软件通常都不是一次性就能完成的,从某种意义上来说,最好的软件一般都要写三次:
第一次,编写程序证明自己设计的解决方案是可行的,并在此基础上优化设计。
第二次,让程序正常工作了,但是可能还有性能的优化空间,以及可能还存在漏洞。
第三次,让程序不仅正常工作,而且可以高效的,稳定的工作。
在这里插入图片描述
一般我们看到优秀的程序项目,都会感觉大神写的代码行云流水,如此优秀,但是大神的优秀程序项目一般也是需要“写三次”的,只是这些工作都隐藏在背后。有些程序员开发程序会停留在第一或第二个版本,这其实是与希望“我要变得更好”的初衷相悖的。

5. 阅读优秀代码

可以说,阅读大神们的优秀代码是提高编程技能最常见,也是最有价值的建议。当阅读别人的代码时,会看到大神是如何解决编程问题的,不过不要只是“看看而已”,想要变得更好,需要问问自己:
要是我遇到相同的问题,我该怎么写这段代码呢?
我学到了什么?我如何将这种技术应用于我的程序?
如何改进此代码?如果这是一个开源项目,而且你有更好的解决方案,那么就去做!
尝试以作者的风格写程序。这样可以让自己从不同角度看待问题,相信是有好处的。
不能只是漫不经心的想这些问题,应该把自己的答案写下来,可以是以个人日志、博客、代码审查等各种形式,就像是向朋友解答一个问题一样,写下并分享自己的分析常常可以帮助自己加深理解。这其实是内省的一部分,可以帮助自己冷静的判断自己的长处和弱点。
在这里插入图片描述
不要只是漫不经心地想这些步骤。写下你的答案,无论是在个人日志、博客、代码审查过程中,还是与其他开发人员在社区论坛中。就像向朋友解释一个问题可以帮助你找出解决方案一样,写下并分享你的分析可以帮助你理解为什么你会以一种给定的方式对他人的代码做出反应。这都是我之前提到的内省的一部分,帮助你冷静地判断自己的长处和弱点。

许多开发人员通过查看开源软件或其他软件来“找到答案”,并且很有可能复制和粘贴似乎可以解决类似问题的代码。这样做实际上会使自己成为一个更糟糕的程序员,因为盲目的复制和粘贴缺乏自己的思考,别人的东西永远是别人的东西,变不成自己的。

6. 编写程序不全为了挣钱

在自己为研究某项工具或技术而进行一个新的编程项目时,很可能是不挣钱的,但这不能成为停止学习新技能的理由。首先,学习新技能肯定可以提升自己的能力,这些工具和技术可能在目前的工作中不可用,但会使自己在下一个工作中更具市场竞争力。
在这里插入图片描述
无论你是为开源项目做贡献,还是为当地社区组织从事公益性工作,都将获得技术技能和自信。另外,个人项目也可以向未来的雇主证明你是一个自学成才的人,从不停止学习。不要只选择自己十拿九稳的个人项目,在自己的个人项目中失败是可以接受的,这样才能激励自己不断的学习和研究,避免在工作的失败。

7. 不完全忽视他人意见

愿意听取别人的意见,对提升自己的编程技术也有所帮助。当进行一个开源项目时,应该注意从用户,或者其他开发人员那里得到反馈,分析这些反馈常常能够推断出自己的项目中存在的问题(用户反馈的使用体验问题,其他开发人员反馈的技术问题等)。
在这里插入图片描述
只有发现自己的不足,才有机会进步,达到让自己变得“更好”的目的。而且在这一过程中,幸运的话还会遇到同领域内的大神,不要浪费像大神学习的机会。

8. 学习的是技术,而不是工具

编程语言、工具和框架总是在不断发展,有的工具或者框架很火,但是可能过段时间就落寞了,已经有太多这样的例子。所以在学习某种工具或者框架时,不应该只停留在工具和框架本身,更应该深入它们了解背后的设计思想和经验这些基础知识,因为基础永远不会过时。
在这里插入图片描述
停留在工具和框架表层,会逐渐形成“教条式经验”,而它会阻碍你学习新技术、新框架的能力。另外还有一点要说明的是,我们的确应该深入了解工具和框架,但是自我提高还有一个关键是要知道深入到什么程度,什么时候应该停止。举个最极端的例子,作为程序员,学习某个技术一直深入到 cpu 怎么制作还不停下,就显得太钻牛角尖了。

编程思维

编程思维是什么?

很多人都听过编程思维,但对它了解的却不多,甚至会产生这种误解——编程思维就是编程算法。

其实,编程思维并不是编写程序的技巧,而是一种高效解决问题的思维方式,它是“理解问题——找出路径”的高效思维过程,由分解、模式识别、抽象、算法四个步骤组成。
在这里插入图片描述
1、分解

锻炼拆解复杂问题的能力
分解,就是把一个复杂的大问题,拆解成更可执行、更好理解的小步骤。
假如,要为自己全家人做一次出游规划,“全家旅游规划”听起来非常庞大、繁琐,而懂得“分解”的话,就可以把这个大难题分解成几个容易解决的小步骤:确立目的地、安排行程、预定机票和酒店、准备行李清单。
在这里插入图片描述
所以,在学习编程的过程中,就是在不断地训练他们把复杂的问题拆解、理顺的过程。这个过程是解决问题的基础,把问题拆解清楚,才有接下来实现的可能。

2、模式识别

发现并整合“重复规律”的能力
模式识别,就是识别不同问题的模式和趋势(共同点)的过程,在我们的经验库里找出类似问题的解决办法,套用解决。识别的模式越多,解决问题的速度也就越快。
例如,如果需要画100只猫,你会怎么办?是找100只猫来临摹还是找出猫的“模式”?
对猫进行模式识别,我们会发现猫有这些共同点:有眼睛、耳朵、尾巴、四条腿……
我们根据这些特点建立起猫的“模式”,按照这个模式就能批量画猫了。不用每次画一个新动物,只需要变换局部特征(例如毛发颜色、尾巴长短)就能轻松解决。
在这里插入图片描述
这样看来效率是不是瞬间飙升N倍?
在编程过程中,其实我们一直在进行着这样的训练,当发现一些可重复的步骤,就会把它们整合起来,建立模式;再遇到类似问题时就能让计算机套用此模式,快速解决。

3、抽象

锻炼找出问题本质的能力
抽象,是指聚焦最重要的信息,忽视无用细节。简单来说就是找到问题的本质,过滤掉其他无关紧要的因素。
例如,面前有一套房子,我们看到的是这样的:
在这里插入图片描述
但是在建筑师眼中,这套房子可能是这样的:
在这里插入图片描述
通过抽象,建筑师过滤掉对他来说无用的因素,找到了房子最重要的信息。
抽象思维,能够让我们在大量信息中抓住关键信息,提高学习效率。

4、算法

锻炼高效解决问题的能力
算法,是一步步解决问题的过程。根据前面对问题的分析与理解,设计每一步的路径方法,解决整个问题。
在具体解决问题的过程中,最关键的是逻辑思维能力和调试纠错能力。![在这里插入图片描述](https://img-blog.csdnimg.cn/20210424234531511.gif#pic_center
计算机程序需要很强的逻辑性,逻辑顺畅才能顺利运行。例如,正确代码呈现出的五角星动态图这样的:
在这里插入图片描述
而只是把其中两行代码交换下顺序,结果就成了这样:
在这里插入图片描述
所以,我们需要严格遵循编程的规则,把解决问题的步骤转换成计算机能理解的语言。在这个过程中,我们的逻辑思维能力能得到很好地锻炼。
而调试纠错,就是当出现结果与预期不符时,需要找出算法之中的漏洞并解决。
在编程练习中,任何一行代码出问题,程序都会出错无法正常运行下去。这时,就必须要自己一步步执行步骤、梳理逻辑,找出问题并想办法解决。

苹果CEO乔布斯曾说过:“每个人都应该学习编程,因为它教会你如何思考。”编程思维在各个行业都用得到,是未来人工智能时代每个人都应具备的一种思维,先人一步学习编程,快人一步把握未来机遇。

关注苏州程序大白,持续更新技术分享。谢谢大家支持

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

8种提升程序猿编程能力的方法+编程思维四个核心:分解、抽象、模式识别和算法 的相关文章

随机推荐

  • ImportError: No module named typing

    python版本 2 7 错误 使用pip时出现该错误 Traceback most recent call last File C Python27 Scripts pip script py line 9 in load entry p
  • iframe如何发送请求_Vue 中使用 Iframe 踩坑记

    背景 创业项目使用的 Vue 开发前端 最近在开发的一个需求涉及到了 Iframe 的使用 为了让父子页面能够正常通信 头都搞大了 不过最终是解决了问题 写篇文章记录下 利人利己 难点 之前没有在 Vue 中使用过 Iframe 网上的相关
  • 【环境搭建】Docker上搭建sqli-labs漏洞环境

    目录 1 sqli labs简介 2 Docker搭建sqli labs 3 总结 参考文献 1 sqli labs简介 sq Ii labs是一款学习SQL注入的开源平台 共有75种不同类型的注入 官方介绍如下 SQLI LABS is
  • 基于VMD-SSA-LSTM的多维时序光伏功率预测

    目录 1 主要内容 变分模态分解 VMD 麻雀搜索算法SSA 长短期记忆网络LSTM 2 部分代码 3 程序结果 4 下载链接 1 主要内容 之前分享了预测的程序基于LSTM的负荷和可再生能源出力预测 核心部分复现 该程序预测效果比较好 并
  • RT-Thread uart2串口dma idle接收不断帧

    硬件STM32F407 IDE使用RT Thread Studio uart2串口使用这两个引脚 功能 IO端口 UART2 TX PA2 UART2 RX PA3 UART2 DMA接收配置 先使能DMA接收 RX缓冲区可以稍微调大些 b
  • Vuetify笔记(5):data-tables组件

    v data table 用于显示表格数据 功能包括排序 搜索 分页 行内编辑 头部提示以及行选择 而我们在实际应用中使用最多的就是服务端分页和排序 如果你从后台加载数据 并希望显示结果之前进行分页和排序 你可以使用 total items
  • 对象的构造和析构

    对象的构造和析构 1 对象的初始化和清理 构造函数 和 析构函数 被编译器自动调用完成对象初始化和对象清理工作 2 构造函数 和 析构函数 构造函数写法 与类名相同 没有返回值 不写void 可以有参数 可以发生重载 构造函数由编译器自动调
  • 神经网络学习——图像篡改

    记录 这是课堂上做的一个关于图像篡改识别的题目 因为前后花的时间比较多 虽然最后实现的效果也不怎么行 但是这个过程踩了很多坑 这里记录一下 文章目录 记录 前提 题目分析 网络搭建 依赖包 数据读取处理 网络搭建 训练参数 预测函数 模型保
  • linux——read和write函数实现cp、用户级缓冲预读入缓冲的简单认识

    用read和write实现cp 1 注意头文件 2 fd1是源文件 传入参数中的第一个 fd2是目标文件 传入参数中的第二个 要写入的文件至少可写 如果没有当前文件就创建文件并设置权限 如果已经有文件就截断为0再重新写 3 定义一个缓冲区
  • vue2和vue3的响应式原理

    vue2和vue3的响应式原理 vue2 的响应式 vue3 的响应式 vue2 的响应式 使用 Object 构造函数上 defineProperty 实现 存在的问题 对象 新增的属性没有响应式 数组 部分操作没有响应式 解决办法 1
  • [推荐系统] 1. 深度学习与推荐系统

    文章目录 1 推荐系统 1 1 推荐系统的作用和意义 1 2 推荐系统架构 1 2 1 推荐系统的逻辑架构 1 2 2 推荐系统的技术架构 2 前置知识 2 1 传统推荐模型的演化 2 2 协同过滤 2 2 1 概述 2 2 2 用户相似度
  • uniapp nfc读写

    1 先添加权限
  • MySQL中show语法

    1 show tables或show tables from database name 显示当前数据库中所有表的名称 2 show databases 显示mysql中所有数据库的名称 3 show columns from table
  • Git Rebase与Merge

    在 Git 中整合来自不同分支的修改主要有两种方法 merge 以及 rebase 两种观点 有一种观点认为 仓库的提交历史即是记录实际发生过什么 它是针对历史的文档 本身就有价值 不能乱改 从这个角度看来 改变提交历史是一种亵渎 你使用
  • [Android]系统启动时序

    最近公司的群里面有大佬分享了一张自己总结的系统启动时序 觉得画的非常清晰简练 因此在这里分享一下
  • I - Intense Bit Wheel (二进制,bitset)

    SDUT 2022 Summer Individual Contest 2 for 21 Virtual Judge There is a new intense giant wheel in UNAL town in UNAL town
  • uniapp整包apk更新下载后安装完删除下载的apk,避免占用app内存

    一 内存大 app版本更新后内存变的好大 更新多几次版本更大 小编便发现是每次更新后都把下载下来的apk大小增加到app里面去了 那么我们如何版本更新完之后删除下载下来的apk文件呢 避免占用内存 二 解决方案 使用html5 功能IO模块
  • NLP预训练模型-GPT-3

    NLP预训练模型 系列文章 1 BERT 2 GPT 3 GPT 2 4 GPT 3 目录 NLP预训练模型系列文章 文章目录 前言 1 Abstract 2 Introduction 3 Approach 3 1 模型和架构 3 2 训练
  • oracle11g 导出表报EXP-00011:table不存在。

    转自 https blog csdn net mingzaiwang article details 52608991 depth 1 utm source distribute pc relevant none task utm sour
  • 8种提升程序猿编程能力的方法+编程思维四个核心:分解、抽象、模式识别和算法

    8种提升程序猿编程能力的方法 对于程序员来说 提高自己的编程能力 算是给自己定的职业发展目标之一 不过定一个成为编程大神的目标很容易 具体做起来可能就不是一件简单的事了 首先 既然决定 我要变得更好 得先知道 更好 是什么样子的 另外 不能