【python基础知识】19.产品思维以及流程图的使用 - 思维篇

简介: 【python基础知识】19.产品思维以及流程图的使用 - 思维篇

前言


这是一节思维课程,我会向大家讲述如何利用编程知识去解决实际生活的问题。


我曾反复提到,我们学习编程的目的从来不是为了考试,而是要学会用编程能力帮自己解决实际问题。


但我们发现如果只是学习基础知识的话,还是不能解决实际问题。这就好比我们在学校学习了很多公式定理,但却发现它们在生活并没有什么用处。

1.png其中一个原因是因为生活经验和所学知识之间存在脱节,导致知识无法运用到生活中。


编程技能也是如此:

45.png

对于编程来说,其实我们每个人都有足够的生活经验,在过去的一段时间里也掌握了基础知识,那么中间缺的究竟是什么呢?


产品思维


我认为,这道连接编程知识和解决实际问题的桥梁就是“产品思维”。

3.png

这里我所说的【产品】,并非百货商场货架上的“产品”,而是“为自己或他人服务的程序”。说到这一点,我想跟你分享两个学员案例。


有位学员是大学老师,每次备课都要准备PPT。有时候一份PPT需要两三百页,并且重复的格式特别多。学完了“模块调用”后,他当时问我,有没有啥模块,可以帮他自动制作幻灯片。


我给他推荐了“Presentation”模块,并告诉他可以用这个模块创建PPT、按预想的格式填充PPT每页内容。


没想到的是,过了几天,他就跟我说,这个模块他已经自学学会了,还做了一个可以自动制作PPT的程序。只要先准备好素材,双击运行程序,就会自动生成PPT,类似这样:

image.png

有了这个程序,过去他每周需要花两天时间制作的PPT,现在只需要用2小时整理素材,后续工作全都可以交给程序完成。


像这类“为自己服务的程序”,就是合格的【产品】。


还有一位学员是名高三学生。做完项目后,他不满足于课程里的小游戏,受好奇心的驱使,自己也写了一个小游戏。大概长这样:image.png这个程序是个文字冒险游戏,可以提供给朋友们玩耍。游戏剧情会根据用户的选择来变化,甚至还有游戏记录存档的功能。


像这类“为他人服务的程序”,也是合格的【产品】。


于是我在想该如何把这种“DIY产品”的意识教给更多人呢?这就是这一关的核心知识,我希望你上完今天的课程,再加上一些探索和尝试,也能制作出自己的【产品】!


首先我会介绍一个思维工具——流程图,掌握了这一工具之后,我们再来聊聊产品设计的几大步骤。


流程图


工欲善其事必先利其器,我们首先要学习的是“流程图”,如果不先掌握“流程图”这个分析与思考的工具,就很难实践“产品设计”的相关方法。


相信大家之前一定也接触过流程图,我们可以把流程图理解成“用一种图示描述事物进行的过程”。比如我们去注册使用共享单车的过程,可以画出这样的流程图:

6.png掌握了流程图后,你既可以用它分析思考问题,也可以用它搭建产品框架,还能用它设计代码逻辑。


所有的流程图,总结起来有三种类型:7.png是不是和我们之前学的条件判断和循环语句,有异曲同工之妙?


接下来让我们一个个来看。


顺序结构8.png

当一件事情是按顺序进行的时候,我们就用顺序结构。一般会用到三种图形:9.png有些我们习以为常的行为,也可以拆解成一定的步骤。比如当我们在淘宝剁手的时候,粗糙的流程图是长这样的:10.png现在请你来思考一下,对于“煮饭”这件事,一个简单的流程图可以怎么画?


你可以找一张白纸或在电脑上试一试画出来,画好后继续。


这道题没有标准答案。老师做了一个简单版和复杂版的流程图。

11.png流程图画出来之后,可以帮助我们梳理代码逻辑,逐步实现。


比如我们想写一个根据圆的半径(R)来求面积(S)和周长(L)的代码,可以画出以下的流程图:

12.png请实现一下上述流程图的代码,试试看。


参考代码:

# 如流程图所示,求圆的面积和周长的代码
# 圆周率(pi)取3.14即可
pi=3.14
a=float(input('请输入圆形的半径R:'))
print('圆的面积是:{},圆的周长是{}'.format(a*pi*pi,a*2*pi))

可以看到,代码都是按照流程图中的步骤写出的。


顺序结构,很简单,我们就讲到这里。


条件结构

13.png接下来,我们继续学习“条件结构”。14.png“条件结构”主要是为了展现,在不同的条件下如何按不同的逻辑行事。


在这里,我们要补充一个图形,当流程图中遇到需要判断条件的节点时,需要用“菱形”表示。15.png说起“条件结构”,我就想起了一个“黑”程序员的笑话:

16.png其实,妻子表达的意思,用流程图画出来是这样:17.png但是,程序员丈夫把妻子的意思理解错了,所以闹出了笑话。


他到底是哪儿弄错了呢?我们做一个练习:请把程序员丈夫的逻辑画成流程图,可以找一张白纸画流程图,画好后我们继续。


参考答案:18.png同样地,写有条件判断结构的代码时也能用流程图帮我们梳理逻辑。


例如你想写一个【求绝对值】的程序,将正数负数都转化为正数。

----- 代码实现效果 -----
输入:5
输出:5
输入:-2
输出:2
输入:-101.22
输出;101.22

这里有一个条件判断,即根据输入的数是正数还是负数会有不同的操作,那么把流程图画出来就是:

19.png实现代码如下:

# 按流程图中的步骤写代码
print('欢迎使用绝对值计算程序。')
R = float(input('请输入数字:'))
if R>=0:
    S = R
elif R<0:  # 这里可以用“else:”代替“elif R<0:”
    S = -R
print('所求绝对值是:' + str(S))

不难,但是用流程图写代码,真的非常清晰,对吧?好啦,条件结构就讲到这儿啦。


循环结构

20.png最后一种循环结构,是用来描述在指定情况下,按某种重复的逻辑行事。21.png在前面“共享单车”的流程图案例中,就有一个循环结构:22.png以淘宝购物为例,在最后提交订单的时候,也有一个循环结构:23.png你发现了第二个循环结构和第一个循环结构的不同之处么?


第二个循环结构比第一个多了一处菱形,用来负责“条件判断”,当条件为“不成功”时则继续循环。


现在,三种循环结构你都了解了吧,我们来做一个综合练习巩固一下。请把以下的逻辑,用流程图的形式表现出来。

摩拜单车使用逻辑:
1. 先要注册、交押金并充值
2. 找到摩拜单车,用手机扫码解锁单车,然后开始计费
3. 有时候车是坏的,手机会提示:“此车需要维修,请换一辆车”,这种情况不会进入计费,需要换一辆车再扫码
4. 到目的地后锁车,可以选择余额支付、微信支付、支付宝支付
5. 支付的时候如果余额不足会失败,需要更换其他支付方式。

怎么样,画出来了吗?


我们看看参考答案:

24.png到这里,三种结构的流程图我们就学完了,我们再来总结一下流程图的图形结构:25.png26.png有意识地使用流程图,可以锻炼我们的逻辑思维能力,也可以让我们在敲代码前整理思路,有一个明确清晰的指引。


学完流程图后,我们就可以尝试设计产品了。


产品设计


首先,想问你一个问题;你觉得要用编程解决生活中的实际问题,哪个流程更可靠?

A.先努力提高编程能力,当自己能写出比较复杂高级的代码时,再看看如何解决生活中的实际问题
B.有了一定的编程基础,从生活中发现可以用编程解决的问题,然后尝试制作技术方案、针对性地提高技术能力,最后写出解

B选项更加可靠。从生活中找到可以用编程解决的问题,再想办法解决,是提高编程实战能力的关键。


对于A选项,积累编程能力很重要,但编程知识范围和体量巨大。如果只从积累编程能力出发,不从生活经验和实际想要解决的问题出发,会让你难以抓住学习重点。建议在积累知识的同时也积累一些对生活经验的思考。


和B选项类似的是,真实世界中的“编程”,与两种角色最为相关——产品经理和程序员。


产品经理负责告诉程序员,要做一个怎样的产品,程序员接到需求后,会制作技术方案,实现代码,最终制作出产品经理所描述的产品。

27.png像这样,产品经理把产品任务提交给程序员的过程,在互联网公司称为【提需求】。就像你去一家餐厅点餐一样,点了菜,大厨给你制作菜品。你给大厨下单的过程就是【提需求】。


如果我们想设计出服务于自己的程序,就需要自己“做自己的产品经理”,兼顾产品经理和程序员两种身份,自己给自己【提需求】。


那我们到底应该如何发现需求,如何提出需求呢?

28.png

如何提需求


要想提出需求,我们首先要学会留意生活和工作中,哪些地方不方便、不爽、存在障碍,也就是我们常说的“痛点”。


根据大家现在的技能水平,有两种需求最值得关注:29.png我们在平时的工作和生活中都可以尝试思考,是否有“重复性劳动”可以被程序替代?是否能够“制作工具”帮我们解决问题?


我们都知道,编程能够解决重复性劳动。因此,只要我们对“重复性劳动”格外关注,就很容易提出需求:30.png另一类需求来源是“制作工具解决问题”。有时候,我们可以通过技术手段制作一些实用的工具,提升效率。31.png到这里,可能有同学会觉得:站着说话不腰疼,提需求容易,但我们只学完了基础语法课,我真的做得出来么?


的确,许多需求完成起来还比较困难。但你应该先记录下来,即使是你现在一时间还无法解决的需求。


记录需求的好处是“建立明确的编程目标”。以实现这些需求为目标,你可以很清晰地感受到自己编程能力的成长,有朝一日你实现自己需求,制作出完整产品的时候,一定会开心得像个两百斤的孩子。


这里,我推荐大家用一张表格做记录:32.png记录需求的习惯,本质上也可以锻炼我们提需求的能力。此刻,有句话想送给你:33.png无可否认的是,即使是2023年了,目前我们的劳动状态中,依然有太多重复、单调、无聊的时刻,就连看似光鲜的“脑力劳动”中亦是如此,我们以社畜自嘲,千百次叩问工作的意义为何。


这种强烈的厌倦感可能浮现在你一行行地复制、粘贴、比对数据;一遍遍地用相同的话术去处理客户重复的问题;一次次地费劲地想着这周的工作报告如何写得和上周的不太一样……


但是老师想与大家共勉的是,不要对重复性工作习以为常,毕竟,编程存在的目的就是解决人类的问题,不能提升人类社会的效率和幸福感的技术手段都是耍流氓。


不要自我安慰说“反正大家都是这么过来的”,也不要对无奈的生活习以为常,暗自认定“我没有办法解决这个问题”。


程序员可能是世界上最善于解决问题的一群人,相信已入门编程的你,也慢慢会有这种直面问题、解决问题的底气和精神。


如何设计解决方案

34.png提完需求的下一步,就是设计解决方案。也就是说,我们要设计编程思路,解决之前提出的需求。


设计编程思路解决需求,其实和“求解编程问题”类似。还记得我们之前的求解编程问题的5个步骤吗?35.png“为需求设计解决方案”其实就是另一种形式的“解编程题”,它们都需要明确目标、思考需要用到的知识、思考切入点、尝试一步步解决。


不过,“为需求设计解决方案”往往比“解编程题”更加复杂,也更加接近生活。为了让我们的思考过程更有结构,在这里我们需要用前面新学到的【流程图】。


第0关我给大家讲过一个小案例:我们公司的行政小姐姐,每个月都需要统计考勤,计算大家的迟到时长和迟到次数。但是这件事枯燥无味,显然是一个重复性劳动。


她要处理的考勤表长这样子:36.png所以,这里就产生了一个需求:37.png拿到这个需求,我们就可以制作第一张流程图,拆解、分析这项重复性工作是如何进行的:38.png在这里,使用流程图分析,可以让自己清晰地看到整个工作过程。这有助于我们接下来思考问题:哪些工作可以被程序替代?


我们知道,程序可以很容易地读写文件、处理信息(比如做计算),所以,在这个案例中,标黄的都可以比较方便地利用程序完成:39.png我们知道了要用程序去替代这些繁琐的步骤,接下来的任务就是【写出代码逻辑】。


首先我们可以优化一下流程图。比如标记颜色是为了方便人完成工作,机器并不需要这个步骤,用字典存储数据即可。40.png制作出“改良版流程图”后,我们就可以开始下一步:求解编程问题的5个步骤。41.png尝试实现代码的过程,是对我们已学知识的检验。但无可避免地会遇到一些卡点:image.png

有些问题是以现有知识还无法解决的,这时需要我们根据需求自学、补充相应知识,我们可以把这些新知识当成进阶之路上的一个小目标,朝着它前进。


比如对于问题1和2,需要我们去自学新的模块(如openpyxl)。当然,自学总会有坑,未来我们会出一门《自动化办公》的课程,提高你的学习效率。


在解决问题的过程中,你又会产生新的问题,但这都不要紧。相信我,你的编程能力就是在这一轮轮的循环中不断精进。


由于实现这个项目还需要讲解许多新知识,课堂上篇幅有限,老师在此就不做展开,主要感受一下制作“产品”的整体思路即可。


在下一关的最后一个实操项目,我会带着大家实现我司另外一个小姐姐——你很熟悉的助教酱酱自己做出来的的一个程序,主要运用到的是我们之前学过的知识,也算是作为对这门课的一个综合复习。


那么,用流程图总结一下刚刚我们谈论的这些内容,就可以得出产品设计的步骤了:

image.png

当然啦,这一关我们展示的【产品】看起来还非常简单,为了做出更高级,或者为更多人服务的程序,未来我们还需要学习更多技能,不断提升编程水平。

44.png本节完美结束,撒花~希望大家多多练习,早日成为大神!

相关文章
|
1月前
|
数据可视化 API Python
画图实战-Python实现某产品全年销量数据多种样式可视化
画图实战-Python实现某产品全年销量数据多种样式可视化
39 0
|
1月前
|
存储 机器学习/深度学习 数据挖掘
Python编程语言:基础知识与实用代码示例
本文将带您走进Python编程世界,介绍Python的基础知识,并通过实用代码示例展示Python的魅力和应用。
35 0
|
10天前
|
存储 文件存储 Python
python基础知识(一)
python基础(一){编码,字符串格式化,数据类型,运算符,推导式(简化生成数据),函数编程,模块}
|
12天前
|
索引 Python
python 格式化、set类型和class类基础知识练习(上)
python 格式化、set类型和class类基础知识练习
34 0
|
13天前
|
Python
python基础知识
【4月更文挑战第15天】python基础知识
23 7
|
1月前
|
Java Python
【python基础知识】python中怎么判断两个字符串是否相等
【python基础知识】python中怎么判断两个字符串是否相等
31 0
|
1月前
|
程序员 Python
【python基础知识】python怎么查看对象的属性
【python基础知识】python怎么查看对象的属性
20 0
|
Python
Python思维导图(一)—— 基础
Python思维导图(一)—— 基础
141 0
Python思维导图(一)—— 基础
|
2天前
|
机器学习/深度学习 数据挖掘 API
pymc,一个灵活的的 Python 概率编程库!
pymc,一个灵活的的 Python 概率编程库!
5 1