代码重构是什么意思有甚么用途!

TECH2IPO/创见
「 等待新的科技故事 」
有一家公司希望利用游戏重构儿童的学习方式
传统教育已经持续了很多年,而现代社会的进步似乎没有被利用到教育行业,教育方式还是传统的被动式接受,Kidaptive公司希望通过结合游戏和学习,寓教于乐,颠覆教育方式,让我们一窥究竟~
20 世纪中期,莱纳斯o鲍林是世界上最著名的科学家。他关于血红蛋白和其他生物分子结构的发现创建了一个全新的科学领域,当他准备利用自己的天赋破译 DNA 结构时,没人怀疑他的能力。但是,他并没有成功。事实上,是另外两个相对不那么出名的研究者詹姆斯o沃森和弗朗西斯o克里克赢得了这个殊荣。但是,最令人震惊的是他们的研究方法。当其他科学家花费大量时间耗在实验室的时候,沃森和克里克却在把玩各种模型,并且进行讨论。他们的方法对大多数专业学者来说像是小孩的游戏,但是实际上却是构思的最好方式,同时也可以直观的发现他们的想法如何反映不同的令人迷惑的经验线索。今天,越来越多的学者认为游戏对儿童的学习也有同样的促进作用。一家名为
的公司决定证明学者们是正确的。非常规学习案例大家都知道学校很无聊。学生坐在座位上,听老师讲课,然后做测验查看知识巩固程度。老师写到黑板上的东西,学生肯定会问:「这个考试考吗?」学习常常被视为达到目的的一种手段,而不是最终的目的,甚至家长和老师都是这样认为。与此同时,据报道超过四分之三的美国儿童家里都有游戏机,他们中的 40% 每天都玩游戏。许多游戏非常复杂,需要玩家广泛吸收和内化知识,并且查阅外部资料,但是孩子们仍然非常热衷于挑战这些游戏。詹姆斯o保罗o吉是越来越多支持在非常规环境下学习的学者之一,他称这些游戏为「强烈亲和空间」,并且认为这种空间还能扩展到其他的休闲活动中。与其他传统类型的游戏不同的是,这些活动的重点不是竞争,而是掌握。更重要的是,正如我在此前的一篇文章中的主张,现在的虚拟游戏能非常有效的模拟真实世界的技能。比如,美国陆军使用电子游戏来训练士兵。其他的游戏,比如魔兽世界,鼓励玩家合作解决问题,完成项目。这些类型的技能在课堂上是很难学到的,但是在游戏中却很常见。当娱乐遇到教育作为一个学生,P.Jo冈萨加尔觉得自己所受的教育对自己没什么帮助。并不是说他学习不好,他学习很好,他获得了加州大学洛杉矶分校的双学位和斯坦福大学的法律学位。只是,他觉得教育体系没有让他认识到自己真正的技能所在。所以他最终做了各种工作,虽然这些工作都挺体面,但是他没有感到满足。在孟买的因特尔资本工作期间,他在一份投资组合中发现了一家动画公司,然后他几乎立刻就知道了自己想做什么。在学习了一年的动画之后,他与人合伙成立了 ,一家电脑动画公司,帮助创作了孩子们最喜欢的动画,比如迪斯尼的「小叮当」系列,还有皮克斯的电影《飞机总动员》。冈萨加尔有自己的孩子之后,他开始思考,认为&Prana 能做的不只是娱乐。身临其境的讲故事模式让他的公司取得了巨大成功,如果他将这种模式运用到教育中去,将会产生巨大的影响。这个想法使他进入到斯坦福大学的教育学院,在那里他遇到了研究游戏、学习和成绩评定之间关系的迪兰o阿里纳。他们两个一拍即合,决定建立一个不同的游戏公司,不仅让学习变得有趣,同时能帮助指导教育过程。就这样 Kidaptive 诞生了。学习者的马赛克鉴于冈萨加尔的背景,Kidaptive 的产品《雷欧的平板》的体验更像是皮克斯或者梦工厂的电影,而不是一个游戏应用。游戏的故事主线是雷欧和他的宠物龙辛德遇到一群朋友,然后一起解决各种问题。游戏甚至拥有令人印象深刻的配乐,由劳丽o伯克纳演奏。然而,光鲜的外表下掩盖着一个广阔的分析推荐平台。当孩子们帮助雷欧和他的小伙伴执行各种任务时,他们正在接受胜过传统科目,比如数学和阅读,的六种技能评估。评估结果是一个孩子们如何学习的快照,Kidaptive 称之为学习者的马赛克。传统上我们评估孩子们的学习使用的评价一般是:「约翰尼的数学不好,但是他喜欢社会学。」但是,事实是尽管约翰尼可能不擅长抽象符号,但是他的数学推理能力可能很强(这些相同的概念技能让他成为了社会学天才)。简而言之,这是马赛克试图解决的问题。Kidaptive 使用学习者马赛克指导孩子们的游戏体验。例如,在《雷欧的平板》的第一章,孩子们需要帮助雷欧找到他的宠物龙辛德,辛德藏在一系列的颜色、形状和其他物体中间。当孩子们执行任务的时候,游戏会对孩子们的技能作出评估,也会作出相应的调整。公司也有一个博士团队持续分析数据优化教育体验。所以当评估一个孩子的表现时,也结合了其他孩子的数据,更好地理解如何用熟练程度匹配任务,如何对问题进行排序,找到未来发展的建议。一个学习生态系统对冈萨加尔来说,最初对动画的偶然兴趣已经变成了改变孩子们学习方式的使命,帮助他们避免缺乏他认为在他的教育过程中缺少的评估。他相信学习者的马赛克能在非常规学习和常规学习之间形成一个至关重要的桥梁。Kidaptive 最近发布了针对家长的学习者马赛克应用,给家长提供帮助,对游戏以外能在某些重要领域支持孩子的活动给出建议。公司也创建了一个软件开发工具包,以便其他开发者加入到公司建立的强大的生态系统中。有几个产品已经在测试阶段了。最终,冈萨加尔和阿里纳希望他们的分析平台能与教室教学合作,以便老师们能通过全方位的教育体验指导和评估学生,而不是仅仅通过授课和家庭作业完成情况来判定。虽然公司似乎有无限的雄心壮志,到目前为止他们看起来有一个良好的开端。去年他们完成了一轮 1000 万美元的融资,明年可能还会进行二轮融资。《雷欧的平板》已经吸引了超过 100 万用户,创始人相信到 2015 年底能有良好的现金流。半个多世纪以前,沃森和克里克证明了形式推理不一定是科学探索的最好方式。现在我们应该开始利用相似的方法解开孩子们的学习潜力了。
请后参与评论《重构》-何时重构函数
本章节共有九种重构方法,围绕和程序员打交道最多的一个技术环节-函数,步骤和范例书中都有详细说明,本笔记重点总结何时应当运用下面的重构方法,黑体字部分标明了最概括的重构步骤,当然,只是最简略的:
(1)Extract Method:(P110)
将一段代码放进一个独立函数中,并让该函数名称解释用途(重要)
可能是最常用的重构方法,重复一下,如果提炼动作可以强化代码的清晰度,那就去做,而且要为新函数起一个好名字,不要在乎函数名称比提炼出来的代码还长
(2)Inline Method:(P117)
如果一个函数,其本身与其名称同样清晰易懂,那就在函数调入点插入函数本体,然后移除函数
如果手上有一群组织不甚合理的函数,可以将他们都inline到一个大型函数中,再从中提炼组织出合理的小型函数
运用重构方法Replace Method with
Method Object之前,把所有你想要的函数的所有调用对象的函数内容统统inline到method
object中,即把所有想干掉的杂碎集中到一块儿统一处理,会清晰很多
重新审视一下你的全部委托层面的函数(什么是委托层面,即这个函数的作用只是调用其它函数而已),考虑它是不是具有相应价值,委托太多只会造成阅读上的困难,想想跳来跳去会不会弄得你晕头转向...OMG
(3)Inline Temp:(P119)
你有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其他重构手法,多半是Extract
Method,那就那所有对该变量的引用动作,替换成对它赋值的那个表达式本身
除此之外,这个重构方法一般作为Replace Temp
with Query的一部分使用
(4)Replace Temp with Query:(P120)
当你的程序以一个临时变量保存一表达式的运算结果。将这个表达式提炼到一个独立函数(即Query)中,将这个临时变量的所有“被引用点”替换为“对新函数的调用”,新函数可被其他函数使用
此重构方法往往在Extract Method方法之前使用,去掉那烦人的临时变量
临时变量比较难以访问,如果替换为查询式,那么同一个class内都可以使用这个查询式了
如果临时变量不容易被替换,请结合Split Temporary Variable或Separate Query from
Modifier重构方法一起使用
(5)Introduce Explaining Variable:(P124)
当你有一个复杂的表达式,将该表达式(或其中一部分)的结果放进一个临时变量,以此变量名称来解释表达式用途
很显然,这个重构的目的,是为了让代码更容易阅读,但作者建议,如果可以选择,尽量用Extract
Method来解释代码,除非前者工作量太大,原因同上,临时变量的局限性太大
通常情况下,在条件逻辑中,此条重构有些价值
(6)Split Temporary Variable:(P128)
当你的程序有某个变量被赋值超过一次,它既不是循环变量,也不是一个集用临时变量,那就针对每次赋值,创造一个独立的、对应的临时变量,而不是重复为同一个临时便利赋值
换言之,如果一个临时变量承担两件不同的事情,会使阅读者糊涂,并对重构造成麻烦
(7)Remove Assignments to Parameters:(P131)
当你的代码要对一个参数进行赋值动作,那就以一个临时变量取代该参数的位置
上面所说的“对参数赋值”,是指改变参数,将其指向完全不同的一个对象,参数应当默认表现为“被传递进来的东西”,当然,Java的全部参数是值传递,如果用C#中的引用传递(关键字ref,out),可以不遵守这条规则,但作者建议引用传递少用
(8)Replace Mothod with Method Object:(P135)
当你有一个大型函数,其中对局部变量的使用,使你无法采用Extract
Method,那将这个函数放进一个单独对象中,如此一来局部变量就成了对象内的值域,然后你可以在同一个对象中将这个大型函数***为数个小函数
这条重构的目的是也是将函数化大为小,作者加了个前提,就是“临时变量太多太复杂,以至于无法Extract
Method”,考虑这条重构法则,构建“函数对象”,所有的临时变量都成了这个对象的值域,然后,Extract Method走起....
(9)Substitute Algorithm:(P139)
将函数本体替换为另一个算法
我的总结:看得出来,处理函数重构的中心思想是化大为小,化整为零,小函数始终是值得提倡的,起名字好能够代替注释的,临时变量大多数情况是可恶的,能用函数代替的一定要代替的...oh
yeah...首当其冲的方法是“抽取函数”,不成考虑用“函数对象”替代,其他的重构方法基本上是为两位大王作事先铺垫的,当然,“用更好的算法”这个显得比较另类...
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

参考资料

 

随机推荐