如何写好代码?

想要的都拥有,失去的都释怀,2020鼠于你

内容目录

1,写代码容易吗2,设计模式3,软件生命周期4,技术业务架构5,轮子6,开源7,真相

1,写代码容易吗

代码容易写,也不容易写。但做人不能一直太中立,那我选择好代码不容易写吧。
比如会写字,不一定能写出诗歌词赋。但你说写字难吗,对于牙牙学语时难的,对于现在的你,不难,只不过可能是自成一派,没那么好看。代码要能随着业务成长,方便做出拆分合并更新等,好的代码就要保证正确性前提下有更好的维护性。

2,设计模式

说到好代码一般都会涉及设计模式,有些经验的程序员已经不谈设计模式了,因为慢慢都习以为常了,他们开始向架构看去。

模式就是发现一种可识别的规律,比如色彩模式、简历模版也算。模式往往和抽象思维有关,分析事物共性,抽取事物共同的部分来帮助人们认识规律。设计模式就是对事物的重新定位整合来解决问题的一种模版一种套路。它是成熟的解决方案,解决类似的问题。
《设计模式:可复用面向对象软件的基础》一书中描述了23种设计模式。分为三类,创建型结构型行为型,其实都是对对象生命周期的再拆分,把创建过程独立出来,结构组合成功能,行为表达对象之间的交流,比如常用了观察者模式。当然设计模式也不是银弹,拆分会让架构变得复杂,但灵活性提高了,主要应对需求的变化。需求总会变,拆分让关注点分离,也慢慢架构产生了设计模式。

3,软件生命周期

软件生命周期中两个重要的子周期就是开发和运行生命周期。前者为后者服务,结合运行生命周期来决定代码如何组织编写。软件是对现实业务的模拟,虚拟化。运行生命周期就是对业务生命周期的模拟,当然外加上用户访问生命周期。所以如果一个甲方单位的业务组织越清晰,职责越明了,项目相对越容易做。

首先业务模型必须放在后台,用户不去接触的地方,好比你去饭店点餐,菜品的制作流程你是不知晓的,去银行存钱,你也不用关心钱交给柜员后去哪了,你只需关心你账上余额。银行柜员就是对外服务的窗口,用户访问的地方,银行为了效率可能会按业务划分不同的柜台,存钱的一个,办信用卡的一个,其他的一个这样,以满足不同的用户访问。然后业务模型的后面是仓储用于存放状态和数据,其实这就是典型的三层架构,想象一下银行柜台是各种服务接口,柜台玻璃的后边是各种的业务逻辑,再后面的防盗门后面就是金库档案。

用户服务接口一方面要组合业务模型,一方面还要持久化数据,任务太多,代码容易失控,开发人员容易996。这时可以针对用户访问生命周期再做拆分,比如分为业务获取、业务访问、业务保存等,也能提高开发的并行度。

4,技术业务架构

百科上已经总结的不错了。技术就是通过人为的创造条件,让指定的规律按照人类的意愿发生。火的发现本是自然打雷闪电产生,当时人类只能靠不停地添加木材来保持火不熄灭。后来发现了钻木取火,钻木就是技术,取火就是业务了。所谓业务,就是要解决人类的问题,目的是为了支撑人类自身的生命周期,使人类获得利益。

技术出现后也就会形成相应的工具。用双手快速转动木棍取火是需要很大的力气和速度的,体质差的人压根生不起来火。就有人采用弓弦来提高转动速度,所以在发现钻木效率不高时,人类对转动生命周期进行拆分,改进转动方式,一只手负责往下压,一只手负责转动,两手的分工产生了架构,拆分形成架构。和企业组织架构一样,企业初期可能只有CEO大小事物全权负责,后面生长为有CTO,运营,人力,研发等组织结构。

5,轮子

首先如果你的软件系统没有分层,那也就没有所谓的轮子,开源世界gayhub对你是没有什么意义的。只有在拆分过程中,才能去匹配是否有恰当的工具轮子,如果拆分到某一层级发现还是没有轮子,就要考虑要不要造轮子了,如果有轮子的功能大于当前拆分的,就看维护这个轮子值不值当了。想敲钉子没有找到锤子时,但发现了高跟鞋,勉强也能敲一敲,但高跟鞋比锤子又昂贵又易耗。如果刚好有恰当的轮子,那可以开开心心安装到自己的系统中,运行过程中发现轮子有些缺陷,着手维护它,就像汽车轮子,你发现每次制动时总会滑行很远,容易撞到,你就可以给它加上一个卡钳制动系统。拆分出来的问题和技术相匹配时,就是最完美的。比如有日志服务,权限管理等。

6,开源

上面提到的轮子,有开源的,当然也有闭源的。有些用已有的或自创轮子结合业务痛点打造新的氪金轮子来走商业模式,这种科研比较多,因为科研人员既是业务人员也是研发人员。那另一部分人为啥愿意把代码开源出来呢。

首先代码并不是软件生命周期的核心,运行生命周期和用户访问生命周期才是。没有公司把运营体系开源出来,这部分才是核心。开源代码就像写书,你看了也不一定能和作者思想一致,只是代码运行在机器中,书籍运行在脑子里。生而为人,千奇百怪,我们读书是为了能想到作者是如何思考的。源代码理解作者的设计思想,从理解作者面对的问题入手,让代码运行在脑子里。技术也是需要环境配套和人的配套。另一方面,开源作者也希望让全球开发者参与到自己项目的开发中,这样整个项目的研发体系就变得更大了,集思广益。

7,真相

其实也并没有说明如何写好代码?如何练一手好字,当然不是程序员喜爱的Consola和微软雅黑,程序员手写字也都自成一派。我们小时候练字会先去临摹,掌握每个字的笔锋走势。如何写一篇好文章,各种修辞手法套路,也就是设计模式,它可能没有白话文那么好懂,但很优美,也可以在合适的地方用其他手法代替。当然白话文也是一种风格。

平常积极心,现在获取知识极其容易,也极其容易焦虑。尽量先把自己的一亩三分地种好,再去刨别人家的地。贩卖焦虑和焦虑的也可能是同一个人。焦虑会是向上的动力,但如果只是贩卖给你的,那往往这种动力不会持久,一旦没有焦虑的供给,你就会焦虑“我现在该焦虑点啥啊”。滋生自己向上而生的力量,那种也许不是很强大,但会一股一股涌出的小涟漪,才是平常积极心态在水面上的挣扎,倘若那股力量比较强大,必定也有死磕的决心,何不放手一搏,翻江倒海。

原文地址:https://www.cnblogs.com/xibei/p/12128453.html

时间: 2024-11-10 15:03:22

如何写好代码?的相关文章

openGL学习笔记二:看看上一篇我们写的代码

哈哈, 千呼万唤始出来, 我们第二篇笔记新鲜出炉了( 话说不是没隔多久么....) 呵呵, 闲话不多说, 我们来看看上一篇我们写的代码, 知其然也要知其所以然啊 #include <gl/glut.h> void display() { glClear( GL_COLOR_BUFFER_BIT); glRectf( -1, -1, 1, 1); glFinish(); } int main( int argc, char* argv[]) { glutInit( &argc, argv

让你提前认识软件开发(40):既要写好代码,又要写好文档

第3部分 软件研发工作总结 既要写好代码,又要写好文档 对于软件相关行业,在学校或单位上,大家也许都已经注意到了,除了要编写的程序.绘制设计图之外,还有一个重要的工作便是写文档.为什么要写文档呢?因为我们要把自己做的东西展示出来,不光展示给同行看,可能还要展示给其他岗位上的工作人员看,甚至展示给用户看.如果我们只是会写程序,不会在文档中描述自己的想法,那么就真正的成为"码农"了. 工作也有一段时间了,我发现周围的同事,会写高质量文档的确实很少.李开复老师在<浪潮之巅>的序言

多些时间少写些代码

我在我的微博上说过这样一段话,我想在这里把我的这个观点阐述地更完整一些. @左耳朵耗子:聪明的程序员使用50%-70%的时间用来思考,尝试和权衡各种设计和实现,而用30% – 50%的时间是在忙碌着编码,调试和测试.聪明的老板也会让团队这样做.而傻逼的老板,苦逼的程序员会拿出来100%-150%的时间来忙着赶进度,返工,重构,fix 大量的bug… 所以, 越差的团队一般会越忙,而且还忙不完. 在现在这个浮躁的时期,再加上敏捷咨询师们念的歪经,他们让人感觉上就像是软件产品是可以在很短的时间内高质

不要相信程序员在加班时间写的代码

不要相信一个程序员在加班时间写出来的代码. (软件工程的学说表明,连正常时间好好写的代码,也不要太相信.不过这不是本文的重点,略过不提.) (不懂代码的人,看到本文中的Java代码可以略过,不影响理解.) 创造力的时限 写代码,与写文章.绘画.思考复杂问题,并没有本质上的区别,都是创造性的活动. 每个人的创造力,都会随着身体状态而波动.广为人知的是,一个人年老体衰后,相比年富力强时,创造力会急剧下降.其实,人每天的状态起伏,也同样会剧烈影响这一点. 如果是拧螺丝,那么在精疲力尽.拧不动以前,身体

CSDN日报20170413 ——《天天写业务代码的那些年,我们是如何成长过来的》

[程序人生]天天写业务代码的那些年,我们是如何成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboot实战:我们的第一款开源软件 作者:纯洁的微笑 在信息爆炸时代,如何避免持续性信息过剩,使自己变得专注而不是被纷繁的信息所累?每天会看到各种各样的新闻,各种新潮的技术层出不穷,如何筛选出自己所关心的? [物联网]Android Things:外设I/O接口-I2C 作者:1024工场 内部集成电路(

天天写业务代码,如何成为技术大牛

前序 在工作之余浏览公司的技术网站,看到了以下这篇文章,细细读来真心觉得不错,写得有价值很实在.于是想联系下作者,问一下是否可以转载.打开钉钉一搜,作者是资深技术专家,差不多就是技术总监级别啊,这也从侧面旁征了,以下的内容是有其亲身经历,切实体会的,而不是鸡汤口号之流.相较与作者的级别,自己确实惭愧汗颜,所以没好直接聊天询问而是在文章底下留言.在得到了作者的同意后将文章的内容贴到这里,作为分享也作为自己的鞭策和提醒.在这里谢谢我的大牛同事了^_^. ....................以下内

纯手写wcf代码,wcf入门,wcf基础教程

<pre name="code" class="cpp">/* 中颖EEPROM,使用比较方便,但有个注意点,就是每次无论你写入 什么数据或者在哪个地址写数据,都需要将对 对应的块擦除,擦 除后才能写入成功. */ #define SSPWriteFlag 0x5A #define SSPEraseFlag 0xA5 //数据区 扇形区1 #define ADDR_START1 (uint16)0x100 //数据存储区起始地址 #define ADDR

IDEA在jsp页面写Java代码报错

如题,我以前用myeclipse,eclipse的时候,在jsp里写Java代码都是可以的,现在我换成了IDEA,却莫名报错 而且没有代码提示,比如说下图这样的,,虽然运行还是能运行...但对强迫症而言,实在不能忍 之前一直以为是idea对这种写法不太支持(毕竟都mvc思想了,在jsp里写java是有点那啥...),直到今天用idea写servlet类也报错..才去找了找,发现原来是可以配置的,tomcat的架包依赖没有导入 然后就ok了 不行的话 重启一下idea就可以 现在你可以用idea在

按照所给的程序流程图,分别写出语句覆盖、分支覆盖的测试用例,以及它所覆盖的路径,根据程序流程图,写出代码,用JUnit生成单元测试,并利用前面设计的测试用例进行测试。

语句覆盖:路径:abc ,测试用例:x=3,y=2 分支覆盖:路径:aeg ,测试用例:x=4,y=-1 /** * 2016-04-09 * @author 吴思婷 * DoWork类用来根据程序流程图,写出代码(定义一个类和方法来实现) */ public class DoWork { public void doWork(int x,int y){ int k=0,j=0; if((x<4 || y>0)&&(y>1)){ y=y+1; } else { if(x&

王概凯-架构漫谈之从架构的角度看如何写好代码

本文是漫谈架构专栏的第八篇,作者 Kevin 举例介绍了如何写好代码.当我们有了好的架构,那就需要考虑如何将架构落地,而这个时候,代码就显得无比重要了!千万不要让代码成为架构扩展的瓶颈.文中作者提到了代码架构,细细品味吧. 在第六章中,我们得出一个结论,软件架构实际上包括了:代码架构,以及承载代码运行的硬件部署架构.实际上,硬件部署架构最终还是由代码的架构来决定.因为代码架构不合理,是无法把一个运行单元分拆出多个来的,那么硬件架构能分拆的就非常的有限,整个系统最终很难长的更大. 所以我们经常会听