架构师速成-如何高效编程 for java
引子
赵云大喝一声,挺枪骤马杀入重围,左冲右突,如入无人之境。那枪浑身上下,若舞梨花;遍体纷纷,如飘瑞雪。
赵云是所有历史人物中我最喜欢的一个,如果放到现代,他走了it的道路,一定可以成为一个编程高手。为什么?
其实古时打仗也是一门技术活,需要有勇有谋,跟it没有什么太大的区别。打仗要修身、修技、修器才能左冲右突,如入无人之境,同样做it也要修身、修技、修器,才能高效编程,如入无人之境。
高效编程的修炼
何谓修身、修技、修器?
- 修身,古今都是修炼自己的体魄和思维,使自己体魄强健,思维敏捷
- 修技,古代修炼自己的武艺和兵法,如今修炼自己的设计方法、模式及设计技能
- 修器,子龙左手青釭剑,右手亮银枪,跨下白龙马,一身白盔白甲,帅到爆炸!如今我们左手xmind,右手eclipse,uml在脚下,也是无比潇(ku)洒(bi)。
待修到山花烂漫时,需求丛中过,片叶不粘身。
修身
修身是一个很大的话题,要讲个几天几夜了,所以我们就先略过。当然修身之后,可以从思维的高度上确定大的方向,但是大家的看了题目也不太会关心如何修身,so pass!后面省略十万字,我可真够高产的(稿费不要省略啊,我不怕麻烦)。
修技
古时修技都是有秘笈,而且必须有独门功法历尽千辛万苦才能修炼成功。如今好了,有很多书和视频,还有我这种让人醍(提)醐(壶)灌顶的好教程,所以你只需要少吃一点苦就可以练成了,我算算啊——-你大概历尽999辛9999苦就可以了,看少了1点吧。
- 不明真相群众:揍他,揍他小舅子
- 作者:亚美蝶,揍我不行,揍我小舅子可以。
- 作者:哎呀,轻点
- 作者:呀,轻点
- 作者:轻点
- 作者:点
- 不明真相群众:KO
- 作者:请让我讲完,55555
修技大概分为:
- 面向对象、面向过程设计方法(心法)
- uml设计语言(秘笈)
- 设计模式、重构、xx最佳实践(先辈实战经验)
- 单元测试(对打练习)
等修炼到10成功力,才可以继续修炼终极秘笈架构模式,否则会走火入魔、oom。
- 不明真相群众:等一下,我们在讨论高效编程,你跟我们讲什么面向对象,你疯了吧!揍他,揍他小舅子
- 此处同上,省略100字。
- 作者:请让我讲完,55555
其实看到题目我首先想到的也是编程工具的使用,以及快捷键的使用。后来我发现那只占我浪费时间的5%-10%,真正浪费我们时间的是:
- 老板说:哎呀,我们方向错了,我们重新搞一个方向吧!(产品、码农、测试心中下起了大雪,好冷,好累,我要屎了,砍死他…….看在钱的份上,先饶你一条狗命)
- 产品说:哎呀,需求不是这个样子的,我们应该改成这样………(码农心中一万只草泥马跑过)
- 测试说:哎呀,这么多bug,快来改(测试心中鄙视的看着你,菜鸟,切!)
- 码农说:哎呀,这样地方设计不合理,我们需要重构。哎呀,这样地方if else好多,我晕了。哎呀,这地方出异常了。哎呀,…..(哎你妈个头啊!你有完没完啊!)
- 不明真相群众:好像很有道理的样子,先饶你一条狗命
- 作者:谢谢大侠
其实我们看看这些问题怎么来解决:
- 老板的问题,我先不解释了,老板最英明!(老板在后面看着呢)。《精益创业》《精益创业实战》,好像有点修身的味道。
- 产品的问题,有些错误的地方,你在设计时会感觉不对,那就问题所在。但是有些就是方向性的问题,这可以归结到第一个问题。(产品说:这个锅甩的好)《head first 面向对象分析与设计》《领域驱动设计》
- 测试的问题,单元测试起码保证最基础的代码的正确性,上面集成测试,功能测试,系统测试才有可能正确。《单元测试之道》《测试驱动开发》
- 码农的问题,先辈的经验先学会,你就不会有那么多需要哎呀的地方。《重构》《Head first 设计模式》《代码大全》,《Effective java》《代码整洁之道》
秘笈已经放在后面了,请大家笑纳!
- 不明真相群众:好像还不错,看在秘笈的份上先饶你一条狗命
- 作者:谢谢大侠
- 不明真相群众:等等,终极秘笈没有给
- 作者:sorry,各位大哥,《企业架构模式》,《大型网站技术架构》
修器
有小说讲到高手已经不需要好的武器,一片叶子,一根枯枝,都可以分分钟秒掉一片人。还有人谣传,最牛逼的开发人员只使用文本编辑器,巴拉巴拉,一个操作系统开发出来了。
我只问一个问题,你用不用电器,你开不开车?
如果用,那就继续,如果不用,那就闪开,骗子,你怎们看到我的文章的。
人活着的目的就是为了让更多人的获得更多的自由,时间自由,财务自由,人身自由。开发工具的目的是为了,让你更快的完成一些重复的繁琐的事情,让你有时间去享用你的自由。所以尽情的使用工具,工欲善其事,必先利其器。
- 不明真相群众:好伟大
- 作者:我只是说说而已,不要打我。
要高效,必须把最常用的工具修炼到极致:
- 操作系统,尽量选择苹果、Ubuntu,window次之,当你用命令行爽呆的时候就明白了。当然如果用windows,尽量使用快捷键操作。
- 开发工具,eclipse 快捷键,统一的格式,重构功能 ,findbug,checkstyle
- 自动化编译发布,使用hudson进行定时自动化打包发布
- 其他工具,xmind 快捷键
- 时间管理,番茄工作法 控制时间
- 好的框架,定义好一个好的框架,可以节省大量开发时间。具体内容详见我前面讲到的框架。
- 代码生成器,输入uml设计的类图,自动生成相关的类,对于需要持久化的对象,可以实现从前到后的增删改查的代码。
实战
产品获得了一个用户需求给到我,我通常是这样做的:
- 分析需求的合理性,并不是所有需求都是合理的,需要积极发现其中问题。发现的问题跟产品讨论,如果所有问题都解决掉,才进行下一步。如果后面的开发建立在一个错误的需求上,所有开发都是然并卵。
- 进行分析设计,至少形成uml的用例图和类图。对于关键复杂逻辑,确定是否可以通过设计模式解决。复杂流程需要画出流程图,如果状态变化较多,还需要画出状态图。在uml设计时,仍然会发现需求的问题,此时仍需要跟产品确定,直至所有问题解决掉,才进行一步。
- 编码实现,根据类图自动生成相关代码,省去了自己一个个再敲一遍的时间,前后端增删改查等重复逻辑都已经有了,只需要写具体的业务就ok了。
- 编写单元测试,对于自定义代码,必须编写单元测试。这样后期修改代码或者进行集成测试时,才会比较顺畅。
- 进行findbug,checkstyle自动检查,系统自动化发布,如果出现问题邮件通知。
- 自测,自己实现功能后,先按照需求自测一般,保证正确性。
- 提交测试,发现bug及时修改,基本做到日结。
- 自动化发布上线。
当然中间会尽量节省各种时间:
- 快捷键操作
- 番茄工作法,设置不被打扰时间,全神贯注的投入编码
- 3次以上重复的事情,就考虑实现自动化,比如 发布,代码检查,代码生成
- 代码规范严格遵守,最优实践严格遵守
团队高效
其实编码不是一个人的事情,团队协作是必不可少的。团队尽量采用如下管理方式:
- 需求、设计集体参与,不需要再每人讲解
- 设计后进行分工,如果有新人就采取新老结合的结对编程,对复杂的代码也采取结对编程。
- 推行结果导向,从产品,需求,设计,开发等,不要白白浪费时间做无结果的事情
- 代码规范严格遵守,最优实践严格遵守
- 规范流程,不断磨合各个环节人员,达到丝般顺滑
- 人员互备,不会出现单点
祝福
上面是我做软件以来的一些感悟,当然一千个人眼中有一千零一个哈姆雷特,每个都会有最适合自己的方法,希望大家都早日修成自己的高效编程之道。
架构师速成-如何高效编程 for java的更多相关文章
- 架构师速成7.3-devops为什么非常重要
evops是一个非常高大上的名字,事实上说的简单点就是开发和运维本身就是一个团队的,要干就一起把事情干好.谁出了问题,站点都不行. 作为一个架构师.必需要devops,并且要知道怎样推行devops. ...
- 架构师速成7.3-devops为什么很重要 分类: 架构师速成 2015-07-07 17:22 410人阅读 评论(0) 收藏
evops是一个很高大上的名字,其实说的简单点就是开发和运维本身就是一个团队的,要干就一起把事情干好.谁出了问题,网站都不行.作为一个架构师,必须要devops,而且要知道如何推行devops. 首先 ...
- 京东Java架构师讲解购物车的原理及Java实现
今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1)用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码问:购物车商品还在吗? 2)用户登陆了用户名密码,添加商品,关闭浏 ...
- 架构师速成6.7-设计开发思路-uml 分类: 架构师速成 2015-07-29 18:25 157人阅读 评论(0) 收藏
uml是什么东西?统一建模语言,一门语言,是用来进行软件设计的一门语言. 其实一门语言的诞生并不伟大,让大多数人都使用才足够伟大.uml就是一门伟大的语言,因为目前软件设计的唯一语言就是它. UML其 ...
- 架构师速成5.1-小学gtd进阶 分类: 架构师速成 2015-06-26 21:17 313人阅读 评论(0) 收藏
人生没有理想,那和咸鱼有什么区别. 有了理想如何去实现,这就是gtd需要解决的问题.简单说一下gtd怎么做? 确定你的目标,如果不能确定长期目标,至少需要一个2年到3年的目标. 目标必须是可以衡量的, ...
- 架构师速成6.7-设计开发思路-uml
uml是什么东西?统一建模语言.一门语言.是用来进行软件设计的一门语言. 事实上一门语言的诞生并不伟大,让大多数人都使用才足够伟大. uml就是一门伟大的语言.由于眼下软件设计的唯一语言就是它. UM ...
- 架构师速成5.1-小学gtd进阶
人生没有理想,那和咸鱼有什么差别. 有了理想怎样去实现.这就是gtd须要解决的问题.简单说一下gtd怎么做? 确定你的目标.假设不能确定长期目标,至少须要一个2年到3年的目标. 目标必须是能够衡量的, ...
- 一位10年Java工作经验的架构师聊Java和工作经验
从事近十年的 JavaEE 应用开发工作,现任阿里巴巴公司系统架构师.对分布式服务架构与大数据技术有深入研究,具有丰富的 B/S 架构开发经验与项目实战经验,擅长敏捷开发模式.国内开源软件推动者之一, ...
- 一位资深Java架构师的晋级心得
架构师是什么? 是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物.一个架构师得需要足够的想像力,能把各种目标需求进行不同维度的扩展,为目标客户提供更为全面的需求清 ...
随机推荐
- 编译hadoop遇到maven timeout
在编译hadoop的过程中,使用ant jar进行编译时,提示maven版本库连接超时的问题,通过搜索发现,在如下文件的位置中有repo2的版本库地址,这个地址在国内,目前不能正常的访问: 将 ...
- Spring依赖注入三种方式详解
在讲解Spring依赖注入之前的准备工作: 下载包含Spring的工具jar包的压缩包 解压缩下载下来的Spring压缩包文件 解压缩之后我们会看到libs文件夹下有许多jar包,而我们只需要其中的c ...
- Javascript中replace()的一些用法总结
关于定义 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 关于语法 stringObject.replace(regexp/substr,repla ...
- 烂泥: KVM虚拟机Linux系统增加硬盘
本文由秀依林枫提供友情赞助,首发于烂泥行天下. Linux虚拟机在使用过程中,硬盘空间不够使用.由于前期没有做LVM,所以只能手动添加新的硬盘. 给虚拟机添加硬盘有两种方法: 1.通过virsh at ...
- OpenXml入门----给Word文档添加文字
使用OpenXml给word文档添加文字,每个模块都有自己对于的属性以及内容,要设置样式就先声明属性对象,将样式Append到属性里面,再将属性append到模块里面,那么模块里面的内容就具备该样式了 ...
- Hadoop Shell命令字典(可收藏)
可以带着下面问题来阅读: 1.chmod与chown的区别是什麽?2.cat将路径指定文件的内容输出到哪里?3.cp能否是不同之间复制?4.hdfs如何查看文件大小?5.hdfs如何合并文件?6.如何 ...
- Unity2D Sprite Packer用法介绍
想充分利用图片空间? 我们用来做sprite的图片通常会留有很多空白的地方,我们在画完了sprite之后,这些地方很可能就没有什么作用了. 如果想避免这些资源上的浪费,我们可以把各个sprite做成图 ...
- linux下批量替换文件内容
1.网络上现成的资料 格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` linux sed 批量替换多个文件中的字符串: (此命令很强大) ...
- python playfair
#########################Playfair密码######################### #约定1:若明文字母数量为奇数,在明文末尾添加一个'Z' #约定2:'I'作为 ...
- javascript中的栈结构
1.栈的定义 栈是一种和列表类似的数据结构,可以用它来解决很多的编程问题,栈是一种高效的数据结构,因为数据只能在栈的顶端添加或者删除,所以这样的操作很快而且容易实现. 栈是一种特殊的列表,站内的元素只 ...