`
geniusleft
  • 浏览: 62387 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

前进的勇气

阅读更多

虽然我的工作平台是基于.NET的,但我常去的一个社区JavaEye,却是一个关注Java和企业应用的网站。兼听则明,偏听则暗,我一直相信,听到不同的声音,听到刺耳的声音,是有好处的。

JavaEye论坛之前是PHP做的,而整个社区是Atlassian基于Java的著名商业软件Confluence(在敏捷开发领域里很有名的ThoughtWorks官方社区就是用的这个软件)。而从06年中期开始,JavaEye站长Robbin带领团队用Ruby On Rails重写了整个站点,当时,RoR浪潮在国内才刚刚兴起不久,而JavaEye团队在RoR上均是新手,敢于全盘重构JavaEye站点,需要极大的勇气。

事实上,JavaEye的这次重写很成功。整个站点全部整合在一起,用户友好性也大大增强(AJAX),而且JavaEye团队都是一群在软件工业领域浸染颇深的人,对社区站点的深刻理解也在设计开发中体现。方方面面的优势,造就了JavaEye站点的耳目一新,说JavaEye是当前国内技术理念最领先的社区,这话不算夸张。

然而,就在JavaEye新版刚上市半年,站长Robbin又在考虑再次重构整个站点了。Robbin认为:

软件开发中最大的难点在于如何在一个软件产品的完整生命周期中始终保持其代码质量和结构合理性。我们已经见过太多的软件在其设计和规划阶段殚精竭虑,精心设计其结构,采用最新的技术,来确保软件尽可能长的生命周期,在开发阶段编写完备的单元测试,来确保软件质量始终保持很好的水平。

但是所有的这些努力其实从某种程度来上来说,都不解决根本问题:随着技术的进步,随着软件不断打补丁,功能升级改进,改来改去,代码会不可阻挡的逐渐腐烂,越到后来越难以维护,越到后来性能越糟糕,越到后来越难以理解,这就是软件熵的现象。

我特别高兴看到JavaEye团队有这样大的勇气去破旧立新。因为我一直以来特别喜欢跟别人讨论的一个话题就是:保护投资的利弊。

在我看来,所谓保护投资,其最大的弊病就是不敢舍,于是历史包袱越背越重,从而失去前进的勇气。可是不敢舍,哪有得?

JavaEye半年便进行一次大版本的重构,这不可避免的涉及到了保护投资的问题:是不是半年前所作的工作基本上都是白做了?在Robbin看来,事情的真相却是:

1) 当我们用RoR开发JavaEye2.0的时候,我们还都是RoR新手,现在回过头去看代码,发现很多地方已经有了更好的实现方式,很多代码写的并不好,甚至很糟糕。

2) 通过这半年时间网站的运营,我们已经对RoR性能的方方面面,长处缺点有了比较清楚的认识,所以对当前网站代码存在的各种问题也有了清楚的认识,完善了代码优化的思路。

3) 在未来我们还有很多创新性的功能要开发和推出,这些新的功能当初并不在我们的构思之内,而是随着网站的发展逐步想到的。因此目前的代码架构并不能很好的支持新功能的灵活扩展。

4) 在我们开发JavaEye2.0的时候,基本上是基于rails1.0的功能开发的,现在rails1.2已经推出了,我们使用的很多技术已经落伍了。

做我们这一行,最需要做的就是与时俱进,拥抱变化了。要前进,就要敢于否定过去,永远不要期待有能够以不变应万变的解决方案出现。

勇于舍,是为了未来更好的得,曾经的得以及现在的舍并不是没有价值的。舍也并非全盘否定,而是萃取菁华。否定一切轻易抛弃并无意义,但死抱住现有资本把前进风险扩大化也是得不偿失。

李敖曾经举了个例子:

美国一个诗人叫罗伯特.s费罗斯特,他讲了一个事很有趣,他年轻时不敢做一个激进派,(因为)怕年老时变成一个保守派。

但其实更可怕的事情是,年轻的时候刚有了一点成绩,就已经变成了保守派了。

分享到:
评论

相关推荐

    鼓励——前进的勇气和动力.docx

    鼓励——前进的勇气和动力.docx

    基于最新理念TinyML - 如何搭建tinyML源码的Arduino项目(第六讲)

    前进的路上总是有些坎坷,但是经历多了,也不算什么事了,因为勇气已经装满了 如何构建Tiny ML的源码工程,无论用什么语言开发,创建项目是在写Hello Word前的第一件事哦... 这一讲主要告诉大家如何基于Tiny ML的...

    shoot-me-up:前进 2p 射手

    射击我 前进 2p 射手 网址: : 。 感谢主办

    buoy:当您的薪水低时,多余的钱免息。高薪时的智能储蓄。不再担心发薪日并开始前进

    浮标当您的薪水低时,多余的钱免息。高薪时的智能储蓄。不用担心发薪日,然后开始前进。

    周一清晨的领导课读后感.pdf

    领导者应该永远保持信心和勇气,继续前进,不断学习和成长。 《周一清晨的领导课》为我们提供了很多宝贵的领导力和团队管理知识点。我们可以通过学习和践行这些知识点,提高自己的领导能力和团队管理能力,带领团队...

    亲自实践项目:装设起居室电脑的尝试

     当你在大约二个月前读到关于勇气号(C Spirit)(我亲手用 mini-ITX 制造的起居室个人电脑)的文章时,勇气号正在称职地完成一般性的计算工作(参考文献 1)。但是,它的图形功能却远远落后于我为了把 Xbox 从音响柜...

    dev-warrior-quest:使用JavaScript和Phaser 3构建的RPG游戏(JS模块Capstone Project @microverseinc)

    我们的英雄将遵循一条路线,这将使他面临四个主要挑战:他将面对自己的恶魔,并且需要击败才能继续前进。 完整的故事试图模仿想成为开发人员的公司在永无止境的周期中会遇到的路径,在此周期中,恢复力工作和挑战是...

    架构师专业提升课程

    成功的唯一方法便是,承认现实,超越现实,鼓起勇气并善用它。 学会平静的对待生活中的不完美之处,适应自己的情绪,了解如何让它们自然宣泄出去 学习如何把不完美的地方转换成我们的优势,激发我们的创造力 自我...

    reading-notes:创建了一个降价页面以帮助其他人了解我

    承认恐惧,但要有勇气无畏 提醒自己自己足够:足够聪明,足够强大和足够坚定 休息并重新开始,但永远不要停止! 用Shonda Rhimes的话来说: 您只需要继续前进。 您只需要继续做某件事,抓住下一个机会,就可以尝试...

    mixied

    ”,“成功不是最终的,失败不是致命的:重要的是继续前进的勇气。”,“永远不要屈服。 始终保持高昂。 直视世界。”,“通过实现目标所获得的成就并不像通过实现目标所获得的成就那么重要。”,“相信您可以做到,...

    智能循迹避障小车.doc

    在检测到前进方向上的障碍后,火星车会去寻找 可能的最佳路径。 据悉,中国的登月计划分三步进行:第一步,发射太空实验室和寻找贵重元素的月球轨 道飞行器;第二步,实现太空机器人登月;第三步,载人登月。随着...

    智能循迹避障小车.docx

    在检测到前进方向上的障碍后,火星车会去寻找可能的最佳路径。 据悉,中国的登月计划分三步进行:第一步,发射太空实验室和寻找贵重元素的月球轨道飞行器;第二步,实现太空机器人登月;第三步,载人登月。随着"神舟...

    ansible-unbound

    前进区 unbound_config: forward_zone: {} 遥控 unbound_config: remote_control: {} 缓存数据库 unbound_config: cachedb: {} 角色变量将与合并(请参见下面的默认vars ) 默认变量 unbound_config_defaults: ...

    rust_os —用rust编写的OS内核。 非POSIX-Rust开发

    通常,随着我的前进,将在设计体系结构时将其编写为与体系结构无关(当前版本为x86_64 / amd64)。 设计功能带有依赖项的运行时模块初始化明确的用户内核职责分离Userland拥有ELF加载程序,内核使用自定义格式进行...

    note-taker

    执照GNU通用公共许可证安装在终端中启动npm会让您前进!用法单击铅笔按钮进行注释,然后单击磁盘保存。垃圾删除。 app.post('/api/notes', (req, res) => { fs.readFile(path.join(__dirname + '/db/db.json'&#...

    SteveInWonderland:CSE 167 最终项目

    控制: w - 前进。 s - 向后移动。 a - 向左移动。 d - 向右移动。 q - 逆时针旋转相机。 e - 顺时针旋转相机。 o - 切换到俯视图。 p - 移动全景相机。 f3- 切换标志的移动。技术特点: 沿着定义为分段贝塞尔曲线的...

    Light_Bot_Project_Grp6:Java Project 2015第6组

    LightBot项目 团队6: 纪尧姆 格言 达米安 阿德里安 本杰明 艾美 想法: 变量(可调箱)(机械手上的值,锁箱) 指针(由智能机器人放置的传送器) ... 原型:地形,机器人,简单的动作(例如前进)

    yafra:Apache Cayenne、Wicket、CXF、GWT、EJB 示例作为框架-开源

    另一个(不同的)框架。 Apache Cayenne 的示例。 使用不同的技术,例如 Apache CXF Google Web Toolkit EJB Apache Wicket Eclipse RCP Java ANSI ... 感谢 sf.net 过去提供的非常好的服务 - 但现在是时候继续前进了!

Global site tag (gtag.js) - Google Analytics