架构师速成-如何高效编程

今天看见有个csdn的征文大赛,谈谈如何高效编程,正好之前有些感触,先沉淀下来。

引子

赵云大喝一声,挺枪骤马杀入重围,左冲右突,如入无人之境。那枪浑身上下,若舞梨花;遍体纷纷,如飘瑞雪。

赵云是所有历史人物中我最喜欢的一个,如果放到现代,他走了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,各位大哥,《企业架构模式》,《大型网站技术架构》

修器

有小说讲到高手已经不需要好的武器,一片叶子,一根枯枝,都可以分分钟秒掉一片人。还有人谣传,最牛逼的开发人员只使用文本编辑器,巴拉巴拉,一个操作系统开发出来了。

我只问一个问题,你用不用电器,你开不开车?

如果用,那就继续,如果不用,那就闪开,骗子,你怎们看到我的文章的。

人活着的目的就是为了让更多人的获得更多的自由,时间自由,财务自由,人身自由。开发工具的目的是为了,让你更快的完成一些重复的繁琐的事情,让你有时间去享用你的自由。所以尽情的使用工具,工欲善其事,必先利其器。

  • 不明真相群众:好伟大
  • 作者:我只是说说而已,不要打我。

要高效,必须把最常用的工具修炼到极致:

  1. 操作系统,尽量选择苹果、Ubuntu,window次之,当你用命令行爽呆的时候就明白了。当然如果用windows,尽量使用快捷键操作。
  2. 开发工具,eclipse 快捷键,统一的格式,重构功能 ,findbug,checkstyle
  3. 自动化编译发布,使用hudson进行定时自动化打包发布
  4. 其他工具,xmind 快捷键
  5. 时间管理,番茄工作法 控制时间
  6. 好的框架,定义好一个好的框架,可以节省大量开发时间。具体内容详见我前面讲到的框架。
  7. 代码生成器,输入uml设计的类图,自动生成相关的类,对于需要持久化的对象,可以实现从前到后的增删改查的代码。

实战

产品获得了一个用户需求给到我,我通常是这样做的:

  1. 分析需求的合理性,并不是所有需求都是合理的,需要积极发现其中问题。发现的问题跟产品讨论,如果所有问题都解决掉,才进行下一步。如果后面的开发建立在一个错误的需求上,所有开发都是然并卵。
  2. 进行分析设计,至少形成uml的用例图和类图。对于关键复杂逻辑,确定是否可以通过设计模式解决。复杂流程需要画出流程图,如果状态变化较多,还需要画出状态图。在uml设计时,仍然会发现需求的问题,此时仍需要跟产品确定,直至所有问题解决掉,才进行一步。
  3. 编码实现,根据类图自动生成相关代码,省去了自己一个个再敲一遍的时间,前后端增删改查等重复逻辑都已经有了,只需要写具体的业务就ok了。
  4. 编写单元测试,对于自定义代码,必须编写单元测试。这样后期修改代码或者进行集成测试时,才会比较顺畅。
  5. 进行findbug,checkstyle自动检查,系统自动化发布,如果出现问题邮件通知。
  6. 自测,自己实现功能后,先按照需求自测一般,保证正确性。
  7. 提交测试,发现bug及时修改,基本做到日结。
  8. 自动化发布上线。

当然中间会尽量节省各种时间:

  1. 快捷键操作
  2. 番茄工作法,设置不被打扰时间,全神贯注的投入编码
  3. 3次以上重复的事情,就考虑实现自动化,比如 发布,代码检查,代码生成
  4. 代码规范严格遵守,最优实践严格遵守

团队高效

其实编码不是一个人的事情,团队协作是必不可少的。团队尽量采用如下管理方式:

  1. 需求、设计集体参与,不需要再每人讲解
  2. 设计后进行分工,如果有新人就采取新老结合的结对编程,对复杂的代码也采取结对编程。
  3. 推行结果导向,从产品,需求,设计,开发等,不要白白浪费时间做无结果的事情
  4. 代码规范严格遵守,最优实践严格遵守
  5. 规范流程,不断磨合各个环节人员,达到丝般顺滑
  6. 人员互备,不会出现单点

祝福

上面是我做软件以来的一些感悟,当然一千个人眼中有一千零一个哈姆雷特,每个都会有最适合自己的方法,希望大家都早日修成自己的高效编程之道。

8月8日是一个好日子!                                                                             2015年8月8日于阿里巴巴西溪园区

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-10 02:10:17

架构师速成-如何高效编程的相关文章

【转载】架构师速成-如何高效编程

引子 赵云大喝一声,挺枪骤马杀入重围,左冲右突,如入无人之境.那枪浑身上下,若舞梨花:遍体纷纷,如飘瑞雪. 赵云是所有历史人物中我最喜欢的一个,如果放到现代,他走了it的道路,一定可以成为一个编程高手.为什么? 其实古时打仗也是一门技术活,需要有勇有谋,跟it没有什么太大的区别.打仗要修身.修技.修器才能左冲右突,如入无人之境,同样做it也要修身.修技.修器,才能高效编程,如入无人之境. 高效编程的修炼 何谓修身.修技.修器? 修身,古今都是修炼自己的体魄和思维,使自己体魄强健,思维敏捷 修技,

架构师速成4.2-幼儿园要学会如何高效学习

<如何高效学习>,这本书的作者是scotthyoung,最知名是的1年内自学完成4年麻省理工学院计算机科学的33门课程,同时也写了一个学习方法的Blog,他使用费曼技巧来加强理解和学习. 费曼技巧有很多种理解,最简单的是: 拿张白纸; 在白纸顶部写上你想理解的某想法或某过程: 用你自己的话解释它,就像你在教给别人这个想法. 最要紧的是,对一个想法分而化之,虽然可能重复解释某些已经弄懂的知识点.但你最终会到达一个临界点,无法再解释清楚.那里正是你需要填补的知识缺口.为了填补这个缺口,你可以查课本

架构师速成4.2-幼儿园要学会如何学习

<如何高效学习>,这本书的作者是scotthyoung,最知名是的1年内自学完成4年麻省理工学院计算机科学的33门课程,同时也写了一个学习方法的Blog,他使用费曼技巧来加强理解和学习.费曼技巧很简单: 拿张白纸; 在白纸顶部写上你想理解的某想法或某过程: 用你自己的话解释它,就像你在教给别人这个想法. 最要紧的是,对一个想法分而化之,虽然可能重复解释某些已经弄懂的知识点.但你最终会到达一个临界点,无法再解释清楚.那里正是你需要填补的知识缺口.为了填补这个缺口,你可以查课本.问老师.或到互联网

架构师速成6.6-知识的收集整理学习

知识如何学习前面已经讲了2节,这节主要讲知识的整理和沉淀. 其实我之前也一直没有好好的思考过这个问题,今天在整理自己的wiz知识库的时候突发灵感,所以有了这一节. 其实知识获取的过程分为搜索->收集->整理->精化->应用->分享,前一部分跟时间管理的收集也很相近吧.知识获取的思路适用于有目的的知识收集和日常的备忘性的知识收集.当然你随机收集一些资料记录下来其实效果并不是很理想,重要的是你要有目的的学习才能最大的发挥你的心智以及潜意识.当你主动要学习一项知识时,你的潜意识会主

架构师速成-架构体系

经过这段时间的反思和整理,终于对架构有了一个较为明确的理解.架构是产品从无到有以及慢慢壮大过程中所需要的全部技术体系总称,架构过程: 配置.编码.测试.运维.监控分析.安全.运营等一系列技术体系的选型.取舍 技术选型基础上进行规划.设计.实现.迭代.制定相关规范 相关技术及规范运用到产品开发的整个过程中,并在产品迭代过程中对架构进行迭代优化 架构不止包含技术的框架,比如有人用了spring就觉得我已经是架构师了,其实架构并不是这么简单.我们以做一个新浪微博类似产品为例,现实应该是这样的: 产品初

架构师速成8.2-架构师要懂产品

产品和架构两个截然不同的职业,好像风马牛不相及,其实不是这样的.产品的思想需要经过技术的手来成为现实,在成为现实之前,需要技术理解.评估.碰撞.优化.把控.验证等等.当然架构师就承担了这一系列技术的责任,而且在一个产品的实现过程中,技术架构并不是很重要的,前期可以没有架构,简单快速验证,只有在用户多了之后,架构才有真正的用处.在初创公司,很多架构师都等不到用户多了的那一天,来实现自己的架构梦.所以产品这一关架构一定要把好,只有你把好了,后面才有机会让你去架构. 当然架构师的懂产品,是懂产品的生命

架构师速成7.3-devops为什么很重要

evops是一个很高大上的名字,其实说的简单点就是开发和运维本身就是一个团队的,要干就一起把事情干好.谁出了问题,网站都不行.作为一个架构师,必须要devops,而且要知道如何推行devops. 首先要自动化,举个阿里的例子,阿里通过aone系统来实现半自动化部署: 开发人员开发代码先自测通过后,提交代码到git. 在aone中一键部署到日常环境.部署是自动化扫描依赖冲突,系统安全等问题. 测试接到部署成功的通知,进行测试,如果测试通过,则审批通过,可以线上发布. 线上运维人员一键部署到线上,部

架构师速成8.3-架构师必须要了解的规则(转)

作为一个架构师,有些规则是必须要掌握的,这就想软件的公理,如果你学物理不知道牛顿定律,那就不要学了.在软件行业也有类似的东西,我称之为软件定律.例如: ACID,CAP,BASE ACID 传统数据库系统中,事务具有ACID 4个属性 (1)原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. (2)一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态.这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性:事务

架构师速成5-小学

很高兴你很快的进入了小学,小学的东西会让你更加的耀眼. 阶段: 小学 学时:2-3个月 升学标准 能自己制定目标及计划,get thing done. 可以轻松制作一个让你身旁人惊叹的ppt 能做一个简单的网站(或者客户端软件),数据能保存到数据库. 实践经验干货来了. 先说ppt吧,这个上一期已经讲了,如果你ppt做到出神入化,基本不需要做架构这么苦逼的事情了.因为你很容易成为老板的心腹,军师,走上人生正道.作为一个苦逼的小学程序员,很羡慕吧.那就再努力学一下,不用多久,你就会升职加薪,当上总