我是这样偷着做架构的

 

毕加索一生是个不断变化艺术手法的探求者,印象派、后期印象派、野兽的艺术手法都被他汲取改造为自己的风格.他的才能在于,他的各种变异风格 中,都保持自己粗犷刚劲的个性,而且在各种手法的使用中,都能达到内部的统一与和谐.他有过登峰造极的境界,他的作品不论是陶瓷、版画、绘画、雕刻都如童 稚般的游戏.艺术的道路上毕加索总是不断扬弃陈规,体现出惊人的创新才能。他有一句话“Bad artists copy;Good artist steal”,现在搞艺术的都传为“Good artists copy, great artists steal”。就像我在《个人管理 - 从小工到专家》中说的"守-破-离",这句话的意思也是体现了“抄”和“偷”是创新的来源,如果把Artists换成developer,那就是 Good Developer Copy, Great Developer Steal

好的技术人员会偷

任何一个人对一件事情都是从一个不知道到模糊再到了解和精通的过程,如果让你去着手做一件大家都不知道的事情,你会怎么做?当我对某个产品模块不会设计时,我会毫不犹豫的去抄袭类似的产品。说到”不重新发明轮子“,很多人就会想到代码和框架,而对于架构师来说,思想是更为重要的一个轮子

我就是一个经常偷着做产品的人,如果你看过《报表引擎 - 报表应用思路》,那就会知道我之前做的报表引擎是润乾的,如果你看过《信息系统开发平台偷OpenExpressApp - 总体架构的由来》,那就知道OpenExpressApp的框架思想是从DevExpress eXpressApp Framwwork (XAF)偷来的。今年我将继续我的偷之旅,下一个目标就是全球DSM领域内著名的产品MetaEdit+,我将开发一个元模型引擎,到时基于之上可以给OpenExpressApp增加建模支持,这是“让业务人员做开发”的重要一步。

SNS社区”占车位“、”奴隶“、”偷菜“等游戏部分好像隔夜之间就全部出来了,所以可以看得出来,大家其实都在”抄“,要是在”抄“的基础上 都有自己的创新,每个游戏都能”偷“就更好了。如今”偷“已经不是遮遮掩掩的了,我觉得”偷“对我来说反而是一种态度,一种方法,就像“Good artists copy, great artists steal”说的一样。以下我将讲一下我是如何偷的,也欢迎大家也养成偷的习惯:)

读书时抄作业

再将偷产品之前,我想起小时候的一些故事,有时候我来不及写作业,早上就会早早来到学习。来早的目的就一个,抄作业。

  1. 找到可以抄袭的作业
    • 找对人:我不会随便找一个人的来抄袭,因为我怕抄错了被发现了,所以我找的人不是班长也是课代表,或者排名前十名的。其次是这个人是否开放(Open),有些人不够哥们,把作业本子藏的好好的,你问他他当没听见,或者直接说不给。
    • 找对作业:有的人字迹写的差,你有时不小心就会抄错
  2. 求同存异
    • 我也不是一个差学生,也算有思想的,所以当然不会只是像罚抄作业一样。抄的过程中,我也会看看他做的思路是不是对,如果对我就会全部抄下来
    • 有时后为了不让老师发现,我也会特意修改一些内容,不让把顺序颠倒一下,文字修改一下
  3. 修正
    • 在抄的过程中,如果发现有明显错误的地方,我会自己修改一下,毕竟,我要偷也要做得职业点:)

工作后偷架构

  1. 找到抄袭源
    ”偷“对我来说反而是一种态度,就像”不重复发明轮子“一样。很多人都知道这句话,但真正做起来又会另一回事,缺少的不是轮子,而是看你想不想去找轮子。
    1. 找对厂商:竞争对手、开源产品或者类似产品厂商,我研究的报表是就会找业界著名的报表厂商
    2. 找对架构:有些厂商会有多种产品,每种产品包含功能不一样,由于我们是抄袭,那就专挑完全功能的来试用。有些产品会有比较详细的介绍和说明,这类产品对我来说我会优先考虑。
  2. 主题抄袭,求同存异
    在《
    个人管理 - 如何读好书:读书的四个层次》中介绍的第四个层次:主题阅读就是一种针对一个主题进行多本书籍的一种对比思考和总结的一种阅读方式,在抄袭产品过程中,我们也需要进行主题抄袭,研究多个产品后决定如何做这个关注点。
    1. 有时候做研究工作,自己需求是不太清楚的,这时候就可以多参考几个产品,拿着别人的功能列表进行对比,把共同的部分记录下来,看看是否自己需要的
    2. 不同产品肯定存在一些各自的亮点,这也是我们需要特别关注的,很有可能这是你产品增值的部分。对不同产品的不同功能,我们也需要分别看看,然后自己判断一下是否需要
  3. 组合抄袭
    一个架构由多部分组成,如在《软件观点 - 平台分类:系统平台、开发平台和开放平台》介绍的开发平台。开发平台是在系统平台之上,提供在开发方法指导下,通过 开发工具辅助工具,基于框架引擎以及内置的模块等一套支持软件开发生命周期的完整开发环境来构造软件,以期在统一平台下能够快速高质量的提供产品。以下是OpenExpressApp的Roadmap,它包含多个部分,所以我们要做的不仅是主题抄袭,还要做组合抄袭,OpenExpressApp不会带给大家创新性的技术,而是将现有技术和产品中有价值的部分引入到一起,它要做的是整合别人已经实践的方法,提高我们自身的开发能力,以求快速、高质量的开发产品。
  4. 由抄到偷
    如果我们仅仅停留在抄的基础上,那也只是到了守-破-离的守阶段。毕加索的原话是”Bad artists copy;Good artist steal“,他的创新更多来源于偷,就是在抄的基础上有所创新。在进行了主题抄袭后,我们会进行组合抄袭,其实在抄袭过程中我们的思考和决策过程就是在 做”偷“这一重要步骤。在参考别人的基础上,加入自己的见解,解决自己的问题才是关键。比如在做报表时,就针对公司的打印加强了页面模型,针对树形要求增 加树形显示和汇总等。
  5. 不断修改
    《架构 - 又一个类似与“平台”一样的词汇》中说过架构是需要持续完善的。我们经过前面几步,基本架构基线就成型了,这时候你的产品更像一个山寨的,只不过是不同部分分别山寨不同厂商的而已。产品框架成型后就可以开始迭代实现了,在上线后需要注重反馈,不断修改完善产品。

以上是我目前想到的偷架构5步骤,这主要是基于本人不是一个天才设计师而言,如果你是一个天才设计师,前无古人,那么就没有参考价值了:)

下载方式:https://pan.quark.cn/s/a4b39357ea24 布线问题(分支限界算法)是计算机科学和电子工程领域中一个广为人知的议题,它主要探讨如何在印刷电路板上定位两个节点间最短的连接路径。 在这一议题中,电路板被构建为一个包含 n×m 个方格的矩阵,每个方格能够被界定为可通行或不可通行,其核心任务是定位从初始点到最终点的最短路径。 分支限界算法是处理布线问题的一种常用策略。 该算法与回溯法有相似之处,但存在差异,分支限界法仅需获取满足约束条件的一个最优路径,并按照广度优先或最小成本优先的原则来探索解空间树。 树 T 被构建为子集树或排列树,在探索过程中,每个节点仅被赋予一次成为扩展节点的机会,且会一次性生成其全部子节点。 针对布线问题的解决,队列式分支限界法可以被采用。 从起始位置 a 出发,将其设定为首个扩展节点,并将与该扩展节点相邻且可通行的方格加入至活跃节点队列中,将这些方格标记为 1,即从起始方格 a 到这些方格的距离为 1。 随后,从活跃节点队列中提取队首节点作为下一个扩展节点,并将与当前扩展节点相邻且未标记的方格标记为 2,随后将这些方格存入活跃节点队列。 这一过程将持续进行,直至算法探测到目标方格 b 或活跃节点队列为空。 在实现上述算法时,必须定义一个类 Position 来表征电路板上方格的位置,其成员 row 和 col 分别指示方格所在的行和列。 在方格位置上,布线能够沿右、下、左、上四个方向展开。 这四个方向的移动分别被记为 0、1、2、3。 下述表格中,offset[i].row 和 offset[i].col(i=0,1,2,3)分别提供了沿这四个方向前进 1 步相对于当前方格的相对位移。 在 Java 编程语言中,可以使用二维数组...
源码来自:https://pan.quark.cn/s/a4b39357ea24 在VC++开发过程中,对话框(CDialog)作为典型的用户界面组件,承担着与用户进行信息交互的重要角色。 在VS2008SP1的开发环境中,常常需要满足为对话框配置个性化背景图片的需求,以此来优化用户的操作体验。 本案例将系统性地阐述在CDialog框架下如何达成这一功能。 首先,需要在资源设计工具中构建一个新的对话框资源。 具体操作是在Visual Studio平台中,进入资源视图(Resource View)界面,定位到对话框(Dialog)分支,通过右键选择“插入对话框”(Insert Dialog)选项。 完成对话框内控件的布局设计后,对对话框资源进行保存。 随后,将着手进行背景图片的载入工作。 通常有两种主要的技术路径:1. **运用位图控件(CStatic)**:在对话框界面中嵌入一个CStatic控件,并将其属性设置为BST_OWNERDRAW,从而具备自主控制绘制过程的权限。 在对话框的类定义中,需要重写OnPaint()函数,负责调用图片资源并借助CDC对象将其渲染到对话框表面。 此外,必须合理处理WM_CTLCOLORSTATIC消息,确保背景图片的展示不会受到其他界面元素的干扰。 ```cppvoid CMyDialog::OnPaint(){ CPaintDC dc(this); // 生成设备上下文对象 CBitmap bitmap; bitmap.LoadBitmap(IDC_BITMAP_BACKGROUND); // 获取背景图片资源 CDC memDC; memDC.CreateCompatibleDC(&dc); CBitmap* pOldBitmap = m...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值