谁动了我的产品

2014年3月中旬离开了自己奋斗三年的公司,这是一家海关政府公司,三年里无论是做项目需求分析、项目开发、项目测试、项目上线实施、项目上线跟踪、收集反馈、做项目版本修改,我和我的团队都在一个有非常明确目标、有非常明确思路的过程中,大家齐头并进,团结一致的去为了满足客户需求而奋斗着(当然也是在为工资奋斗着,哈哈!)。对于项目中的每个环节,我的项目经理是一个资深海关业务项目的开发人员,团队中一个决策的关键人物,对于技术的把关、业务的把关、我们都是需要向他汇报,同时也是问题解决的关键者,在这个团队中我们有3个开发业务后台(系统交互)、4个开发业务前台(c/s界面) 两个领导分别把关后台和前台,当年我们开发人员内部也是经常交流和盘问对方的状况,谈不上结对编程,但也是每周会有个内部例会来把我开发进度、问题等。对于这个状态3年里一直贯彻和执行着,所以项目非常有效的进展并最终上线,一个历时开发1年多的项目终于交付客户使用也是我成长和锻炼最为开心的一年。

来开这家公司后,我进入一家依托SAP B1做软件代理开发的公司,起初对于这个还是模糊至极,但是后来发搜集了好多SAP的资料和新闻后顿时觉得要有很多新的技术挑战和好玩的东西来等着你。然而后来发现我错了,进入公司4个月,我决定今天总结下这5个月了自己犯过的一些错误和看法来提供给博友们希望大家欢迎讨论。

我是3月底进入这家公司,公司第一天就赶上SH的一个同事来讲我们开发的东西顿时觉得有点小激动,开始介绍例会内容时,他的定位是我们要开发一个产品(待会分析下和项目的不同),这时我们是3个人,我(激进派、追问派(后来发现这样不好,不利于产品开发))、一个架构师(学术派、理论派)、一个开发(懒散派、表象派),对于这位演讲的人提的需求我简单描述下如图

对于这个需求简单描述下,因为不能透露更多,但是从这个需求中分析,我们的使用客户是面向不区分语言、不区分人员机构、不区分机构人员组成结构、不区分机构人员的操作行为的,因为就是什么都要灵活配置。开始我觉得不太可能,但是我看到SAP B1之后发现原来是有这个可能,好吧下面轮到我们技术人员了,描述下我这个苦逼技术人员的开发历程。

我们的产品是一个基于B/S Web的项目,对于这点呢,我主导了项目解决方案的主要搭架(不是有架构师么?我只能呵呵了)解决方案采用了还是比较装逼的三层吧,业务逻辑层,视图层、数据访问层、对于业务层和试图层提取一个抽象工厂来提供视图层所需业务类的调拨,对于几个比较关键的技术点是界面语言切换问题,我大概用了一周多时间开发完(第一次么,都没有经验你懂得 哈哈!),对于可以实现自定义字段么?我只能呵呵了 这个实在是太难了?我只能做到配置,但是配置完的数据绑定显示到页面还是困难重重,现在还没不会做,字段配置只需要一个存储就可以了,然后提供一个维护界面。对于系统交互么,我是开发了三年的WCF,我提出了我的解决方案,但是最后开发完demo之后,项目领导说去开发业务去吧。这个解决方案的过程大概持续了一个月将近,其中最浪费时间的是与几个同事的配合吧!因为技术他们只能说是你要给他培训了,我觉得我用的这些,asp.net mvc 4 、entity framework 4、jquery 、jquery easy ui、ztree 、jqgrid、fastreport 这些东东不是有太多技术含量吧(博友们说呢)?

好了进入5月份后开始完数据库的讨论(哎 这个是那个架构师搞得 被他玩惨了),我觉得一个好的软件系统,三个方面1、好的数据库设计2、好的需求设计3、好的团队开发实现,

这个数据库的设计我罗列以下几点吧,

1、表最好不要用联合主键提供一个单一主键,操作和维护都方便,用代码层次控制数据的唯一和校验

2、表数据字段如XXX代码,最好有编码规范,不要让用户乱维护(虽然是产品但是我们也有点话语权吧)如现在一个问题公司和部门子父级结构他们的代码随便填时

公司0001   部门0001 所属公司 0002 

公司0002   部门0002 所属公司 0001

这个递归,你们看看!

3、设计的数据库最好有个体现需求的描述文档,每个需求体现在哪张表上,不然像现在一样,有些需求通过之前的表设计,串不起来了哎,有些表可以废掉,有些表需要加,有效表需要加上字段

就这样我们就开始开发了,没办法还!

数据库将近半个多月设计的第一版后开始6月份,这时这个架构师hold不住了,开始走人了,我也是想走过,但是之前做的代码努力还是不甘心觉得需要在努力挑战下,于是接手他所有手里的活(当然也没什么活,大哥一行代码没写,文档呢也是断断续续),后来我开始了新成员的组建,这样6月中旬找齐了新的两个开发一个测试,继续下面的任务的开发。

把前期需求,产品规划,现有代码结构通过EA画的用例图、组件图、类图用两天的时间描述完团队进入开发阶段。8月中旬开始完这个第一版吧。但是公司又来了个架构师,一个想转java平台的架构师,只是说我们的界面不好看(这怪我么?)、(我们的有些需求不能串起来)、这个框架不能满足10月份交差的需求、确实是他拿了自己以前做的东东给老板看了,那是什么东西(一个集团公司开发了2年的东西来和我们这个3个人开发两个月的东西比,我靠有可比性么?)。

就这样我觉得我失败了,对于失败的总结我如下分析吧

1、技术不是装逼用的,是满足客户需求的,满足客户想要的就行,他不关心你用什么技术。

2、产品不是你一个人能管理把控的,而是一个市场、团队好多人需要共同努力的

3、不要在没讨论完需求的情况下去开发只会伤害自己

4、数据库设计前一定要求需求模型或文档(需求上的内容描述、字段描述和需求数据间的关系描述)除非你是一个懂需求的人

5、不要应用你不熟悉的技术领域去开发产品(除非你有些好的同事共谋)否则只会坑掉你自己

6、其实有很多装逼人搞技术,你要么别跟他合作、要么早点揭穿,否则最后拍拍屁股走人,还是坑你

7、产品是阶段性的项目过度设计和过度挖掘不利于开发和实现

8、技术积累随时要总结和完善这样才有利于技术的成长

 

转载于:https://www.cnblogs.com/qianthinkover/p/3946213.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473080.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 352. 将数据流变为多个不相交区间(map二分查找)

文章目录1. 题目2. 解题1. 题目 给定一个非负整数的数据流输入 a1,a2,…,an,…,将到目前为止看到的数字总结为不相交的区间列表。 例如,假设数据流中的整数为 1,3,7,2&…

windows键按了没反应_windows快捷键使用 - 小怜

1、总的参考图:2、ctrl的组合使用:1与shift键结合:2 ctrl shift del # 快速清除浏览器缓存记录3 ctrl shift N # 浏览器当中,快速打开无痕新窗口。chrome内核的应该都可以,chrome和新…

Python倒计时自动发微信(电脑版微信)

一、前言: Python倒计时自动发微信(电脑版微信登录状态) 二、主要思路及步骤: 1、先启动微信 2、定位到搜索框 3、搜索微信 4、进入聊天窗口 5、粘贴文本内容 6、发送 7、关闭微信窗口 三、代码: import …

win10主题更换_还不升级? win10精简版不到10G,运行比win7还快,旧电脑的福音

即使现在win7系统已经停止了服务,但是还有许多人宁愿面对随时有可能出现问题的win7,还是不愿升级win10系统。至于原因,五花八门,比如win7兼容性和稳定性更好,比如win10经常更新,还有许多软件无法在win10环境…

LeetCode 1732. 找到最高海拔

文章目录1. 题目2. 解题1. 题目 有一个自行车手打算进行一场公路骑行,这条路线总共由 n 1 个不同海拔的点组成。 自行车手从海拔为 0 的点 0 开始骑行。 给你一个长度为 n 的整数数组 gain ,其中 gain[i] 是点 i 和点 i 1 的 净海拔高度差&#xff0…

小案例:利用python估算最外轮廓区域面积

一、需求: 给出一张图片,估算最外轮廓区域面积 二、步骤: 1、读取图片信息 2、利用open-cv,自适应分割图片 3、提取最外轮廓像素值 4、利用像素值标记轮廓 5、计算轮廓面积 三、代码: import cv2# 读取图片信息…

ApplicationContext容器的设计原理

1.在ApplicationContext容器中,我们以常用的FileSystemXmlApplicationContext的实现为例来说明ApplicationContext容器的设计原理。 2.在FileSystemXmlApplicationContext的设计中,我们看到ApplicationContext应用上下文的主要功能已经在FileSystemXmlAp…

使用c++查看linux服务器某个进程正在使用的内存_Linux 系统管理

1、进程管理介绍什么是进程程序是人使用计算机语言编写的,可以实现一定功能,并且可以执行的代码集合进程是正在执行当中的程序。程序在执行时,执行人的权限和属性、以及程序的代码都会被加载进内存,操作系统给这个进程分配一个 ID…

小案例:利用Python写个教师常用的点名软件

一、需求: 教师上课常用的点名软件 二、python库安装: openpyxl是Python中用于读写excel文件tkinter是Python中GUI编程非常好用的库,而且是标准库,不需要安装,导入即可使用random库是Python中用于实现随机功能的库&…

python contains类似函数_01--实际工作中,python基础理念和数据处理

1.工作中遇到的python坑1.1 合并文件问题:正常将文件依次读取并append时,莫名出现很多空行。解决:在append前删除空行:data_tmp 1.2 重复数据行问题: append多日文件时,由于人工误操作,容易存在…

小案例:利用Python实现图片上下、左右翻转

一、前言需求: 对图片进行操作,使图片上下、左右翻转 二、函数库: 使用Pillow模块提供的transpose()方法可以让图像翻转,上下翻转,或者左右翻转 三、操作说明: 原图如下: 图片上下翻转代码…

LeetCode 1736. 替换隐藏数字得到的最晚时间

文章目录1. 题目2. 解题1. 题目 给你一个字符串 time ,格式为 hh:mm(小时:分钟),其中某几位数字被隐藏(用 ? 表示)。 有效的时间为 00:00 到 23:59 之间的所有时间,包括 00:00 和…

【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径(四)...

目录: 【SSH进阶之路】Struts基本原理 实现简单登录(二) 【SSH进阶之路】一步步重构MVC实现Struts框架——从一个简单MVC开始(三) 【SSH进阶之路】一步步重构MVC实现Struts框架——封装业务逻辑和跳转路径&#xff08…

实用工具:推荐Pycharm常用的几款插件

相信对于不少的Python程序员们都是用Pycharm作为开发时候的IDE来使用的,今天来分享几个好用到爆的Pycharm插件,在安装上之后,你的编程效率、工作效率都能够得到极大地提升。 Pycharm插件安装教程 打开file---settings---plugins&#xff0c…

dataframe 添加一行_R语言Data Frame数据框常用操作

来源 | R友舍Data Frame一般被翻译为数据框,感觉就像是R中的表,由行和列组成,与Matrix不同的是,每个列可以是不同的数据类型,而Matrix是必须相同的。Data Frame每一列有列名,每一行也可以指定行名。如果不指…

LeetCode 1737. 满足三条件之一需改变的最少字符数(计数)

文章目录1. 题目2. 解题1. 题目 给你两个字符串 a 和 b ,二者均由小写字母组成。 一步操作中,你可以将 a 或 b 中的 任一字符 改变为 任一小写字母 。 操作的最终目标是满足下列三个条件 之一 : a 中的 每个字母 在字母表中 严格小于 b 中…

oracle对查询结果求和_oracle基础知识分享

原文链接:https://page.om.qq.com/page/OO2PXCD6VZ6CVqLqjpU6uShg0以下是本人整理的ORACLE学习的一些基本的语法知识,如有不对的地方,望大家批评指正,如有转载请注明出处:一、ORACLE完整性约束:1.NOT NULL …

Docker官方案例学习

下面以官方的一个demo学习学习。。。 1、进入windows版docker界面,新建文件夹pp 2、进入pp,在目录下新建三个文件 dockerfile.txt,app.py,requirements.txt 2.1 dockerfile文件 # Use an official Python runtime as a parent…

LeetCode 1738. 找出第 K 大的异或坐标值(DP)

文章目录1. 题目2. 解题947 / 3851&#xff0c;前 24.6%2533 / 11282&#xff0c;前 22.5% 1. 题目 给你一个二维矩阵 matrix 和一个整数 k &#xff0c;矩阵大小为 m x n 由非负整数组成。 矩阵中坐标 (a, b) 的 值 可由对所有满足 0 < i < a < m 且 0 < j <…

小案例:基于python的动态时钟,带十二时辰和经络养身

一、前言 1、仅用来研究学习使用。 2、除正常显示时钟外&#xff0c;还可以实时显示当前对应的时辰&#xff0c;和经络养身提示。 3、适合辅助上班族来养生 二、效果如下&#xff1a; 三、源码如下&#xff1a; 动态时钟附带十二时辰显示import turtle # 导入绘图海龟模块 …