给初级开发人员的建议

news2025/7/8 2:05:58

#初学者#生产率#代码新手#学习

在我超过 15 年的开发生涯中,我学到了一些可以显着提高我的效率的东西。在这篇文章中,我将与您分享这些经验教训。

结构:

  • 基础建议——以下内容的重要背景和动机

  • 技术咨询——主菜

  • 推荐读物——指向非常适合入门的高质量书籍和博客的链接

这篇博文提到并链接了有价值的概念,您可以根据需要进一步探索这些概念。

对青少年的基本建议

1.代码不是重点

作为开发人员,我们喜欢编写代码。我们中的大多数人都希望被赋予一个很好的明确任务。无需关注世界其他地方即可解决的有趣技术难题。

付出合理的努力以确保您正在解决正确的问题。引用彼得德鲁克的话:没有什么比有效地做根本不应该做的事更无用的了。尽早并经常收集反馈,通常是通过持续向真实用户交付。敏捷_

软件开发成本高昂,现实世界项目的绝大部分工作通常都用于维护。将此与用户/业务成果的目标相结合,最好的代码通常是无代码。引用比尔·盖茨的话:“用代码行来衡量编程进度就像用重量来衡量飞机制造进度。”

另请参阅:YAGNIKISS最后的责任时刻

2. 软件设计很重要

在我开发生涯的前 5 年里,我认为软件设计是为软件架构师或其他具有特殊角色的人设计的。我专注于“把事情做好”,认为软件设计和实践(例如编写测试)充其量只是一种干扰。我的代码有效,而且我完成了很多事情。或者我是这么想的。

然后我读了Robert C. MartinClean Code。本书激发了对软件设计的关注,并包含示例和许多技术启发式方法。这本书的中心要点是:“走得快的唯一方法就是走得好”。换句话说,如果你把事情搞得一团糟,它会减慢你的速度。另见:TradableQualityHypothesisDesignStaminaHypothesis

学习如何编写设计良好的干净代码当然需要时间和精力。而且当你开始的时候,你会变慢并且会犯错误。简单并不容易

3. 使用最佳实践

编写测试往往是有益的。有例外,但大多数时候,编写自动化测试很有意义。编写测试是最佳实践的一个例子。

如果您不熟悉编写测试,请遵循最佳实践并为所有内容编写测试。开始时,盲目遵循最佳实践会比遵循自己不成熟的判断要好。随着时间的推移,您将学会如何有效地编写测试,并能够区分您搞砸了和不值得编写测试的情况。通过体验调试会话的减少和测试启用的无忧重构,您还将开始理解测试带来的更深入的价值。发展你的判断力后,你将能够超越最佳实践

此建议适用于您初级的任何领域的最佳实践。自动化测试只是一个例子。

一个很大的问题是,要区分明智的最佳实践与荒谬甚至适得其反的做法之间的区别并不容易。由于大多数现有代码一团糟,而且大多数开发人员(包括“有经验的”和“资深”的)不了解软件设计基础知识,这使情况变得更加复杂。这使得拥有一个好的导师非常有价值。除此之外,根据我自己的经验提出的一条建议是要警惕特定于您的语言或框架社区的最佳实践。寻找已经存在了几十年的常青建议。

青少年技术咨询

我们的重点将放在技术主题上。许多其他领域也很重要,例如健康、幸福、职业和软技能。如果您睡眠不足并且为付给您的报酬过低的有毒老板解决错误的问题,那么知道如何避免技术陷阱对您没有帮助。

4. 编写测试

编写自动化测试。也许在代码之前编写测试,例如通过测试驱动开发(TDD)。这使得以可重复的方式验证您的代码是否正确变得容易,从而使您免于大量手动重新测试和调试会话。

你认为先测试很难吗?尝试调试后。

也许更重要的是,测试为您重构代码提供了安全网。并且需要持续重构以保持代码清洁。没有可靠的测试套件,您的代码就更有可能腐烂。

如果您的代码设计不佳,例如使用继承进行代码重用或使用静态函数,则编写测试会很困难。另一方面,如果你有SOLID类,没有全局依赖,那么编写好的测试就不是那么困难了。

测试设计很重要,因为写得不好的测试会减慢你的速度。避免将测试绑定到被测代码的实现细节或系统结构。避免过度使用 Mocks 并编写更好的 Test Doubles

5. 不要将继承用于代码重用

这是让人想起“使用最佳实践”部分的最佳实践之一。我的建议:刚开始时,根本不要使用继承来重用代码。这很少是正确的决定,而且会造成很大的伤害。支持组合而不是继承

6. 编写面向对象的代码

编写不是STUPID 的SOLID代码。理解这些原则和反模式非常有价值。

实际上创建对象。只有静态方法的类不是面向对象的。尽量避免完全使用静态代码。

另请参阅:我对 SOLID 的辩护

7. 编写功能代码

(不要将函数式编程与命令式 结构编程混淆。)

这一点并不是要完全切换到函数式语言。您可以受益于在 OO 语言中使用函数式风格。最小化状态,尤其是可变状态,并在你的函数中做一件事。另请参阅:功能核心、命令式外壳

8.使用知情复制

将大块代码复制粘贴到多个地方几乎总是不明智的。任何有自尊心的开发人员很快就会了解这一点,并开始遵循某种形式的不要重复自己(DRY)。不幸的是,对 DRY 的善意追求往往会导致过度工程和偶然的复杂性。这就是 DRY 的对应物出现的地方:Write Everything Twice (WET)。WET 背后的想法是仅在第三次出现重复时进行重复数据删除。

要更深入地了解重复数据删除的成本和收益,请参阅The Fallacy of DRY

9. 类型、名称和注释

尝试编写自我记录的代码并避免注释。

每次写评论都要龇牙咧嘴,感觉自己表达能力的失败。——罗伯特·C·马丁

评论很危险,因为它们可能会撒谎。代码可以在不更新注释的情况下更改。可以在评论下方添加新代码。评论一开始可能是错误的或不准确的。发生这种情况时,评论不仅变得毫无用处,而且会产生误导。

要编写自文档化代码:

  • 在你的函数中做一件事

  • 通过在一个函数中做一个单一的事情,你可以给它一个明确的名字

  • 是否需要通过添加注释来解释函数的不同部分?相反,将每个部分提取到其自己的命名良好的函数中。

  • Extract till you drop ”:如果你能有意义地提取一个函数,那么你可能应该这样做。不要害怕小功能。

  • 命令查询分离

  • 类似于类的单一职责原则(SOLID 中的 S)

  • 最小化状态

  • 使用类型。结合执行代码的测试套件,您可以相信这些类型会说实话。

  • 避免混合类型。避免可以是整数、布尔值或字符串的参数或返回值。如果您编写只做一件事的集中函数,这自然会发生。

  • 编写测试。一个编写良好且全面的测试套件向您展示了如何使用生产代码及其行为方式。

Robert C. Martin 的Clean Code在命名和注释方面有一些很好的经验法则。

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

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

相关文章

30-Golang中的排序和查找

排序和查找排序的基本介绍交换式排序法交换式排序法-冒泡排序查找顺序查找二分查找排序的基本介绍 排序是将一组数据,依指定的顺序进行排列的过程 排序的分类: 1.内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换…

20N65-ASEMI高压MOS管20N65

编辑-Z 20N65在ITO-220AB封装里的静态漏极源导通电阻(RDS(ON))为0.42Ω,是一款N沟道高压MOS管。20N65的最大脉冲正向电流ISM为80A,零栅极电压漏极电流(IDSS)为10uA,其工作时耐温度范围为-55~150摄氏度。20N65功耗&…

Spring Boot最核心的27个注解,你了解多少?

https://blog.csdn.net/ManuMAX/article/details/129017443 导读 Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成…

前端学习第一阶段——第五章CSS(下)

5-9 浮动 08-浮动导读 09-传统网页布局三种方式 10-为什么需要浮动 11-什么是浮动 12-浮动特性-脱标 13-浮动特性-浮动元素一行显示 14-浮动特性-浮动元素具有行内块特性 15-浮动元素经常搭配标准流的父元素 16-浮动布局练习1 <!DOCTYPE html> <html lang"en&quo…

从青铜到王者,揭秘 Serverless 自动化函数最佳配置

作者&#xff1a;丛霄 背景介绍 全托管的 Serverless 计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力。 Serverless 的目标之一是免运维&#xff0c;但仍旧存在一些障碍&#xff0c;在 Serverless 场景特有的一些关键服务配置比如**“并发度”、“最小实…

史上最详细的PyCharm快速上手指南,你值得拥有

上一节中我们介绍了Python并安装了环境&#xff0c;有了Python环境我们就可以开发了吗&#xff1f;各位朋友们。 也可以也不可以&#xff01;哈哈哈不要怪我朋友们&#xff0c;我说的是事实。 如果你喜欢Python自带的Python命令开发&#xff0c;即我们所说的交互式&#xff0…

5.33 综合案例2.0 -ESP32拍照上传阿里云OSS

综合案例2.0 - ESP32拍照上传阿里云OSS案例说明连线功能实现1.阿里云平台连接2.OSS对象存储服务3.ESP32-CAM开发环境4.代码ESP32-CAM开发板代码HaaS506开发板代码测试数据转图片方法案例说明 使用ESP32拍照,将照片数据上传阿里云OSS&#xff08;通过4G网络上传&#xff09;。 …

【ArcGIS Pro二次开发】(4):ArcGIS Pro封装的窗体控件

在ArcGIS Pro&#xff0c;有一类窗体控件是系统已经封装好的&#xff0c;比如消息框、提醒框等。下面通过代码来学习一下。 新建一个项目&#xff0c;命名为【ProWindow】&#xff0c;添加5个按钮&#xff0c;命名为【Show_MessageBox、Show_NoticeBox、Show_OpenDialog、Show…

交通部互通互联码的根证书规则

引言 为了更好的服务交通互通互联码而更新这篇文章。 中金根证书其实是可以自己生成的。 代码内调整 中心公钥索引要保证自己的唯一性。 此处的唯一&#xff0c;是要保证在机具侧的唯一&#xff0c;因为他要根据这个索引去查找证书以及公钥。 提供根公钥给机具侧 生成的公钥…

“黑洞”竟是外星人的量子计算机?

宇宙中的黑洞可以用作终极量子计算机&#xff0c;我们可以从中探索它们的特征。&#xff08;图片来源&#xff1a;网络&#xff09;我们完全有理由怀疑生命在我们的宇宙中很常见&#xff0c;但是为什么我们从未发现过其他生命存在的迹象&#xff1f;这个问题几乎自现代天文学诞…

JavaScript 教程

手册简介JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言&#xff0c;它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员&#xff0c;但是 JavaScript 却拥有非常简单的语法。几…

SpringBoot Data JPA配置多数据源

SpringBoot Data JPA配置多数据源1. Dependency2. Application.properties3. Code3.1 Datasource config3.2 Primary Config3.3 Second Config4. Awakening1. Dependency <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jd…

常用设计模式介绍

java设计模式类型创建型模式&#xff1a;将对象的创建与使用分离结构型模式&#xff1a;如何将类和对象按照某种布局组成更大的格局行为型模式&#xff1a;用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务23种设计模式介绍1.单例&#xff08;Singleton&…

linux高级命令之软件安装

软件安装学习目标能够使用apt-get命令安装软件1. 软件安装的介绍Ubuntu软件安装有两种方式:离线安装(deb文件格式安装&#xff09;在线安装(apt-get方式安装)2. deb文件格式安装是 Ubuntu 的安装包格式&#xff0c;可以使用 dpkg 命令进行软件的安装和卸载。命令说明dpkg安装和…

以“大数据”赋能产业链精准招商

​ 随着我国产业发展的不断迭代升级&#xff0c;传统招商模式的不足逐步凸显&#xff0c;侧重土地与税费优惠的同质化竞争招商以及来者不拒的无门槛型招商已经遏制了区域产业的发展&#xff0c;导致各产业园区很难形成产业集聚及持续的吸引力。在这样的大环境下&#xff0c;产业…

使用LogToHtml导出Airtest报告

simple_report接口&#xff0c;是个简化版的生成报告接口&#xff0c;如果仅仅需要在本地查看的话&#xff0c;用这个接口即可。 但是如果需要导出报告&#xff0c;即他人也可以正常查看&#xff0c;则需要用LogToHtml类。 参数解释 script_root&#xff0c;脚本路径 log_ro…

论一个上班族如何一次性通过PMP考试

PMP是我工作后考取的一个证书。从准备到通过&#xff0c;花了大约三个月的时间。我之前在某家互联网公司从事程序员的工作&#xff0c;工作一段时间后&#xff0c;天天敲着代码&#xff0c;改着bug&#xff0c;感觉比较迷茫&#xff0c;不知道未来的发展在哪里&#xff0c;都说…

Viper捐款7000万韩元,合计人民币是多少钱?

Viper捐款7000万韩元&#xff0c;合计人民币是多少钱&#xff1f; #2023LCK春季赛##英雄联盟# #Viper捐款7000万韩元# Viper向大田东区捐款 7000 万&#xff0c;成为大田荣誉协会 105 号会员。Viper选手从 2019 年开始一直向大田东区捐款&#xff0c;但是他不希望这件事被公开…

[VMware]Ubuntu18.04 网络图标消失

Ubuntu 18.04 网络图标消失运行环境问题解决NO.1 执行 sudo systemctl stop network-managerNO.2 执行 sudo rm /var/lib/NetworkManager/NetworkManager.stateNO.3 执行 sudo systemctl start network-managerNO.4 vi /etc/NetworkManager/NetworkManager.confNO.5 执行 sudo …

【Linux 多线程】线程的4大基础操作(创建、等待、终止、分离)

目录 1.线程的创建 2.线程等待 3.线程分离 线程共享一个地址空间 &#xff0c;把资源&#xff08;代码和数据&#xff09;化成若干份&#xff0c;供各个线程使用 线程的栈和上下文不是共享的以前学习的进程是具有一个线程的进程1.线程的创建 成功返回0&#xff0c;失败返回…