童话说说技术创业美文职业
投稿投诉
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

程序员必读:网站建设之重构经验

7月11日 辞凤阙投稿
  因为工作内容的原因,我在前后两家公司中的工作中主持和经历了十余次代码和架构的重构,下面随便说说我对重构的一些经验和想法。
  关于重构
  首先重构面临的背景都是相似的,程序员们为了快速完成需求和上线而写出了最基本的代码,而在功能的不断扩充过程中,以打补丁的方式对代码进行扩充,中间还会面临着开发人员的变更和离职。逐渐的,代码就会越来越臃肿,渐渐的变得难以维护。
  糟糕的架构会有什么样的影响?首先是开发效率的降低,在糟糕架构下加进新功能,会受之前代码的影响,可能存在意想不到的改动点和问题点,开发和调试时间都会大大增加;其次是故障率的提升,在质量低下的代码中,总是容易藏着很多不易发现的坑,这些都会成为故障的隐患;同时,架构也会使得需求的完成大打折扣,使得设计好的目标,因为架构限制或者性能等原因,只能完成80甚至更低。
  重构要解决的问题
  重构不能凭空重构,一定是要解决一个问题,一般情况下重构要解决的问题大致有以下几种。
  结构糟糕。相信很多码农们,都遇到过接手别人的代码后都感到挠头的事情,五千行以上的文件,三千行以上的函数,面对这样子的代码,对其进行修改和继续开发是件很艰难的事情。
  安全隐患。很多代码,都只是为了功能上快速完成,而对很多潜在的安全风险置之不管,如内存管理、异常处理、模块接口等。有的雷如果不扫,可能迟早有一天会爆发。
  性能问题。对于很多大型服务,性能高一点可以节省很多的服务器费用。性能问题主要需要找到核心问题,有的问题出在架构,而大多出代码上。
  功能扩展。有的模块,开始设计时只是实现一些很基本的功能,而随着产品功能不断增强,被赋予了越来越复杂的功能,到了一定程度,需要进行重构以让其能够实现新赋予的任务。
  协同开发。很多时候,一个大系统往往需要多个人一起进行开发,如果需要这些人改同一个类甚至同一个函数,往往是冲突不断,而代码的整合往往也会存在更多问题。这时候需要很好的架构能够支持多人的共同开发和修改。
  模块调试。在一个大系统中,往往有很多子模块互相关联,而假如某个模块的调试需要启动整个大系统,或者会受到其他模块稳定性的影响,对于效率是非常低的。而重构建立调试层或者开发调试工具是更好的选择。
  模块复用。有些时候,多个系统或算法,可能会用到子算法和子模块,而不同项目或模块重复开发相同功能的子模块,在很多公司都很常见。而很多时候,将一些公共的部分抽象出来,能够将这部分做的更好更精,而从整体上,往往能大幅度提高开发效率和效果,往往也能优化算法性能。
  算法使用不当。在有些模块中,使用了不恰当的数据结构或者相关算法,使得或者是性能,或者是效果出现了问题。这种情况,甚至要将原有的体系结构推到重来,重新设计算法和数据结构,达到尽可能好的匹配效果。
  承载规模不够。对于一些系统,都有其设计的容纳规模,例如瞬间访问量、同时在线人数,很多公司从小到大都经历过这个过城,当超过一定量级时,很多时候并非简单通过加服务器能解决,有时需要重新设计架构。就像12306,因为架构问题使得很难承担过高的瞬时在线人数。
  重构经验感受
  重构时,第一道难关是如何过领导这道关。很多领导都要背着产品指标和任务,大多人也更关心其能够在多长时间做出什么,重构这种事情,在很多时候,有可能是“费力不讨好”的代名词,因为在大多情况,无法帮助领导完成指标。这种情况下,如何获得领导的支持就极其重要了。
  对于重构,一种方法是,让重构与某些技术或产品指标挂钩,例如完成新产品、改进效果、提高性能等,相当于是重构伴随着其他改进搭帮上线,那么这种情况可以比较顺利的完成重构。
  而如果单纯的为了架构的合理性而去重构的话,就需要去说服领导,为什么原来的架构会降低开发效率,新做的架构能带来哪方面的提升。一定要让领导明白,这个能带来实实在在的长期收益,不管性能、效率、安全等都可以,而并非只是“看着不爽”而进行的重构。
  如果团队规模有一定的人的话,也可以分出一部分进行新型架构的开发,而另一部分人在现有架构上进行改进,使得短期目标和长期目标两不耽误。这时候,值得注意的就是,不管从代码还是设计角度上来看,都要让现有做的事情能够复用,而不是新架构上线之后就会被废掉。
  如何进行渐进式重构,也是很多架构师需要去思考的问题。就是不搞一下子半年一年的重构,而是以月为单位,快速的迭代,能够很快的看到效果,并且小规模投入使用。
  不管怎样,重构,一定不能是为了重构而重构,或者对前人的代码看着不爽,或者抱有技术完美主义而进行重构,最重要是找准其要解决的实际问题,这时候的重构,能带来的是开发效率上的提升。
  而在重构的过程中,也需要做好新架构的设计,并且拥有一定的前瞻性,否则很容易出现新架构、新新架构、新新新架构这样子的事情。另外,也要尽可能的增强代码的复用性,让其中的模块,在任何一个架构中都能够很好的被应用,当然这个要根据具体情况具体分析。
  对于重构,也尽量不要拥有技术完美主义。很多时候,使用最成熟的方案及最简单的架构模型实现所需要的功能一般来说更加“简单可依赖”,有的时候架构过于复杂反而喧宾夺主,因为所有架构都是为了功能服务的。同时,也尽量不要使用很多未经广泛使用的前沿技术,因为这些在开发和部署过程中,很多都可能会遇到意想不到的问题,延缓开发速度并影响线上效果。
  此外,作为重构时的负责人,一定要紧跟代码开发的过程,并随时进行指导,一般情况下,不要相信写出糟糕代码的人,经过略加指导就能写出漂亮代码了。我曾经有过这样的经历,要将一个超大的类按照功能进行模块化拆分,设计好了架构及每个子模块就让组员进行开发。开发完了我看代码时登时就抓狂了,模块是拆分了,每个功能也都建立好了子类,并通过主类调用子类,但是每个子类又都将主类作为友元,又去调用主类里面的成员变量和函数。这种代码,再次重构也是难免的,这个给我的经验教训就是,重构的工作一定要做细,迭代中的代码检查也是必不可少的。
  良好的习惯,从最初做起
  当然,重构再怎么样,也是一种推翻重做,耽误时间的做法。从我的经验来看,其实大多数的重构都是可以避免的,这需要从以下几个方面去提高。
  良好的编码风格,好的习惯往往很难是天然形成的,更多是在工作中不断的老带新中耳濡目染练出来的。很多领导希望员工全部时间都用来做项目,不断地去压更多的活,实际上是在用跑短跑的方式跑长跑,很容易出现后劲不足的情况。而我在微软的经历,也让自己感受到了从潮手到逐渐成熟的过程,后来在搜狗时即使再忙没法搞teamreview,我也会去尽量给每个组员检查他们的代码,帮助别人去提高。
  初期的架构设计,这个也是非常重要的。架构设计能不能一次到位,这个不太好说。但是相信好的架构,一定比粗糙的设计能够坚持更长得多的时间。并且好架构可以考虑到未来可能扩充的规模和功能,为未来的发展留好接口。同时在其中所有的模块都非常有序,即使大的框架要修改的话,也只是搭一个架子,原有的子功能和子模块都能够被很好的复用,
  其实很多时候,代码并非要开发一阵就重构一次,而写出好的架构,也并非是那么难。更重要的是,需要的是不断的提高程序员的自我修养,不仅仅是能力上的,还有态度上的。不要只想最初开发时省事,而不考虑若干时间后的事情。好的架构,对未来的开发以及发展,可以说是真真实实的“事半功倍”。
  最后,我们看一个关于扁鹊的故事:
投诉 评论 转载

产品经理模式之弊论产品与技术人员在合作中,因为思维方式与视角不同,本身便存在着可能造成问题与矛盾的地方。但实际上,除非遇到非常糟糕的,不善交流并不善站在对方角度考虑的产品与技术方,一般的产……浅析锤子ROM若干产品功能不卖鸡汤,说些关于锤子ROM有用的话。没能搞到锤子ROM发布会的门票,本文所有言论评判均来自老罗的优酷空间里头的官方视频……程序员必读:网站建设之重构经验因为工作内容的原因,我在前后两家公司中的工作中主持和经历了十余次代码和架构的重构,下面随便说说我对重构的一些经验和想法。关于重构首先重构面临的背景都是相似的,程序员……谈谈产品和项目的区别从毕业到2009年的几年间,一直从事项目相关的事情。不管是担任开发工程师、技术经理还是项目经理,都围绕项目在转。从2009年10月……需求变化与IoC需求又变了,怎么办?最近微博上流行一个段子:程序员XX遭遇车祸成植物人,医生说活下来的希望只有万分之一,唤醒更为渺茫。可他的Lead和亲人没有放弃,他们根据XX工作……从人人都是产品经理来看我眼里的产品人产品经理遍山野,满城尽是产品经。自互联网兴起,产品经理甚火爆。但冷静下来,产品经理到底是做啥的?答案层出不穷,也时而在产品群上激起阵阵讨论。互联网虽说不上新生,但也远没有到了约……什么是产品经理的思维方式?1、用户永远是对的这句话已经被说烂了,但是很多人存在误解,以为用户说的每一句话每一个要求都是对的,要不折不扣的执行;也有人据此反对这句话,认为不过是一句营销口号。例……如何做一款成功的应用(上)译者注:本文作者从自身丰富的应用开发设计实践经验和大量的优秀应用实例中,总结提炼了从产品概念、设计、开发到市场推广等一系列的相关原则,指导移动开发人员怎样来打造一款成功赚钱的应……什么是产品人的理想状态理想状态也许是一个永远也无法达到的状态,但明确了这个理想状态,我们才可以做到无限接近。下面分别从需求、设计、修养三个方面粗略的描述PM的理想状态。需求产品是由需求驱……BumpCEO谈认知负荷:为什么你的产品不如你想的那么简单好编者按:本文作者Lieb是Bump的联合人兼CEO,Bump是一款非常棒的应用,两部手机碰一下就能互换联系人信息、照片和其他内容,应用累计下载次数已超过1。3亿次。……产品经理:逢年过节出行请坐火车坐火车对一个产品经理是个莫大的享受。只有在火车上才能聚集如此多的用户,如此多的终端,用户足够无聊,时间足够充裕,交流足够便利。尤其是过年的火车。你能获得非常多有价值的信息……产品经理是干什么的:我眼中的产品经理接触产品快一年了,期间自我的认识也是在不断的变化的,从当初的完全不懂到现在稍有明白。不过,最近又开始疑惑起来了!难免突然就“产品经理是干什么的?”这样的问题又思考起来。在工作中……
进军客厅!智能电视信息浏览用户体验设计初探“好看的界面”与“难看的界面”“神级产品”的大败笔设计过去式!一组精致不落俗的复古风格优秀网站FacebookMessager成长记:从功能到应用从应用到产品设计中为什么要重视反馈?找出最优解:如何进行产品设计方案决策写在产品修补术之前的思考迭代现象思考在设计注册时,你也纠结过这些吧?潮流酷站!一组走心又走肾的优质电商网站设计实例(上)产品瘦一点,更让人欢迎想做一款有趣的应用产品,何不试试游戏化?工伤六级伤残鉴定标准最新韩式女生卷发集锦带你玩转最美造型小孩喝三精牌葡萄糖酸锌口服液的好处不惑之旅热播,看了梅婷刘威葳,对比一下她人,差距就出来了眼里有泪心里有伤的说说无声的世界捡到小米手机关机还查的到定位吗(定位别人手机具体位置)文案2021很火的人生哲理经典句子,发朋友圈必赞秋季懒人护肤小窍门鸡蛋美容的种方法荣耀80Pro直屏版本价格曝光,屏幕影像发生变化,本月上市数字化转型存在的五大问题意识供给成本能力竞争力培育大唐女法医冉美玉是好是坏?冉美玉结局是什么?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界