【小白必看】永久提升代码/算法能力的6个编程习惯(推荐阅读)

前言

编程和算法能力是当代工程师的核心竞争力之一。想要快速提升自己的编程和算法能力,却苦于没有合适的方法?别担心,今天我将与你分享6个高效编程习惯,让你轻松提升编程和算法能力!

大家好,我是Erik,一名211大三的计算机学生,曾经获得过一些不错的奖项(具体可以看我主页),希望带更多的同学一起学习ACM/算法/蓝桥杯,快快关注,我将持续分享更多的计算机干货知识!

一、保持良好的缩进和换行,选择一种自己喜欢的代码风格

良好的代码格式习惯可以让你的代码更易于阅读和维护。选择一种自己喜欢的代码风格并坚持下去,这将使你在编写代码时更加得心应手。

在软件开发中,代码风格与规范是非常重要的,因为它们可以提高代码的可读性、可维护性,并促进团队合作。不同的公司和组织可能有不同的代码风格规范,以下是一些常见的代码风格和规范,包括谷歌和华为的:

谷歌代码风格:

谷歌的代码风格主要针对Java语言,但也适用于其他语言。

在这里插入图片描述

  • 强调简洁和清晰,避免不必要的复杂性。

  • 使用有意义的变量和函数名。

  • 坚持一致的缩进和空格,通常缩进使用4个空格。

  • 保持代码的整洁,避免过长的函数和类。

  • 使用注释来解释复杂的逻辑或不明显的代码段。

  • 遵循MVC(模型-视图-控制器)设计模式。

华为代码规范:

华为的代码规范旨在提高代码质量,减少软件维护成本。

  • 强调代码的规范性和可读性,确保团队成员可以轻松理解彼此的代码。
  • 使用统一的命名规则,使变量、函数、类和常量的命名具有描述性。
  • 保持一致的缩进和空格,通常使用2个或4个空格缩进。
  • 避免使用复杂的表达式,简化逻辑判断。
  • 在适当的场合使用文档注释,提供代码的详细说明。
  • 遵守软件设计原则,如SOLID原则。

除了上述两家公司的特定规范,还有一些通用的代码风格和规范被广泛采用:

  • PEP 8:对于Python开发者来说,PEP 8是官方推荐的代码风格指南,它涵盖了命名约定、缩进风格、代码布局等方面的最佳实践。

  • Oracle Java Code Conventions:这是Java编程的一个广泛接受的代码风格指南,它提供了关于代码结构、变量命名、注释等方面的建议。

  • C++ Core Guidelines:由Bjarne Stroustrup(C++的创造者)和其他C++专家共同制定,这些指南旨在帮助开发者编写清晰、可维护的C++代码。

  • Airbnb JavaScript Style Guide:这是一套广泛使用的JavaScript代码风格指南,它涵盖了变量命名、语句结构、对象和函数风格等方面的最佳实践。

遵循这些代码风格和规范,可以让你更容易地融入不同的开发团队,提高代码质量,减少错误,并使软件项目更加成功。

给大家看两份代码,差异显然。

混乱写法:

#include <iostream>int mian(){
int n;
cin>>n;
int ans=0;
for(int i=1;i<=n;i++)
if(i%2==0)ans+=i;
cout <<ans;
}

推荐写法:

#include <iostream>int mian(){int n;cin >> n;int ans = 0;for(int i = 1; i <= n; i ++)if(i % 2 == 0)ans += i;cout << ans << '\n';return 0;
}

二、尽可能复用代码,多写函数,少写一大坨代码

复用代码可以提高代码的效率和可维护性。通过将功能划分为小的、可复用的函数,你的代码将更加简洁、易读,同时也能减少出错的可能性。尝试编写一些小的函数,并将它们在不同的场景中复用,这样你的代码质量将得到很大提升。

例如我要计算平面上两点的距离,我就可以写一个函数来计算:

double getDist2d(double x1, double y1, double x2, double y2)
{double dx = x1 - x2, dy = y1 - y2;return sqrt(dx * dx + dy * dy);
}//调用
double dist1 = getDist2d(x1, y1, x2, y2);
double dist2 = getDist2d(x3, y3, x4, y4);

然后在需要使用的地方进行调用即可。

尽量避免以下情况的出现:

//不推荐这样写
double dist1 = sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
double dist1 = sqrt((x3 - x4) * (x3 - x4) + (y3 - y4) * (y3 - y4));

三、使用有意义的变量名

在初学编程的时候,做一些C语言的练习题,我们经常看见各种千奇百怪的命名,什么 a , b , c a, b, c a,b,c等等,这个在工程项目中是致命的。

使用有意义的变量命名可以提高代码的可读性。当你或其他人在查看代码时,能够通过变量名快速理解其含义,这样可以大大提高代码理解和维护的效率。尽量避免使用简短或者无意义的命名,例如用"x"和"y",而是选择能够描述变量用途的命名,例如"distance"和"speed"。

当然,如果你是在“算法竞赛”等特殊的场合,为了方便理解和加快手速,可以使用简短的命名,例如:

  • cnt(count)一般用于计数。
  • a(array)一般表示一个数组。
  • val(value)一般表示权值。
  • fa(father)父节点。
  • col(color, column)颜色或列。
  • pre, lst前一个。
  • nex, nxt后一个。

四、多模仿、少瞎写

通过模仿优秀的代码和算法实现,你可以学习到更多的编程技巧和思维方式。在模仿的过程中,你将逐渐形成自己的编程风格和算法思维,从而提升自己的编程和算法能力。你可以通过阅读优秀的开源项目、参加技术交流会议或者观看技术教程等方式,来寻找灵感和学习他人的经验。

有时候咱们自己想到一个非常巧妙的方法,然后写了一坨屎山,后面发现早就有人写好了解决这个问题的库,并且经过了长时间的沉淀,稳定高效,顿时感觉自己就像小丑一样。

例如我在《算法基础课》中讲过的二分模板,无数的同学惊呼牛逼,大家在学习了这个二分模板之后就不再需要记忆什么小于,小于等于的条件了,混乱的二分模板从此统一,用了两年没错过。

请添加图片描述
请添加图片描述

请添加图片描述

五、刻意练习,参加竞赛

参加编程竞赛和刻意练习是提升编程能力的重要方法。竞赛可以让你在限定时间内解决问题,锻炼你的编程思维和快速解决问题的能力。同时,刻意练习可以帮助你克服编程中的薄弱环节,全面提升编程能力。

你可以参加一些算法竞赛,如LeetCode、Codeforces等,或者参与算法挑战赛,与其他优秀的编程爱好者一起竞技。

真心给大家推荐由我主讲的性价比超高的《算法基础课》,想要学习更多ACM/蓝桥杯/CSP/NOIP算法竞赛知识,无论你是想要竞赛拿奖的大学生、想要在笔试面试中脱颖而出、或者是对计算机编程感兴趣的小朋友,都可以学习,一定不要错过!点此了解(官方群:746470220):https://www.starrycoding.com/course/1

六、勤作总结,梳理知识

在学习和实践过程中,及时总结自己的经验和教训,可以帮助你更快地成长。将自己的学习心得和编程技巧记录下来,形成自己的知识体系,对于长期提升编程和算法能力具有重要意义。你可以写博客、做笔记或者与朋友分享,通过总结和分享,巩固自己的知识,并从中获得更多的启发。

真的真的,强烈推荐所有的计算机大学生养成写博客的好习惯,尝试把自己所学的知识总结并分享出来,可以让自己掌握得更牢固!不是心理安慰,而是真的有效!

推荐做笔记的方式是使用markdown语法,配合一些笔记软件,比如Typora等等,最好是能学习一下Latex,这不仅对做笔记有帮助,对以后写学术论文也有很大帮助!

总结

以上就是提升编程和算法能力的6个高效习惯。只有通过不断地学习、实践和总结,才能在编程的道路上越走越远。希望这些建议能对你有所帮助,让我们一起努力,成为更优秀的程序员!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/737104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用脚本批量下载nuscens数据集

Nuscenes 完整版数据集批量下载 需求&#xff1a; 高速下载Nuscenes完整版数据集。采用google浏览器自带工具下载&#xff0c;速度慢&#xff0c;且容易断。 数据地址 官方地址&#xff1a;https://www.nuscenes.org/nuscenes 如何获取 Nuscenes 数据集的路径 安装插件 ch…

力控软件与多台不同品牌的PLC之间如何实现无线通讯?

在现代化工厂中&#xff0c;除厂级PLC系统外&#xff0c;还存在很多独立的子系统。比如&#xff0c;各个生产车间的PLC系统、或同一生产车间的不同生产流程的PLC系统。对一个大型工厂&#xff0c;由于生产线的不断改造、新老流程的不断更新&#xff0c;这些PLC系统往往是由不同…

【C++庖丁解牛】STL之vector容器的介绍及使用 | vector迭代器的使用 | vector空间增长问题

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.1 vector的介绍2 v…

navicat过期了,直接用idea连接mysql

1、我的是社区版&#xff0c;需要下载一个插件&#xff0c;直接搜索安装即可。 2、找到data source&#xff0c;点击mysql 3、你们熟悉的&#xff0c;输入账户密码&#xff0c;点击test Connection测试是否连接成功 4、这个本来是在右边&#xff0c;但是你可以把他挪到左边。 5…

三次握手,四次挥手基本概念及其抓包演示

目录 1.tcp三次握手 2.tcp四次挥手 3.思考问题(面试常考) 3.1 三次握手时可能出现什么攻击? 3.2 为什么是三次握手,可不可以是两次,为什么? ​编辑3.3 四次挥手的过程可以用三次完成吗? 4.抓包演示三次握手四次挥手 1.tcp三次握手 tcp协议特点:面向连接的,可靠的,流式…

【Python】一文详细介绍 plt.rcParamsDefault 在 Matplotlib 中的原理、作用、注意事项

【Python】一文详细介绍 plt.rcParamsDefault 在 Matplotlib 中的原理、作用、注意事项 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程…

C++的类与对象(三):构造函数、析构函数、对象的销毁顺序

目录 类的6个默认成员函数 构造函数 语法 特性 析构函数 特性 对象的销毁顺序​​​​​​​​​​​​​​ 类的6个默认成员函数 问题&#xff1a;一个什么成员都没的类叫做空类&#xff0c;空类中真的什么都没有吗&#xff1f; 基本概念&#xff1a;任何类在什么都不…

软考73-上午题-【面向对象技术2-UML】-UML中的图4

一、构件图&#xff08;组件图&#xff09; 1-1、构件图的定义 展现了&#xff0c;一组构件之间的组织和依赖。 构件图专注于系统的静态实现图。 构件图与类图相关&#xff0c;通常把构件映射为一个、多个类、接口、协作。 【回顾】&#xff1a; 类图展示了一组对象、接口、…

SpringCloud-SpringBoot读取Nacos上的配置文件

在 Spring Boot 应用程序中&#xff0c;可以使用 Spring Cloud Nacos 来实现从 Nacos 服务注册中心和配置中心读取配置信息。以下是如何在 Spring Boot 中读取 Nacos 上的配置文件的步骤&#xff1a; 1. 引入依赖 首先&#xff0c;在 Spring Boot 项目的 pom.xml 文件中添加 …

Android Kotlin知识汇总(一)编程语言

在 2019 年 Google I/O 大会上宣布今后将优先采用 Kotlin 进行 Android 开发。Kotlin 是一种富有表现力且简洁的编程语言&#xff0c;不仅可以减少常见代码错误&#xff0c;还可以轻松集成到现有应用中。如果您想构建 Android 应用&#xff0c;建议您从 Kotlin 开始着手&#x…

分享axios+signalr简单封装示例

Ajax Axios Axios 是一个基于 promise 网络请求库&#xff0c;作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。 从浏览器创建 XMLHttpReque…

MySQL-QA-异常问题及解决方案(持续更新)

MySQL-Q&A(持续更新) 1.1 PID文件找不到 问题描述 错误详情&#xff1a; ERROR&#xff01;The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid) 解决方案 首先排查配置文件&#xff0c;一般路径为&#xff1a;/etc/my.cnf 检查…

D2力扣滑动窗口系列

滑动窗口算法&#xff08;Sliding Window&#xff09;&#xff1a; 滑动窗口算法&#xff08;Sliding Window&#xff09;&#xff1a;在给定数组 / 字符串上维护一个固定长度或不定长度的窗口。可以对窗口进行滑动操作、缩放操作&#xff0c;以及维护最优解操作。 滑动操作&am…

【Ubuntu】gonme桌面的 gdm 和 lightdm 区别

总结&#xff1a;都可以 gdm: 【Gnome Display Manager】 完整&#xff0c;体积大 lightdm: 【Light Display Manager】 轻量

甜甜圈和贪吃蛇的后续

代码复现-项目复现 代码复现 云课五分钟-02第一个代码复现-终端甜甜圈C-CSDN博客 项目复现 云课五分钟-03第一个开源游戏复现-贪吃蛇-CSDN博客 不同的地图 加入班级和标识 循序渐进 这些案例都是来源网络&#xff0c;只是方便熟悉一下云课使用过程。 此部分学生掌握情况非…

OpenCV 图像的几何变换

一、图像缩放 1.API cv2.resize(src, dsize, fx0,fy0,interpolation cv2.INTER_LINEAR) 参数&#xff1a; ①src &#xff1a;输入图像 ②dsize&#xff1a;绝对尺寸 ③fx&#xff0c;fy&#xff1a;相对尺寸 ④interpolation&#xff1a;插值方法 2.代码演示 import cv2 …

携手亚信安慧AntDB,在数智化浪潮中乘风破浪

随着大数据时代的到来&#xff0c;对数据库的需求愈发强烈。在这一背景下&#xff0c;国产数据库逐渐崭露头角&#xff0c;亚信安慧AntDB作为重要的代表产品之一正积极参与到激烈的市场竞争中。亚信安慧AntDB不仅追求技术的革新和突破&#xff0c;同时也致力于满足用户日益增长…

AVCE - AV Evasion Craft Online 更新 8 种加载方式 - 过 WD 等

免责声明&#xff1a;本工具仅供安全研究和教学目的使用&#xff0c;用户须自行承担因使用该工具而引起的一切法律及相关责任。作者概不对任何法律责任承担责任&#xff0c;且保留随时中止、修改或终止本工具的权利。使用者应当遵循当地法律法规&#xff0c;并理解并同意本声明…

2023年中国高校大数据挑战赛D题参考论文发布(全网首发)

腾讯文档】2023年大数据挑战赛资料说明 https://docs.qq.com/doc/DSEpWUVFySm1ObFB0 基于数据分析的行业职业技术培训能力评价 摘要 中国是制造业大国&#xff0c;产业门类齐全&#xff0c;每年需要培养大量的技能娴熟的技术工人进入工厂。本文将基于题目给出的数据&#x…

Java——正则表达式详解

目录 Java正则表达式1、正则表达式语法1.1、基本的元字符1.2、数量元字符1.3、位置元字符1.4、特殊字符元字符1.5、回溯引用和前后查找1.6、大小写转换1.7、匹配模式 2、Java中的正则表达式2.1、概述2.2、获取匹配位置2.3、捕获组 3、匹配单个字符3.1、匹配纯文本3.2、匹配任意…