`
shift8
  • 浏览: 151429 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

讲讲我们的开发和管理理念-转载

阅读更多
原文:http://www.iteye.com/topic/508928

最近听到过多起软件行业“项目经理”的故事了,其实就是能堆砌几个技术框架用用;或者动辄就说自己写什么框架,然后谈论说struts2等框架如何如何慢云云来忽悠菜鸟,于是写出此文,谈谈想法。

淘宝用开源,微软用自己的东西,金山什么都用,Google、IBM和ORACLE以及JBOSS则全力支持OpenSource,诸多公司,我也不细评了,从最终产品运行效率看,微软最差,Windows Live系列的产品慢的不成样(最近几个月才略有改观),反倒是用开源的一个比一个快;看看google和淘宝。所以说,没有什么快慢,只是用的人如何。管理也好,技术也好,都是渗透着一种文化,而这种文化以及文化背后的可操作性的东西,不亲身体验,是永远无法学会和想明白的。

说说我们公司的软件开发文化吧。

首先是最为本质的东西,作为软件企业,我们追求什么?答案很简单:第一是生产力,第二是可维护性(所谓的可维护性里面包括了可扩展性),第三是精英团队。这里解释一下,为什么1,2,3是这样的顺序而不是其他。

首先我们是一家公司,正如杰克韦尔奇所说,任何一家公司和企业,第一目标是利润,永远不能偏离这个目标;而这也是一切其他文化的基础。一个简单的例子,20万的项目,20个人月和5个人月的成本差异显然是巨大的,而我们的目标则要努力压缩这个人月的数字以期最大化利润;而最大化的利润也意味着员工的薪水空间和企业的高速成长。而可维护性意味着在团队人员流动以及新人加入时,可以有无缝接替;或者客户需求变更或者架构提升时,可以几乎无痛的切换。第三点精英团队,并非是找一堆清华的高材生,而是一个成长型的,真诚团结并且务实的团队。我们要做的是让一群聪明年轻人成长为精英,让他们拥有切实的能力和自信,从而立足于一个行业并受到同行和客户的尊敬。可能有人会问,为什么不提用户?我想说的是:任何一家企业,都必须尊重用户,而也只有精英团队,才能真正的为客户提供高质量产品和服务,而不是每天生活在抱怨和混乱的项目开发中。

那么我们如何实现这些文化呢?

首先我们讲生产力的话题。作为我本人来说,我对各种新技术都喜欢研究一下,但是极少高度深入;作为“架构师”的角色,我喜欢把这种研究的氛围推广。不过研究归研究,如果要应用到项目中那还是有原则的,比如:A.不能简化代码量的,不用;B.难以上手的,不用;C.不稳定的,不用;D.自己造轮子的(缺乏可持续维护),不用。

基于这几个原则,目前热门技术中,我们不用EXT或者Flex,因为它违反了A和B;不用ibatis,因为违反了A;不用GWT,因为违反了 B;基本不用微软的方案,因为很多MS的方案都违反C;而不自己造轮子,尽量基于标准的Spring/Struts2/Hibernate框架,则是处于人员更迭和维护的考虑,具体可参考J2EE design and development without EJB;我也后悔用Mina,因为缺乏持续性的维护,这方面显然不如netty和grizzly。

那么我们使用什么呢?为了简化代码量,我们使用了Springside的方案,提供了最简单实用的CRUD和Web分页以及复杂查询方案;并更进一步的使用了Sitemesh,从而最大成度的屏蔽了绝大多数开发人员和HTML/CSS打交道的机会;这样也不用在EXT和FLEX间折腾了;Struts2的Convention插件提供了足够简单(我认为不是最)的Web映射机制,可以大量减少配置;Spring则提供了声明性事物(基于Aspectj或者元数据声明),对象依赖的自动装配,以及未来可扩充(暴露服务)框架;而对Hibernate的深入理解,可以解决绝大多数情况下的存储问题;当然我们从来不搞绝对化,特殊情况特殊处理,该JDBC直接操作的时候我也绝不会滥用Hibernate。另外,对多线程编程、锁机制、网络以及底层IO的精通,这些都成为团队可以在项目中快速前进的优势。

当然如何来衡量呢?

比如Hibernate,如下几个问题:1,什么是ThreadLocal,Hibernate如何结合ThreadLocal?2,你能马上说出来inverse和cascade关系,cascade种类以及差异吗?3,Hibernate什么情况下,会产生inner join,什么情况下会产生outer join?可以强制吗?什么架构的情况下应该避免一对多和表连接?

如果你能快速的不查资料的回答上来这几个问题,那么我相信你绝对不会讨厌Hibernate,也绝对不会有常见的使用上的困惑。比如Hibernate结合Hibenrate search和solr,可以用最少量的代码为我们带来高效的企业级海量数据检索。

另外,为了提升生产力我们还采取了Scrum的开发模式,并结合XP,推崇TDD,从UnitTest到selenium都是团队工作必不可少的亲密伙伴(这么多年来实在厌烦了V字形的传统模式,以及一堆堆的文档),我们鼓励写清洗的代码,代码就是文档,注释就是需求。我们使用了CI工具,比如 hudson或者bamboo;使用jira或者trac来让每个成员明确项目每个迭代中的目标,考虑到我们是年轻的团队,发布周期一般是2周而不是更长;使用maven(部分结合ant)来做项目生命周期管理,使用firebug来进行各种web相关内容的调试和测试,虽然很少提及但是我们熟悉 Linux以及各种分布式解决方案……

诚然,工具和框架的堆砌并非可以达到目标,必须让这些实践和其中蕴含的价值观深入人心,才可能让这一切产生威力。我们从很早就开始推行的代码价值观,比如优先处理错误,变量命名规则,代码书写的规则和技巧,和最近我看到的thoughtworks文集中提到的几乎完全一样;这些“最佳实践”构成了团队务实的开发理念。总结性的说,上面提到的一切,新技术,敏捷,过程改进,其实都是为了能够产生生产力的“最佳实践”。

当然,空谈永远难以解决问题,技术上的务实和有效评估并提出方案才是王道。比如文章开始提到的struts2性能问题,作为我们的解决方案,会是:首先评估项目规模,评估每秒的并发request数,用ab等工具来评估时间最长的几个action,使用jprofiler等工具来查找本地瓶颈并解决(比如sql缺乏优化,多表连接等带来的性能问题),使用ehcache并做gzip压缩来处理网络传输上的问题。

那么有了这些,团队就有战斗力了吗?答案并非“不”,而是“不确定”。一个稳定而高效的团队,团结,有责任心,正直而勤奋,彼此信任但不依赖,各种优秀品质必须存在于每个人身上。术业有专攻,但是品行不可能有差异,一个新人,要么同化,要么离开,没有第三种选择,这也是我们为什么更喜欢可塑性更强的年轻人的原因。这一切如何产生呢?我们的原则是在中国,我们相信企业文化来自于老板,来自于“带头大哥”,言传身教决定了这一切;所以对中层人员的提拔是必须绝对谨慎的,这会影响整个公司的价值观和未来方向。

最后,推荐几本书,我相信思想的变化比学几样技术更能提升一个人的价值,而这些提升,大多来自于书籍。感谢这些书籍的作者。
  • A.J2EE design and development without EJB
  • B.《走出软件作坊》
  • C.杰克韦尔奇《赢》
分享到:
评论

相关推荐

    关于人工智能的随笔-谈人工智能时代的学习.doc

    尽管该理念仍然是对大脑工作模式的一种模拟(我们将在后续章节中探讨更多大脑 的生物力学模型),但神经网络能够解决问题的广泛性却令人惊叹。传统人工智能一直表 现良好,直到后来研究人员才发现现实世界与其完美模型...

    Agile Java (EN)

    Agile java 讲了一种我之前没有遇到的程序设计思想——测试驱动开发。还有就是java5 的一些新特性,如参数化类型,for-each 循环。其实我主要是看有关java编程方面的,而测试驱动就没那么关注。从这本书中学到了很多...

    erp后台初版系统.zip

    它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让你的项目快速运行起来。用大佬的话来理解,就是 spring boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 ...

    蓄水池算法leetcode-LeetCode:个人学习的代码,做的LeetCode的题目

    通常程序开发中内存管理是非常重要的,而内存主要分为栈内存和堆内存。那么栈和堆内存有什么区别呢?希望在这篇文章里能带你找到答案! 栈和堆的引入 在一个简单的程序中我们定义和声明几个基本类型的变量、结构体...

    DeepSeek入门宝典:赋能开发者实战的高性能AI解决方案

    内容概要:本文档详细介绍了 DeepSeek 这一高效、经济的人工智能解决方案,旨在为企业端、产品端以及开发者提供深度技术支持。对于企业而言,DeepSeek 带来了显著的成本效益和生产效率提升;而对于具体的产品和服务,它增强了用户体验的质量。特别是针对开发者,文档深入浅出地讲解了如何利用 DeepSeek 实现自动化代码生成、改写等辅助开发功能,并且提供了具体的步骤指导以满足不同环境下的部署需求,包括直接通过官方API接入、本地私有化部署或借助云平台进行托管的方式。 适合人群:希望降低开发门槛,提高工作效率的软件工程师和技术团队。 使用场景及目标:开发者可以根据自身条件选择最适合自己的部署方案来整合 DeepSeek 技术,进而达到优化编码过程、减少人为错误的目的。 其他说明:文中还包括了许多实际操作的例子,如通过代码改写的实例来展示如何改进现有程序段落,还有详细的API使用指南帮助初学者快速上手DeepSeek。此外,还提供了大量外部参考资料链接以便进一步扩展知识和技能范围。

    lusted_3cd_01_0318.pdf

    lusted_3cd_01_0318

    开源AI工具下载——Cherry-Studio-1.0.1-MACOS arm64版

    Cherry Studio是一款支持多模型服务的 Windows/macOS GPT 客户端。通过与Ollama搭配,搭建个人本地AI大模型

    chromedriver-win64-136.0.7058.0.zip

    chromedriver-win64-136.0.7058.0.zip

    matlab程序代码项目案例:使用 Simulink 进行自适应 MPC 设计

    matlab程序代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    mellitz_3cd_01_1116.pdf

    mellitz_3cd_01_1116

    基于MATLAB的牛顿迭代法实现

    基于MATLAB的牛顿迭代法实现

    steenman_01_0908.pdf

    steenman_01_0908

    [AB PLC例程源码][MMS_047737]System Time 64Bit Interpreted AOI.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    stone_3ck_01a_0518.pdf

    stone_3ck_01a_0518

    [AB PLC例程源码][MMS_041473]Input Time Stamping.zip

    AB PLC例程代码项目案例 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!

    lusted_3cd_01_1117.pdf

    lusted_3cd_01_1117

    2010-2023年 上市公司-管理层情感语调数据.zip

    管理层情感语调,或称为管理层语调,是一个在财务与会计领域中常用的概念,特别是在分析上市公司信息披露质量时。它主要指的是管理层在上市公司文字信息披露过程中,用词所体现出的情感倾向和可理解性。 本数据复刻了《财经研究》《中南财经政法大学学报》等顶级期刊的核心解释变量的做法。情感语调对企业未来盈余和未来绩效具有较强解释力、降低会计信息误定价、为分析师预测提供增量信息,而投资者也会对管理层情感语调做出积极反应。 情感语调1=(正面词汇数量-负面词汇数量)/词汇总量;数值越大,情感倾向越偏向正面积极。 情感语调2=(正面词汇数量-负面词汇数量)/(正面词汇数量+负面词汇数量);数值越大,情感倾向越偏向正面积极。 指标 证券代码、企业代码、年份、证券简称、行业代码、行业名称、正面词汇数量、负面词汇数量、词汇总量、句子数量、文字数量、情感语调1、情感语调2。

    mellitz_3cd_02_0318.pdf

    mellitz_3cd_02_0318

    moore_01_0909.pdf

    moore_01_0909

    lusted_3ck_02a_0119.pdf

    lusted_3ck_02a_0119

Global site tag (gtag.js) - Google Analytics