码农必备技能:烂代码的处理之道(下)

码农必备干活:Java编码——高效代码汇总小技巧 本文转载自:码农必备干活:Java编码——高效代码汇总小技巧 一. 常量&变量 1.1 当成员变量值无需改变时,尽量定义为静态常量 在类的每个对象实例中,每个成员变量都有一份副本,而成员静态常量只有一份实例。 反例 public class HttpConnection { private final long timeout = 5L; ... } 正例 public... 阅读详情

接上一篇 烂代码的处理之道(上)

3. 封装成类

但是我们不会就此停步, 你再看看代码,发现这么多小函数的调用其实是很凌乱的, 尤其是一些参数在函数之间传来传去, 看起来很扎眼。

这是另外一种暗示: 你应该抽取出类了 !

作为码农的你肯定知道什么是封装,是时候派上用场了, 把你的小函数及其相关的状态封装成类 , 这将是一步巨大的跨越。

别忘了测试啊!

0?wx_fmt=png

4. 屠龙刀:发现变化,并且封装变化

好,现在你看到曾经凌乱的领地, 秩序已经慢慢出现了, 各个类之间尽可能的隐藏自己的状态, 只通过方法来进行交互。

如果你的编程素养更高的话, 也许你能嗅到另外一种代码的坏味道: 类的职责划分不清--一个类搅进去了太多的职责, 读代码时脑子需要对很多职责进行不停转换,浪费脑细胞。

我一直认为 把不同的责任放到不同的类中去是非常重要的一件事情,更是程序员经常要修炼的基本素养, 但我观察发现, 很多程序员只会停留在把代码封装成类这一步, 而不会划分职责。

可能有人要问了,职责到底是啥? Robert Martin (就是《敏捷软件开发,原则,模式,实践》的作者)有个精辟的描述: 职责就是引起变化的原因。

如果有多于一个的原因都可能引起类的变化,就违反了单一职责原则, 最好把职责划分开。

例如一个上传图片的类,调用httpclient来上传图片, 但是上传过程和上传成功都会更新界面, 此时就有两个变化的原因了, 一个是通过网络上传图片, 另一个是界面, 任何一个的变化都会引起这个类的变化, 好的设计需要拆分开。

这时候你的脑子里时刻要牢记一个原则: 发现变化并且封装变化, 拿着这柄屠龙刀对你的类进行毫不留情的重构吧。

5. 倚天剑:对接口编程而不要对实现编程

‍

如果说屠龙刀让你大砍大杀,酣畅淋漓的话, 倚天剑的使用更加考验你的编程智慧, 因为它的使用更加精细微妙, 它考验的就是你的抽象能力。

你怎么样才能把一些相似的职责再抽象一下,形成更高层次的接口让别人调用, 进而隐藏自己的具体实现呢?

例如有两个类,一个类是把内容输出到打印机, 另外一个类把同样的内容输出到屏幕, 是不是可以抽象出一个print() 接口?

答案是: “不一定”, 得看你具体的业务,具体的代码。

我相信做接口抽象没有通用的方案,但是前辈们的总结已经给我们指明了方向和目标, 那就是“设计模式”。

只要你对职责的抽象向着设计模式的方向挺进, 基本上是不会跑偏的。

这里不会再展开讲设计模式,我记得我的IBM经理说过:”10年前我们面试的时候,还会问懂不懂设计模式, 现在不会问了, 因为懂得设计模式已经是必备的技能“ 请各位程序员再仔细的品味一下《设计模式》这本书,我承认它举的例子比较古老,读起来也非常费劲, 但它里边散发出的思想是永恒的。

从具体到抽象是你能力的更大跨越, 很多程序员迈不过这一步,或者说他自以为迈过去了,实际上却没有, 因为不恰当的抽象、或者过度的抽象反而是一种危害。 我现在也不敢说掌握了这个技能, 只能说继续学习,继续进步。

0?wx_fmt=png

6. 无招胜有招

好了,上面的都是废话,你现在可以统统忘了,:-) 但是要记住下面讲的终极武器:无招胜有招。

仔细想一下为什么我们编程序这么费劲呢?

说白了就是复杂的需求和“愚蠢”的编程语言之间有极大的隔阂,所以需要我们程序员的大脑来填补。

别看现在有各种各样的编程语言出现, 每个语言都吹得天花乱坠,但其实还都是”很低级的“ ,到目前为止,我们依然没有办法以自然语言的方式来编程序, 程序员为了把现实的业务映射到计算机实现, 需要累死无数脑细胞。

由于人脑同一时刻不能处理太多东西, 当我们面对太多的变量因素时,只能处理其中有限的几个, 这就逼着我们使用”发现变化,并且封装变化“, ”对接口编程而不是对实现编程“ 这样的武器, 把细节隐藏,把变化隔离。

其实这两样武器的终极目的就是为了达到程序的”正交性“。

“正交”在数学上讲的是线性无关, 是说一个维度的变化不影响另外一个维度, 你想象一下我们常用的二维坐标系(x, y) , x轴的变化不会影响到y轴的值, 反之亦然, 这就是正交性的体现。

但正交性的威力远远不止于此, 对于(x,y) 能表达二维空间中的所有的点, 如果我们再增加一个新的和x,y正交的维度z 轴, 那一下子就能表示三维空间中的所有的点了!

软件编程也是如此,无论你使用何种方法, 就是让程序形成互不影响、可以独立变化的多个维度, 这样的程序不仅优雅漂亮,更是容易理解,容易维护。

我想“正交性”应该是我们编程时追求的终极目标, 你可以忘掉其他招式,无往而不胜。

长按二维码, 关注"coderising"

加入QQ群:135769418  工作15年的的IBM架构师带着你做项目实战, 可是真的项目需求哦,涉及大量Android,iOS, Web开发的技术, 同学们做完后参加工作,技术上就不用愁了。

0?wx_fmt=jpeg

码农必备!一文吃透Flink Flink 作为强大的开源流处理框架,有着支持事件时间语义、有状态计算、灵活窗口操作、高吞吐低延迟、容错机制强等诸多突出特点,在与其他框架对比中优势明显 ,应用场景也十分广泛。不管你是大数据领域的新手,还是经验丰富的开发者,Flink 都值得深入学习和探索。如果你也对 Flink 感兴趣,想深入学习它,欢迎在评论区留言分享你的学习心得和疑问,咱们一起交流进步! 阅读详情

相关推荐

java8rt.jar源码-coderfun:《码农翻身》笔记

java8 rt.jar源码 coderfun 码农翻身笔记 1 计算机的世界你不懂 地址的动态重定位 多进程下为了解决内存地址覆盖的问题,需要记录每个程序的起始地址(基址寄存器),遇到与地址有关的指令,都要把地址加上基址寄存器的值,才是真实地址 分时系统 如果一个进程耗时很长,必须让出CPU去执行其他程序,CPU需要把时间分成一个个时间片,让操作系统调度处理 分块装入内存 很多程序都想进入内存,然而内存容量毕竟有限 时间局部性原理 如果访问了一个内存位置,很快还会再次访问,如果某数据被访问,很快还会再次被访问 空间局部性原理 如果访问了一个存储单元,很快附近的存储单元也可能被访问 页框 将程序分成一个个小块4KB,大部分时间只会运行几个页框 虚拟内存 可以给每个程序提供超级大的空间,只是这个空间是虚拟的,程序中的指令使用的就是这些虚拟地址,CPU的MMU再将它们映射到真实的物理内存地址,而程序本身浑然不觉,虚拟内存也要分块装入,每一块即页的大小和物理内存页框一样,方便映射 分段 每个程序都可以分为代码段,数据段,堆栈段,操作系统记录每个段的起始和结束地址,以及每个段的保护位,在段的内

码农翻身

大话编程我是一个线程我是一个Java class Javascript: 一个屌丝的逆袭 Java:一个帝国的诞生JSP:一个装配工的没落TCP/IP 之 大明王朝的邮差TCP/IP 之 大明内阁TCP/IP 之 蓟辽督师CPU 阿甘CPU 阿甘之烦恼CPU 阿甘:函数调用的秘密我是一个网卡我是一个路由器我是一个进程我是一块硬盘(上)我是一块硬盘(下)我是一个键盘张大胖的socket张大胖学递归学...

Harrytsz的博客 2613

2015-04_P292 软件随想录.pdf

2015-04_P292 软件随想录.pdf 1

《码农翻身》第二章 Java帝国 思维导图

小伙伴们大家好,我把曾经做的《码农翻身》第二章 Java帝国 思维导图放上来了。 使用软件是MindMaster,这个软件的好处是, 非RMB用户可以插入图片(另一款思维导图软件XMind,要成为会员之后才可以插入图片), 文件链接已经放上来啦 emmx格式的: 链接:https://pan.baidu.com/s/1YXQfKj0qaZt7pO97QF03wA 提取码:prta 复制这段内容后打开百度网盘手机App,操作更方便哦 ——————————————————————————————————————

weixin_44857476的博客 1044

支付宝H5支付唤醒协议全解析:从alipays://到动态orderSuffix的抓取与拼接

本文深入解析支付宝H5支付唤醒协议,从alipays://协议设计到动态orderSuffix参数的抓取与拼接,详细介绍了支付宝H5支付的底层机制。内容包括协议架构剖析、动态令牌生成与捕获、浏览器兼容性解决方案以及安全机制设计,为开发者提供全面的技术指南和实践建议。

weixin_27972919的博客 3527

07. 基础实战篇 - STP的基本配置

STP(生成数协议)是一个用于在局域网中消除环路的协议,他的标准是IEEE802.1d。STP通过强制使部分冗余链路处于阻塞状态,其它链路处于转发状态,将环形网络结构修剪成无环路的树形网络结构。可实现消除环路,当处于转发状态的链路不可用时,STP重新配置网络,并激活合适的备用链路状态,恢复网络连通性。

weixin_39868387的博客 7226

码农翻身 各章节链接

大话编程 我是一个线程 我是一个Java class Javascript: 一个屌丝的逆袭 Java:一个帝国的诞生 JSP:一个装配工的没落 TCP/IP 之 大明王朝的邮差 TCP/IP 之 大明内阁 TCP/IP 之 蓟辽督师 CPU 阿甘 CPU 阿甘之烦恼 CPU 阿甘:函数调用的秘密 我是一个网卡 我是一个路由器 我是一个进程 我是一块硬盘(上) 我是...

wudinaniya的博客 4万+

Unity线性空间下PSD透明贴图黑边问题:原理分析与三种解决方案

在计算机图形学中,颜色空间转换与Alpha混合是渲染管线的基础环节。伽马空间与线性空间的差异源于显示设备与人眼感知的特性,现代渲染引擎采用线性工作流以实现更真实的光照计算。然而,当图像处理软件(如Photoshop)导出的纹理数据与游戏引擎(如Unity)的预期格式不匹配时,就会引发技术问题,影响视觉保真度与开发效率。具体表现为,在线性空间下进行Alpha Blend混合时,带透明通道的纹理边缘常出现异常黑边或颜色失真,其核心根源在于纹理数据是否经过“预乘”处理与sRGB标记的解读冲突。这一问题的解决对于提

weixin_34198762的博客 382

《码农翻身》之技术之路

《码农翻身》读书笔记之技术之路 这是我的后端读书笔记系列文章的第四三篇,选取的是最近刚刚圈粉的知名博主刘欣创作的《码农翻身》。这篇文章只是最后一部分内容。 本文内容主要根据知名博主刘欣一作《码农翻身》的内容总结而来,本书的内容风趣幽默,讲解计算机理论原理也是十分透彻,由于书中常常以小故事的形式出现,为了方便学习和回顾,我把它们进行了一些改编和整理,便于自己和跟多人阅读。 本篇文章主要讲述的书...

Java技术江湖 2893

VC++车牌识别系统:图像处理与模式识别实战指南

计算机视觉是人工智能的重要分支,其核心原理是通过算法让计算机“看懂”图像内容。在工程实践中,图像处理与模式识别技术是实现视觉应用的基础,它们通过灰度化、边缘检测、特征提取等步骤,将原始像素转换为可理解的信息。这些技术的价值在于能够替代人眼完成自动化、高精度的识别任务,广泛应用于智能交通、安防监控和工业检测等领域。以车牌识别为例,它综合运用了图像预处理、车牌定位、字符分割和字符识别等关键技术,其中车牌定位常采用基于边缘检测和颜色特征的方法,而字符识别则涉及模板匹配或机器学习分类。在VC++开发环境中,结合Op

weixin_28465009的博客 281

2026华数杯 国际大学生数学建模竞赛 A题 如何防守直接任意球? 解题思路+模型分析+代码

2026华数杯 国际大学生数学建模竞赛 A题 如何防守直接任意球? 解题思路+模型分析+代码。基于视频数据重构进球轨迹,建立空间坐标系并进行曲线拟合,推算初始速度。建立"香蕉球"、"电梯球"、"落叶球"三种典型直接任意球轨迹的动力学模型,分析C罗进球的类型。针对C罗这类强力球员的直接任意球,提出人墙排布策略和守门员防守策略。

YOLO 664

码农必备技能:烂代码的处理之道(上)

“曾经有一份烂代码摆在我的面前, 我没有珍惜, 我没有把她变的更好, 相反我把她变的更烂!”现在你的领导又交代给你个新功能,要求三天完成。你一看代码就发现, 这活真不是人...

码农翻身 496

深入Scrapy ItemLoader:打造优雅高效的Python爬虫数据清洗流水线

ItemLoader是 Scrapy 提供的声明式数据加载工具。它的核心理念是:将数据提取(从response中取原始值)和数据清洗/验证(处理空值、格式转换、默认值等)分离开。你可以把它想象成一个工厂流水线:原始零件(selector提取的文本)进入,经过一道道工序(输入处理器),组装成最终产品(Item字段)。首先在items.py中定义清晰的数据结构。使用搭配类型注释(虽然Scrapy自身不强制,但对人和IDE友好)。

2201_76125261的博客 69

探索人工智能领域:码农必备的技能清单

从监督学习中的决策树、支持向量机,到无监督学习中的聚类算法,再到强化学习中的策略优化,熟悉各种算法的原理和适用场景,才能根据具体问题选择最合适的解决方案。在当今科技驱动的世界中,人工智能(AI)正以前所未有的速度发展,成为了创新和变革的核心力量。对于渴望在这个充满活力的领域中崭露头角的码农们来说,掌握一系列特定的技能是开启成功之门的关键。这是一条充满挑战但也充满机遇的道路,只要不断努力和积累,就能在人工智能的浪潮中创造出令人瞩目的成就。此外,具备良好的问题解决能力和创新思维也是至关重要的。

zjjyliuweijie的专栏 535

4.4 直流无刷电机(BLDC):控制器硬件设计

摘要 本文详细阐述了直流无刷电机(BLDC)控制器的硬件设计要点。控制器硬件主要包括微处理器单元、功率驱动模块、信号检测电路、通信接口和电源管理模块。在微处理器选型方面,分析了ARM Cortex-M系列、DSP等架构的适用场景,并对比了不同处理器的性能参数。功率驱动模块设计重点包括栅极驱动电路、逆变桥热管理和电流保护机制。信号检测部分介绍了位置传感器接口和模拟信号调理技术。此外,还讨论了通信接口设计、电源管理方案以及硬件布局与EMC设计规范。最后强调了硬件测试验证的重要性,包括故障注入测试等验证方法。整体

技术工作者 185

系统架构设计师【第1章】: 绪论 (核心总结)

系统架构 (System Architecture)是系统的一种整体的高层次的结构表示,是系统的骨架和根基,也决定了系统的健壮性和生命周期的长短。系统架构设计师是承担系统架构设计的核心角色,他不仅是连接用户需求和系统进一步设计与实现的桥梁,也是系统开发早期阶段质量保证的关键角色。通俗地说,系统架构 (System Architecture)

数据知道的博客 1万+

码农的有趣灵魂:我不是一个写死代码的码农,我是一名程序员

今日,看到有些文章对码农和程序员做了一些界限划定和差异分析,吓得作者赶紧研究一下自己属于哪个身份,但当仔细查看了这些文章后,发现其实对于写代码的人来说,无非就像周星驰嘴里的”龙套“和”演员“之分,顿时感悟,你是属于码农还是程序员,并不是外界给你定义的,而是你自己对这份职业的态度和付出而形成的一个一种身份。刚好可以借助这段时间作者的一些所见所闻,写几个故事,逐一分析。文章提纲:有趣的码农程序员的自我...

weixin_34310369的博客 302

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

从码农到架构师:IT人必备的超能力技能树

技能树不是 checklist,而是成长地图建议:深度优先,兼顾广度;持续实践,定期复盘将“超能力”应用于创造价值,而不仅仅是解决问题。

2404_89164415的博客 431

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《码农翻身》原文分章节阅读链接

最近发现了别人整理好的码农翻身里面的一些文章链接,这本书非常棒,公众号相信很多人也知道(coderising),不过由于这本书目前只有纸质版,因此在上下班这块时间段里没法方便的去阅读,所以这份整理好的带链接的目录就十分方便的解决了这个问题。 附上原文链接:https://blog.youkuaiyun.com/wudinaniya/article/details/81130079 补充一篇负载均衡文章:h...

静待花开 8032

从码农到工匠,程序员必备的两本提升自我修养的书

软件设计不仅是“技术”(Technique),更是一门“技艺”(Craftsmanship),要想控制复杂度,防止系统腐化。我们不能只满足做一个搬砖的“码农”,而是要坚持自己的技术梦想和技术信仰,怀有一颗“匠人”之心,保持专注、持续学习,每天进步一点点。唯有如此,我们才有可能“从码农走向工匠”! 程序员必备的两本提升自我修养的两本书: 重构:改善既有代码的设计(第2版) 本书的读者是专业的程序员,也就是那些以写软件为生的人。本书的范例和讨论,涉及大量需要阅读和理解的代码。这些都是用JavaSc

人邮异步社区 1321

你仅仅是个码农,还是软件工程师?你还“安于现状”,年龄一大你就遭企业淘汰了

IT 界知名的段子手曾说:对于那些月薪两万以下,自称 IT 工程师的码农们,其实我们从来没有把他们归为我们 IT 工程师的队伍。他们虽然总是以 IT 工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少小猴子的愤怒,但却也只能默默地捏着工资条躲在小黑屋里伤心。然而,笔者认为,薪资的多少并不能成为分辨码农(普通程序员)和软件工程师(高级程序员,上面所指的IT工程师)的分界线。码农和软件工程师如果要强行去区别,最根本的区别不过是技术层次的不同。 码农: 顾名思义为编代码的农民,从本质上来说,码农就是.

测试萌萌 4734

软件开发人员必须具备的一些软技能,否则只能是码农!

软件开发人员(程序员,码农)除了写好代码之外,更需要在身体上、精神上和心灵上更强大、更健康。一个软件开发人员的成长,离不开软技能.软技能就是激活人资的能力,即是调动别人的资源和知识的能力以及调动自己知识进行创造性思维的能力!软技能能力值越高,处理事情的能力就越强,它是衡量一个人处理事情能力的量表! 一、学会快速找到可以copy的经验 老鸟说:软件开发=英语+搜索,软件开发作为一门应用性很强的学...

CSDnjava001的博客 605

从码农到架构师的跃迁密码:2025必备技能栈全图谱曝光

掌握程序员技能栈2025必备核心能力,助力从码农到架构师的跃迁。涵盖云原生、AI集成、微服务架构与DevOps实战方法,适用于高并发、智能系统等场景,提升技术广度与架构思维。进阶路径清晰,值得收藏。

DebugLoom的博客 750

从码农到技术专家:程序员三级跳必备的7项硬核技能,你具备几个?

掌握初级中级高级程序员标准,实现职业跃迁。本文解析从码农到技术专家必备的7项硬核技能,涵盖编码规范、系统设计、架构思维等关键能力,适用于各阶段程序员进阶路径。方法清晰、实操性强,值得收藏。

CompiTide的博客 421

读《代码整洁之道》有感——如何写出好代码

怀念小时候写作文了,布置作业,回去读《OOXX》这本书,然后写篇读后感,就叫“读《OOXX》有感”。 作为一个程序员,一直以来以写出好代码为目标。 但也迷茫过,究竟写出来的怎样才能算是好代码呢。 读了不少技术书,大多数都是以如何使用某个框架,某个技术,某个语言为主,也有像《程序员修炼之道》或《高效程序员的45个习惯》这样的,会告诉一个好的程序员必备的素质方面的书籍,当然像

Merlin91 595
上一篇: 码农必备技能:烂代码的处理之道(上)
下一篇: 圣诞礼物:Java EE的历史
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值