你好,这里是《王木头的电脑简史》,我是王木头。
在上一集的最后我说,这一次我要和你好好聊一聊模型这件事。模型这个概念在计算机领域里面可以说是非常重要了。不知道你之前是怎么理解编程高手的。我猜很多人想到的都是电影里看到的黑客的样子,在键盘上敲一敲,就可以破解世界上最牢靠的系统。
这的确也是一种编程高手,不过这样的高手还不是普遍意义上的编程高手,只能算是骇客。对,我这里特意说的是骇客,而不是黑客,因为在计算机里面黑客有它特殊的意义,专门攻破别人系统的那些人更适合叫做骇客。当然了,在电影、电视这样的通俗文化中是不区分的,黑客就是专门搞破坏的编程高手。关于这个黑客和骇客的话题这一次先放一方,如果你感兴趣的话,可以留言告诉我,如果留言的人多,我就尽快给大家讲一讲。
既然我这里说的编程高手不是电影里黑客的样子,那我指的是什么样的人呢?这么说吧,我说的这样的编程高手中典型的人物是像比尔·盖茨,马克·扎克伯格,这样的人物。当然,现在他们能让全世界都人都知道,还是因为他们是世界顶级的企业家,创建了微软和脸书。
但是你要知道,不论是比尔·盖茨还是扎克伯格,他们能成为顶级企业家,最初还是因为他们编程水平。比尔·盖茨虽然没有直接编程Windows操作系统,但是让他在软件领域站住脚跟的是他开发的Basic编程语言。扎克伯格就更不用说了,脸书这个全球最大是社交软件最开始就是扎克伯格一个人开发的。
你能发现他们和那些“黑客”之间的区别吗?那些黑客,准确地说是骇客,他们掌握的所有技巧都去搞破坏,而比尔·盖茨和扎克伯格,他们的能力是创造,他们真的是用自己手下的键盘创造了一个世界。
比尔·盖茨编写的Basic编程语言,是他后来编写MS-DOS的基础,DOS也是一种操作系统,只不过不是可视化的,而是通过输入字符命令控制计算机的操作系统。而后来的Windows就是在MS-DOS的基础上实现的。Windows操作系统,我们可以在上面做多少事情啊,它就是一个在赛博空间里创建出来的新世界。
脸书一样,它让世界各地的人在赛博空间中联系在了一起,甚至在脸书组成了一个个虚拟的社会。当然,在我们国家微信和QQ起到了同样的作用。其实腾讯的创始人马化腾,最初也是一个程序员,也是靠着自己编写的软件建立起现在的商业帝国的。
不论是比尔·盖茨,还是扎克伯格、马化腾,他们在赛博空间里面创建自己心中的世界时,都离不开模型。
当然了,不只是这些有名的人,现在在各种互联网公司、软件公司或是游戏公司里面,用编程的方式创建一个一个“新世界”的程序员,他们都离不开模型这个概念,甚至可以说,真正决定这些程序员水平高低的就是他们建模和实现模型的能力。
为什么这说呢?因为这些程序员在编程的时候,他要做的,并不是单纯地把真实世界里的情况在计算机里面复刻一遍,而是有大量创新工作的。
比如,在十几年前在互联网上有一种网站特别流行,那就是论坛,或者说是BBS,像是天涯啊、猫扑啊这些是全网都非常火爆的,很多互联网的热点都是从这里出来的。像是第一代网红芙蓉姐姐,就是在论坛里面火起来的。甚至当时论坛文化在现在还可以看到,比如,在网上发弹幕的时候经常用233表示大笑。为什么233表示大笑,就是因为在猫扑论坛上的表情包是有编号的,其中这个233就是捶地大笑的编号。只不过,当时网络环境还没有现在这么好,刷论坛页面的时候经常会遇到表情包的图片刷不出来,只能看到233的编号。所以后来,干脆用233这个数字表示大笑,甚至还会多写很多3,3越多表示笑的程度越强烈。
论坛当年那么火爆,为什么现在知道的人却越来越少了呢?很大一部分原因是被社交软件代替了,当年的开心网、校内网,现在的微博、朋友圈、QQ空间等等。如果只是从功能上来看的话,论坛和这些社交网站没有本质的区别,都是网友把信息发到网上可以被其他人看到,然后留言互动。
既然功能都一样的,为什么论坛却没落了,而社交网站成功了,它们之间的很大的差别就在于创建这些网站时,用到了不一样的模型。也就是可以笼统地认为,是用不同的模型实现了相同的功能。
不论是论坛还是社交网络网站,某种程度上来说它们的功能其实就是将真实世界中公告栏的功能搬到赛博空间中再实现了一遍。公告栏现在可能比较少了,它其实就是在一些公共场所,像是广场啊、道路旁边啊这些地方立上几块牌子,有的时候都不需要牌子就是一堵墙。你有什么信息了,可以把信息写在纸上贴在公告栏上,旁边走过的人就可以看到。
曾经全国最有名的公告栏之一应该就是北京大学的三角地了。在还没有互联网的时候,这里经常作为北京大学学生交流的地方,自己有什么想法了可以贴在这里,有什么新闻事件了可以贴在这,想要租房子了可以贴在这里,想要转手二手物品了也可以把信息贴在这里。
后来这里就成了很多考研广告的集散地,再加上BBS流行起来了,BBS的中文名就是电子公告栏系统,原来的那些用来交流的信息就都转移到了网络上。北大非常有名的未名BBS就是这么来的。
我用这个来举例子,其实就是想说,在计算机和互联网刚开始影响人们生活和工作的时候,程序员们的主要工作就是把现实中已经有的东西给搬到计算机和网上。BBS就是这样的,还有像是图书馆管理系统,商店的仓库管理系统,记账工具,银行系统等等。这些系统或是工具提供的功能就算是没有计算机,人们也早就用其他方法做到了,只不过之前的方式都很不方便。就比如公告栏,你必须走出家门,走到人多的地方才能看得到,这对于宅男来说还是挺有挑战的一件事。还有图书馆管理系统,有什么书,谁借走了什么时候还,当然可以记在纸上,但是这样查询起来特别麻烦,不像有计算机只要输入关键字就能把所有信息都查找出来了。
所以在这个阶段,程序员们的一个主要工作就是观察和分析这些已经存在的系统,给它们建立模型,然后用计算机把这个系统在计算机里再实现一遍。
就拿BBS来说吧,如果程序员用面向对象的编程方法对它建模,会怎么做?既然是面向对象了,肯定是要找实体、状态和行为。
现实世界的公告栏里面有哪些相关的实体呢?最先想到的肯定是那些贴在墙上的那些纸、宣传页、海报等等这些。现实中这些东西的形式不一样,不过真的到了计算机里就没有这些差别了,可以把它们通通称作是帖子。第一个实体找到了,就是帖子。
帖子哪里来的?肯定是有人发出来的,所以第二个实体也出现了,那就是人。我们可以把这些人叫做用户。用户作为第二个实体,当然不只是可以发帖子,他们还可以看帖子。
还有其他实体吗?帖子贴在哪里?在现实中是贴在公告栏或是墙上的,公告栏和墙可以有很多,如果要编程做一个BBS,那么这里也需要一个对应的实体,我们可以起个名字,叫做板块。就比如未名BBS里面,有一个“社团群体”的板块,这就是一个特殊的公共栏,凡是在这里发的帖子都必须要与社团活动有关。除了“社团群体”还有“学术研讨”板块,这里就是讨论各种学术研究有关的话题,“休闲娱乐”板块正好相反,这里不聊学习只聊娱乐。
其实在未名BBS里面,还有一个专门的板块沿袭了三角地的名字,就叫“三角地”,这里真的很像之前的三角地,并没有特别规定必须发什么内容,比较随意。
言归正传,现在有了3个实体了,帖子、用户和板块,接下来就好办了,根据它们3个之间的交互情况就可以分析出各种的行为和状态了。就比如,用户可以发帖子,那么用户肯定有一个行为就是发帖。这个行为会和帖子、板块发生关系,所以对于的帖子应用有一个行为那就创建新帖,这个新帖至少需要有几个属性,比如创建的时间、发帖人的ID、帖子所属于的板块ID、帖子的具体内容等等。
这是用户新建帖子,还有修改帖子、删除帖子也都需要做相应的分析,然后设计出对应的行为和状态。这么分析一圈,最后这个系统的模型就差不多搭建出来了。当然真实情况会复杂很多了,比如是不是要考虑新用户注册的情况,是不是所有人都有删帖的权利,管理员如何管理,权限有什么不同等等。
总之,是不是能把所有的需求和功能都考虑全面了,并且建立起可靠的面向对象模型还是很有挑战的一些事情。在这个过程中,实现同样的功能,程序员是有可能提出不一样的模型的,而不一样的模型就可能会给最后的结果带来巨大的差别。
BBS为什么会被社交网络替代,某种程度上来讲就是这个原因。前面我就提到过,BBS和朋友圈都是自己把信息发到网上,别人可以在下面留言互动,为什么现在的人就愿意用朋友圈而不是用BBS呢?
如果去分析它们背后的模型,有哪些主要的实体的话,你甚至会发现它们两个并没有什么本质的区别,都是人和帖子的关系。那到底差在哪里了呢?
最重要的差距就是在把各种帖子整理起来的时候,是如何整理的。前面介绍了,BBS是按照帖子里具体的内容,娱乐的话题只能发展娱乐版块,不能发在学习版块。而社交网络呢?信息组织的方式是按照人组织起来的,你能特别容易地看到一个人发的所有信息,一个人发的信息可以是早晨早起的抱怨,可以是自己正在看的一本书,还可以是自己看电影后的感慨。总结一下的话,BBS和社交网络的功能基本上是一致的,在网络上发信息和看信息,但是建立的模型时候BBS是以帖子里的内容为核心,而社交网络是以发帖子的人为核心。
就是这个差别导致了两个系统后来命运的差别,对于我们人类来说,对一个人的兴趣是远远大于某个特定信息的。
同样的功能,实现的模型不同,最后带来的结果可能将会完全不同,而能想到或者挑选到更合适、更好的模型,是需要有创造力的。关于模型的话题,我其实还有很多想要聊的话题,这里是程序员面对模型时可能会有的情况,那如果我们不是程序员呢?模型还重要吗?它依然重要。
不过这部分内容我打算放到下一次讲,剩下的时间我打算多讲讲其他的事情。前面通过对比BBS和社交网络,我说这是程序员用到了不同的建模方式,这其实不那么准确,因为从现在的互联网从业者的分工情况来看,真正决定了BBS和社交网络两个模型不一样的是产品经理。
在最开始的时候,根本没有什么产品经理,所有的工作都是程序员搞定的,他们想要做什么程序了,就比如说要做一个图书馆管理系统,会自己去研究这个软件要实现什么功能。比如总结一下自己平时是如何利用图书馆的,在使用的过程中遇到了什么问题,毕竟只有知道了这些问题才能去建立模型去开发软件。
因为一般人都是去过图书馆的,所以程序员就算没有什么专业知识也可以自己把相关问题搞明白。就算是图书馆里如何进新书,如何淘汰旧书,如果注册新会员,还有图书馆的财务管理,这些一般人并不熟悉的业务,只需要和图书馆里的工作人员做一些沟通也能搞定。
其实,这还是因为图书管理系统比较简单,可是程序员不可能一直做这么简单的系统。比如,想做一整套银行的系统,银行可不是只有存款取款,整个一套业务下来就是在银行工作了一辈子的人也不见得能有个全貌,而且还不能出错,1分钱都不能差。
还有大企业的财务系统,那也是相当复杂的,从现在考注册会计师的难度就可以看出来了,比高考难多了。一个人程序员如果想要做一套财务系统,不可能还要求他们亲自去考一个注册会计师。于是发展到后来,要开发的系统越来越复杂,分工就出现了,出现了系统分析师。系统分析师是介于业务从业人员和程序员之间,他们既懂目标业务,也懂编程。当然了,不要求他们两边都精通,他们只需要两边都有了解,能作为沟通的桥梁就够了。
这个时候系统分析师知道程序员要什么,所以他们会对目标业务的相关人员进行沟通,阅读相关的文档和说明,把程序员需要的信息提取出来,甚至还会给出一个模型框架,分析出这个系统需要有哪些实体、状态和行为。而程序员呢,只需要按照系统分析人员给出的分析报告进行更细致的调整,然后编写代码。
慢慢地,系统分析师和程序员他们各自需要的技能就不太一样了。虽然系统分析和程序员都需要非常强的建模能力,但是他们在建模时的侧重点就不一样了。系统分析师做更多地是考虑这个模型是不是能把功能描述清楚。我前面分析BBS时,做了一个简单的建模,建立这种建模更像是系统分析师的工作。他们必须保证功能不缺失,假如系统分析师建立的这个模型没有考虑用户还需要注册这个功能,导致系统无法运行,那就是系统分析师的责任了,而不是程序员的责任。
而程序员需要的是在系统分析师上的继续对模型进行细化,这个时候考虑的更多的是技术因素。比如,同样是实现发帖子这个功能,可以用A模型实现,也可以用B模型实现,如果用模型A来实现,可以让系统更安全,用模型B安全性虽然不如A,但是可以在多人同时在线还不会卡顿,到底选择A还是B,就需要做权衡取舍,到底如何取舍一个是看需求,一个就要靠程序员的经验和技术了。甚至一个高手程序员,还能想出模型C,不只可以同时具有A、B的优点,还有它们都没有的优点。就比如说,在系统升级的时候只需要非常少的修改就能完成升级。至于除了模型C是不是还有别的更好的模型呢?这叫要看程序员的技术水平了。
系统分析和程序员的组合已经能解决很多问题了,不过这个时候开发的那些软件还都是现实中已经有的系统,系统分析师只不过是把这些系统里复杂的流程和功能分析出来告诉程序员。
可是对那些已经有的系统进行计算机和互联网的改造,这事迟早有做完的时候。现在其实就是这样的,所有的互联网公司都要讲究创新,一定要做出之前没有人做过、没有想过的东西才行。所以,开发软件,再想只靠需求分析和程序员的组合就不够了。这个时候再一次分工出现了,产品经理这个职位诞生了。
产品经理也需要建模,也有自己的专业能力,程序员的建模能力考虑的是技术因素,系统分析师建模能力考虑的是功能因素,产品经理建模考虑的是需求因素。像是银行管理系统,财务系统,仓库管理系统,系统分析师在分析它们的时候根本不需要考虑这些东西是不是真的有人需要。这些东西就算没有计算机也都存在的,而且存在了很久很久,人们对它们的需要可以说是久经考验了。所以系统分析师不需要考虑做出来这些东西是不是真的有人需要,一定有人需要。他们考虑的是有什么功能别漏掉,以及如何把这些功能和要求和程序员讲清楚。
产品经理就不一样了,他们的责任是要创新,专门找那些在人群中普遍存在,而且还没有被解决的问题。用产品经理的话讲,这叫找痛点。找到痛点,并且用软件系统解决掉它,那这个做出来的软件系统一定有市场。当然不一定是软件了,可以是硬件或是任何东西,只要能解决问题就行。
所以,优秀的产品经理,他们都是能洞悉人性的大师。因为需要什么东西,痛点是什么,用户是不会自己讲出来的,甚至他们自己都压根没有意识到自己需要这个东西。产品经理之间就流传着这样一个段子,如果你在汽车发明出来之前去问人们需要什么,他们一定会说需要一匹更快的马,而不是一个装了4个轮子的铁罐头。但是,真当汽车发明出来拿到人们面前时,人们只会发出“真香”的感叹。
如果你要问有没有一个公认的产品经理大师,那一定就是乔布斯了。不论是能播放上万首歌的iPod,还是让诺基亚和黑莓手机没落的iPhone,或者是能装进文件夹里的iPad,在他提出这些之前没人觉得自己需要这些东西。乔布斯就是有一种特殊的能力,能发现你自己都不知道的需求。
当然,对于乔布斯这样的顶级产品经理,他们的能力是艺术性的,无法复刻,但是对于其他广大的产品经理从业者,他们还是有自己基本能力的,那就是他们懂得给用户建立模型。比如,产品经理就会分析自己平台的优势和服务的人群是什么,然后对自己的用户进行描述。这个也被称作是用户画像。
京东和拼多多都是电商,但是他们的产品经理对自己平台用户的画像画出来肯定不同。京东产品经理给自己平台用户的画像,一定是对价格没那么敏感,但是对产品质量和快递服务特别重视的人。而拼多多呢?他们的画像一定是,喜欢价格更低,时间也比较充足的人。
不只对用户整体上有划分和描述,产品经理还会对用户更细致的划分和建模,比如,可能将用户分成3类,第一类是刚注册,还没有购买过东西的人,第二类是,虽然已经买过了,但是已经有3个月没有再买东西的人,第三类是每周都会购买的人。这么划分有什么好处呢?
这么划分完了之后,平台就可以根据这些不同的人分别进行促销。第一类人,他们已经注册了还没有花钱,可能还在犹豫,那这个时候就可以把一些价格比较低的产品推荐给他们,这样他们买起来负担就小。或者,给这些人发一些大额红包,让他们觉得不用就可惜了,促进他们完成第一单。对第二类人,则可以发短信,告诉他上次购买的茶叶又来新货了,快来再买啊,现在买还享受8折优惠。第三类人呢,他们经常来买,已经成为习惯了,就可以把一些他们之前没有买过的东西推荐给他们,告诉他们这些东西我这里也有,下次就别去别的地方买了,在这里买凑单还能省运费。
所以你看,产品经理对用户的建模,那是非常重要的,而当建模成功之后,他们就需要给后面的系统分析和产品经理提需求,告诉他们应该做什么,不应该做什么,优先做什么。就比如刚才,为了能辨别出这3类人,是不是要给程序员提需求,记录用户信息、识别用户信息,要想针对性的给优惠券,推荐产品,是不是也需要开发一个系统来进行管理。这些需求,如果只是满足用户购物的话根本不需要,但是产品经理却可以通过为用户建模的方式创造出需求来。
如果你没有这么做,而别的平台做了,最后你的平台很肯能就会被取代。对用户进行建模和划分的方式太多了,比如可以分为是看广告进来的,朋友推荐来的,还是自己搜索来的,这对这些不同的人可以有不同的策略。一个产品经理的能力高低,很大一部分就对用户的理解,以及对各种不同用户模型的理解和建立。
按照我刚才的介绍来理解,告诉程序员不要开发BBS的应该是产品经理的职责。只有产品经理才会不只是顺从传统,而是能够洞悉用户,发现人们需要的不是更多的信息,希望的还是人与人之间的关系。于是,社交网络诞生了。当然,现在社交网络有很多,不同产品经理他们对用户的理解不同,为用户建立的模型不同,最终会导致做出来的社交网络非常不同。比如,朋友圈和微博就非常不一样,朋友圈不能看到陌人的新消息,所以这更多的还是针对熟人之间交流设计的,而微博可以看到陌生人的信息而且还非常容易转发,于是这里信息传播非常快,用来追热点追星就非常合适。
其实,现在互联网和计算机行业里面的分工已经非常非常细致了,我说的产品经理、系统分析师、程序员也都是非常粗略的划分方式了。现在分工细致的程度,就是程序员都有很多分工了,有专门开发用户界面的前端工程师,有专门开发服务器后台的后端工程师,有专门编写测试用例的测试工程师,有专门维护和部署服务器的运维工程师,等等等等。他们的技能也都非常不同,不过不论哪种工程师,他们只要是在创造,那么他们心中就都会有属于自己特有的模型。
如果把前面这些分工总结一下的话,其实这里面隐藏着的是模型的层次。就比如说,要想实现社交网站,是需要好几个层次的搭建才能做到的。比如,最底层的是计算机的硬件实现了计算和数据处理功能,这部分是计算机硬件工程师做的我们这里没有讲。在往上,就是用硬件实现了的计算和数据处理能力,编程实现发帖子、浏览帖子、替换头像等等功能,这些功能都是程序员实现的。在这些具体的功能之上,就是系统分析师的工作了,他们负责分析和建模,把这些小功能组织起来,最后变成一个系统,这个系统满足人们更大的需求,就是要沟通。满足沟通这个需求,可以是BBS也可以是社交网络,那个系统更好呢?这个时候产品经理站出来了,他们用对用户建模的方式进行分析,发现在沟通这个需求之下还隐藏着另一个需求,那就是这个沟通不只是知道信息就行了,比起信息是什么更关注这个人是什么样子的。
因为需求是分层次的,所以实现需求的模型也是分层次的。硬件层次实现计算和数据处理的需求,电路里的电流电压,怎么就能变成计算了?工程师需要构建一个模型来实现。有了计算和数据处理的功能了,就可以在这个功能之上构建更上层的功能了,比如发帖、浏览,计算和数据处理怎么就能对应到发帖和浏览功能?也需要模型来构建。然后这些小功能怎么组成更大的系统,还需要模型来搞定。如果已经实现出系统了,不过哪个系统更好,哪个更让用户满意,这就需要对用户的理解,对用户理解也需要模型。
讲到这里,你对模型应该有了更多的了解,不过可能还是模模糊糊的,甚至会问,你能不能给模型下个定义呢?
这个定义其实还是很难的,毕竟模型这个概念背后的含义太多了,不过下一讲我打算和你聊了聊我们每个人都会用到的建模工具,那就是语言,然后尝试给一个我自己对模型的定义。
版权申明: 本站文章来源于网络或网友自行上传,如果有侵权行为请联系站长及时删除。
最新评论
03-08
03-08
03-08
03-08
03-08
03-08