欣哥,你是怎么提高设计能力的?

存储器电路设计学习记录之 buffer提高驱动能力/带负载能力 这里只讨论数字电路里的双反相器式buffer,模拟运放型的Buffer不懂。 以前学的只记得buffer链用来插在长wire中以减小delay,还有放在大扇出逻辑中形成buffer tree来减小扇出,保证摆幅,减小延迟,也就是保证驱动能力了。 自己有个理解,但是讲起来还是绕,下面是各家的解释: 目录1.数字电路的输入输出端加buffer的作用是什么?2.他和反相器的区别在哪啊?3.增强驱动能力/减少连线负载/降低delay都是如何体现的?4. 确保信号时序正确5. 增强驱动能力什么是带负载能力提高驱动能力 阅读详情

640?wx_fmt=jpeg

“欣哥,你是怎么提高设计能力的? ”

这个问题最近被人问及, 我回想了下这10多年学习历程,并没有发现一个确切的东西能帮助提升设计能力,更具体点是“面向对象的设计能力”。

我大学的时候学了几门语言,也勉强做了几个项目,但是都停留在能使用的层面,根本没有考虑到可扩展性,重用性,灵活性,易读,优雅...... 等东西, 也不知道什么是设计模式, 估计大部分码农翻身的读者都比我强得多。

刚工作的时候,一个搞Java的同学给我说,刘欣你知道吗,现在模式很流行,我们都在搞模式。

模式? 正在抱微软大腿的我是一脸懵逼。

回去赶紧搜,于是就发现了四人帮那本著名的《设计模式》,赶紧研读,发现是雾里看花,水中望月,看不清楚。

这设计模式就如同一座高山,可望而不可及。 当然用来吹牛还是可以的,吃饭时给组长说:我最近看到一本书,叫设计模式,里边提出了两条原则,实在是太好了。

“什么原则?”

“一条面向接口编程而不是面向实现编程, 另外一条是优先使用组合而不是继承。”

虽然我洋洋得意,但是我心中明白,我也不知道这是啥意思。

后来看到闫宏写的《Java与模式》一书 ,里边举了很多红楼梦的例子,有点意思,大概知道了一些模式的写法。

照葫芦画瓢,写了个Iterator, 激动不已。没成想到JDK中一看,人家早就写好了。

转入Java阵营以后,发现模式在这里确实比较提倡,不仅仅是标准的23种设计模式,还有J2EE开发中用到的各种模式。

那就老老实实地学吧,不仅仅看书,还开始看源码,当时流行的有一个叫做Jive论坛,纯用servlet和JSP写的,现在看来可能是比较幼稚,但是它里边用了很多的设计模式,比如单例,模板方法,代理,迭代器等等。

之前学习设计模式,看到的都是小打小闹的小例子,不知道怎么用到项目中来,现在看到Jive,一下子看到设计模式在实战中的鲜活的应用,实在是大开眼界。

(由于时间太过久远,感兴趣的可以再翻翻Jive,但是不太建议再花太多的时间学习了)

后来发现了一本神书《敏捷软件开发,原则,模式与实践》,第一次讲了面向对象设计的原则,其中还有一个薪水支付的案例,真是让我大开眼界,一下子明白了“优先使用组合而不是继承"的道理。

此后又看了JUnit的源码,再次感慨大牛把设计模式玩得炉火纯青。

看了不少书和源码以后,就想在工作中想找机会实战,无奈工作中增删改查居多,在框架下填代码,浑身的OO内力无处宣泄,真是不爽。 (其实也没多少内力,把自己高估了。)

终于逮到一次机会,我负责的模块业务逻辑非常复杂,我就想办法把这一块逻辑从增删改查的框架中剥离处理,好好设计了一番,应用了一些设计模式,效果还不错,基本达到了OCP的原则:对修改封闭,对扩展开放。

各位同学也可以想一想,自己的工作中有没有一些复杂的业务逻辑?能不能把他们单独拎出来做个设计?

再挑战下有难度的源码吧,大家把Spring“吹嘘”得神乎其神,一定得看看, 于是开始进入Spring源码,这绝对是一次痛苦之旅,多如牛毛的class,深不可测的函数调用层次,把人搞得头晕眼花,反复的调试,加上文档的配合,总算走出了黑暗森林,也体会到了Spring设计的一些妙处,尤其是软件开发最最重要的一点: 抽象。

(插播一则广告,老刘的《从零开始造Spring》课程还在进行中,感兴趣的猛戳这里)

当我在工作中再次遇到复杂的需求时, 也努力地去做抽象,寻找本质的东西,有一次竟然把业务操作抽象成二维坐标系下点的移动,让我喜不自胜,感受到了抽象的威力。

但是这样“顿悟”时刻还是太少了。面向对象的原则S.O.L.I.D 听起来很简单,23种设计模式理解起来也不难,但是想把这些原则和模式在实践中应用好,那可就不容易了,很多时候我在面对复杂问题的时候也是非常犯愁,无法找到合适的接口和抽象,最后做出的设计不尽如人意。

总结一下,想提升OO的设计能力,我的经验就是: 阅读书籍, 阅读源码,再加上不断地思考和实践。

谨以此和大家共勉。

(完)

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


码农翻身

用故事讲述技术

640?wx_fmt=jpeg

怎么提高程序设计能力?可以参考程序-设计原则,程序-设计模式 怎么提高程序设计能力? 简单说下我的方式方法: 【程序架构】 借鉴设计模式和设计原则 【程序业务】 多理解客户需求,理解后,做竞品逻辑分析,分析出其逻辑结构,和数据结构 ; 再根据客户需求结合竞品分析出的数据,设计客户所需的数据结构和程序业务 【总结】 满足上面两种方法后,做下面的就轻松多了 阅读详情

相关推荐

提高硬件设计能力的学习路线

不懂硬件的人,会觉得硬件高深莫测,“为什么他改几个电阻、电容就调出来,我弄个半天没搞定?”,“噢,靠的是经验”,但是经验又是什么呢?不能形容,反正就是不明觉厉。就是这种崇拜心理,才能触发你的好奇心,去学下去,这也是成为工程师的首要条件,但这是远远不够,还需要一条可供参考的学习路线,再加上99%的汗水和1%的灵感才可以。硬件设计,可以说是包罗万象,它涉及到非常庞大的知识量,而且,一个电路错一点小地方,都有可能导致整个系统不能工作,所以,搞硬件的人思维要非常缜密才可以,而这种思维要靠后面的学习来培养出来的,而不

凡亿郑振宇的博客 3114

面向对象程序设计(OOP)的三大基本特征(定义、特性、优缺点、java中的表现形式及应用)和五大基本原则

一、面向对象程序设计(OOP)的三大基本特征(定义、特性、优缺点、java中的表现形式、应用) 1.封装 封装的定义 ​ 通俗的说:普通人对计算机进行应用操作,只需知道如何在计算机上连网,如何浏览网页,下载东西等。不需要知道网络的具体底层搭建,计算机的基本结构组成(这些可以看作被封装)。 ​ 对于编程来说:将对象的属性(状态)和方法(行为)封装成一个类。而这个类可以有很多对象。举例:人这个类(class),可以有很多不同的人(每个人即为每个对象),而人都有相同的属性描述词(身高,体重),也有相同的行为描述

幸福的小金火 4528

高级程序员之抽象能力模型

 每一滴雨水里,都有海洋的气息;每一颗石子里,都有沙漠的影子。所以诗人才说:一支三叶草,再加上我的想象,便是一片广阔的草原。走在秋日的田野上,我想起一位诗人对老托尔斯泰的叩问:一切成熟了的都必须低垂着头么? 转眼三个月过去了,大熊在公司工作表现得非常好。干好本职工作之外还经常帮其他同事解决技术问题,并且经常在业余时间主动帮助项目经理整理文档,很用心地研究项目需求的每一个细节。大熊从锐哥那里

freemanyao的专栏 5908

面向对象的分析与设计

面向对象的分析与设计 1.面向对象 是一种思维方式 UML 统一建模语言,是一种建模工具,表达设计思想的工具 2.软件功能是如何完成的 类 定义了对象群体的逻辑结构,包括属性和操作 系统运行时,类作为产生对象的模板,在物理层面是不存在的 对象 系统运行时必须为每一个需要的对象分配内存、保存数据 对象存在于物理层面,每个对象都有自己的数据空间(内存) 所有的对象共享同一块代码空间 消息 对象之间的一种交流手段 就像我们日常工作中的各种交流手段 3.模型的定义 建模 m

紫青宝剑的博客 7758

深入解析EtherCAT通讯DS402协议下的伺服电机控制模式选择与配置

本文深入解析了EtherCAT通讯DS402协议下的伺服电机控制模式选择与配置,详细介绍了六种核心控制模式(如PPM、CSP、CSV、CST)的应用场景及实战技巧。通过EtherCAT和DS402协议的高效配合,实现工业自动化中伺服电机的精准控制,提升设备性能与稳定性。

h0i1j2k3l的博客 1175

N32G003学习——第九章 第三节1 串口 发送

经过第九章前2节的学习,基础打下之后,开始敲代码。

qq_34525008的博客 1034

面向对象设计的七大设计原则详解

设计模式前篇-面向对象设计的七大设计原则

qq_45205390的博客 3423

方案设计之亿级排行榜方案设计

该方案通过 “Redis Zset 为核心 + 分治策略为骨架 + 多级优化为细节”,在亿级用户场景下实现了:本质是将 “亿级大问题” 拆解为 “千万级小问题”,用分布式思想和精细化设计平衡性能、可用性与成本。

shine0312的专栏 1100

直呼内行!阿里大佬离职带出内网专属“高并发系统设计”学习笔记

前言 我们知道,高并发代表着大流量,高并发系统设计的魅力就在于我们能够凭借自己的聪明才智设计巧妙的方案,从而抵抗巨大流量的冲击,带给用户更好的使用体验。这些方案好似能操纵流量,让流量更加平稳得被系统中的服务和组件处理。 来做个简单的比喻吧。 从古至今,长江和黄河流域水患不断,远古时期,大禹曾拓宽河道,清除淤沙让流水更加顺畅;都江堰作为史上最成功的的治水案例之一,用引流将岷江之水分流到多个支流中,以分担水流压力;三门峡和葛洲坝通过建造水库将水引入水库先存储起来,然后再想办法把水库中的水缓缓地排出去,以此提高下

weixin_58770395的博客 399

如何在 Windows 11 上安装 ChatGPT:CMD + 图形界面两种方式

我没说在 Windows 11 上装 ChatGPT 应用有多难,但你要是知道有哪几种官方途径可用,事情就会顺一点,尤其是对新手。对大多数用户来说,商店应用就是正确的选择。如果你在受管理的设备上,或者想避开商店,那么通过 Edge 或 Chrome 装 PWA 是完全站得住脚的替代方案。不管你选哪条路,真正的收获都是把 ChatGPT 从浏览器标签页里挪出来,放进一个它真正像个工具的地方。把它固定到任务栏、配好 Alt + 空格,你就会纳闷以前没它是怎么干活的。

山岚的运维笔记 302

技术面试官视角:复盘北航/中科院/哈工大保研机试与面试,他们到底在考察什么?(附真题回忆与评分侧重点)

本文从技术面试官视角解析北航、中科院、哈工大等顶尖院校保研机试与面试的考核逻辑,揭示编程语言限制、题目难度设计等隐藏考察维度,并提供真题回忆与评分侧重点。帮助考生理解面试官的真实意图,掌握应对策略,提升通过率。

weixin_42549496的博客 518

如何提升自己的设计能力

无论是产品开发,还是项目工作都要根据客户的需求进行开发,因此想要成为一名合格的程序员,必须拥有良好的产品设计能力。本篇文档针对软件设计开发过程进行梳理。

数通畅联 2164

AD9253 LVDS 高速ADC驱动开发

对应:data clock时钟为500M DDR mode。具体内容:下文的参考博客写的很清楚,我就不详细写了。参考博客clock align模块不完整,本文新增这个模块。3、该款ADC工作在125Msps下,14bit - 2Lane - 1frame 模式。2、查阅Xilinx xapp524手册。1、查阅AD9253器件手册。

CAOXUN_FPGA的博客 2110

程序员提高代码能力的方法看这一篇就够了

例如,在Java中,掌握常用的集合类(如ArrayList、HashMap)和IO类(如FileInputStream、OutputStream)可以加快开发速度,在PHP中,学习常用的字符串处理函数和数组函数也是非常重要的。学习并应用这些设计模式可以提高编程能力。此外,在团队协作的过程中,程序员也可以了解更多的负责领域和其它组的工作流程等信息,从而对解决问题提供帮助。4. 参与业务分析和建模:作为技术人员,程序员可以参与到业务分析和建模过程中,理解业务流程,从而更好地把握核心的功能点和需要优化的细节。

随遇而安 4622

k8s 不同node之间pod ip不通

底层k8s使用calico网络,ipip网络模式,kubevirt启动了2台虚拟机;在这两台虚拟机上再搭建k8s,calico网络,ipip网络模式。说明:我是使用helm安装的calico,改这个模式要改crd资源ippools。其他方式安装的calico修改方法可能不一样。在虚拟机上的k8s上启动了2个pod,分布在不同的node上,这两个pod不能ping通对方的pod ip。修改虚拟机之上的k8s集群的calico网络的ipipMode为Never即可,之前使用的是Always。

weixin_40548182的博客 4056

C#项目实战——YModem协议文件传输【实例】

1、先由上位机发送*update*的握手信号,下位机返回响应字符‘C’(字符C,ASII码为0x43),之后通信双方开始以YMODEM协议进行数据通信。2、 YMODEM协议格式说明(1)起始帧数据格式帧类型(1byte)帧序号帧序号反码传输的文件名文件大小数据CRCSOH00FFfilenamefileziseNULCRCSOH=0x01,表示这个数据帧中包含着128个字节的数据(STX表示1024字节,初始帧只有128个);00表示数据帧序号,初始是0,依次向下排。

做有价值的事,积累有价值的笔记! 3656

如何提高自己的业务设计能力

如何提高自己的业务设计能力 明确数据需求 明确数据需求需要考虑以下几点: 1)有哪些页面 2)每个页面需要哪些数据 3)页面之间是否有公共的地方 4)在以上几点的基础上归纳出接口 设计数据结构 设计数据结构需要考虑以下几点: 1)接口传入哪些参数 2)接口返回哪些参数 3)返回的参数以什么样的结构返回 4)使用什么来存储数据,存在数据库里还是配置文件里 5)如果是数据库,需要哪些表,表...

weixin_30363981的博客 689

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

如何提高设计能力?

要提高设计能力首先需要对软件设计有着精神上的追求,即在软件开发的过程中追求设计的完美性。梦想之所以有可能成为现实,是因为我们会去“想”并为之努力,软件设计能力的获得也不例外。设计能力的获得并不会因为不去追求而“不小心”获得且水平很高。具备软件设计追求的人,会在设计的第一时间积极思考以试图找到更优实现,也会随着产品的演变而反思是否存在更好的设计,或者在必要的时候会选择接受挑战去通过改善设计帮助团队走

xuefeimengli2007的专栏 1043

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

聊聊程序员应该如何提高自身代码能力

总之,业务理解和实现能力是企业人员必须具备的重要素质,需要从行业和市场趋势、思考和创新、沟通能力、分析决策和持续学习等方面入手,不断完善和提升自己,才能不断提升业务水平,实现业务目标和企业发展。总之,提升解决问题能力需要从分析问题、收集信息、制定方案、实施方案和持续跟踪等方面进行,需要全面考虑问题的各个环节,遵循有效的解决问题的方法和流程,并不断学习、总结和提升解决问题的能力。总之,提升编码能力需要不断学习和实践,培养技能的过程需要耐心和毅力,需要不断地挑战和学习。

程序员Linc 3193

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

美工设计怎样可以提高自己设计能力

本文由:“学设计上兔课网”原创,图片素材来自网络,仅供学习分享 美工设计怎样可以提高自己设计能力?很多小伙伴怀揣着做个优秀美工的初心入行,可过没多久就发现现实和理想的差距很大。像最近就有小伙伴咨询兔课菌,说他工作一年了,薪资还没有变过,该如何提升自己。美工要如何提升自身的技能?月薪过万难不难?这些其实是很多小伙都比较关心的问题,接下来兔课菌跟大家聊聊这些问题。 相信很做美工的小伙伴都会有这种感觉:刚开始作为公司一名美工,扛起了所有图片的制作的大任,有一种莫名的自豪感,但长久之后你身边会时不时围绕一大

tukewang的博客 1002

什么是编程能力 | 计算机专业学生如何提高编程能力 | 如何自学编程

有干货、更有故事,微信搜索【编程指北】关注这个不一样的程序员,等你来撩~ 前言 开局两张图,剩下全靠吹了。 上面这两张图便是写这篇文章的原由。 对话框的另一边,是一位大二计算机科班在读的小姐姐,看似平静的文字背后透露着迷茫与困惑,还对未来的焦虑。 透过屏幕,似乎看到了大一时的自己,不会装环境、不知道怎么编译,报错也不会解决,更不知道除了计算水仙花数、打印乘法口诀表…还能写些什么。 感同身受让我觉得有必要认真的好好回答一下(其实是因为这是小姐姐问的????,也算是对大一时的自己一个隔空对话。 做公众号短

编程指北 8764

平头哥发布一站式芯片设计平台“无剑”,芯片设计成本降低50%

导读:8 月 29 日,在上海举行的世界人工智能大会上,阿里巴巴旗下半导体公司平头哥发布 SoC 芯片平台“无剑”。无剑是面向 AIoT 时代的一站式芯片设计平台,提供集...

AI科技大本营 1684

怎样提高设计能力?

总结出,提高设计能力的捷径。 1.天赋 天赋也许是存在的,它或许能帮你更快的达到那个高点,能让你更具有艺术细胞,的确,这有优势,不过天赋不高的不要在意这点,看过很多优秀的设计师,刚出来时候的作品,或许还不如你好,但是他们的经过后天精心培养和熏陶出自己的天赋,成为了设计界的精英。科学表明,您的艺术天赋还受大脑分工影响,左脑主要负责逻辑理解、语言、判断、分类、分析、推理,这类人才可能对数学、逻...

felixsyan的专栏 169

实现与提高算法设计能力的一般方法

实现与提高算法设计能力的一般方法

doooooooollly的博客 8763

怎么快速提高平面设计能力

本文由:“学设计上兔课网”原创,图片素材来自网络,仅供学习分享 怎么快速提高平面设计能力?随着市场经济的快速发展,从事平面设计行业的人群在日益增多。平面设计行业也正在朝着规范化,创新化,专业化的方向发展。行业对设计师的要求越来越高,那么设计师应该如何适应平面设计环境呢? 答案是不断提升自己的设计能力!相信大家都知道,平面设计行业门槛低,入门容易,难就难在继续登高进阶。那设计师们该从哪些方面去提升呢?如何提升?小编为大家总结了以下8点,纯属干货! 第一、学会整理和搜集专业资料 搜集和整理专业资

tukewang的博客 519

如何提高UI设计审美能力,设计出一份好的优秀的UI

审美并非天生,而是通过系统性训练逐步提升,同时优秀UI需要兼顾“美感”与“功能性”,二者缺一不可。若设计一款“老年人健康管理App”,审美需偏向"简洁、清晰"——避免复杂的动效和撞色,字体放大(正文至少16号),核心功能(如“测血压”“看报告”)用大图标和明确文字,减少跳转。审美是基础,但优秀UI的核心是“解决用户问题”——再好看的界面,若用户用起来别扭,也是失败的。

weixin_59967356的博客 1057
上一篇: 程序员的那些反模式
下一篇: 报名参赛赢取奖金 | 2018 ICBC-IBM 全国大学生金融科技创新大赛
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值