声明:本文来自微信公众号“唐韧”(ID:RyanTang007),作者:唐韧,授权站长之家转载发布。
产品经理在实际工作中经常会遇到一些“技术黑话”,这些专业术语经常让非技术背景的产品经理们经常不知所云,非常难受。
(资料图片)
因此,也带来了很多沟通和理解的问题。
我之前梳理了一些以通俗的方式来理解“黑话”的方法,这里拿出来再分享下,希望对于非技术背景的产品经理们有所帮助。
在与程序员讨论产品需求时经常会听到“写死”这个术语,这个词严格来说不算一个标准的技术术语,而是程序员用来描述一种技术实现方案的说法。
例如,要设计一个下拉选择框用来切换不同的城市,这个产品需求在技术层面有两种实现方案。
第一种是将城市数据放在服务器端,客户端通过请求数据接口将城市数据获取回来再显示在下拉列表中。
第二种是将城市列表数据存放在客户端,客户端从本地读取城市列表并展示在下拉列表中。
第一种方式是一种相对灵活的方案,当城市数据有变化时,只需要调整服务端的数据内容即可,客户端不用做任何修改,但需要开发一个专门的数据接口获取这部分数据。
第二种方式就是程序员所说的“写死”,将数据集存储在本地,这样可以省去数据接口的开发,也能快速实现想要的效果。
这两种不同的实现方式在很多产品设计环节中都会体现,例如一些客户端的文案或者图片会经常变化,这时就不太适合将需要变化的数据“写死”在本地。
合理的方案是将变化的数据存储在服务端,客户端通过数据接口灵活地获取这部分数据。
当然,也不是所有的数据都不适合“写死”在本地,例如性别数据,无非就是男和女,不必专门为了它开发一个数据接口,我们得根据具体需求和使用场景判断哪些数据应该写死。
在与程序员打交道的过程中,你一定听说过“打印”这个词。
那么,程序员口中的“打印”和我们使用现实世界中的打印机打印文件究竟有什么区别呢?
首先,“打印”这个词在大多数场景下是指我们将文件或图片通过打印机从计算机世界输出到现实世界中,意味着一种结果的输出。
程序员口中的“打印”一词,表示的是一种结果输出,只是这种结果并不会输出到现实世界,只是将程序运行的结果“打印”到命令控制台上。
程序员在编写代码时,需要不断测试程序片段运行是否正确,例如编写一个加法的程序,当代码编写完成后,工程师需要测试加法程序是否运行正确。所以会输入两个参数然后查看程序的运行结果,程序运行结果输出到命令控制台的过程就叫作“打印”。
工程师在调试产品bug的过程中,也会经常用到打印,将每一块代码的执行结果输出到控制台,用来查看具体问题出在哪个环节。
因为代码的运行过程是不可见的,所以通过“打印”的方式能让代码的运行过程和结果可视化。
工作中经常会听到程序员讨论进程和线程。例如,涉及一些复杂功能的技术实现方案时,程序员会说现在已经同时开了几个线程在处理。
当我们点击手机屏幕上的一个 App 按钮时,系统会为这个产品的运行分配系统资源(例如CPU和存储空间),分配好资源后,产品会在这个资源区域运行应用程序。
这里所说的运行应用程序就是进程,也可以理解为每一个正在运行的App都是一个进程。
例如,我们在手机上使用微信或者微博,就有分别属于微信和微博的系统进程。
一旦关闭应用程序或因为系统资源紧张而自动关闭在后台运行的应用程序,进程就会被终止,同时对应的进程所占用的系统资源也会被释放。
相比于进程,线程是一个更小的执行单元,一个运行中的应用程序是一个进程,一个进程中可以存在多个线程,每一个子任务都可以理解为是运行中的一个线程。
产品之所以能同时完成很多功能,就是因为线程的存在,尤其是涉及需要网络请求的一些功能时。
例如用户在微信中发布朋友圈后有可能立马去刷新朋友圈,这时可能刚刚发布的内容还没有上传成功,所以在技术实现时会用两个线程分别处理发布和获取新信息的子任务。
这样做既能保证用户体验,也能保证系统资源被合理地分配和利用。
而程序员常说的“杀进程”和“杀线程”,其实就是强行关闭一个进程或者一个线程的意思。
同步和异步是开发技术中的两个概念,在程序执行过程中会涉及同时处理多个任务或者同一时间只处理一个任务的情况。
一个任务的处理过程可以放在一个线程里,而线程的意思就可以理解为一个独立执行的子任务。
以用户登录为例,登录任务是在一个登录线程中执行的,登录任务执行过程中除了验证用户名和密码是否正确外,还需要处理其他子任务,例如从服务器获取用户信息,更新本地缓存信息等。
这些子任务通常会在新开辟的子线程里执行,执行登录的线程可以称为主线程,执行获取用户信息的线程称为子线程。
在一个登录操作过程中分别执行两个子任务,这个过程就叫作异步处理。
异步处理不会造成线程阻塞,相当于各自处理各自的任务。
如果所有的任务都在一个线程中处理,那就会出现资源占用过多和响应时间过长的情况,例如在完成一些产品操作时等待时间过长,那有可能就是将很多任务放在一个线程里执行。
如果要缩短一个操作的响应时间,就可以拆分成不同的子线程做异步处理。
同步处理比较好理解,就是同一时间只执行一个简单任务,任务处理完后再执行第二个任务。
同步处理适用于一些顺序执行的任务,例如流水线处理就是典型的同步处理,流水线上的一个环节处理完成后再处理下一个环节的任务。
在技术的世界里,有一类编程语言叫面向对象编程,例如典型的面向对象语言Java。
说到面向对象,不得不提的几个概念是类、对象、抽象和实例。
这些技术术语会经常在程序员的讨论中出现,非技术背景的产品经理该如何理解这些概念呢?
首先介绍第一个概念“抽象”。
我们说某一个概念听起来非常抽象的意思通常是指不具体,对应的反义词是具象。
抽象在技术术语里的意思是提炼出一个通用模板,然后基于模板做具象化的实现。
例如,在现实世界中关于人的分类,会有男人、女人、老人和小孩,如果将这个具体的分类抽象出一个类别,得到的抽象结果就是人。
所以,人就是一个抽象出来的分类,也就是技术术语里面的“类”。
在编程语言的世界中,通过程序语言描述现实世界中的事物时,使用的就是抽象的方法。将一类事物抽象成一个类,就得出了程序世界中的一个基本模型。
有了基本模型后,可以基于抽象出来的模型(类)产生很多具体的实例,也就是基于类产生的具体对象。
例如,将“人”这个类具象为两个对象,分别是男人张三和女人李四,这一系列的过程如图所示。
从上述流程中可以看出,程序员做的工作就是根据产品需求将现实世界中的事物抽象成程序世界中的一个个类,然后根据需要实例化很多对象,不同对象间通过相互协作完成一个具体的产品功能。
非技术背景的产品经理在工作中也可以试着以这种技术思维的方式定义产品需求,先从产品角色开始抽象出具体的类,然后分别定义这些角色在整个产品流程中需要完成哪些关键动作,从而定义出具体的对象。
这样既有利于明确需求和用户角色,也能培养非技术背景产品经理的技术思维。
“脚本”这个词在程序员口中出现的频率同样比较高,当需要对数据库进行批量处理时,他们会说“跑一个脚本统一处理一下”;当需要查询某一数据报表时,他们会说“用一个脚本批量查询”。
为什么叫脚本呢?
可以把脚本理解成拍戏用的剧本,剧本里会按照角色及对白把要拍的戏清晰地列出来,导演和演员会严格按照剧本表演。
脚本就是一种面向计算机的剧本,是一个可被计算机执行的文件,文件里是一系列计算机指令,这些指令会按照顺序被计算机解析并执行。
例如,需要对数据库中所有用户数据添加一个数据项,一个一个添加显然是效率非常低的,而通过一个批量操作一次性地完成是效率最高的做法,此时就会用到脚本。
通过脚本文件写一个新增数据项的命令,然后执行脚本,所有的数据就会被批量执行同样的操作。
下图是在Mac电脑环境下使用命令行执行的一个查询某一文件夹下所有文件的命令。
在第3行执行了一个名为“ls”的命令,这个命令的作用是列出当前文件夹下的所有文件或子文件夹的名称,第4行到第5行是当前文件夹下所有文件或子文件夹的名称。
如果把“ls”命令单独写成一个文件,这个包含一条指令的文件就是一个脚本文件。
实际应用中,脚本文件通常会由多个指令组合而成,经过计算机的解析和执行来完成一个复杂的处理任务。
除了上面提到的这些,产
标签: