优秀程序员的四项能力

news/2024/10/9 10:05:45/文章来源:https://www.cnblogs.com/ivan-uno/p/18453631
最近和几个刚毕业的同学聊天,谈到优秀程序员的标准,即兴讲了几点。事后想想这个问题还挺有普适性的,值得记录下来与大家分享。
 
总的来说,我觉得优秀程序员与普通程序员相比,在四项能力上有明显的差异,分别是有单元测试习惯,代码可读性高,高质量的重构能力,良好的抽象思维能力。
 
1. 单元测试
 
程序员的基本要求是完成代码开发工作,让代码正行运行起来。在我们尝试运行一次,刚好得到预期的输出结果,到这里工作只完成了一半。
 
因为还有若干输入,会让程序得到错误的输出或者说是不在开发者预期范围内的输出。而单元测试的目的是为了证明在各种输入情况下,程序代码几乎都能够按照预期运行。
 
可以说,单元测试是从程序偶然正确到程序大概率正确之间的最重要方法,是优秀程序员最基本的要求。
 
单元测试是最典型的白盒测试,对Java技术栈来说,测试工具就是JUnit,其提供了测试代码的编写框架。单元测试完成情况的主要度量指标是代码覆盖率,又可以细分为行覆盖率,分支覆盖率,方法覆盖率等等。
 
覆盖率的统计有成熟工具支持,如JaCoCo,通过Maven配置即可使用。单元测试的覆盖率一般要求较高,就重要模块来说,“行覆盖率”应该在90%甚至95%以上。
 
2. 代码可读性高
 
很多程序员有个误区,觉得代码越容易被别人看懂,自己就越容易被替代。这个观点貌似是有逻辑的,但其实挺妨碍个人成长。软件工程之所以称为工程,很重要的一点就是需要大规模团队协作。
 
这个协作过程是需要互相补位的。极限编程思想中也强调集体代码所有权,即整个团队共同拥有和维护的概念,任何团队成员都可以修改任何部分的代码、改进代码库、提高软件质量。
 
同时,软件工程和任何重要系统一样,不能不应该存在单点的。如果一段代码只有开发者自己能看懂,能维护,那么这个系统就会无比脆弱。某些可读性差的代码,即使开发者本人也是当时能够看懂,半年之后对自己来说都是天书。
 
真的有用代码可读性差这点来保障职业安全的想法,那大概率不会被安排承担重要的开发工作。
 
3. 重构能力
 
重构是保持软件生命力的重要手段。程序诞生后,不是一成不变的,修改Bug、增加新功能都会打破原有的设计预期。这时最安全的方法是通过叠加补丁的方式编写增量代码,尽量不修改主干逻辑。
 
但是,这种方式持续一段时间后,代码的框架结构就会遭到破坏,各种杂乱的分支让程序的可读性、可维护性急剧下降。
 
而重构则是将后续产生的需求进行整体考虑,在保证结果正确的前提下,维持甚至提升了代码框架结构的合理性。可以说,能够完成高质量的重构是优秀程序员的试金石。
 
重构不只需要勇气,还需要方法。很多程序员不做重构,是因为其风险性高,毕竟是经过了实际生产环境的验证,稳定性有保障。所以,代码重构要有全量迭代测试作为验证手段,而为了在成本上可行,这个全量迭代必须是自动化的。
 
优秀的程序员,应该在开发过程中有意识的积累测试案例脚本,能够通过自动化的方式进行功能上的全量迭代测试。如果你开发的是后台应用服务,那就应该将各种请求报文、响应报文和上下文等数据积累下来。如果有完善DevOps流程,则是对高质量重构的一种组织级保障。
 
4. 抽象思维能力
 
程序开发中面临很多具体问题,看似各不相同,需要从头思考方案。但是,优秀程序员应该善于对问题进行抽象,从具体的业务场景中将问题的本质抽离出来,这个有点像数学建模过程。抽象后,更容易找到经典解体思路。
 
所谓太阳底下无新事,我们面临的问题几乎都有经典的处理方法。没有抽象思维能力,则只能自己或者小范围几个人闭门造车式的研究,当事人觉得是奇思妙想,但其实是重复发明轮子,这个轮子可能还是方的。
 
在我看来,养成抽象思维的方法有两个,第一是多阅读基础软件的设计方案和代码,因为他们是与具体业务无关,技术方案必须有更强的通用性,往往可以兼容我们的业务场景。或者说,应用软件的解题方法基本上就是基础软件的方法上再附加业务场景的约束。
 
第二是多读相关领域的顶会论文,积累抽象问题的解决方案,有点像武侠小说中的高手练习内力,只要内力足够强,摘叶飞花皆可伤人。这是从抽象到具体的过程,开始的体验可能会稍微痛苦些,推荐从工业界论文入手会降低些难度。从这点来说,抽象思维也是连接工业界现实问题与学术界研究成果的重要桥梁。
 
最后总结一下, 四种能力分别是有单元测试习惯,代码可读性高,高质量的重构能力,良好的抽象思维能力。四种能力的背后更是体现了程序员的自我修养,单元测试背后是靠谱的工作态度和专业精神,代码可读性背后是协作意识和开放心态,重构能力的背后是追求卓越的精神和自我迭代的勇气,抽象思维能力的背后是扎实的理论基础和宽广的技术视野。
 
 
 
 

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

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

相关文章

zabbix“专家坐诊”第258期问答

问题一 Q:各位大神 问下这个zabbix通知到企业微信的py脚本可以使吗? A: 这个需要自行测试。 Q:用jconsole连接失败了。 A:那就是没配好, 连接不上,要确保能正常远程连接。问题二 Q:这种是虚拟机内部的jmx配置有问题吗? A:提示被拒绝了,没成功连上,jmx 的要用先测…

图片转绘画效和绘画软件

我收藏的软件:绘画软件: ArtRage Krita 图片转绘画效: Snap Art 4 Impresso Proffffffffffffffffftest red font.

Java反序列化

Java反序列化 什么是序列化和反序列化 如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。序列化:将数据结构或对象转换成二进制字节流的过程 反序列化:将在序列化过程中所生成的二进制字节流转换成数据结构或…

QT5中引入GMSSL库

近来项目中需要使用加密算法,对上/下位机之间的消息进行加密。客户要求使用国密算法库,不能使用国际上通用的AES、RSA等算法。 国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。 其中SM1没有开源,其他的均开源。 源码编译 开源…

Day2 备战CCF-CSP练习

201403-3Day2 题目描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。 每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。 这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。 在工具名字之后可能会包含若干…

oop实验1

task1:1 // 现代C++标准库、算法库体验2 // 本例用到以下内容:3 // 1. 字符串string, 动态数组容器类vector、迭代器4 // 2. 算法库:反转元素次序、旋转元素5 // 3. 函数模板、const引用作为形参6 7 #include <iostream>8 #include <string>9 #include <vector…

MySQL 官宣:支持读写分离了!!

我们一直在等待的 MySQL 读/写分离功能 现在终于可以使用了! 在规模上,我们在副本之间分配读取,但这必须在应用程序中以某种方式进行管理:指向在某个地方写入并在其他地方读取。 在 MySQL 8.2 中,MySQL Router 现在能够识别读取和写入,并将它们路由到主实例(如果是 Inno…

【一步步开发AI运动小程序】二十、AI运动小程序如何适配相机全屏模式?

引言 受小程序camera组件预览和抽帧图像不一致的特性影响,一直未全功能支持全屏模式,详见本系列文件第四节小程序如何抽帧;随着插件在云上赛事、健身锻炼、AI体测、AR互动场景的深入应用,各开发者迫切的希望能在全屏模式下应用,以便获得更合理的UI布局和更佳的用户体验,经…

实战逆向RUST语言程序

实战为主,近日2024年羊城杯出了一道Rust编写的题目,这里将会以此题目为例,演示Rust逆向该如何去做。关于Rust逆向,其实就是看汇编,考验选手的基础逆向能力。在汇编代码面前,任何干扰都会成为摆设。实战为主,近日2024年羊城杯出了一道Rust编写的题目,这里将会以此题目为…

AI课堂教学质量评估系统

AI课堂教学质量评估系统利用摄像头和人脸识别技术,AI课堂教学质量评估系统实时监测学生的上课表情和课堂行为。同时,系统还结合语音识别技术和听课专注度分析算法,对学生的听课专注度进行评估。AI课堂教学质量评估系统通过收集和分析这些数据,生成教学质量报告,并提供针对…

在线表格技术如何助力企业实现全面预算?

最新技术资源(建议收藏) https://www.grapecity.com.cn/resources/前言 在当今快速变化和竞争激烈的商业环境中,企业需要通过精细化的管理手段来确保自身的市场竞争力和持续发展。全面预算管理(Comprehensive Budget Management)作为企业管理的重要组成部分,不仅为企业的…

考场作弊行为自动抓拍告警系统

考场作弊行为自动抓拍告警系统通过在考场内部布设监控摄像头和智能识别设备,考场作弊行为自动抓拍告警系统实时监测考场内所有考生的行为,考场作弊行为自动抓拍告警系统利用图像识别技术,对考生的行为进行自动抓拍,并分析判断是否存在作弊行为。考场作弊行为自动抓拍告警系…