1. 打造下列类型产品和工具的程序员、产品经理、设计师:
- 低代码零代码产品、BI产品、信息可视化产品、工作流产品、STEAM教育产品、可视化编程工具等;
- 当然还有编程语言、DSL、编程框架、SDK等;
2. 对各种创作、开发、设计行为中的复杂认知活动规律进行研究的心理学专业人士
一
1. 古早的代数学
公元830年,阿拉伯世界的大数学家花拉子米正在巴格达写他的传世名著《代数学》。
《代数学》中的一页
书里有这么一段(阿拉伯文看不懂,还是上英文译版):
What is the square which when taken with ten of its roots will give a sum total of thirty nineNow the roots in the problem before us are ten. Therefore take five, which multiplied by itself gives twenty five, an amount you add to thirty nine to give sixty four. Having taken the square root of this which is eight, subtract from this half the roots, five leaving three. The number three represents one root of this square, which itself, of course is nine. Nine therefore gives the square.
《代数学》全书几乎都是这样的自然语言文字段落,所以还得再过800多年,这段才可以写成下面这样一个解方程过程:
如此一个按部就班的解题过程今天当可被称为“算法”(Algorithm)。不过奇怪的是,用自然语言去描述这种算法时,咋感觉挺繁琐,既不清晰,还一点也不自然,体验显然不如方程记 好呀推崇自然语言编程的同学有什么想法
花拉子米是花剌子模人,算波斯人的血脉,但常年在巴格达做研究,只用阿拉伯语写作。他的全名叫阿布·阿卜杜拉·穆罕默德·伊本·穆萨·花拉子米,被欧洲人用拉丁文翻译成了Algoritmi,再对照着Algorithm(算法)看一看。没错,今天我们所谓的“算法”,按照其原始的造词含义应该被叫作——“花拉子米法”。
2. 图形化编程的迷思
如今软件开发界有一个普遍的迷思,认为把代码弄成可视化的、图形化的,编程这事儿就一定会更容易学、更容易操作,相应地用户体验应该也一定会更好。
来瞅个栗子。
假设现在要开发一个很常见的音乐节奏小游戏,里面的演奏动作有敲锣和打鼓,敲锣通过按下空格键完成,打鼓通过鼠标点击一个游戏角色完成。玩法很简单:
1) 提示打鼓的时候玩家及时打鼓了,或者提示敲锣的时候玩家及时敲锣了,都会获得普通加分,否则不得分;
2) 如果在高潮时刻同时提示了打鼓和敲锣,并且玩家也确实及时地同时完成了打鼓和敲锣动作,那就获得奖励加分;
用最常见的图形化编程语言Scratch来写,上述核心玩法逻辑大概可以实现成下面这样:
但如果在JavaScript里用上稍微适配过的微软RxJS库,便大概可以写成这样:
这两个栗子,我们在直觉上都能很明显地感觉到不同语言带来的体验差异,但这差异到底是什么,为何会产生,又该做些什么才能改善不如意的体验,这些在我们的脑子里则是一团模模糊糊,说也说不清楚。
二
首先提个醒,要科学地分析并比较不同编程语言的体验并不容易,主要倒不是这事儿有多难,而是特容易掀起狂热的“宗教战争”。
Paul Graham都说了:“编程语言是技术和宗教的混合物”。
有人试着整理过各大编程语言和宗教的归属关系:C属犹太教,Java属天主教,C++属伊斯兰教,Lisp属佛教禅宗,Haskell属道教,Erlang属印度教,Python属自由派基督教,C#属摩门教,Ruby属新异教,Lua属萨满教…
你稍微说一句:“这个问题用XX语言来搞有点点烦”,都可能招致一干XX语言码农教众的反扑。所以,耐心深入地研究编程语言体验这事儿肯定不能交给这类狂热的教众。
那这些编程教派的教主和长老们都在醉心些啥呢/p>
Lambda演算,π演算,指称语义,公理语义,操作语义,Linear Type,Dependent Object Types,Algebraic Effect,Type Inference,范畴论、直觉主义逻辑,时序逻辑,Concurrent Constraint Programming,Metaobject Protocol,Actor Model,Abstract Interpretation,Partial Evaluation,Just-In-Time Compilation,Intermediate Representation Code,Graph Rewriting,Parsing Expression Grammar……
虽然有些理论和技术可能客观上对编程语言的使用体验有帮助,但大佬们的重点显然是放在用更多的现代的高级的牛逼的技术特性来武装自己的宝贝语言上。
至于开发….体验/p>
“emmm,这词儿听起来就一点也不够硬核不够理性不够精确,我的天才大脑怎么能浪费在这种虚头巴脑的事儿上
在产品设计领域,用户体验的测试、评估、分析、设计都是常规操作,有许多科学的方法工具来帮助做好这些事情、打造良好的体验。但如果把编程语言(及其相关的工具、环境等组成的编程系统)看成是产品的话——显然它们确实就是产品——你却发现在编程语言设计这个高精尖行当,竟然基本没人会干这种事儿,大佬们集体性地忽视了它。
看吧程序员,这不就应了那句话:他们都只关心你飞得高不高,却没人在意你飞得累不累~
三
但幸好,还有一个小小的小小的研究者群体,他们把焦点放在程序员身上,关注着作为人的程序员在工作中的切身感受与体验,持续深入地研究着编程中和人相关的各种现象和规律。
目前这个方向最系统的资料可以在剑桥大学Computer Laboratory的Alan Blackwell教授开设的「Usability of Programming Languages」课程里找到。
Blackwell教授告诉我们,编程语言的“可用性”(Usability,或者说使用体验)背后的科学基础叫「编程心理学」(Psychology of Programming)。
摘自Alan Blackwell的《编程心理学50年》
编程心理学是一个典型的交叉学科,它的研究重点是复杂的软件开发活动所揭示的人类认知和协作的规律,以及心理学如何影响与协助软件开发。诸如编程语言、认知心理学、软件工程、计算机科学教育、CSCW等方向的研究都可能与它有交集。而且没错,它已经有50多年的历史啦!这个领域最重要的据点叫PPIG(Psychology of Programming Interest Group, 编程心理学兴趣组)。
PPIG的Logo
如果你去官方 站瞅瞅那朴素的页面,应该也能看出来它似乎是一个没啥靠山的组织。不过虽然不是财大气粗的主流,每年他们也还会聚在一起玩儿,搞搞workshop。
今年的年度聚会刚结束,paper还没放出来,主题是——“图灵,皮亚杰,电台司令:PPIG和缪斯”(Turing, Piaget, Radiohead: PPIG and the Muse),探讨(广义上的)编程、心理学、音乐之间的纠缠和共振,很精准地戳中了我的心。
在我看来,编程语言界的科技天才实在太多,很需要吸一吸编程心理学界的这种人本主义精气神,然后落到人世间,略微多体贴体贴咱们这些生而为人类的程序员们~
让我非常诧异的是,国内在这个细分交叉领域还是一片空白,我没有见到过活跃的研究者,仅有的中文资料是Gerald Weinberg的《程序开发心理学》中文版(原著1971年出版,侧重从组织心理学的视角来探讨开发活动)。如果有朋友对国内这方面的研究状况有所了解的话,我很有兴趣知道,麻烦后台留言或私信我,感谢!
四
具体到编程系统用户体验的分析与设计上,编程心理学为我们提供的最重要的方法工具叫作「认知维度框架」(Cognitive Dimensions Framework)。
在HCI和UX领域有过经验的朋友都熟悉诸如基于“尼尔森可用性原则”的「启发式评估」(Heuristic Evaluation)之类的体验评测方法,但这些方法都专注在定义得很明确的低层次任务上,且比较偏重感知(perception)层面。而编程活动显然是非常复杂的高级认知活动,实现一项软件功能、调试一个bug等等都无法依赖一套明确的标准化的操作,所以常规的HCI方法并不特别适用。我们需要视角不一样的新工具,这就是为什么发展出了「认知维度框架」。
它提炼出了13个和复杂信息认知处理相关的维度,并将程序员的编程活动根据特点分成若干类型(transcirption, exploratory design…),然后分析不同活动在不同维度上需要的支持,并与系统实际提供的支持进行比较,便可以评估在特定编程语言及系统中进行不同活动的顺畅程度、愉悦程度等等体验指标。
按照该框架,文章开头第一个例子中同样的算法用自然语言和数学记 分别书写造成的体验差异,主要与”Diffuseness, Closeness of Mapping, Role-Expresiveness, Hard Mental Operations”这4个维度相关;
第二个例子中图形化的Scratch与文本化的JavaScript的差别则与”Closeness of Mapping, Role-Expresiveness”这2个维度相关。(更详细的分析留待后续系列文章)
「认知维度框架」为我们探讨编程活动提供了一套科学的词汇、语言、表达工具。如果没有这样的表达工具,我们在感受复杂如编程这样的认知活动带来的体验时都不知道从何说起,除了陷入“Haskell很牛逼、Java很傻逼”这样的原教旨主义词穷中别无它法。难怪因果科学大师、2011年图灵奖得主Judea Pearl在《The Book of Why》里反复强调道:
你会看到我反复强调符 、语言、词汇和语法。……….仅仅是遵循科学语言的语法进行话语实践就能让我们掌握大量的知识,这实在令人惊喜。我对语言的强调也源于一个坚定的信念,即语言会塑造我们的思想。你无法回答一个你提不出来的问题,你也无法提出一个你的语言不能描述的问题。
最后要特别强调的是,「认知维度框架」不光可以用来对已有系统的体验做深度分析,还能在其指导下为未来的系统设计出体验良好的方案——它既是一个分析工具,也是一个设计工具。
五
我是老邓
- 独立咨询师/产品顾问/老码农/创变教练/元气召唤师;
- 易轻舟低代码首席产品顾问, 易伏羲机器人的专家顾问,华为编程语言 区DSL-SIG核心委员;
- 前天雷动漫公司副总裁&CTO,前 易公司资深专家;
- 多次职业转型的多重潜能者;
- 努力助人获得职业幸福的幸福黑客;
在产品设计、人机交互、用户体验设计、End-User Programming、编程心理学、音乐编程、信息可视化、数字游戏、儿童智能玩具、儿童动漫IP运营等方向探索实践十多年,目前正在偏僻的独立交互电子音乐人的小路上艰难挪步~
后面我将陆续撰文介绍「编程心理学」的重要成果,先期的内容便将是「认知维度框架」的一个系列教程。
如果你想听我当面或线上直接给你讲解,那么可参加我正在开展的「老邓99分Talk」活动。
私信或留言备注【99分talk】,即刻参加「老邓99分Talk」活动
~
~
~
~
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!