王爱胜
跨学科学习与项目学习有着必然的关联,两者的协调设计是一线教学最新的发展趋势。本期解码,让我们从中小学不同内容的跨学科视角来探索如何进行真实的项目设计。
在项目学习中,最困难的是针对项目内容“真实性”特征进行项目设计。在实践中,教师往往虚构项目应用,或者简化技术功能,究其原因往往归结为受多种因素的局限,如技术实现困难、学习时间不足、主题难以设计等。那么,如何打破局限,让项目真实设计呢?本文结合高中必修一“数据计算”与必修二“信息系统设计”的内容,基于计算思维寻找算法与编程项目思维基础,面向“名著阅读跨学科学习”寻找项目主题,以“名著朗读者”为真实项目设计过程,以“数据计算与信息系统设计”为学科内容,研究真实项目设计中的主题规划、功能需求、技术现实的整体生成过程。本项目涉及的信息系统的概要设计如图1所示。
项目设计价值定位
因为工作、时间等关系,我们常常不能总盯着电脑看文章,这对想阅读名著的计划实施十分不利。笔者曾尝试利用文字处理工具在线朗读,但速度偏慢,因此拟做一个朗读文章的工具,并推荐给学生以“跨学科学习”项目来开展名著阅读与信息系统设计学习,并在教学中指导学生整体体验基于数据处理的计算思维养成,以实施基于计算思维核心素养发展意义的跨学科项目学习。为此,将项目主题设计确定为:名著朗读者。
项目准备与技术探索
在项目开始时,我们对全面实现“朗读”的方案、技术并不掌握,所以要先进行快速的探索与实验,以形成相关的创作意识,其可在微项目1~2技术实验中逐步形成。
微项目1:朗读模块安装实验。
在项目设计之前,首先准备要应用到的知识与技术,通过技术实验做到“三军未动粮草先行”。为设计“名著朗读者”项目,查询到的“朗读模块”较多,结合曾用过的winsoud模块判断不能在操作系统和Python版本上有局限,这样才能方便不同环境使用。因此,拟采用跨系统的通用语音合成模块pyttsx3进行技术实验。
(1)技术实验:安装程序及错误排除。一般情况下,当安装Python后,模块安装程序pip、pip3都是版本过低,根据提示更新却往往不易成功,且pip文件全被删除。这给模块安装造成困难,同时这也是设计类项目最制约初学者的困难。因此,通过搜索探讨pip的修复、升级以及快速安装的国内镜像策略等。
(2)实验结论。①pip的升级过程会有多种错误,可进行修复pip、更新,然后安装模块。②pip的路径使用国内镜像,速度更快,也更稳定。③pyttsx3模块的语音合成与朗读等基本功能能够朗读文本。
(3)实践学习。①pyttsx3模块的安装是否存在问题?交流解决的方法。②在技术实验中是否有需求萌发?随时记录想法,对规划设计项目会有帮助。
微项目2:简单文本的朗读实现。
在测试中,实际是对项目的核心技术要素进行探究,可通过“简单文本朗读实现”完成。
(1)模块测试实验:模块安装是否成功。模块方法较多,如用help('模块名')检测是否成功。
(2)技术测试实验:朗读与异常处理。结合try技术,进行Bug消除与异常预处理,也是较好的工程思维,符合计算思维的功能泛化要点,以适应更多的情况。进行基础文字朗读实验,可以体验技术效果。在非项目学习中,至此体验即算完成关于“语音合成”模块的纯知识学习,对数据处理流程却不能再有学习,由此可见项目学习的综合价值更大。
(3)实驗结论:voice.say(text)是主体应用技术等。
(4)实践学习:text可输入任意文本进行测试。
项目规划与概要设计
通过前期探索,笔者明白了一个道理:没有基本知识去谈项目规划是空中楼阁、纸上谈兵。所以,只有通过前面两个微项目的学习,能够用基础知识实现“出声朗读”,才可进行项目活动的设计,才能与信息系统设计的概要设计相结合——包括需求分析、项目规划、界面设计等。
微项目3:项目规划与系统设计。
在信息系统设计中,项目规划实际就是系统设计的流程,包括可行性分析、需求分析、概要(功能)设计与详细(功能)设计及编程现实、产品测试与发布的整体规划。这与项目活动过程设计也是一致的。系统设计的方法有快速原型、瀑布型两类,可以两者兼顾——先基于瀑布型概要设计,用快速原型快速搭建系统主体与主要功能,再逐步迭代、泛化完善整个信息系统,这正是计算思维的流程要素。
(1)可行性分析。基于Python的数据计算与信息系统设计方法,与名著文本结合,应能设计出阅读、朗读的基本功能;技术困难可以通过搜索、技术实验(及后期遇到GPT的Cursor智能编程工具咨询等)来解决。
(2)需求分析。能够根据名著《瓦尔登湖》《诗经》等txt文件聆听文字朗读,按篇、分节学习名著;能够较快地翻页浏览文字、查找并统计关键词等。
(3)概要设计。①文件操作:打开文件及文件夹,确定选中文件;使用相应模块或功能打开文件,读取数据;利用循环程序进行基础的数据整理,进行数据分页模型规划等。②界面设计:方案一,用菜单功能操作提示,可用输入/输出语句及循环控制完成;方案二,采用图形界面GUI设计需用GUI设计模块等。③朗读处理:访问数据列表进行每页数据的朗读,并探索自动朗读与自动翻页。④数据处理:数据列表的读取、屏蔽词汇制作副本、分页检索、关键词查询等相应处理。⑤模块化设计:使用自定义函数分别设计。
(4)项目实施。①问题分解:根据需求分析模块设计,规范自定义函数(或子程序)、变量名等。②模型构建:建立数据存储模型、检索模型等。③编写代码:模块代码编写与合成。④程序调试:分模块进行断点测试、整体软件测试等。⑤学习评价:过程评价涉及设计组织与效率等,作品评价包括功能完善、设计创新等。⑥策略设计:采用半成品代码中留白重要算法,代码补充、技术实验及问题解决等。
(5)项目交流。在进行功能代码设计时,以哪种系统设计模型进行设计为宜?
微项目4:GUI图形界面设计。
在概要设计中,界面设计非常重要,它对功能规划、数据初步的输出具有一定的意义,并随时延伸到详细设计进行探索。界面设计一般有两种风格:一是,代码编程的即时命令、菜单功能的风格,设计容易,代码简洁,但是友好度不高。二是,GUI即图形用户界面设计,涉及窗体、按钮、标签、文本框、对话框等控件设计,直观、生动有趣,因技术复杂可借“半成品加工策略”来提高事件响应设计的学习效率。
下面以简化重点代码解析GUI设计过程。
(1)功能模块导入(如图2)。
(2)规划全程变量(如图3)。
(3)主体界面设计技术实验。
在主程序中进行界面设计,其他功能不断迭代补充。
(4)事件响应。事件响应指向自定义函数,可先提示事件已响应,方法如图4代码所示。
(5)实践学习。①体验控件创建:模仿样例增加“前一页”“退出”“自动朗读”等按钮控件;探索输入页码的文本框创建等。②“半成品”加工设计:补充某些自定义函数的提示信息等。
(6)项目交流。①GUI控件有按钮、标签、文本输入框、消息窗等,基本规则为定义、激活、布局,在定义中,事件指向自定义函数即可完成调用相应功能。②在方案设计初期,有人提出建议:其一,是把翻页和页码放在底部,并增加两条不同色的间隔线,形成“刻线”效果;其二,增加插图比较困难,暂时改为增加LOGO图像;其三,增加前搜、后搜功能实现全书统计与查询。学习交流很好地体现出设计思维和项目设计的生成性。
项目数据模型与功能设计
在项目学习中,没有真实数据的项目给人的感觉是只学技术,而不是解决问题。所以,需要探索搭建数据模型进行数据整理,依据数据模型进行显示、查找、朗读等功能设计。
微项目5:数据模型的建立与数据整理。
(1)数据模型。数据获取、处理、显示、查找等数据模型都与GUI设计关联,如一页20行的文本显示可采取20行标签控件显示数据完成。本项目基础数据模型包括但不限于以下几种:①数据存储模型:text=['a','b',……]。②数据整理模型(长句切片模型):text=['a','b','c1','c2','c3','d'……],即c=c1+c2+c3。③数据访问模型:text[textp+i](每页首行位置为textp,0<=i<20)。
(2)图书数据的获取与整理。获得图书数据,并进行规范化数据整理,这是信息系统设计项目的首要数据处理。例如,本项目可以用文件打开的方式,再进行空行、无效字符清洗以及长句的切片等处理。关键算法设计略。
(3)数据的分页显示技术实验。让数据按页显示成文字内容,可作为整个数据处理的中心,由它作为动态“模型”来接驳翻页、检索、朗读以及后期迭代“屏蔽朗读词汇”等功能,所有的功能都可以针对数据访问模型text[textp+i](0<=i<20)进行设计。
(4)实践学习。①模仿学习:参考分页显示文字的功能,构造clear()清空20行功能,体验循环控制对激活、设置控件的意义。②半成品加工设计:可对while x<tl、while len(t)>textn、text[x]=text[x][0:textn]等關键数据或算法进行技术留白,在分析、补充“长句不断切片算法”构成中完成算法学习;对for i in range(1,21)进行技术留白,体验循环的控制作用。由此深入体验数据处理中计算思维的分解、模型与算法要素。
(5)项目交流。①数据模型:按一定格式进行数据存储、访问,观察列表text的内容构成特点。②断点测试:部分功能是否成功可以进行断点测试。例如,text=[str(x)+"读书" for x in range(10000)],可不用图书数据也能轻松产生3万以上的文字进行技术实验。
至此,通过5个微项目,从模块安装、技术实验、模型构建到数据显示,生成项目。在此过程中,根据教学进度,通过半成品策略对输入输出数据、列表构建数据模型、循环控制切片等基本算法进行补充,在学习与探索中较完整地实现真实项目对计算思维、设计思维的培养。