《项目经理应该知道的97件事》笔记(3)

11. 你们的问题,我不买单

在甲乙双方的合作中,想清楚不应该为甲方的问题买单不是个容易的事。但想清楚之后,怎样不落入另一个极端其实也不是个容易的事。

说了甲方的问题我不买单之后呢,把一切问题都推给甲方吗?那只好等着项目崩盘了。

谁的问题谁买单,但“明确到底是谁的问题”,应该明确这是乙方的责任。实现明确了,双方认可了,真正出现时才是甲方的责任;除此之外的一切情况,都应由乙方承担。

12. 如何发现优秀的IT开发人员

招聘是玄学,也是科学。

掌握正确的理论知识、熟悉业务领域、能应用、有沟通和社交能力,这些都是老生常谈。最打动我的一条是关于正确工作态度的理解:

  • 既有创造高端产品的热情,又接收项目的限制条件

成熟的必要条件总是少不了中庸二字。

13. 优秀与普通的天壤之别

用五倍的工资招一个人,让他干十个人的活,成本降下来,这是其一。

如无必要勿增实体,如有必要努力减少实体,少一个错的人,就少一个错的人给你挖坑,这是其二。

有没有魄力去分析一下到底谁优秀谁普通,万一你的项目就是个体力活,五倍的工资也只能出一倍的效率呢?这是其三。

其实说到底还是个问题域分解的问题,只有把问题域等价的拆分下来,才能知道什么是你需要的技能,谁是你需要的优秀人才。

14. 规模决定一切

一切的一切都源自于人类太笨,如果脑容量大到你能掌握每一行代码细节,什么问题都没了。

也不好说,毕竟还有机会成本在,还要在脑容量无限大上面加一条效率无穷高。

既然做不到,那就拆分吧,分而治之的核心在于,把项目拆分成规模足够小以至于能完全理解的模块,并且,这些模块怎样组合成整体也是个规模足够小的问题。

石猴是怎么当的美猴王?前面是水帘洞,你要“钻进去”、“寻个源头”、“出来”、“不伤身体”。

基本功还是在抽象能力的基础上能做等价的问题域拆分与合并吧,越来越发现,一支笔等于笔杆+笔芯+笔帽这件事,不是谁都能理解。

15. 记录工作流程,然后严格执行

有多少项目,连记录工作流程都做不到?

哪怕有份工作日志呢?

16. 剔除多余的工作流程

用添加检查流程的方式保证正确性,那谁去保证检查流程的正确性?

你以为你以为的就一定是你以为的吗?

你以为他以为的就一定是他以为的吗?

你以为他以为的就一定是你以为他以为的吗?

软件团队仍应该是核心+n个助理的模式。只对极为简单的、极为少量的信息共享并苛责每个人的理解是否到位。不想让其他人知道的信息,一定要保证其他人完全不知道。

 

 

java web开发框架功能点整理

完成一个crud类java项目的框架最小功能集

后端部分

MVC

基于Web的项目,MVC应该是其核心功能了。有以下问题需要解决:

  • 路由:
    解决什么样的请求交给哪个后端处理单元处理的问题。
  • data binding:
    解决把前端传来的数据(url path、字符串形式的键值对、Header中的信息、cookie中的信息等,必然是字符串)包装为Java可以使用的对象的问题。要实现的效果是,所有需求对于后端业务代码来讲都要是透明的,不要再有手动的转换过程。
    一般的MVC框架都有比较清晰完善的解决方案,但有些边角的需求,需要注意怎样实现更为简便。例如如想传入的信息是三个student,每个student都有name、id两个属相,那怎样才能在后端业务代码中直接得到一个List<Student>?
  • 模板引擎:
    解决怎样把后端的处理结果转换为html页面显示给前端的问题。
    首先解决转发给哪个模板,例如使用jsp作为模板引擎,后端处理单元就要做到可以控制跳转到哪个jsp文件。
    其次是数据显示,后端处理单元处理所得到的数据要转化为字符串然后放到html中的相应位置上。需要注意的事如何能透明的对相应数据做格式化显示,如所有日期类信息都以yyyy-MM-dd的格式显示,不需要在任何逻辑控制单元中做手动转换
  • Ajax/Json:
    越来越多的请求将以ajax的形式返回给前端。简单来说,需要解决的就是怎样把后端处理的结果透明的转换为Json数据的问题。MVC框架一般都有相应的解决方案,通过简单的声明就可以控制信息以Json形式返回。需要注意的是,Model如果不是纯粹的贫血模型,怎样控制每个字段(或get开头的函数)是否要转化为json发给前端。

 

DB

数据源管理

通过统一配置,方便的在程序的任何位置获取到数据源信息,以便于进行数据库操作。

事务管理

通过约定(每次http请求作为一次事务)或者声明式的方式进行事务管理,对逻辑代码透明。

ORM

Java Web世界中大部分的数据库操作代码都是针对某个Java模型的Crud,需要提供相应的方案进行操作。至少包括:

  • 主键查询
  • 条件查询(分页)
  • 插入
  • 通过主键更新
  • 通过主键删除

必要情况下,应支持对逻辑代码透明的插入、更新、删除时间记录,以及假删除操作。

batch

某段特定sql的执行,如初始化数据等。需要提供相应的工具类。

list

一般的项目都有无穷多的显示数据列表的功能,如果针对每个列表再去开发,工作量较大。最好用配置的方式统一支持。

框架级别功能

权限管理

对逻辑功能透明、操作级。

提供登录用户管理、操作鉴权等基本机制。

提供功能模块管理、用户管理、角色管理、角色权限管理等基本功能。

杂项工具

log

提供逻辑与物理相分离的日志记录工具。

DataUtils/StringUtils/……

项目中的各种Utils,一般找合适的开源库都能解决,没有必要重新发明一遍轮子。

前端部分

UI

基本框架

统一风格、字体字号、主页面结构(项目标题、logo)等。

页面载入中效果

UI部件

  • alert、confirm、prompt……、
  • 模态窗口(显示少量信息和显示完整页面
  • form控件:下拉列表、日期控件等……
  • 消息显示(浮动出现自动消失、固定可手动关闭、固定不可手动关闭等)
  • ……

登录页

  • 用户名密码输入
  • 子系统选择
  • 登录成功后跳转
  • 登录失败后的提示、重新输入

通用功能

  • 个人profile
  • 系统设置
  • 皮肤更换
  • ……

列表页

  • 列表显示数据
  • 查询
  • ……

表单页

  • 简单表单布局
  • 复杂表单布局
  • 各种表单控件在各种布局下的展示

信息展示页

文字与图片混合排版等

统计图表页

各类统计图表的展现与交互