zoukankan      html  css  js  c++  java
  • 产品化思维之公司平台之殇

    最近因为项目工期紧张,实在没办法,亲自捉刀,用了下公司的另外一个"开发平台",过程可谓艰辛,可以用披荆斩棘来形容,最后还是没有做完,只做了个半成品,就放弃了。下面我来聊聊公司的的开发平台的一些事情。
    公司成立以来,我知道的,大大小小有6个平台,说平台不是非常严谨,有的根本收不上是平台,顶多是开发辅助工具而已。为行文方便,都称之为平台把。6个平台大同小异,但又各有特点和缺点,我逐个说一下把。

    一个是我参与的.net版本下的一个开发平台。大约是在2003年之后,慢慢做起来的,这个平台的特点有一下几点:

    1、这个平台基于 .net 技术平台,界面是winform的,后台应用该服务器基于iis。这个平台基于开源的orm实现了一套ORM,类似hibernate 的一套中间层持久化,用起来还是很方便的,大部分操作不用写sql,甚至一些复杂的查询,用起来非常爽,真的非常爽,面向对象的crud,不限现在的,sql满天飞,一改数据结构,鸡飞狗跳的!。缺点就是效率有点慢,这是orm的通病,怨不得这个平台。
    2、实现了很多基本的业务控件,小如业务日期,中到组织机构数,大到业务表单,都是可以通过配置出来,很多通用的功能都内置了,通过插件的形式进行功能扩展。简单的字典编辑,真的是0代码。
    3、实现了一套非常完善的、科学的权限控制,可以说无所不能,从业务实体属性级别进行权限控制。客观讲,现在还没有出其右者。缺点是偶尔失效,权限的元数据需要手工配置的多,没有和业务实体的定义统一起来;再就是定义起来稍繁琐,没有实现可繁可简,在功能性和易用性上没做好平衡。
    4、还实现了一个简单的负载均衡。
    5、缺乏可视化的开发界面,比如定义模型,配置界面等等。全是手工写sql进行配置,也零星写了些辅助的小工具。
    6,差点忘了,实现了一个比较强悍的工作流,比现在公司用的强太多,可配置型非常强,就是界面稍显的土一些。但是比现在用的工作流,动不动要开发人员介入,要强上百倍。

    可惜是采用了。net平台,很少有大型的企业应用场景(公司主要客户采用linux系列的服务器和java平台,因此没有成长起来,夭折了)。

    第二个,是基于这个版本,开发了套 web版的,后来又翻译成java版,就是当时煤炭用的那个版本,甚至工作流都翻译成java的了。可惜部门业务限制,也没有发展起来,可惜了。当时的小界面做的非常好。也是有两个技术上的大拿在做,ll和cj。我没用过。

    第三个,是老板主抓的一个平台,基于模型驱动MD的思想做的,比较先进,bpms部门在做,是我的一个校友带头。后来也有了界面设计器,和可视化的建模工具。基于 hibernat.net 实现了一套orm,当然慢的缺点也么有解决。是基于bs的,我用这个平台做过2个项目,做的非常好。优点是开发复杂度比较低,缺点就是,orm,性能略低,再一个,他的模型库是本地xml文件,不能多人协同开发,这个个最大的败笔,估计是决策失误,后来没有资源,来不及改了。这个平台当时的目标比较宏大,要作为产品往外买的,可惜公司内部的问题,部门没有能存活下去,也夭折了。

    第四个,就是现在的pso的前身,我们和pso一块讨论,不单独说了。pso发展了几个版本,swing的,flash的,现在是gwt的。swing版本没用过,后两个版本我都带过项目,对实现原理,具体编程非常熟悉。这个平台的特点是提供了比较好的界面设计器,而且是可自开发界面ui空间,思路比较好,类似于 .net的winform界面设计器的样子。拖放操作,属性配置,基于ui的事件编程,比较好上手,提供了简陋的服务编排(权称吧),前后台通讯的协议标准,后台服务的编写标准(也就是接口标准)。缺点是太不稳定,太粗糙,版本兼容差,很难升级,只能算是个半成品,最新的版本没用过,会有改善,但是估计好不到哪里去。优点是前后台一体化编程,开发效率还是比较高的(使用比较熟练的前提下。除了问题也是很难找原因)。值得一提的是,工作流简直惨不忍睹。只实现了个空壳,乏善可陈。理念先进,可惜具体实现的太差了。

    第五个,是就是我前言说的smw,起点比较高,理念也行。但是bug很多,使用起来要小心翼翼,稍不注意就会犯错,而且错了很难找原因,“最好的做法就是重新做,找错误的功夫就做完了”,这是一个5年开发经验的人给我说的。有很多小技巧,否则你完全用不了,操作和交互太晦涩难懂了。但是看的出来,作者有一定的系统架构功底,系统分层,抽象能力比较好。但是毕竟是10多年前的东西了,一直没有发展。已经被后来人用的面目全非了。开发效率非常不高。它也提供了建模工具,包括数据建模,界面建模(界面设计),界面设计采用流失布局,可用性与pso稍逊。客户定制代码的开发用js,我看了看,没有很看懂,路子和 前面说的bpms类似,但是不如 bpms封装的好。可以看出,前端的设计和后端比较起来,功底就就差一些了。这个团队开发采用前后端分离(可能是团队的开发习惯,和平台无关),效率不高。和pso相比,后台的通用的实现模式也比较晦涩,旁门左道比较多,没有采用业界比较常用的设计模式和实现模式,不容易上手。

    总结一下以上的几个平台,套路差不多,数据建模(创建数据库表结构),单据建模(设计表单布局,和数据的关系),然后实现了或多或少的适用于某些特定该业务场景的固定的逻辑,然后就是菜单,权限,功能,工作流等等。

    看了以上的介绍,你一定不理解,为啥一个做软件的公司20年了,还做不出一个好用的开发平台(好用的标准就是能拿出去卖,就像炎黄盈动的工作流产品,帆软的报表产品等(这两家公司发展时间比我们还短)),还是苦逼的做项目,实在不应该是作为一个“技术公司”的应有的样子。原因是什么呢?

    1、缺乏顶层设计。
    公司没有一个统一的规划,或者高层设计,打算要做一个平台。就是说现在的平台不是设计出来的,是在日常的项目中慢慢积累起来的,有个比较nb的开发人员,有想法,目的是解决局部的平时开发中的难题,就凭一己之力,做了个东西出来,慢慢就用开了。不是说积累不行,而是说要有意识的去做平台。这应该是公司意志,而不是个人意志。

    2、缺乏持续优化的机制
    开发出来了,大家也在用,但是没有成立一个组织或者强有力的组织,持续去完善他,先前的设计师地位也高了,不屑于做具体的工作,后继者能力又不行,一个是改不了,在一个改,也没有贯彻先前的优秀的设计理念。么有随着新的技术,新的设计思想,持续进化。你想想,找一群应届生来开发平台给公司几百个5年+的开发人员用,屁股想也是不对的。连设计模式,框架,事件,都没有搞清楚,更没有实际业务经验,不知道需要什么,闭门造车,肯定不能做出好用的东西。
    而且,听不得批评,甚至压制对系统善意的批评和建议。一线员工人微言轻,或者能力有限,或者意识不到不好(这是最可怕的,吃着窝窝头,不觉得那吃,还以为全世界都在吃窝窝头)。
    我曾经问过很多一线开着对系统使用的感想。大部分是一边抱怨一边用,无奈。为啥不反映呢?1是人微言轻,没人听,2是说反映了也没人改(没有资源改),3是没有意识到问题,4是忍气吞声惯了,“习惯就好了”这是他们的口头语。

    3、开发力量分散

    本来近1000人的开发队伍,应该能开发出一个很好地产品了,但是事实就是没有。这个和高层的组织有很大的关系。
    公司事业部制、项目制,造成各自为战,各怀心思,都为了完成自己的任务,拿到奖金,极少有精力管公司5年之后,考虑其他部门。丛林法则,想当初,.net,bpms就是因为这个才混不下去。
    做产品,做平台,一定要有顶层设计,然后有一批有思想,严谨的,高水平的业务人员,架构师,技术人员去做。差不多,马马虎虎,这种心态是做不出好项目和好产品的,可惜,上面说的“差不多思想”,占据了主力,占据了公司的思想阵地。

    4、老大不当回事
    老大沉迷于具体的事务,或者在商务上,或者在项目交付上,乐此不疲,没有意识到平台的重要性,差不多就行,我们能吃苦!没有看过其他优秀公司的产品,沉醉于已经取得的成绩,还以为自己的平台不错。因为他已经不具体做开发工作了,使用中的种种问题,各种不便,他体会不到,甚至被蒙蔽。

    5、老大缺乏魄力和野心。
    老大就狠不下心来做这个事情,瞻前顾后,怎么能做好。首先是没有这个意识,不重视,如果再没有这个魄力,过多平衡各方利益,考虑各方的感受,更做不好。

    一个差得平台的负面影响很大,比如:
    1,影响士气。破窗效应,破罐子破摔,差不多 等不良风气蔓延。你平台都这样,还指望我能开发出什么高质量的系统?
    2,员工得不到提高。曾经与离职回归的员工,一部分原因是出去混不了,只能回来。
    3,带坏了员工。比如错误的组件、事件命名,错误的概念(比如掩码,监听,事件等等比比皆是),这都是“坏味道”,误导了年轻的员工。
    4,更重要的是,极大降低了开发效率,而且质量得不到保证,加大了项目的成本。

    我们公司的发展,就像自然界里的植物一样,自然生长,没有园艺师管理,修剪施肥,所以说以后有所改变,很难啊。除非来个思想大变革,但是可能吗。

    好在现在意识到平台的重要性的,开始统一平台(阻力还是比较大的,这反应了老大的优柔寡断),但是我感觉决心和力度还是不是非常大,平台的发展依然不容乐观,应该是没有找到正确的方法。有人的地方就有江湖,一点不假啊,做技术的也不纯粹了。

    一声叹息。

  • 相关阅读:
    第4月第1天 makefile automake
    第3月30天 UIImage imageWithContentsOfFile卡顿 Can't add self as subview MPMoviePlayerControlle rcrash
    第3月第27天 uitableviewcell复用
    learning uboot fstype command
    learning uboot part command
    linux command dialog
    linux command curl and sha256sum implement download verification package
    learning shell script prompt to run with superuser privileges (4)
    learning shell get script absolute path (3)
    learning shell args handing key=value example (2)
  • 原文地址:https://www.cnblogs.com/senline/p/platform_developing_his.html
Copyright © 2011-2022 走看看