程序员成长之路心得篇——高效编码诀窍

news2024/9/21 2:42:08

随着AIGC的飞速发展,程序员越来越能够感受到外界和自己的压力。如何能够在AI蓬勃发展的时代不至于落后,不至于被替代?项目的开发效率起了至关重要的作用。

首先提出几个问题:

  1. 如何实现高效编程?
  2. 高效编程的核心在于哪里?

1. 如何实现高效编程?

1) 积累编程的经验,提升对公司开发架构的认知

现在让我们设想一下这个场景:
你的上级要求你在3天之内完成一个项目,这个项目不算容易实现,需要用到定时任务框架、消息推送和excel导入导出功能。如果你是一名初级程序员或者刚入职不久的新员工,这个工作可能会有点困难,作为初级程序员的你缺少开发经验,而作为刚入职不久的员工,你缺少对公司架构的了解。那么我们应该怎么做呢?

没错,要想实现高效编程,我们首先需要积累编程的经验,提升对公司开发架构与系统的认知。积累编程的经验,不仅仅是多写代码,还应该提升问题的处置能力,避免两次踩在同一个坑里。

针对初级程序员或入行不久的新员工而言,和经验丰富的同事一同开发项目可以快速增长问题处理能力,也就是所谓的带教。在带教过程中,遇到问题相互讨论,形成良好的技术探讨氛围也会起到较好的提升作用;而针对中级程序员或者更为高级的程序员而言,则需要在问题处理中逐步形成自己的“体系”,每次遇到错误或者问题就依照自己的体系去排查问题,并在处理完成后及时更新自己的错误数据集。

2) 实现代码的重用

现在让我们设想一下另一个场景:
我们每天都在写代码,但是效率却并没有因此而提高,并且随着项目的增多,反而增加了我们代码量和编码压力。如何处理这些冗长复杂的代码,既可以减轻我们的编码负担,也可以提升代码质量呢?

要想实现高效编程,进阶的方式就是实现代码的重用。我们也许听说过一则趣味小故事,一个程序员很喜欢随身携带一个u盘,里面记录了他所有开发过的项目,但是有一天,他遗失了他那宝贵的u盘,他便自叹自己的职业生涯到头了。

当时看到这个故事我的第一反应是,这个程序员起码不是个菜鸟,他会把自己的代码保存并且复用,方便后续系统的开发。而现实是很多的程序员并没有做到这一点,他们可能整天写着增删改查,活在自己的舒适圈里,自认为自己“勤快”,却从没想过“偷懒”。

那么,如何实现代码重用呢?

作为一名经验较为丰富的java开发工程师,我会首先想到利用反射、注解、泛型、枚举和设计模式等工具去进行代码功能的构建。比如说最简单的检验数据是否为空,我会先编一个注解.

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NotBlank {
    String message() default "参数不能为空";
}

然后利用反射获取某一个类及其父类中的所有DeclaredFields,也就是所有的成员变量,包括私有的,然后获取里面加了注解的变量,检查是否为空,为空就抛异常。

/**
 * 实体工具类
 * @author zyl
 */
@Slf4j
public class EntityUtils {

    public static <T> boolean verifyIsEmpty(T entity) {
        if (entity == null) {
            throw new MyException("实体类为空");
        }
        try {
            Class<?> cls = entity.getClass();
            String clsName = cls.getSimpleName();
            while (!"Object".equalsIgnoreCase(clsName.trim())) {
                Field[] fields = cls.getDeclaredFields();
                for (Field f : fields) {
                    f.setAccessible(true);
                    NotBlank anno = f.getAnnotation(NotBlank.class);
                    if (anno != null) {
                        Object obj = f.get(entity);
                        if (obj == null || "".equals(obj)) {
                            throw new MyException(anno.message());
                        }
                        if (obj instanceof List && ((List) obj).isEmpty()) {
                            throw new MyException(anno.message());
                        }
                        String str = String.valueOf(obj);
                        if (str.isEmpty()) {
                            throw new MyException(anno.message());
                        }
                    }
                }
                cls = cls.getSuperclass();
                clsName = cls.getSimpleName();
            }
            return false;
        } catch (Exception ex) {
            log.error(ex.getMessage());
            throw new MyException(ex.getMessage());
        }
    }
}

如果想不到用这种方式,也可以退而求其次,使用spring自带的@NotBlank注解实现以上功能。

代码重用的第二种途径就是组件的编写。这个对于编程能力有一定的要求,比如设计模式,比如对于组件整体功能的把握等。但一旦学会了组件的封装和使用,那么对于一般的业务系统开发而言,效率将会大幅提高。打个比方,将木头加工成轮子是麻烦的,但是由轮子组装成车架却变得简单了。
在这里插入图片描述
更高阶的就是自己实现代码生成器,也就是自己写一套代码生成框架。这个可太难了,哈哈。不过好在市场上已经有了较为成熟的代码生成工具,如阿里的宜搭,百度的爱速搭等。

高效编程的核心

  1. 重复的事情标准化,标准的事情自动化。一昧努力不可取,有时候偷懒才是王道。
  2. 积累经验,保持虚心学习的态度。

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

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

相关文章

无涯教程-Lua - 变量声明

变量的名称可以由字母&#xff0c;数字和下划线字符组成。它必须以字母或下划线开头&#xff0c;由于Lua区分大小写&#xff0c;因此大写和小写字母是不同的。 在Lua中&#xff0c;尽管无涯教程没有变量数据类型&#xff0c;但是根据变量的范围有三种类型。 全局变量(Global) …

功率信号源的输出阻抗是多大的

功率信号源是一种产生高功率信号的电子设备&#xff0c;它通常用于测试和测量、无线电通信、音频系统等领域。在实际应用中&#xff0c;功率信号源的输出阻抗对于整个电路的性能和准确性非常重要。 输出阻抗是指电路输出端产生的电阻值。在功率信号源中&#xff0c;输出阻抗通常…

【Linux详解】——进程间通信

&#x1f4d6; 前言&#xff1a;本期介绍进程间通信。 目录 &#x1f552; 1. 理解进程间通信&#x1f558; 1.1 什么是通信&#x1f558; 1.2 为什么要有通信&#x1f558; 1.3 如何进行进程间通信 &#x1f552; 2. 管道&#x1f558; 2.1 匿名管道&#x1f564; 2.1.1 回顾文…

SpringBoot2学习笔记

信息来源&#xff1a;https://www.bilibili.com/video/BV19K4y1L7MT?p5&vd_source3969f30b089463e19db0cc5e8fe4583a 作者提供的文档&#xff1a;https://www.yuque.com/atguigu/springboot 作者提供的代码&#xff1a;https://gitee.com/leifengyang/springboot2 ----…

自动化测试指南:什么该自动化什么不该自动化

除了测试&#xff0c;测试数据创建、需求跟踪和测试报告等任务也可自动化。 什么应该被自动化&#xff1f; 与人工测试相比&#xff0c;具备明显收益如果失败会对业务造成相当大的损失的业务功能或用户流&#xff1b;自动化测试有助于经常验证这些功能。 需要针对应用程序的每个…

myeclipse的Debug模式

1.表示当前实现继续运行直到下一个断点&#xff0c;快捷键为F8。 2.表示打断整个进程 3.表示进入当前方法&#xff0c;快捷键为F5。 4.表示运行下一行代码&#xff0c;快捷键为F6。 5.表示退出当前方法&#xff0c;返回到调用层&#xff0c;快捷键为F7。 6.表示当前线程的…

硬核来袭!中国AI大模型峰会“封神之作”,开发者们不容错过!

2023年全球AI浪潮迭起&#xff0c;大语言模型热度空前&#xff0c;生成式人工智能为千行百业高质量发展带来更多想象空间。作为前沿科技风向标、汇聚全球开发者的顶级盛会&#xff0c;WAVE SUMMIT 2023深度学习开发者峰会正式定档8月16日&#xff0c;在北京望京凯悦酒店召开。本…

PCB制版技术03

5.21 P(W)改变折线 5.22 点击右键可以拐弯&#xff0c;点击左键可以取消 5.23 这三个点&#xff0c;代表着连接在一起的意思 5.24 把这个电阻和线一连 5.25 点一下&#xff0c;然后把点给拉回来 5.26 连接三极管&#xff0c;十电阻 5.27 对齐和对称就能够感觉很舒服&#xff0c…

Google OAuth 2 authorization - Error: redirect_uri_mismatch 400

出现这个问题&#xff0c;一般是因为google授权origin地址和重定向redirect_uri地址没有匹配上。 请仔细检查重定向地址的url中origin部分和授权origin部分是否能够匹配&#xff1a;

#P0995. [NOIP2005普及组] 循环

题目描述 乐乐是一个聪明而又勤奋好学的孩子。他总喜欢探求事物的规律。一天&#xff0c;他突然对数的正整数次幂产生了兴趣。 众所周知&#xff0c;22 的正整数次幂最后一位数总是不断的在重复 2,4,8,6,2,4,8,6…2,4,8,6,2,4,8,6… 我们说 22 的正整数次幂最后一位的循环长度…

新《生产建设项目水土保持方案审查要点》要求下全流程水土保持应用

目录 专题一 水土保持常用法律法规、规范及文件解读 专题二 水土保持方案及监测、验收开展的流程 专题三 水土保持需要收集的资料 专题四 水土保持现场踏勘需要注意的事项 专题五 常见水土保持工程施工工艺流程 专题六 《生产建设项目水土保持方案审查要点》&#xff08;…

【Vue3基础】组件保持存活、异步加载组件

一、组件保持存活 1、需求描述 点击按钮跳转到其他组件后&#xff0c;原组件不会被销毁 2、知识整理 1&#xff09;组件生命周期 创建期&#xff1a;beforeCreate、created 挂载期&#xff1a;beforeMount、mounted 更新期&#xff1a;beforeUpdate、updated 销毁期&am…

【SCSS】网格布局中的动画

效果 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"container">&l…

在排序数组中查找元素的第一个和最后一个位置——力扣34

文章目录 题目描述法一 二分查找 题目描述 法一 二分查找 int bsearch_1(int l, int r) {while (l < r){int mid (l r)/2;if (check(mid)) r mid;else l mid 1;}return l; }int bsearch_2(int l, int r) {while (l < r){int mid ( l r 1 ) /2;if (check(mid)) l …

第一个maven项目(IDEA生成)

第一个maven项目&#xff08;IDEA生成&#xff09; 步骤1 配置Project SDK 步骤2 配置maven File->Settings搜索maven

【Docker】Docker比虚拟机快的原因、ubuntu容器、镜像的分层概念和私有库的详细讲解

&#x1f680;欢迎来到本文&#x1f680; &#x1f349;个人简介&#xff1a;陈童学哦&#xff0c;目前学习C/C、算法、Python、Java等方向&#xff0c;一个正在慢慢前行的普通人。 &#x1f3c0;系列专栏&#xff1a;陈童学的日记 &#x1f4a1;其他专栏&#xff1a;CSTL&…

proteus常用元件图示和名称(持续更新...)

初学单片机,记录一下proteus常用的元件目录 proteus常用元件图示和名称1 SWITCH(一位开关)2 CAP(无极性电容)3 CAP-ELEC(极性电容)4 CRYSTAL(晶振)5 LED-BIBY(发光二极管)6 RES(电阻)7 BUTTON(按钮)8 AT89C51(经典单片机)9 BUS(总线)10 VCC(电源)11 GROUND(接地)12 BUZZER(蜂鸣…

C++实现矩阵乘法

本贴分享用C实现矩阵乘法计算的功能&#xff0c;具体内容请看代码和注释&#xff0c;这里单独说一明一部分代码块。 1.采用vector< vector<int>>的方式&#xff0c;可以实现无限度的二维动态数组&#xff0c;需要注意的是&#xff0c;对于C来说a[m][n]的写法是合法…

备战秋招 | 笔试强训20

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、对于顺序存储的线性表&#xff0c;访问结点和增加结点的时间复杂度为&#xff08;&#xff09;。 A. O(n) O(n) B. O(n) O(1) C. O(1) O(n) D. O(1) O(1) 2、在下列链表中不能从当前结点出发访问…

NineData支持全版本的企业级Oracle客户端

Oracle 数据库是一款全球领先的关系型数据库管理系统&#xff0c;它为企业提供了高性能、高可用性和安全性的数据处理解决方案&#xff0c;被广泛应用于各个行业。对于 Oracle 数据库&#xff0c;大家都很熟悉&#xff0c;本文不再赘述。 近期&#xff0c;NineData 发布对 Ora…