一些规模不大的初创公司,软件开发过程管理不一定那么细致,大部分原因可能还是公司生存是第一位的,快速交付用户更重要。软件开发过程比较粗犷,设计人员(designer)完成比较粗糙的设计后,就丢给程序员,进入费时费力的coding阶段。这种情况也经常发生在高校,老师往往充当设计角色,学生就是程序员。
设计不到位的项目,不返工都难。一个项目搞砸的前兆:程序员一般理解designer的需求甚至是设计,但还是不知道如何开始;程序员按需求自己建立数据库表结构、提算法的实现思路,但结果正确与否未知。这些前兆实际上都绕不过一个技术界限划分问题,这是软件设计和开发之间的界限划分。这个界限到底在哪里?
例子说明
就拿一个信息管理系统的模块当例子,技术界限划分应该在这里,看下图。
如果一个初学者还没有设计思维,还无法理解需求到界面、数据库的映射关系,无法理解数据库表操作逻辑,也无法理解界面元素的含义。仅凭一个模块的功能说明式的设计,基本上是进行不下去的。
几个界限
上述情况,就相当于让程序员承担程度不等的一部分设计工作。界限朝着需求方向移动,可区分为不同界限,如果按界限3划分,等于项目外包给程序员或者学生了。
算法类的项目也是如此。
程序员怎么办?学生怎么办?
- 正能量的:应该努力跨越标准界限,尽可能地跨越界限1,界限2以及界限3,有能力承担更多的设计工作。在公司里,虽然环境好,但看不见的壁垒重重,此处不挑明,在高校里,氛围可谓极好,这得看个人的学习态度,毕竟绝大多数学生coding后都是去happy了,基本没有去研究designer思路的;
- 负能量的:程序员看自己分到的任务,如果离界限1比较远,那就够呛了,不行就换一组吧。