【小白必看】永久提升代码/算法能力的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…

c语言之函数递归

函数递归就是函数不断引用自己&#xff0c;这样形成一个循环 比如下面代码 #include<stdio.h> int fun(int i) {printf("%d\n",i);return fun(i1);}int main() {int num;puts("请输入一个数字");scanf("%d",&num);fun(num);return 0…

力控软件与多台不同品牌的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零基础入门教程…

OpenCV-环境搭建及基本IO接口

文章目录 使用conda安装OpenCV开发环境所有相关接口验证demo以上传至仓库窗口相关接口创建窗口&#xff1a;cv2.namedWindow调整窗口大小&#xff1a;cv2.resizeWindow显示图像&#xff1a;cv2.imshow等待输入&#xff1a;cv2.waitKey销毁所有窗口&#xff1a;cv2.destroyAllWi…

Linux第12章 - 网络管理

Linux系统配置及服务管理_第12章 网络管理 简介 Linux网络接口名称规则 Network interface names Traditionally, network interfaces in Linux are enumerated as eth0, eth1, eth2, and so on. However, the mechanism which sets these names can cause changes to which in…

【Android KOOM】KOOM Java层泄漏使用全解析

文章目录 前言初始化OOMMonitormake leak日志查看&堆快照输出源码分析篇 前言 要研究内存泄漏框架&#xff0c;KOOM是个不可忽略的优秀开源框架&#xff0c;由快手开源。这将是一个系列的文章。这篇文章作为开篇&#xff0c;来看看KOOM框架的demo是怎么制造Java层面的leak…

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

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

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

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

题目 2146: 组合的输出

题目描述: 排列与组合是常用的数学方法&#xff0c;其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n)&#xff0c;我们可以简单地将n个元素理解为自然数1&#xff0c;2&#xff0c;…&#xff0c;n&#xff0c;从中任取r个数。 现要求你用递归的方法输出所有组合。 例如n&…

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

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

深入探索Java设计模式:责任链模式解析与实践

目录 一、责任链模式的基础知识1. 模式结构2. 模式示例 二、责任链模式的实际应用1. 请求处理链2. 日志记录器 三、责任链模式的重要性和使用场景结语 欢迎阅读本篇博客&#xff0c;我们将深入探讨Java设计模式中的责任链模式&#xff0c;帮助初学者、初中级程序员和在校大学生…

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 检查…

Python 利用Pydantic模块提升开发效率

文章目录 Pydantic 核心概念pydantic 核心功能BaseModel 模型Field 类Config 类基础类型验证必填字段验证长度验证大小验证枚举值验证容器验证自定义验证器嵌套模型JSON 数据导入ORM 数据导入总结 Pydantic 核心概念 Pydantic 是一个数据验证和设置管理库&#xff0c;它的核心概…

D2力扣滑动窗口系列

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