程序员的那些反模式

汇付天下聚合支付自助接入全流程详解(附JAVA/非JAVA环境配置指南) 本文详细解析了汇付天下聚合支付的自助接入全流程,涵盖JAVA与非JAVA环境下的实战配置。从接入前准备、架构理解、密钥获取,到JAVA SDK集成、核心支付代码拆解,以及Node.js/Python等环境的裸接口对接、签名生成与异步通知处理,提供了完整的避坑指南和上线检查清单,帮助开发者高效、稳健地完成支付系统集成。 阅读详情

作者:张铁蕾

来源:微信公众号“张铁蕾”, 老刘做了修改。

有鸡汤就有反鸡汤,有模式就有反模式。

今天,我们来谈一谈程序员的行为中的那些反模式,涉及程序员的日常工作和学习的各个方面。

这些反行为模式,并不针对某些特定的个人。如果你不幸中招,千万不要懊恼,因为这实在太正常不过了,很多反模式的坑我也是亲身踩过的^-^

稍微修改几行代码就调试

对所有程序员来说,这个行为有一点心理上的原因:工程师都喜欢在做完一点修改之后,立即看到它的效果。这是一种诱惑。

除此之外,这种做法一般多见于新手。

新手对于敲下的每一行代码都不太有确信的把握,因此需要依靠高密度的调试来一步步确认。当一个老手在项目中首次使用一个新的技术时,情况也与此类似。

但是,不得不说,这种做法是低效的。

首先,稍微大一点的项目,手动调试一遍都会比较花时间。

更重要的是,不停地中止编码工作来进行调试,很容易打断思路,甚至漏掉一些关键流程。

更好一点的方式是:动手编码之前,提前想好一个完整功能或模块的关键逻辑,然后一口气敲完所有代码,最后一次性调试所有case。

当然有时候难免会碰到不太确认的技术点,这时如果可能的话,更好的方式是单独搭建一个轻量级的、便于调试和验证的工程,来把模糊的技术点系统地摸索一遍。


不经意间使用翻译插件

当你访问英文网站的时候,你的浏览器是否会弹出类似这样的“翻译工具栏”?

640?wx_fmt=jpeg

这是现代浏览器智能化的一个体现。但是,对于程序员阅读技术文章来说,还是原汁原味的英文文档表达得更准确。

所以,如果你的浏览器有这样一个翻译工具栏,那么想办法卸掉它或关闭它。

阅读英文技术文档,其实对英语基础的要求并不太高。英文技术文档,所涉及到的词汇量很有限,而且一般句式比较简单。之所以有人感到困难,很多时候是一种耐心的缺乏或心理的恐惧。

对于我们团队内的每个人,我都会这样告诉他:阅读英文技术文档的能力,是一个must;否则,你在技术的路上就很难突破。

先实现简单的,其它后面再说

我们总是习惯从擅长的事情出发来决定行为。当一个项目中出现一些复杂的、超出常规的部分时,很多人的选择是先把简单的部分做完,复杂的部分最后再说。

“最后再说”的意思是,等到项目的后期再来考虑它。这其实是在逃避和搁置矛盾。

从另一个层面来说,这也是人们趋利避害的一种本能。一种鸵鸟心态。

到那时有可能已经临近项目截止日期,人们更没有足够的耐心来设想解决方案,而最终只能求助于一些折中,比如降低产品要求。

在比较坏的情况下,还可能出现由于关键细节没有在开始讨论清楚,从而最后推翻整个设计的情况。

所以,在项目开始之初,就要优先把那些看似复杂的、有可能超出掌控的产品技术点讨论清楚。实际上,能否把最复杂多变的东西在一开始就考虑清楚,反映了一个团队的综合水平。

IDE里看不到依赖工程的源码

不管是出于提升自身的目的,还是由于工作需要,我们都需要阅读一些优秀的开源源码。实际上,阅读开源的代码未必非要找一个完整的开源工程,从头到尾地去读。应该从日常工作需要的SDK源码入手,积少成多。

每个程序员,不管他是用什么语言来编写程序,一般来说都要依赖某个语言的SDK,而且通常它们都是开源的。比如Java的JDK,比如C++的STL,再比如Android SDK。一定要把你的开发环境设置成一点击某个调用的方法就能跳转进源码实现。只有这样,你才能把平常开发的时间利用起来,随时随刻都点过去阅读源码。

有时候我发现某些工程师用的IDE很高级,各种快捷键用得也很溜,但就是点击不到源代码,这让人很难理解。在这种情况下编程,我会感觉自己像是被蒙上了眼睛一样。

当然有些程序员面对的是一个闭源的系统,比如iOS程序员,似乎这个方法不太适用。不过闭源的SDK通常注释写得比较详细,至少通过IDE把每个调用的注释都仔细读懂。况且,现在iOS上的Swift的SDK不是也开源了嘛。

IDE里一点击就看到依赖工程的源码,这个习惯不仅适用于阅读开源代码,也适用于在一个大公司内调用其它团队提供的接口的时候。在任何公司和组织内部,不断加深对于周边系统的理解,不断扩大你的知识边界,永远都是让你从众人中脱颖而出的有效途径。

懒得阅读前人的代码,因为它们太烂

当我们有了一点工作经验之后,我们总是会抱怨工程中前人留下的代码太烂,总有一种推翻重写的冲动。

很多时候,前人留下的代码质量如何,刚接触项目的人是会产生错误印象的。但是,我们要知道,之前的代码作者掌握的信息可能比我们目前看到的要多,我们现在考虑到的和没考虑到的,可能作者都已经考虑过了。

更何况,编码犹如创作,有人说好就有人说不好。就像最近新获雨果奖的《北京折叠》,有些人觉得是中国科幻的进步,而另一些人则认为这不是一部成熟的作品。作为一名科幻迷,我也在朋友圈里对它进行了批评。对于一部原创作品来说,虽然每个人有坚持自己看法的权利,但我们应该理解,争议是会始终存在的。

因此,对前人留下的东西,首先应保持敬畏,这样才有可能去了解它。

即使是前人的代码真的很烂,那么我们在重构之前也应该彻底读通它,以保证在进行代码结构升级的时候不至于丢掉逻辑。

要知道,读懂别人的代码,是一种更高的能力。

一有问题就找Leader提问

爱问问题,通常被认为是一种美德。

但有一种情况,却可以被认为是懒于思考或不得要领的表现。

假设你的Leader交给你一个任务:研究某项新技术,并把它用到项目中。很快,你就碰到一个解决不了的障碍。然后你去找Leader请教。

结果,你的Leader在了解完你的问题之后,反问了你一些问题,比如:“如果换另外一种使用方式会怎么样呢?”,或者,“文档里提到的这个概念,好像跟另一个问题有关,它是什么意思呢?”,再或者,“这个问题到底是怎样产生的呢?它的底层原理是怎样的呢?”

这时如果你的回答是“不知道,我还没来得及看”,恐怕你的Leader就会在心里把“不善思考”的帽子扣在你头上了。

这里其实有点像个陷阱。如果你的Leader问的这些问题你都能回答下来,那其实你多半已经能解决原来的问题了。

所以,在把你的问题抛给你的Leader之前,要确保你已经充分探索了所有可能性,最好已经有了一些解决思路,只是需要你的Leader来帮你做一些权衡,到底选择哪一条思路。

轻易说不可能实现

产品经理们经常会找程序员确认一些想法的可行性,类似下面的对话:

产品经理: 这个地方的数据能否换成像XX软件那样的展示形式呢?

程序员: 不可能。我们服务端的数据存储格式根本不是那样设计的。

产品经理: 那这里的交互能改一改吗?让用户更方便操作一些。

程序员: 不能。我们用的这个控件这里是写死的。

产品经理:这个控件不能改一改吗?

程序员: 改不了,这是一个系统默认控件......

作为技术人员,当被问及可行性的时候,应该仔细思考,必要的时候做一些调研,然后再给出答案。轻易地给出不可能的答案,可能会限制产品的思路。

实际上,很多的不可能,是局限于现有实现而做出的片面的判断。跳出现有逻辑,很多不可能就能变成可能。

要知道,许多伟大的产品都是突破了众多的不可能才产生的。而在不可能向可能转化的过程中,旧的技术体系被扬弃,新的开发方式被引入,原有的局限被突破,技术本身也必将经历一场浴火重生的洗礼。

盯着QQ/微信秒回消息

在一家公司工作一段时间之后,你负责的东西越来越多,跟你有关的事情也变得越来越多。于是,公司内经常有人在QQ/微信上找你帮忙,或者问你问题。

每天从一上班开始,你的QQ/微信图标就闪个不停。等你刚刚处理完,正准备编码实现一段算法的时候,QQ图标又亮了。

同事都夸赞你秒回消息,有求必应。但你的核心开发任务却总是一再拖延。

这里涉及到一个时间管理的问题。

这个问题对于一些一线的技术管理人员,尤其严重。一会沟通协调,一会被拉去开个讨论会,再过一会又有人跑过来商量技术问题。疲于应付了将近一天,眼看到了下午五六点钟了。这时终于安静一点了,但你整个人身心俱疲,俨然已经是强弩之末,再也进入不了深入思考的状态了。于是,白天原计划完成的工作,也只能晚上拿回家去开夜车了。

说实话,这个问题相当棘手。如果你能做到将注意力在不同的事情之间快速切换,我只能说你真的很厉害!这样你在被打断后,就能快速回到原来专注的事情上去。

而对于普通人来说,类似番茄工作法那样,将时间精细切割,可能会有些效果。前提是你确实能够坚持下来,并在需要的时候保持足够的专注。

现在我们在教育小孩的时候都知道,专注是一种很可贵的品质,有可能直接关系到他/她未来能取得的成就。但可惜的是,越来越多的成年人正在丧失这种品质。

前段时间,我安装了微信的Mac版。结果一发而不可收拾,各种群消息不停地蹦出来,简直是专注力的一剂毒药。

最终,忍痛卸载。

(完)

你看到的只是冰山一角, 更多精彩文章,请移步《2016文章精华》或者《2017文章精华》


码农翻身

用故事讲述技术

640?wx_fmt=jpeg

FreeSwitch采用mrcp协议对接科大讯飞asr和tts以及对话系统 FreeSwitch采用mrcp协议对接科大讯飞asr和tts对接过程 阅读详情

相关推荐

原恒星尘埃生长的三维MHD模拟与湍流效应研究

星际尘埃演化是恒星形成过程中的关键环节,其动力学行为直接影响行星系统的构建。通过磁流体力学(MHD)模拟可以揭示尘埃颗粒从微米级到行星胚胎尺度的生长机制,其中湍流效应通过改变碰撞频率和密度结构发挥双重作用。最新研究采用COALA-RAMSES耦合框架,实现了包含自洽尘埃生长的三维非理想MHD模拟,量化了不同物理环境下尘埃尺寸分布的演化规律。这些发现不仅为解释ALMA观测数据提供理论依据,也对行星形成初期条件约束具有重要意义,特别是在湍流参数化与尘埃生长速率关系方面取得突破。

weixin_30988079的博客 385

程序员的批评与自我批评(转)

关于自我批评,我这个人的不足之处就太多了,长的高大占地面积也大,在人多屋小办公室里形成了一道视线屏障。这些优点暂且不提。   对于我的缺点主要就是太爱加班了,造成了公司以及整个社会的困扰,主要分为以下几个方面:   1、对于公司其他人员的困扰,由于我的加班导致楼下保安大哥不能及时关闭楼门,在我下班后,还要再次寻楼,这不仅是人力资源上的再次浪费,在寒冷的冬天,保安大哥还要因为我的加班,站在吹着

u010066807的博客 5794

FPS游戏自动枪械识别+压枪(以PUBG为例)

使用Python3.9作为开发环境,实现一个通用的FPS游戏自动检测枪械配件+压枪宏的软件开发思路

weixin_37827742的博客 3万+

编程反模式

您是否曾经进行过代码审查,记录了非常高的WTF / m? 您是否想知道所有这些错误代码的原因是什么? 在大多数情况下,导致原因1的主要原因是使用设计和编码反模式。 如果您喜欢定义,请参见以下内容:AntiPattern是一种文学形式,它描述了对问题的普遍存在的解决方案,该解决方案产生肯定的负面影响。 AntiPattern可能是由于经理或开发人员不了解更好,没有足够的知识或经验来解决...

最佳 Java 编程 382

OK3588-C开发板Forlinx Desktop系统烧录与多媒体功能实战

本文详细介绍了OK3588-C开发板Forlinx Desktop系统的烧录步骤与多媒体功能实战。从硬件准备到软件工具配置,逐步解析RKDevTool烧录技巧,并深入测试摄像头、视频编解码及音频功能,帮助开发者快速掌握RK3588芯片的强大性能与Ubuntu系统的优化应用。

weixin_29190169的博客 419

汽车电子电气架构

控制器:从多独立 ECU → 域控制器(DCU) → 中央计算平台 + 区域控制器,硬件集成度持续提升,冗余减少;算力:从分散无集中算力 → 按域分配算力 → 全域算力集中,算力量级从 MIPS 跃升至 TOPS,支撑高阶智驾;网络:从低速 CAN/LIN 独占 → 以太网为主、总线为辅 → 高速以太网主干,数据传输速率提升千倍;软硬件:从软硬件深度绑定 → 初步解耦 → 完全解耦(SOA),实现 “硬件预埋、软件解锁”;线束。

LXY_LXY_的博客 1439

mysql 说说反模式设计_sql反模式(二) — 单纯的树

场景:有这么个需求:设计开发一个评论系统,要求用户可以评论文章以及相互回复,无层级数限制。这个需求开发人员基本都遇到过,可以先回忆或考虑这个数据表如何设计!定义:存在递归关系的数据很常见,数据常会像树或者以层级方式组织。在树形结构中,实例被称为节点(node),每个节点有多个子节点和一个父节点,最上面的节点叫根(root)节点,它没有父节点,最底层的没有子节点的节点叫叶(leaf), 中间的节点简...

weixin_35988311的博客 288

训练救星!EMA多尺度注意力让YOLOv11轻松攻克自定义数据集不涨点难题

在目标检测模型训练中,自定义数据集不涨点是阻碍算法落地的核心痛点之一。传统训练策略在数据分布特殊、样本量有限的场景下极易陷入收敛停滞,而 EMA(指数移动平均)结合多尺度注意力的方案,在自定义数据集上实现mAP 提升 6.5%,同时让训练曲线从“平缓停滞”转为“持续攀升”,彻底解决创新点在自有数据上的性能瓶颈。本教程将带你从原理到实践,通过 EMA 多尺度注意力为 YOLOv11 注入训练稳定性,让你的自定义数据集模型训练实现质的飞跃。EMA 衰减率:小样本数据集建议将decay。

FJN110的博客 161

【深度好文】反模式:10种滥用设计模式案例分析

滥用设计模式,就像在没有正确诊断的情况下给病人开药一样,可能会带来一系列的问题和后果。增加复杂性:设计模式应该用来简化设计,但如果滥用,它们会使系统变得更加复杂和难以理解。这就像给一个简单的房子增加了不必要的装饰,最终导致维护成本上升。性能问题:一些设计模式,如代理模式或装饰器模式,可能会引入额外的间接层,这可能会影响系统的性能。就像在赛车上增加不必要的重量,会降低它的速度。代码膨胀:滥用设计模式可能导致项目中存在大量不必要的类和接口,从而导致代码膨胀。这就像是在图书馆里增加了过多的书架,而书籍却寥寥无几。

威哥爱编程,华为 HDE,鸿蒙极客、优快云博客专家、《鸿蒙 HarmonyOS 5/6 开发之路》系列图书第一作者 1178

【STM32 CubeMX】I2C中断方式与DMA方式

在STM32 CubeMX环境中,I2C(Inter-Integrated Circuit)通信协议的实现可以采用中断方式或DMA(Direct Memory Access)方式。中断方式通过触发中断来处理数据传输,而DMA方式则利用直接内存访问技术来实现数据传输,减轻了CPU的负担。在选择I2C通信方式时,开发者需要根据具体的应用需求和性能要求来选择合适的方式。STM32 CubeMX提供了图形化配置工具,使得配置I2C通信方式变得更加便捷。

m0_62599305的博客 7749

使用Microsoft Print to PDF进行编程:创建PDF文件的简单方法

Microsoft Print to PDF是一种内置于Windows操作系统中的功能,它允许我们通过打印操作将任何可打印的内容保存为PDF文件。然后,我们使用Microsoft Print to PDF打印机进行打印操作,并将输出文件保存为指定的PDF文件。使用Microsoft Print to PDF功能是一种方便且简单的方法来创建PDF文件,无论是在个人使用还是在企业开发中,它都可以提供良好的支持和灵活性。请注意,如果你使用的是其他编程语言,你可以根据相应的打印机接口或库来实现类似的功能。

TechSavant的博客 1636

反模式

很多人对反模式有一个理解误区, 有人认为反模式是由于将通常使用的设计模式用在了错误的地方, 也有人认为反模式只是一种坏习惯。 简单的来说,反模式是指在对经常面对的问题经常使用的低效,不良,或者有待优化的设计模式/方法。 甚至,反模式也可以是一种错误的开发思想/理念。 ...

chuxi8272的博客 619

Vue+OpenLayers6一本通,OpenLayers6完整教程大全,OpenLayers6全知全解,OpenLayers6入门、实战、扩展进阶三合一专栏目录汇总

Gis开发入门,OpenLayers、Leaflet、Maplibre-gl和Cesiumjs地图引擎介绍以及几种地图服务vms、vmts介绍OpenLayers介绍,相比较其他地图引擎有什么优点OpenLayers7.x版本和6.x版本有什么区别,是否需要升级到OpenLayers7版本?OpenLayers6实战:OpenLayers创建自定义控件,以创建一个地图复位控件为例OpenLayers6实战,OpenLayers创建自定义鹰眼控件,自定义鹰眼控件样式,调整鹰眼控件位置、大小、文字和按钮等样式。

GIS技术方向,GIS地图技术分享(GIS入门、Openlayers教程、Leaflet教程),做最好的GIS地图开发教程。关注博主公众号:eguid 2201

三相逆变器参数设计实战:从公式到硬件的工程闭环

三相DC-AC变换器是光伏逆变器、储能变流器(PCS)和电机驱动系统的核心功率变换环节,其本质是通过开关器件实现直流到交流的能量可控转换。设计原理不仅涉及SVPWM调制、LC/LCL滤波、死区时间设置等关键控制与电路技术,更需统筹器件开关损耗、磁元件饱和、电容ESR温升、PCB寄生参数等非理想因素。该技术的价值在于平衡效率、可靠性、EMI与成本,支撑新能源并网、电动汽车及工业变频等高要求场景。本文聚焦真实工程落地中的参数校验逻辑、实测波形判据与典型翻车点,覆盖IGBT选型、母线电容高频去耦、LCL谐振规避、

weixin_34111790的博客 236

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

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

每个程序员要注意的 9 种反模式

涵盖的反模式清单: 1过早优化 2 Bikeshedding 3分析瘫痪 4上帝阶级 5害怕添加类 6内平台效应 7个魔术数字和字符串 8按数字管理 9无用(恶作剧)类   有一个健康的自我批评对于专业和个人成长是很重要的。对于编程而言,自我批评的意义就是需要能查明设计中、代码中、开发中和行为中的无效或反效果的模式。这就是为什么反面模式对任何程序员都很有用的原因。基于我遇到它们...

0-1的专栏 1816

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

好程序员web前端分享JavaScript中常见的反模式

好程序员web前端分享JavaScript中常见的反模式,前言:反模式 是指对反复出现的设计问题的常见的无力而低效的设计模式,俗话说就是重蹈覆辙。 这篇文章描述了 JavaScript 中常见的一些反模式,以及避免它们的办法。 硬编码 硬编码(Hard-Coding)的字符串、数字、日期…...

chuochengjiao5054的博客 330

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

程序员晕倒事件:为什么加班是反模式?

这几天,在IT群里,疯传下面这样的一段视频。视频显示办公室的一角,员工们在工作,从近景的员工的屏幕来看,是在编程。一切看起来很平静,直到其中一个员工缓慢的站起来,然后意外的晕倒在地。这个晕倒的员工是不是经常加班无法确定。但我想借这个事件问一下各位读者,尤其是IT行业的读者,你们有没有曾经经历过一个加班特别晚的夜晚,起身回家的时候感到身心俱疲,快要达到自己的极限了?在那个时刻,也许你和视频中的那个员...

1万+

避开这7个思维陷阱:程序员读《金线》后总结的‘反模式’自查清单

本文结合冯唐《金线》中的七大思维陷阱,为程序员提供了一份‘反模式’自查清单。通过20+真实案例,详细拆解需求失真、技术偏执、团队协作等常见问题,并给出可落地的解决方案,如三层追问法、五阶日志分析法等,帮助开发者避开思维盲区,提升工作效率。

weixin_30599769的博客 234
上一篇: 一个想休息的线程:JVM到底是怎么处理锁的?怎么不让我阻塞呢?
下一篇: 欣哥,你是怎么提高设计能力的?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值