我的圈子不大,能点进来看我这篇文章的人大多都是我的同学朋友,他们一般都是互联网公司的职员,有的负责产品项目,有的负责技术研发,还有的负责产品运营与推广。我们都是靠着知识输出吃饭的人群。
有的时候我会去思考,为什么我可以挣到这份钱,这份钱是从哪里来的?老板发的?那老板的钱又是哪里来的?
我们工作的价值和意义是什么?仅仅是因为公司给了工资我们就去生产公司想要的产品吗?以下内容是站在一个软件开发者的角度进行的一个思考。
我们为什么要做一个软件?
1.满足公司的要求
很多时候当我们开始准备确立一个软件项目的时候,都是由直属上司下发的任务。经理或者老板会说我们要做个什么什么东西,用在什么样的市场环境,巴拉巴拉在会议上用了两个小时的时间说明了项目背景。会议结束后没有其他选择只能开始项目。
2.满足领导的要求
除此之外,可能我们都没有参与会议的权利,仅仅是在项目组当中,在项目经理开完会以后,我们就收到了代码开发的任务。只需要按项目经理的指标去完成任务就可以了。
3.满足自己的需求
有的时候你可能仅仅是为了满足自己的需要,比如我习惯使用GTD的方法管理自己的时间,那么我可能会制作一个GTD相关的软件。又或者开发一款软件放到女朋友手机里监控女友。(女友在哪里???)
4.闲的没事
确实有人会因为闲的没事而去做一个软件,比如Guido,在1989年的圣诞节闲的没事,开发了一个python语言。
5.我的观点
我们为什么要做一个软件?我认为软件开发人员生产的代码软件一定是要有价值的,一定是可以解决我们日常生活当中存在的问题的,比如office可以让满足我们日常的办公需求。比如Uber这种手机APP解决了路边不好打出租车的问题。就好像我们生产杯子是为了喝水,娶妻生子是为了繁衍后代。我们去做的这个事情一定是有目的可以体现价值和解决问题的。
在现代软件开发的过程当中有一种管理办法叫做敏捷开发,敏捷开发当中有一个概念就是scrum,scrum开发的核心概念就是程序员生产和开发的每一个功能都一定是可以满足用户需求体现价值的。不管是满足公司战略要求或者是领导要求,还是满足自身的需求,我们一定都是要在创造价值的。
(下面是一些分析思路)
公司和领导的软件开发要求是什么来的?
我制作了一个流程图,来表示公司和领导的软件开发要求是怎么来的。一般来说可能是老板看了某篇行业文章脑子一热,觉得是个好点子,自己琢磨琢磨就准备要做一个软件。或者是老板和几个朋友聊天聊着聊着就觉得某些事情十分靠谱决定要做的,稍微正规一点的公司,可能核心的商业需求都是从一线员工哪里获得的,因为他们更加接近客户或者用户。
然而在这个过程当中不管软件开发需求是从哪个方向到你这里来的,你会发现,你只是知道按照要求去生产和开发这个软件,但是并不清楚和知道这个软件到底是要干什么用,它的价值是什么?解决了什么问题?因为在整个生产流程当中,作为生产环节我们总是在最后的。毕竟公司的需求是从市场用户,或者老板那里层层传递下来的,那我们生产出来的东西一定会有价值和解决问题吗?
很多公司宣称自己的管理制度是扁平化的,虽然每天看到老板或者项目经理和你坐在一个办公室里,然而在生产流程当中代码开发人员是在最末端的,生产软件的初衷,原因,价值,解决了哪些问题等等这些元素在经理很多环节的信息过滤以后到手中的时候已经发生了翻天覆地的变化。
那如果通过项目管理需求和设计将问题都考虑清楚是不是可以避免这种情况发生?
这种情况很难避免,这是一个很尖锐的信息不对称的问题,产品设计人员不涉及生产的工作,不了解生产环节可能发生的意外,代码生产人员因为接触不到问题的根源不了解产品设计的初衷。在这种信息不对称的情况下,所有的项目人员都很难对产品结果做出一个100%的判断。所以在这种情况下就引入了迭代的机制,在不断的迭代过程当中不断调整来平衡项目开发团队协作过程当中,以及项目组和使用用户之间的信息不对称。
我们个人的软件开发的需求和闲的没事的需求是什么来的?
我们个人的软件开发需求来源一般就两个,日常生活当中的问题和闲的蛋疼的灵感。如果是个人开发,从需求的发现,到设计,到最后的生产环节都是由一个人来完成的。这些需求和问题,是独立开发者自身切身体会和发现的。
独立开发者的需求和公司的需求区别在哪里?
1.需求在传递的过程当中没有沟通成本
是的,独立开发者在开发一个软件的时候和在公司里做一个项目最大的区别就是需求在传递的过程当中没有沟通成本。因为从问题的发现和定义,到产品的设计和开发都是由自己一个人来完成的,所有的事项自己都可以做到心中有数。
2.最初的用户就是自己
为自己开发软件的最大的好处就是知道自己想要什么,只要你的目标用户群体足够小,小到个人可以掌控这部分用户需求,我们就有可能最大化的把握实际需求。当然本质上还是减少了信息在传递的过程当中给开发者造成的信息不对称问题。
总结
我们为什么要做一个软件?我们不排除个人爱好和情怀,是的有的时候是为了拿工资,但是如果把程序员的工作作为一个职业来看的话,我们需要发现工资也是需要公司为客户创造价值赚来的,所以我们生产的软件一定是要有价值的。如何来体现价值?就是切实的解决了生活中的问题,所以我们要为创造价值和解决问题的需求而开发软件。