过去两年中我对代码重用的体验

CursorAdapter 起步 之 三:可重用数据类 CursorAdapter 起步 之 三:可重用数据类<br /><br />作者:Doug Hennig<br />译者:fbilo<br /><br />VFP 的程序员们想要一个可重用的数据类已经很久了。尽管在过去的版本中也有许多解决这个问题的办法,不过总是有点美中不足。现在在 VFP 8里,我们有了真正的可重用数据类。这个月,Doug 为我们演示了怎样通过建立 CursorAdapter 和 DataEnvironment 的子类来建立可重用的数据类、以及怎样在表单和报表中使用它们。<br /><b 阅读详情

两年前我有幸加入了一家行业内一流的公司(进入这家公司前是这么认为的.:P), 当时公司颇有几个高手, 大家对于建立公司的程序库或叫做游戏引擎进行了广泛而热烈的讨论, 随着公司项目的进展, 大家也做了很多努力, 但最终未能见到什么成果. 事隔一年, 公司来了几个热血青年, 刚刚从学校出来, 领导决定让他们负责一个项目, 他们对建立重用的代码库的热情就象我们当初那样高. 我在一旁观察了1.5年, 最后我给他们下的结论是, 他们比我们当初更加失败. 这两次事件一直在我脑海中旋转,感想颇多, 终于忍不住想写出来了.:)

    因为这里主要讲的是我个人的项目体验, 所以要先来介绍一下项目背景. 我这里所说的项目主要是指大型游戏项目, 开发周期一般在1.5年以上, C/C++代码30万左右, 参与项目的程序一般在5人左右. 在这里我主要想谈三点感受:

    1.写出可以重用的代码对开发者的要求非常之高.
    写出好的可重用的代码需要成熟的开发者. 所谓的成熟首先需要对自身所处的技术领域的历史和现况都要有相当广泛的了解, 其次要开发过规模相当的项目, 最好是相似的类型的, 这样才能对需要做什么, 怎么做有足够的认知.
    变化是与项目的进展如影随形的, 这种变化不单单是指需求等外因在变, 作为开发者, 我们自身也在随项目变化. 随着项目的发展, 自己对项目的理解越来越深入, 自己在相应的技术领域越来懂的越多, 越来越熟练, 理解的越来越深入, 而我们写出的代码却时静静的躺在那里的. 我想, 评定自己是否是一个成熟的开发者的标准(只对与此项目或者此领域啊)就在于, 当你伴随着项目不断成长的时候, 你是否会改变初衷, 即是否想对项目之初所做的整体设计进行大规模的修改. 如果你的项目做了一半, 你就对之前做的设计不满意, 甚至憎恶了, 那你这个项目产生的代码你会用到下一个项目吗?
    还有一个问题曾经令我非常困惑, 那就是项目中总是存在我们不熟悉的技术或者其它东西, 总有那样的方面, 让我们感觉自己不够成熟, 这怎么办呢? 面对这样无法回避的问题, 我们没有那么多的时间去学习, 去练习, 以使得自己变成熟, 我们只有随项目的发展而不断成熟. 应对这样的问题, 我想“重构“这个概念是一济良药, 项目不断发展, 我们自己不断发展, 当发现代码中的bad small时, 就要即时清除.
   
    2.代码重用要先从在当前项目中实现代码重用开始.
    我见过几位同事, 他们言必及我们现在做的模块要作为公司的代码积累, 公司以后可以一直用下去. 我是个比较实际的人, 我认为做好眼前的项目是首位的, 代码重用首先是代码需要在本项目中被重复利用. 我觉得这一点往往被忽视, 而且很多人会觉得那是当然的, 而我觉得它并不象想象中的那样简单.
    例如, 在项目中我所负责的模块和另外一个同事负责的模块都需要一个生成简单几何体Mesh的功能. 但是我们两个在具体的需求上还是有些差异, 最后我们还是每个人写了一个这样的小模块. 所以我想讲, 需要良好的沟通, 良好的规划, 以及对对项目良好的掌控才能尽量减少这种在单个项目中的重复开发的现象.
    我还想谈一点就是, 代码重用还要从重用好自己的代码开始. 我就曾经见过有的兄弟将一段代码重复的拷贝到多个地方, 而不是使用一个函数. :( 函数, 模板, class都是最基本的代码重用的工具, 基本上是coding层面的东西, 如果这些都掌握不好, 就先不着急谈项目之间的代码重用吧.

    3.应该从小模块开发, 如果想上来就设计一个超过10万行的可重用的FrameWork, 除非您是天才, 否则注定失败.
    对于我个人处的这个小小的软件开发的分支--游戏开发来说, 我觉得在很多技术点上, 与欧美相比我们还算跟的上, 很多同事可以写一个HDR或者Soft Shadow的DEMO. 但是我感觉在FramwWork层面, 我们还太嫩了(或许是我眼界太窄, 没见到强的), 一些FrameWork常见的概念很少见诸与国内的引擎中. 我见过的一些引擎, 在结构层面都相当简陋, 一个引擎能用在3个项目上就已经算上生命力非常顽强的了. 更多的情况上一个引擎经历了两个项目的使用, 改来改去的就已经满目疮痍了.

    最后, 我想谈一下为什么我觉得原来公司里那几个热血青年比我们当时进公司时的那次代码重用实践还要失败, 借此给那些比我年轻些的朋友提个醒. 我认为他们水平还远远没有达到可以写出可重用代码的时候, 就过早的强调了这一点. 他们花费了大量的时间去完善文档, 反复修改代码, 但是, 就我观察他们所完成的代码能够满足当前项目的稳定运行就哦米托佛了. 例如他们一个兄弟用了大约1人年的时间去写一个GUI的模块, 同样的模块我们项目只用了2人月, 更可笑的是最后那哥们因为水平实在太差被开除了! 这样的模块你在项目里用着放心吗? 如果有机会不用这个模块, 你肯放弃这条活路吗? 这不得不说是一个失败的案例.   

【2004年10月10日 1:24 PM 】

17、性能优化与代码重用 本文探讨了现代软件开发中性能优化与代码重用的重要性,并深入分析了如何通过识别性能瓶颈、优化算法和数据结构、减少不必要的计算来提升应用程序的性能。同时,文章介绍了设计模式、继承与组合、类别与协议等代码重用策略,以及模块化开发的优势。此外,还详细讲解了利用Cocoa框架特性进行性能优化和代码重用的具体方法,包括自动内存管理、KVO/KVC、Core Data和Cocoa Bindings。最后,文章涵盖了优化内存管理、I/O操作和用户界面的最佳实践,为开发者提供了全面的技术指导。 阅读详情

相关推荐

框架设计原理与实战:理解框架的代码重用与模块化

1.背景介绍 什么是框架?在软件开发中,框架是一个通用的解决方案或结构,用来帮助开发人员更快、更高效地构建软件应用。框架通常包括了经过高度抽象的一些组件,如数据访问层、业务逻辑层等,这些组件可以提供一些基础服务功能,减少开发人员的工作量,实现一致的用户体验。相比于面向对象的编程方法,框架更关注系统的可扩展性、灵活性和复用性。框架还可以降低应用程序的复杂

AI天才研究院 248

Android 项目组织和代码的重用

1、使用project libary进行重用 2、github托管项目 3、结合快盘在不同机器上开发

mcy478643968的专栏 804

代码依赖与重用:提升代码质量和效率

本文探讨了代码依赖关系与重用的重要性及其在项目开发中的实际应用。通过分析依赖项的管理、避免代码重复和DRY原则,文章旨在提供一种方法,以提高代码的可维护性与效率。

weixin_30820933的博客 302

一位资深开发的个人经历 【转自百度贴吧 java吧 原标题 4年java 3年产品 现在又开始做android了】...

楼主2007年从一家天津的三流大学毕业。毕业前报了一个职位培训,毕业后可以推荐工作。因为推荐的公司都是北京的,所以就来北京了。 找了一个月工作,没有找到要我的,就在出租屋里宅了起来,打着考研的旗号,又耗了一年。研究生肯定没有考上,这下没有退路了,又开始找工作了。记得宅出租屋的那年,过年没有回家。正好我有一个姑姑在石家庄过年,就非要我过去。过完年,姑姑回家和老妈说,我穿了一条破牛仔裤,头发长长的。...

weixin_34187862的博客 967

Win10蓝屏代码critical process died的解决方法

critical process died”蓝屏错误是Win10操作系统中较为常见的问题之一。当遇到这一问题时,可以尝试通过修复当前系统、检查硬盘槽位或重新安装系统等方法来解决。本文详细介绍了这三种方法的操作步骤和注意事项,希望能帮助大家摆脱这一困扰。同时,也建议大家在日常使用中注意系统的维护和更新,以减少类似问题的发生。

mmoo_python的博客 9533

PSCAD学习笔记(1)Project Settings(重点snapshot设置)

若不勾选,则横坐标为实际时间2-7s,故障显示在第3s发生。图片中时间坐标轴显示为0-5s,故障时刻显示为第1s,即0-1s展示系统稳态,1-5s展示系统发生故障后的暂态响应,如何通过快照文件实现?勾选该项后,使用快照文件启动仿真会将仿真起始时间强制设置为0s,反之不勾选则依据快照文件保存的时间轴继续(即坐标为实际时间)。如果已有的快照文件保存的是0s至5s的仿真内容,则仿真运行时间从5s开始,到10s结束。如果已有的快照文件保存的是0s至2s的仿真内容,则仿真运行时间从2s开始,到7s结束;

gwenh的博客 7343

再谈.net项目类库dll的管理及Framework 文件重用方法

项目要做大, 必然要切分. 切分成各个小项目. 为了源代码的安全和开发环境的简化. 需要将某些底层项目独立出来. 做成Framework. 就包含 类库Framework 和 网站Framework 两种. 先说类库类型的Framework如何重复使用.之前我一直把类库型的Framework 都生成到一个固定的文件夹 D:\output\ 下. 这样很简单. 一会就搞定.

走错路的程序员 2098

目标检测 RT-DETR(2023)详细解读

在使用了这个技巧后,显然训练过程中,类别的标签不再是此前的0和1离散值,而是0~1的连续值。关于 Query Selection(查询向量选择),大家应该并不陌生,这个方法可谓在DETR领域大杀四方,如DAB-DETR对查询向量进行重构理解,将其解释为Anchor,DN-DETR通过查询降噪来应对匈牙利匹配的二义性所导致的训练时间长的问题,DINO提出从Encoder中选择Top-k特征进行学习等一系列方法,这都无疑向我们证明,查询向量很重要,选择好的Query能够让我们事半功倍。在RT-DETR中,

qq_51352130的博客 5869

代码复用的一些心得

努力多经历些东西,让自己的文字厚实点。 最近开发的一个模块需要对一些股票平台进行统计分析: 1.统计各个平台的访问量 2.统计访问量前十的股票 3.统计访问量前十的股票的来源 4.统计单个平台每日的访问量 5.统计单个平台访问量前十的股票 6.统计单支股票的每日的访问量 7.统计单支股票在各平台的访问量 。。。。 还有很多,总之一共需要画16张统计分析图。 拿到需求之后,...

yuan487639的博客 1646

VS Code + Codex 在 WSL 中使用的正确姿势

Codex 登录只能在本地完成。文件仍可通过 UNC 路径访问 WSL → 本地 Codex 就能照常工作。避免在 WSL 内重复安装/登录 Codex 扩展。

yangguangwuyue的博客 9829

从零开始:手把手教你规划与部署华为FusionCompute虚拟化平台(含网络规划避坑指南)

本文详细介绍了华为FusionCompute虚拟化平台的规划与部署流程,特别针对网络规划中的常见问题提供了避坑指南。从硬件软件清单检查、网络平面配置到VRM部署方案选择,帮助用户高效完成部署并优化性能,适用于云计算环境中的虚拟化平台搭建。

weixin_28693447的博客 243

代码重用与性能优化:实践与技巧

1.背景介绍 在现代软件开发中,代码重用和性能优化是两个至关重要的方面。代码重用可以提高开发效率,降低开发成本,同时也有助于提高软件的质量。性能优化则是确保软件在实际运行环境中能够达到预期的性能指标,提供良好的用户体验。在这篇文章中,我们将讨论代码重用与性能优化的相关概念、算法原理、实践技巧以及未来发展趋势。 2.核心概念与联系 2.1 代码重用 代码重用是指在不同项目或模块之间重复使用已...

AI天才研究院 1282

【项目实战】TARA威胁分析和风险评估

TARA是信息安全领域中的一种风险评估方法,在汽车信息安全的上下文中,TARA分析特别重要,因为它可以帮助识别和管理与智能网联车辆相关的各种威胁,包括数据泄露、未经授权的访问、远程操控等。通过TARA分析,企业可以制定出针对性的安全目标、产品要求和产品安全声明,以确保汽车及其零部件符合相关的信息安全标准和法规。此外,TARA分析还可以与数字化建模系统结合,以更系统化和高效的方式进行风险评估和管理。

奶爸的编程之路,也就一周冷个三天 2709

iOS UITableView的重用机制

TableView的重用机制,为了做到显示和数据分离,IOS tableView的实现并且不是为每个数据项创建一个tableCell。而是只创建屏幕可显示最大个数的cell,然后重复使用这些cell,对cell做单独的显示配置,来达到既不影响显示效果,又能充分节约内容的目的。下面简要分析一下它的实现原理。 重用实现分析:   查看UITableView头文件,会找到NSMutableA

有木有啊的专栏 3252

YOLOv11涨点改进 | Conv篇/小目标改进 | YOLOv11引入SPDConv卷积特征无损下采样模块,增加YOLOv11小目标P2检测层(助力小目标任务高效涨点)

本文提出了一种创新的SPDConv模块来优化YOLOv11模型,通过空间到深度(SPD)层和非步幅卷积层实现特征无损下采样。该方法有效解决了传统CNN中因跨步卷积和池化层导致的细粒度信息丢失问题,特别提升了小目标检测性能。实验表明,SPDConv在目标检测和图像分类任务中显著优于现有SOTA模型。文章详细介绍了模块原理、核心代码实现,并提供了YOLOv11集成SPDConv的具体方法,包括配置文件修改和P2层增强等优化技巧。该技术为计算机视觉任务提供了一种高效的特征保留方案。

Ai缝合怪、助力小伙伴高效发论文 586

企业AI数据资产评估的自动化工具:AI应用架构师的使用指南

在AI驱动的企业数字化转型中,数据资产是支撑模型训练、业务决策的核心燃料。然而,80%的AI项目失败源于数据问题——低质量数据导致模型偏差、未评估的风险引发合规危机、价值不明确的数据浪费资源。手动数据资产评估效率低、易出错,无法满足规模化AI应用需求。本文将以AI应用架构师的视角,拆解企业数据资产评估的核心逻辑,用"餐厅选食材"的生活化比喻解释复杂概念,结合自动化工具的技术原理与实战案例,教你如何从0到1搭建数据资产评估体系。无论是数据质量检测、价值量化还是风险防控,你都能找到可落地的工具方案与实践步骤。

2502_91592937的博客 1629

vscode终端将被任务重用,按任意键关闭的解决方法汇总以及我的使用体验

如标题所写,我出现了这个问题然后我就在博客里找,找到了很多解决方法,虽然这些解法都没有解决我的问题,但是好在我发现了一个奇怪的解法,下面我先把找到的其他解法分享一下。

nakilir的博客 8304

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

自定义 React Hooks:编写高效、整洁和可重用代码的秘密武器

在本文中,我们将消除自定义 hooks 的概念的迷雾,深入探究它们的结构,并探索创建我们自己的过程。我们将采取实际的方法,举例来演示它们在真实场景中的用法。我们的目标不仅是理解自定义 hooks 是什么或它们如何工作。这是全面接受其背后的哲学并赏识它们为我们的代码带来的优雅、简单和强大。关键在于:hooks 很酷,但是自定义 hooks?它们就是可以使你的 React 代码水平更进一步的秘密配方。就像一个功能强大的工具,可以完全定制你的特定需求。一个为你量身定做的解决方案。

weixin_42429220的博客 1391

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Unity 使用UGUI创建可重用TableView

Unity 使用UGUI创建可重用TableView

tmac3380809的专栏 8421

Camera2Demo

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

内容可循环重用的ScrollView

UIScrollView是iOS中最常用的交互控件之一,本文讨论当设定为翻页模式,内容页很多的时候,如果给每个页面都创建一个新View,会导致资源爆表。比较好的做法是参考UITableViewCell的做法,引入重用机制。 原理非常的简单:不管有多少内容要显示,只要三个View就足够了,假设为A、B、C。为了后面方便操作,我把三个view放进一个大的容器视图containerView中,再把co

ZChongr 730

如何在Vue3中使用混入将逻辑重用到多个组件中

混入是 Vue.js 提供的一种灵活的分发可复用功能的机制。它可以包含任意组件选项,当一个组件引用混入对象时,所有混入对象的选项将被"混合"入该组件本身的选项。

有我更精彩的博客 1653

uitableview 两种设置重用cell的方式

1. a.在设置tableview属性的地方加上一句 [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"identifier"]; b.- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexP

Gorgeous_Xie的专栏 820

代码重用与 IoT:构建智能化的设备生态系统

1.背景介绍 随着互联网的普及和技术的不断发展,我们的生活中越来越多的设备都变成了互联网设备,通常被称为物联网(Internet of Things,IoT)设备。这些设备可以通过网络互相连接,实现数据的收集、传输、处理和分析,从而提高设备的智能化程度,提升用户体验,降低成本。 在这种情况下,代码重用变得非常重要。代码重用是指在软件开发过程中,利用已有的软件代码或组件,为新的软件系统提供服务的...

AI天才研究院 526

UITableview 多选 解决cell重用问题

假如  我们有100个cell  这时肯定 是需要重用的 解决方案 在  didselesctCell  中记录所选择的   indexPath  在 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  中 #pragma ma

u011254628的专栏 1210

重用Activity activity task taskAffinity

1.根activity的back键要拦截并且重定义为Home键功能 public boolean onKeyDown(int keyCode, KeyEvent event) {   if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction()  ==KeyEvent.ACTION_DOWN) { this.startActiv

qq_23943467的博客 396
上一篇: 再次登场
下一篇: 乱谈诸葛亮的团队建设
yanonsoftware
博客等级 码龄21年 104粉丝 67原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值