程序员必备的两项基本技能

程序员必备的若干个网站 程序员必备网站 阅读详情

Spring在“清算”EJB的时候,提出的一大罪状就是:强迫开发者继承它的类,依赖容器,难于单元测试。

Spring的解决之道就是POJO,摆脱容器的控制,可以独立创建和测试。即使是对SpringMVC这样重度依赖容器的框架,Spring也提供了不需要Tomcat/Jetty运行,就可以对代码进行单元测试的办法: Mock。 

不仅仅是Spring, 你可以看看自己正在使用的语言和框架,是不是都有单元测试的支持?

Java就不用说了, Python 语言有unittest, Python写的Django框架也有django.test, Ruby 和Ruby on Rails 有TestUnit, MiniTest。  ReactJS 有 Enzyme, Vue.js 有vue-test-utils......

为什么这么多大牛都把单元测试加入到语言和框架中来呢?  

答案很简单,单元测试实在太重要了。

单元测试对于程序员来说,就是一个防护网, 能让你有信心开发新的特性而不破坏现有的实现,与此同时,良好的单元测试,还能帮助别的程序员理解你的代码。

尤其是对于动态类型语言做的大型项目,没有单元测试,修改代码是一件“可怕”的事情。

一个代码单元(可能是一个类,或者是一组类) ,如果被充分地测试过,这个代码单元通常有这样的特点:  和别的模块耦合度低,是面向接口编程(只有这样才能实施Mock,才能测试),这样的代码就是好代码。

对于一个有追求的团队,对于一个想持续维护一个“正经”应用的团队,单元测试都是必备的。

同理,对于一个有追求的程序员,单元测试也是必备技能。 

可能有些人会说,我们的项目很复杂,没有写单元测试,项目也运行得很好啊! 我想也许有这么几种可能:

  • 可能做的是一锤子买卖。

  • 项目中已经埋下了地雷,只是没有发现。

  • 在测试阶段付出了巨大的代价,拼命加班,修改了无数的Bug。

当然,有些单元测试是不容易写的, 最难搞的就是遗留代码, 你得想办法解耦才行,这方面有人专门写了一本书,强烈推荐。

640?wx_fmt=jpeg

没有人一次就把代码写得既正确又优雅,如果你是这样的人,请告诉我,我得拜你为师。 当然,我说的不是入门的Hello World,而是需要实现复杂的逻辑。  

通往优雅代码的路径就是不断地重构。 

  • 类名,方法名,变量名能不能准确地表达意图? 让人一看就知道是怎么回事?

  • 方法是不是太长, 各种逻辑交织在一起, 能不能提取出新的方法?

  • 类的职责是不是划分得不好,导致有些类过分臃肿? 

  • 这个模块如何进行扩展? 对外暴露的接口用起来怎么样? 

......

强烈建议每个程序员写完代码以后,再审视一下,看看有没有上面的问题。

如果有,那还愣着干什么, 赶紧改吧! 可是改动代码破坏了功能怎么办? 要是有单元测试就不怕了。 兜了一圈,又回到了单元测试!

重构要求在不破坏原有代码的功能的情况下对代码进行改动,让它变得更好, 没有单元测试是很难的。 

对于重构的具体技巧,我就不罗嗦了,  Martin Fowler已经总结了一本书:

640?wx_fmt=jpeg

总之,单元测试和重构是程序员的两项基本技能,他们和编程语言无关,如果你没有掌握的话,很难说是一个合格的程序员。

(完)

你看到的只是冰山一角, 更多精彩文章,请移步《码农翻身文章精华》


每个程序员都需要掌握的 7 项基本技能 每个 Coder 需要掌握的 7 项基本技能是:1.编程语言:程序员可以学习多种编程语言,最重要的具体语言取决于他们想从事的工作类型。一些最常见的编程语言包括 Java、C++、Python 和 JavaScript。对于编码人员来说,精通至少一种编程语言并在新语言出现时继续学习和了解最新情况非常重要。2.数据结构和算法:理解数据结构和算法对任何编码员来说都是必不可少的。数据结构用于以高效且易... 阅读详情

相关推荐

R语言孟德尔随机化环境搭建:手把手教你搞定gwasvcf、gwasglue等包的安装报错(附本地安装包)

本文详细介绍了R语言中孟德尔随机化环境搭建的全流程,重点解决gwasvcf、gwasglue等包的安装报错问题。从依赖关系解析到GitHub访问配置,再到离线安装方案,手把手教你搭建完整的分析环境,特别适合生物信息学新手快速上手。

weixin_29093017的博客 216

程序员故事之中国版:程序员王小山的故事

程序员故事之中国版:程序员王小山的故事 王小山是一个典型的吃棒子面长大的农村男孩,他的父母都是淳朴的农民,一心一意的务农供他读书,他还有两个姐姐。后来,他的父亲因为劳累过度而去世。 那个时候王小山才12岁,他需要每天早晨4点起床下地去干农活,这些活非常累。然后,他还要走十几里的路去上学。王小山很喜欢上学,因为上学就意味着不用在地里干活了。他的家人对他期望也很大,希望他能考上好的大学。其实,他更喜欢在田野里奔跑,家人对他的期望让他读书的压力也很大。后来他考上了县里的高中,离开了家。只要有时间,他还是回去帮她的

玉露丸 710

SpringBoot实现电子发票生成

电子发票是近年来比较流行的一种票据形式,它取代了以往传统的纸质发票,具有减少纸张浪费、方便有效查验等优点。本文将介绍如何使用Spring Boot和Vue.js构建一个仿真电子发票生成应用程序,借助微信二维码扫描功能和第三方库,实现用户扫描二维码获取发票信息并填写相关开票信息,最后生成电子发票。在本文中,我们介绍了如何使用Spring Boot和Vue.js构建一个仿真电子发票生成应用程序,借助微信二维码扫描功能和第三方库,实现用户扫描二维码获取发票信息并填写相关开票信息,最后生成电子发票。

不愧是暮言的博客 6093

右键保存剪贴板数据

右键保存剪贴板数据 这个小工具是由程序员小山与Bug的视频启发,加上一直以来为保存剪切板中的数据苦恼不已,通常都是为了保存这些数据不得不进行繁琐的操作。 为了保存一段文字,需要将这段文字复制后手动创建一个txt文件,使用记事本、文本编辑器等打开这个文件,将文字粘贴进去再保存。 为了保存一张截图、一张浏览器上的图片,需要打开画图、QQ、微信等粘贴、发送后再另存为本地磁盘文件。 右键保存剪贴板数据 - 尘の博客 主要技能: Java(可以换成自己熟悉的) exe4J —— Java打包工具

凡尘 1419

数字锁相环的原理与FPGA实现

数字锁相环是锁相环电路的全数字实现。锁相环电路能够实现对输入信号的相位进行跟踪,进而在噪声中提取纯净的有用信号。以上就是今天要讲的内容,本文简单地介绍了锁相环的原理,然后,在Vivado仿真平台上,通过verilog做仿真验证。最终仿真结果能够实现锁定,但锁定时间较长,表明参数仍可做调整。

weixin_45857378的博客 8510

Ubuntu 22.04源码编译安装ROS Noetic

Ubuntu 22.04源码编译安装ROS Noetic

Drknown的博客 2万+

程序员需要具备的基本技能

软件开发是一个跨度很大的技术工作,在语言方面,有C,C++,Java,Ruby等等等等,在环境方面,又分嵌入式,桌面系统,企业级,WEB,基础系统,或是科学研究。但是,不管是什么的情况,总是有一些通用的基本职业技能。这些最基本的职业技能通常决定了一个程序员的级别,能否用好这些技能,直接关系到了程序员的职业生涯。很多程序新手也是因为缺少、达不到或是不熟悉在这些基本技能,所以,他们需要有老手带,需

陈皓专栏 【空谷幽兰,心如皓月】 1万+

lighttools用透镜旋转手动创建菲尼尔透镜

学过很多软件,都没有留下痕迹,很多年之后只记得学过的软件常用的一些功能,稍微难一些的再次用起需要重新学,但如果留下点痕迹,重新再用就会很快。lighttools无意之中接触了,记一点点笔记吧。...

kingsai2012的博客 4334

开发人员的U盘,最好是128G

  相信大家都买过多个U盘(应该也丢了多个)。如果是普通人,基本不需要大容量U盘。作为一个开发人员,要多大?   吾手上U盘是32G的。后来试图用再生龙备份LINUX系统时,发现不够用了,差不多有50G。于是只能放弃。然后想,看来要再搞一个U盘。多大?64G?想想还是觉得128G的靠谱,也就100多。需要的这么大的时候,不够用实在是没办法。   其实作为开发人员,备份系统是常见的事情。所以,1...

柳鲲鹏 5080

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1342

YOLOv11【第三章:高阶应用与落地篇·第7节】多任务联合训练(Multi-Task Learning):检测+分割+关键点三头并进!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 730

程序员必须掌握的核心技能有哪些?

私下里,经常有一些读者问我:“二哥,作为一名软件开发者,我应该掌握哪些技能,才能被领导赏识呢?”说实话,我心目中很多选项,不少于 20 个,但我斟酌再三,只挑选了其中最能让你受益的 8 个,不仅能让领导赏识你,还能让领导给你升职加薪。 01、吃透一门编程语言 这个技能看起来似乎没有必要强调,毕竟程序员不懂一种编程语言也说不过去啊。我之所以再次强调是怕你“贪心”,以为技多不压身就拼了命的学很多种编...

沉默王二 2万+

【PCL 特征】积分图法线估计

本文介绍了基于积分图的有序点云法线估计方法。通过利用点云数据的行列式结构特性,该方法避免了传统KD树搜索,采用积分图将邻域统计运算复杂度从O(k²)降至O(1)。详细阐述了四种法线估计算法:协方差矩阵法(精度最高)、平均3D梯度法(实时性好)、平均深度变化法(适合SLAM)和简单3D梯度法(速度最快)。重点分析了积分图构建、动态窗口平滑处理、法线方向调整等关键技术,并提供了PCL实现代码示例。实验表明,不同方法在精度和速度上存在显著差异,可根据具体应用场景选择合适算法。

yijiujiusan的博客 277

程序员必备的网站推荐

程序员必备的网站推荐 注:我收集的网站很有限,可能有很多网站没有列出,希望大家可以通过评论告知我,我会尽快添加。 一、开源代码托管平台 1. GitHub(https://github.com) gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。 gitHub于2008年4月10日正式上线,除了git代码仓库托管...

CHK的博客 6万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

程序员七种基本技能

七种程序员的基本技能,它们是:数组、字符串与哈希表,正则表达式,调试,两门语言,一个开发环境,SQL语言,编写软件的思想。 数组、字符串与哈希表 任何受过专业训练的程序员,对“数据结构”这门课程中涉及到的各种数据结构都不会陌生,但是在实际的编程工作中,大部分的数据结构都不会用到,而且也永远都不会用到。虽然如此,深入地理解基本数据结构的概念和实现细节,仍然是每个程序员的任务。这不仅仅是

lueceg的专栏 930

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

计算机程序员简历基本技能,应聘程序员的十大必备技能

刚毕业的小伙伴信心满满地找工作,却在吃了一次次闭门羹后蓦然发现一纸计算机专业的文凭并未真正赋予自己工作的技能。这种例子实在不胜枚举,没有几个学生能100%为自己的第一份真正的工作做好准备。如果你想顺利成为一名程序员,那么请学学以下10项小编从36氪网上为大家搜集整理的程序员基本技能吧!1、版本控制系统(VCS)VCS也许是计算机课程最大的疏漏。这些课程光记得教如何写代码,但却往往忘记教学生如何去管...

weixin_35935514的博客 2168

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

七种程序员的基本技能

 七种程序员的基本技能,它们是:数组、字符串与哈希表,正则表达式,调试,两门语言,一个开发环境,SQL语言,编写软件的思想。    数组、字符串与哈希表    任何受过专业训练的程序员,对“数据结构”这门课程中涉及到的各种数据结构都不会陌生,但是在实际的编程工作中,大部分的数据结构都不会用到,而且也永远都不会用到。虽然如此,深入地理解基本数据结构的概念和实现细节,仍然是每个程序员的任务。这

liuchuxiong的专栏 372

程序员必备的600个单词

程序员必备的600个单词涵盖了编程中的关键术语和概念,包括基础词汇如“application”(应用程序)、“array”(数组)和“binary search”(二分查找),以及更高级的概念如“architecture”(架构)和“assembly language”(汇编语言)。这些词汇帮助程序员理解和交流技术细节,提升代码质量和开发效率。掌握这些术语对于编程学习和职业发展至关重要。

哀莫大于心死 1917

程序员必备的基本技能

软件开发是一个跨度很大的技术工作,在语言方面,有C,C++,Java,Ruby等等等等,在环境方面,又分嵌入式,桌面系统,企业级,WEB,基础系统,或是科学研究。但是,不管是什么的情况,总是有一些通用的基本职业技能。 这些最基本的职业技能通常决定了一个程序员的级别,能否用好这些技能,直接关系到了程序员的职业生涯。很多程序新手也是因为缺少、达不到或是不熟悉在这些基本技能,所以,他们需要有老手带,需...

javababy1 219

十个程序员必备的网站推荐

使用工具类、设计分享类、资讯交流类、业界良心类。

青春不老,奋斗不止! 3万+

程序员必备工具

这世界上只有两种程序员,一种是大神,一种是菜鸡。大神总是不放过任何一个可以装逼的机会,而菜鸡只能仰望。在游戏中,RMB玩家总是能随便一个装备秒杀你几条街,万恶的资本家用钱掩盖了自己是菜鸡的事实。同样的,在coder界,装备也是作为菜鸡的你逆袭第一要径呀!经过一轮地毯式的访问和无数海阁导师大神的嘲笑,软妹总结出以下十个程序员必备效率工具,独家秘籍,看你骨骼惊奇,十块钱卖给你怎样,慢着别走,价格不满意

scmrpu 2万+
上一篇: ReactJS :我就是想把代码和HTML混在一起!
下一篇: 一个安卓程序媛的编程之路
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值