这门多数学校还没教的课程正在变得越来越“时髦”,你会让孩子去学么?

2016-05-01 王青等 小花生网

檩子:最近看到王青博士的一篇博文《美国孩子最时髦的课程是什么》;打开文章前,我猜想这最时髦的课程会是跟STEM有关的,结果还是没完全猜准,按王青博士的观察,答案是电脑编程;他分享了自己孩子在美国上学遭遇“电脑编程”的经历,还挺有意思的,先来看看他的描述:

对美国教育比较了解的朋友,大概都知道STEM教育这个概念,这是Science(科学),Technology(技术),Engineering(工程),和Math(数学)的首字母缩写。以科学技术为核心内容的STEM课程,被称作为21世纪的课程,颇有点高精尖的味道。

不过现在,美国说的都是STEAM了,多出来的A,指的是艺术 Art;艺术在这里出现,可不是让孩子们个个都成为毕加索,而是让艺术成为孩子认识世界和表达自己的工具。

而当前美国最“IN”的这门课,竟然跟STEAM里面的5项内容每一项都紧紧相关。它的提倡者直接就说了,这是现在每一个孩子今后在社会生存所必须具备的能力。

关于这门课程还有一个5分钟的宣传短片《多数学校不会教的东西》,在YouTube上已经有了1千多万次的收看,比尔盖茨和扎克伯格这样的人物都在片中露面倡导。

这门能够主宰今后社会生活每一个层面、目前在美国孩子中非常新锐的课程,就是电脑编程(Coding / Computer Programming)。


Everybody in this country should learn how to program, because it teaches you how to think.

“这个国家的每一个人都应该学习电脑编程,因为它会教你如何思考。”

前面提到的大热宣传短片,用了已故苹果大佬乔布斯的这句话开头。

那么多大的孩子可以开始学编程呢?美国比较普遍的操作,像STEAM一类的课程,一般在四年级出现。因为我儿子的学校校长特别注重于电脑科技,所以学校决定在三年级尝试开课。

这一试不打紧,惊动了我们选区的州议员,他动用自己的相关力量,在儿子的小学搞了一个现场观摩会。议员出面,不光是各类媒体跟风而至,周围学区的相关人员也都出动了,最重要的是,谷歌负责推广的地区经理也到场了,场面变得非常正式。好在学校有一个全部苹果设备的电脑室,挺拿得出手,而孩子们的表现更是神勇,一点怯场的意思都没有,急于要向大家展示自己的成果。

其实,孩子的编程内容一点也不难,有点类似于搭建电子积木,是在调动不同的模块,不光有形状颜色这些内容,还有运动、速度和声音这些维度。下面这张照片大致能看到孩子电脑屏幕上的工作,颇有点像在玩电子游戏。其实,我三年级的儿子在上了几个星期的课以后,就完全沉浸在电子游戏“设计”中了,利用这些搭积木的技术,开始想象和设计自己游戏的主角,从长相到声音到超能力,把创造性发挥得淋漓尽致。

现在这所小学的编程课程已经扩展到了二年级,从网上出现的报道来看,还有年纪更小的。

凡是跟儿童编程打过交道的相关人士都知道一点,编程对于孩子来说,就像天生的本事一样,其实并不费力气。都把电脑程序叫做“语言”,其实它跟人类语言有很多道理相通的地方。而孩子的天性,就是利用一切交际媒介表达自己,可以是母语,可以是母语里夹杂了外语,可以是画画唱歌,可以是肢体语言。到了用电脑语言表达自己这个层面,他们也是表现得那么自然,绝对的天生优势,没有仔细了解过的大人,很难想象的。宣传短片中包括扎克伯格在内的行业领军人物,都在强调,不需要等掌握了全部电脑科学之后,才开始学习编程。

 

的确,扎克伯格20岁的时候就创建了Facebook,他小学开始接触编程,在此之前已经积累了近十年的编程和创造产品的经验。而中国的学生,即使读完了计算机系,也还没有多少编程开发实战经验。

总之,这部大热的宣传片和王青博士的经历,告诉我们电脑编程已经存在于现代社会的每一个毛孔,无论是创业,还是完成一个project,或者解决一个具体问题,都离不开电脑编程,这方面的技能成了人们的一种基础能力,就跟懂基本的数学运算一样,趋势是越来越多的孩子会把电脑编程不仅仅作为兴趣爱好、而是当作基本技能去学。

之前,我们介绍过一些目前世界上儿童学编程的资源,今天正好贴在这里,一并作为参考!今天这篇文章最后有一个小投票,欢迎参加,发表你的看法!

目前教孩子学编程的主流App和网站

这些APP和网站都声誉卓著,普遍有这些特点:易上手、好玩、能产生作品,可以做动画、特效、游戏、网站和APP等,让孩子感到动力十足,而且很多都是免费的。

制作小动画,开始编程启蒙

1、Daisy the Dinosaur

这款 iPad APP 连幼儿园的小朋友都可以开始用。教孩子基本的编程逻辑;孩子们只需把相关的模块设定并排列好,如滚(roll)、跳(jump)或者长大(grow)等,然后再按下播放键,一个小动画就做成了,里面能看到小恐龙根据刚才的指令做出的相应动作。总之,很好上手,几乎没有任何难度,小朋友会很着迷于自己创作出来的小动画。适合年龄:4-8岁

2、Hopscotch: Coding for kids, a visual programming language

和 Daisy the Dinosaur 来自同一个开发商,这款iPad应用得过很多科技类奖项,像是 Daisy the Dinosaur 的升级版,多了很多模块和参数设置。在操作上还是很简单,不需要进行任何输入操作,就像是堆积木一样,把模块一个个放进去就好,点击播放就能看到各种卡通人物在屏幕上根据自己的指令做动作的动画。这个很锻炼孩子的逻辑理解能力,不仅要处理时间和空间的问题,还要给不同的角色分配不同的任务。它能让孩子独立地做出一部小动画片,很有成就感。适合年龄:8-12岁

开始认真学习一点编程

3、Scratch

在网上搜怎样教孩子学习编程,总会被带到这个网站,口碑非常好,全球有超过百万孩子在使用。可视化语言和接口是由美国麻省理工学院媒体实验室(MIT Media Labs)创建,即使孩子不了解复杂的程序语言,也可以轻松编程。孩子可以通过它来创建互动故事,动画,甚至游戏等,然后和全世界的朋友分享。适合年龄:8岁以上

4、Alice

估计男孩和女孩的思维方式是不太一样,所以还专门有为男孩和女孩各自设计的学编程软件。老外考虑得真周到。在美国,Alice 和 Scratch 是最著名的两个教孩子学编程的工具,针对女孩子学编程的Alice 由弗吉尼亚大学开发,名字来源于《爱丽丝漫游奇境》,主要教3D编程。在Alice里面,小朋友可以通过拖拽虚拟模块即可看到虚拟世界中3D精灵的实时变化,可以边玩变测试。开发者强调了这款软件的重点在于吸引年轻女孩来编程。适合:10岁以上女孩,适用设备:电脑

5、Codea

这是一款iPad应用,也是一个具有丰富资源带孩子编程的软件开发工具,得过年度最佳应用大奖。国外有孩子就用它自己做出APP游戏。大点的孩子,具有一定逻辑思维能力和理解能力,可以跟着走。界面简洁,简单易学是它最大的特点。重要的是,它有中文版,不会有语言障碍。适合年龄:8岁以上

6、RoboMind

RoboMind主要的功能是通过编程让机器人去执行一系列任务,这个过程中,孩子对人工智能会有基本了解。如果孩子在学LEGO的机器人课程,那这个就更适合了,它有一个导出功能,可以把你编的程序连接到LEGO MINDSTORMS NXT 2.0里去。适合年龄:10岁以上,适用设备:电脑

大孩子编程

7、Codecademy

Codecademy被认为是可以指导任何人学习编程的一款基于浏览器的应用,包括13岁以下的儿童。但这款应用并不像其他儿童应用,没有卡通风格的精灵和色彩丰富的界面,但它仍不失为一款友好的,简单易学的app。

通过Codecademy,12岁以上的儿童可以学习Python、Ruby、PHP、HTML或JavaScript等编程语言,甚至API。不过,该应用也正在扩大用户群体,尝试吸引一些年轻的程序员,鼓励学生和教育工作者参加他们在学校举办的编程俱乐部活动。

还有一本教孩子编程的书

这本《与孩子一起学编程》,如果家里有爸爸妈妈对这个感兴趣的,或者有点懂行的, 可以用这本书来教孩子学编程,或者和孩子一起学编程。

这本书的特点之前介绍过:

1、使用了大量贴近孩子生活的插图,凡是稍显复杂的概念,都尽可能用漫画比喻来辅助说明。
2、对于孩子们来说,纯粹的数学计算并不是那么的有趣;而能够做出一个看得到的东西,则是一件很有成就感的事情。这本书尽量做到这一点。

3、每一章的长度都不长,短小的学习单元有助于减少孩子们学习新事物时候的压力,也有利于维持他们的兴趣。

4、对于概念的讲述都非常的简单。涉及术语的地方,都尽可能用有亲和力的话语来说明。
编程少年的TED演讲

如果真的有心让孩子早点开始这方面的实践,不妨和他一起看看这位从小接触编程的12岁外国孩子的TED演讲-我是怎样开始编程的。他分享自己怎样走上编程之路:玩游戏,开发游戏,找到苹果的开发平台,学会利用网上资源自己去开发游戏,并且建立了一个孩子们开发各种应用的俱乐部……演讲很有范……

最后,一个小投票:

来源:本文第一部分引在王青博士授权小花生转载的新浪博客文章,有简化和编辑,资源部分由小花生网编写,媒体转载须获授权

科学表明女性更适合当程序员:男码农情何以堪

文章来源:煎蛋

美国的研究人员分析了开源项目共享服务Github里约140万用户的资料。他们发现女性提出的请求代码合并通过率比男性更高。该研究正在等待同行评议。这意味着这一结果尚有待其他专家点评。

这些来自加州州立理工大学和北卡罗莱纳州立大学的研究人员们,从2015年4月1日登入Github中的400万名用户中抽取了140万名用户。Github是一个庞大的开发者社区,并不要求其1200万用户填写性别信息。

不过该团队依旧能够辨别他们抽取的这140万人的性别,因为用户资料或者他们的邮箱地址都能透露蛛丝马迹。研究人员们也承认这有隐私风险,因此他们并不打算公布原始数据。

该团队发现女性提出的请求代码合并接受率为78.6%,而男性提出来的仅74.6%。研究人员们考虑了各种因素,比如女知道某些问题的可能性是否更高,她们贡献的代码更短或者她们做的任务更容易以及她们使用的编程语言等等,但研究人员没有找到相关联系。

然而那些在Github社区里并不出名的人中,性别资料显示自己是女性的人提出的请求代码合并通过率比那些性别不明显的人低得多。

性别偏见

从局外人的角度来看,我们看到了性别偏见的痕迹:当女性的性别资料中立的时候,她们提出的请求代码合并通过率为71.8%,可一旦她们表明自己是女性,她们的通过率立刻降至62.5%。男性的通过率也有相似的下降,但并没有这么明显。

总体来看女性提出的请求代码合并通过率比男性更高,可当她们成为外来者且她们的性别可被鉴定出来的时候,她们的通过率比男性低。研究人员们总结道:“我们的结果表明虽然Github里的女性总体来说更能干,但她们还是会遇到性别偏见。”

虽然有各种高调的倡议,但科技公司依旧面临着员工多样性的问题(从性别和种族这方面来看)。根据2015年的数据,脸书的技术人员里仅16%为女性,谷歌仅18%。

计算机科学家Sue Black OBE博士表示,即便如此这一结果依旧令人鼓舞。她说:“我认为这些表明女性对编程的兴趣在复苏,在接下来的几年时间里,女性也会慢慢对其它与技术相关的 职业感兴趣。知道女性擅长编程,会让更多女性进入科技领域工作。最开始提出软件概念的Ada Lovelace也是一名女性,知道这一点才能更好地鼓励并支持女性进入软件行业。”

如何从菜鸟程序员成长为高手

2016-02-24 蛋疼的axb ACSE
关注上方“ACSE”来及时了解中国理工科留学生联盟的最新动态以及新鲜科技好文章
小编有话说
从今天开始ACSE公众号每天会更新一篇科技相关的精选好文章来帮助大家了解科技前沿以及提高自己的技术水平。
今天这篇文章是由大神级别程序员总结的学习方法,值得收藏起来每周看一遍,只要照着一一做到,总有一天能够成为高手。
1.摘要
最近有一些毕业不久的同事问我:“你工作的时候有没有什么窍门?怎么才能快速成为高手?”
想起当初刚入职,新人培训的时候,也跟其他同事讨论过这个问题:如何才能成为业界大牛?当时自己只是觉得兴趣是最好的老师,思路方法什么的没有多想。
加 入微博平台架构部的时间也不短了,趁着快过春节总结了一下自己入职微博以来的工作情况,从互联网开发的半个门外汉,到如今能设计一些架构、排查一些问题、 分享一些经验,收获颇多,感想颇多,也逐渐意识到思路和方法的重要性,在此跟大家分享一下。主要分为学、做、想三方面。
2.学会学习
学习无疑是程序员最为重要的素质之一,尤其是互联网这种日新月异的行业,把学习当做工作的一大半也不为过。
2.1.自主学习
最近发现身边的人并不是不想学习,只是每天都在纠结自己到底学什么好:简单的没挑战,复杂的看不懂;旧技术怕过时,新技术没方向…… 
讲 讲自己毕业后的经历,毕业之后去了个不大不小的公司,工作主要是做一些XX管理系统之类的东西,没什么挑战,也用不上什么技术,基本上前端用个extjs 后面套个sql server就解决了。工作稳定了几年,业余时间除了wow没别的事情做,觉得这么闲下去不是办法,于是之后一年的时间里,用上班摸鱼和下班休息的时间学 了这些东西:
1. 闲着无聊想做个小游戏,发现游戏相关的书大多是英文的,看不懂,一咬牙翻译了《Real-time rending 3rd》的前几章,刚开始前言都看不懂,只能一个词一个词的翻字典,一句话要琢磨几个钟头到底作者说的到底是什么意思。翻译了几百页英文书之后,发现自己 看英文书没什么障碍了,于是开始每天用休息和摸鱼的时间看书。
2. 看完游戏引擎的书之后,把irrlicht引擎的代码看了一遍,然后自己山寨了一个3d渲染的场景管理器,还有个朴素的渲染引擎。
给自己的游戏引擎写了个基于脚本语言的解释器,为此看了不少编译原理和虚拟机的书,了解了程序究竟是什么东西,这是我觉得收益很大的一件事情。
3. 看编译原理的书的时候发现操作系统的知识有些欠缺,又去看了linux内核相关的书。之后买了个开发板天天修改内核玩,毕业以后又一次了解了内核的cpu 调度、内存管理和文件系统,了解了应用是怎么跑在操作系统上,操作系统又是怎么运行在硬件上的,这也是收益很大的一件事情。
4. 看完操作系统又顺着看网络相关的书,之后把lighthttpd的代码看了一遍,用c写了个linux下的http服务器,把几种网络编程模型挨个实现了一遍。
5. 实现http服务器的过程中觉得自己编码能力还是有欠缺,把代码大全翻了一遍,顺着又去看了设计模式的书,并且用自己的理解把每个模式用文字重新描述了一遍。
6. 中间还看了很多语言和框架相关的书,就不一一列举了。可以参考这里。
我把学习的方向分为三类:
1. 为了工作,满足当前工作所必备的知识
2. 为了提升,与当前工作相关的知识(深度)
3. 拓展视野,与当前工作无关的知识(广度)
学习(1)之后只是个熟练工,2和3才是提升自己的途径,伴随着知识储备的提升,接触新事物时更容易找到相似的知识加以类比,加快理解,也更容易掌握本质。如果每天都在纠结“到底学什么”,那么只能说明还是学的太少了。(真正没什么可学的大牛们应该不会读到这里吧……)
所 以,如果觉着没什么东西可以学的时候,那么可以考虑一下学一下更有深度的知识(比如虚拟机或编译器),或者完全不同的知识(新的语言或当前比较火的方 向),甚至完全不相干的知识(单纯练习英文阅读,学习ppt排版之类)吧。随着知识储备增加,自己的不足和未来的学习的方向也会更加明确起来。
2.2.向历史学习
以微博为例,在微博发展的过程中经历了不少波折,并逐渐衍生出了目前的系统架构。很多新人最喜欢问的问题便是“现在线上是怎么做的?”
这 个问题不错,但是还不够好。在程序员的世界里罕有能解决所有问题的“银弹”,当前的做法用不了多久也会被替换掉,如果想了解一件事情,那么就多关注一下 “它是怎么变成今天这样的”吧。学会用发展的眼光看问题,了解一些经历过的经验教训,收获会比单纯学会一件什么事情多的多。
那么,如何向历史学习?
1. 公司内部的资料库、wiki等大都会有旧时的资料,刚入职时大多不会太忙,这些资料库简直是挖不完的宝藏
2. 部门内部分享,比如我当初入职时经常去听“微博XXXX架构演化历程”之类的内部分享
多问一下自己”它为什么不那么设计“
3. 老员工忆苦思甜吹牛逼的时候多奉承几句_(:з」 ∠)_
2.3.向他人学习
这里有两个极端,
1. 有的人喜欢自己闷头捣鼓,什么也不问,这必然是不利于自己提高的;
2. 也有人碰到问题就问,这也有问题,浪费他人时间不说,更关键的是说明这人向他人学习的思路错了,要学习他人的并不是具体某个知识(要学知识看书就能解决了),而是学习别人的思维方式。
但是思维方式这种东西很难通过交流的方式学到,后来我发现有个很简单的学习方式:口头禅。举几个例子,大家体会一下:
“这个其实是两个问题”
“有没有更好的方案”
“能不能举个例子”
“能不能给个一句话总结”
除了口头禅,很多牛人都会有非常鲜明的思维方式和处事原则,如果有幸与业界的大牛共事,那么恭喜你,只要多交流、多观察、多思考,那么提升速度会提升好几个数量级。
3.多做有意义的事情
有的人每天时间浪费在跟问题本身无关的事情上,比如我要设计架构的时候还要考虑架构图怎么画,写完代码还要反复部署测试好几轮才pass,查bug的时候把时间浪费在扫日志上。人的精力总是有限的,把时间浪费在这些事情上面,让自己提高的时间就变得少了。
3.1.练习,更多的练习
这里有个误区:“做有意义的事情”不等于“只做自己没做过的事情”。
对于程序员来说,写代码是基本功中的基本功,编码的规范、设计的权衡、甚至顺手的IDE快捷键都要靠平日的试错和积累,很难通过几本书或者几天培训领悟到。
曾 经目睹一些人写代码一年之后开始做一些小项目的设计,然后就迫不及待的把重心全都转移到设计甚至架构上,这种没有基础能力支撑做出的设计和架构最多只能算 是高级意淫,大多没等落地就荒废了,意义不大。究其原因,大多是设计出来的东西“不好做”或者“不好用”,就像是只看过一遍课本就去参加高数考试,现实 吗?(学霸们我错了……)
举 个例子,几年前在看设计模式的过程中,用qt做了个看漫画的应用,把能用的模式都试了一遍,当然有很多用的不合适的地方,正是这些不合适的地方让我对面向 对象编程和设计模式的思考深入了很多,如何权衡灵活性和复杂性也有了新的认识。之后在设计很多系统的时候少走了很多弯路,既保证了时间点又保证了质量。如 果当时指望着“用的时候再说”,大概已经被项目坑的不能自理了。
3.2.善用工具
工具能解决的事情就用工具去解决,好的工具能节约大把的时间用在更有意义的事情上。
工具的范畴很广,比如linux的各种命令、比如团队内部的各种系统、比如顺手的应用、甚至包括上下班骑的自行车。只要能节约时间、提高效率,那就值得一试。
在这里我列举几个大幅度提升了我的效率的东西:
1. 双屏显示器
2. 顺手的键盘
3. google(不是baidu!不是bing!)
4. mac
5. mac上的应用:idea、alfread、omnifocus、甚至synergy和istats menus之类跟开发本身关系不大的应用。
我更倾向于把“使用工具”作为一种生活态度:是否希望让自己的生活专注于有意义的事情。如果你认同这个观点,那么想一想投入和回报比例,还是很可观的。
(当然,为了不花钱而自己破解应用的大神也是极叼的……)
3.3.提高时间的利用率
时间是所有期待提升自己的人最宝贵的资源,效率再高,没时间做也没意义。
网上有个流传挺广的图:打扰程序员的成本。事实上我每天的工作时间非常碎片化,来到公司之后可能不断的接电话、被问问题、被拉去开会、回复邮件等等;也经常会有时间不够用或者没事做的困惑,这里分享一下心得:
1. GTD可以整合很多碎片时间。除了把事做完之外,把上下文相关的事情集中在一起完成也很有帮助。比如把几件想去其他办公室做的事情整合成一趟完成。
2. 减少无意义的时间浪费,比如家住在公司边上可以每天节省几个小时的时间用来学习或者做别的事情。(但如果节省下来的时间用来刷微博,那就没有必要了。)
另外一个很有趣的现象:一个软件的注册费就10几刀,贵些的几百刀,把日常用到的所有工具的费用全加起来都顶不上一个肾6贵,但是很多人还是坚持着没有破解不用的观念,为了几百块钱浪费了大把时间。
3. 加班可以创造很多时间,并且能有效减少被打扰的几率,但是也会给身体和精神带来很大负担。因此加班做的事情必须能对个人进步产生足够多的收益。如果加班只是用来处理无意义的工作的话,那应该是日常工作出了什么问题。
4. 事情可以分成紧急重要、紧急不重要、重要不紧急、不重要不紧急四类,在todo列表里随时要有重要不紧急的事情。
4.学会思考
4.1.深究
当有什么问题解决不了的时候,很多人会有畏难或者拖延的情绪,典型口头禅就是“就这么凑合着用吧”或者“先这样吧,以后有时间再研究”,说这些话的人大多并不是真的那么忙,甚至有人一边刷着微博一边跟我说没时间研究……(你tm在逗我?)
要克服畏难情绪其实很简单,找一个具体的似懂非懂的问题,想尽办法把问题研究清楚,体会几次解决问题时的愉悦感,建立自信。
大部分问题其实没有什么高深的科学原理,甚至只要翻几页书就解决了,但是遇到问题不深究,久而久之会形成自我暗示:这些问题是我懂的,那些是我不懂的,自己反而把自己进步的路给堵上了。
说到如何深究,也有几条心得:
1. 遇事多想为什么,并且要反复问为什么。很多貌似理解了的问题过一阵再重新想想,往往会发现之前还有没考虑到的地方
2. 问题要有明确答案,哲学之类的就别纠结了
3. 查找资料时选权威的书籍或者网站,避免被误导
4. 找人讨论,或者直接拉小伙伴入伙,既可以互相交流,又可以互相监督
5. 分享你的成果
6. 不要所有事情全都深究,会给自己太多压力
4.2.多说,多写,多交流
平常工作中有一个感受,有交流和写作习惯的人思路会更清晰一些,能接触到的观点也会多一些。这方面其实属于我的弱项,大概总结几个观点。
1. 隔一段时间最好能书面形式总结一下最近的工作,比如说写个心得感悟,或者持续更新自己的简历
2. 写作的时候有两个难点:对要说明的事情做总结和抽象,形成观点统一、调理清晰的主线;从对方的视角考虑,把事情说明白,避免自言自语。
3. 找人讨论之前自己先要有个基本完整的思路,否则大部分的时间都要耗在解释原理之类的上网查反而更快的事情上。
4. 讨论之后要有一句话就能说明白的结论和描述清晰的时间点。
5. 有些人喜欢纠结于“这个不是我的问题,为什么要我处理”之类的事情。在我看来这是很好的机会。既能增长见识,又能展示水平,还能留个认真负责的好名声,何乐而不为呢。
5.最后
最后分享一下关于我理解的程序员的自我修养,在我看来,可以总结为:负责任,重名声。
负责任,说的更具体些:写的代码自己有没有测过、做的框架自己有没有用过、设计的架构自己有没有认真权衡过。
重名声,说的直接些:没有测过的代码、没有用过的框架、没有权衡过的方案有没有脸交付给别人。
与各位共勉。
作者:蛋疼的axb

原网址:http://blog.2baxb.me/archives/1077
中国理工科留学生联盟(ACSE)
致力于推动留美各校理工科留学生间的相互交流以及资源共享和对接

程序员,你的安全感呢?

作者:杨栋

链接:http://www.cnblogs.com/yangdong/p/5190818.html

同病相连

最近跟一位同事谈心,他非常热爱技术,是一个不折不扣的极客,不仅如此他有很强的执行力,并能持之以恒,从他的身上我看到了未来几年将会成长起来的一个技术牛人。但是,他有比较严重的焦虑症,比如:几天没有看书就会非常纠结,通常情况是他需要花时间来陪孩子和家人,他会感觉自己浪费了宝贵时间,精力无法集中在当前所做的事情上。我接触的同事中,越是对技术有追求,好像越是有这样的感觉,算起来这种不安的感觉应该属于特定程序员群组中一种典型现象,其实做为导师的我也是常年被这种感觉所困扰。 他是这么描述自己的:

我已经工作4年了,但是我在数据库底层,HTTP协议,并发,分布式系统都没有深入地理解,我觉得特别害怕。

不用讨论工作4年的程序员应该有什么样的表现,掌握多上技术,深度如何,视野是否开阔,我们来看看别人眼中的他吧:

  • 对技术极度有热情
  • 学东西非常快,几周时间就搞定了Ansible, Chef, Puppet
  • 阅读非常广,除了技术之外,涉足项目管理,金融,心里,社会等

看看他的书单(我截取了其中1/4的一年要读完的书单,实际上他读完的书比计划要多),也会对他有更深刻的认识:

  • 像外行一样思考,像专家一样实践:科研成功之道(修订版)
  • 古今数学思想(新版·典藏本)(套装全3册)(第1~3册)
  • 思考,快与慢
  • 数据化管理:洞悉零售及电子商务运营
  • 探索复杂性
  • 日志管理与分析权威指南

心理学上的安全感

安全感是心理学研究中的重要概念之一,最早见于弗洛伊德精神分析的理论研究。虽然国内外对此做过诸多研究,然而对于“安全感”至今尚未达成共识,以下列举了一些关于安全感的定义:

  • 弗洛伊德认为当个体所受到的刺激超过了本身控制和释放能量的界限时,个体就会产生不安全感。换句话说,在弗洛伊德的精神分析理论中,冲突、焦虑、防御机制等是由个人幼年、成年阶段某种欲望的控制与满足方面缺乏安全感造成的。
  • 人本主义心理学家马斯洛最早对安全感作出了明确界定,指出“安全感”是一种从恐惧、焦虑中脱离出来的信心、安全和自由的感觉,特别是满足一个人现在和未来各种需要的感觉。
  • 安莉娟等对精神分析理论、人本主义心理学理论中的安全感理论进行总结,提出安全感的定义为:安全感是对可能出现的对身体或心理的危险或风险的预感,以及个体在应对处置时的有力无力感,主要表现为确定感和可控制感。

从以上的定义我们大致能够看出安全感大致有两大要素:负面的外部刺激,正面的内在能量。简单来说当内部能量能够抵消负面的外部刺激,人是有安全感,因为我的“能量结界”没有消散,反之则没有安全感,没有人会在“能量结界”被打穿之后还怡然自得。那么这个“能量结界”的大小就是所谓的舒适区域了,如果用绿色表示很安全的话,那么舒适区域应该是中心是深绿色周边是浅绿色的圆。理所当然,随着它的范围的增大,个人的舒适区域也就不断的增大。

为什么会焦虑

人为什么会焦虑,当某一件能够刺激内心产生负面影响的事情发生时,人们就有可能会产生焦虑的情绪。这是一种缺乏安全感的情绪和典型表现。在学生时代,我们会因为惧怕考试失败而焦虑;在职场上,我们会因为无法完成某项工作而焦虑;在孩子的教育过程中,我们会因为担心无法找到合适的学校而焦虑;在人到中年时,我们为因为身体的退步而焦虑。因为我们无法确定能否处理这种情形。因此对于一些场景,我们到会显得十分从容,“开卷考试,有书在手心中无忧”,“跟自己的下属沟通绩效问题,轻车熟路”,“住在一个教育资源较为发达的地区,孩子的教育问题就显得不那么明显”,“每天花半小时来做慢跑,非常显著的改善身体状况”。

奇普•康利(Chip Conley)在他的《如何控制自己的情绪》很好的阐释了为什么会焦虑:

焦虑 = 不确定性 * 无力感

在讲述如何控制焦虑者众情绪时,他分享了一段TED上的经历:

TED曾要求我谈谈幸福的无形资产,以及商界和政界领导人应如何开始学习衡量和重视人生最有意义的东西。这似乎是一个无情的讽刺,我的任务是登上讲坛,以一个专家的身份,探讨一个那时连我自己都觉得难以捉摸的主题。尽管我在《巅峰》一书中宣称要以自我实践的方法来经商,但我已经失去了那种神奇的感染力。“我陷入了觉得自己无用的思维定式,而能够克服这一挑战的唯一办法就是写下有关我人生经历的演讲词并练习无数遍。我以为追求完美是缓解焦虑的良药。你也许有过类似的遭遇,认为设定目标会让自己舒服。但事实是,追求完美只会放大焦虑。在接下来的几个月里,我一直痛苦地写着一份以幸福为主题的演讲词,这一次和我正常准备演讲的经历完全不同。我的风格是倾向于即兴发挥和贴近听众,而非机械式和反复演练。于是越临近TED大会,我就变得越焦虑。我的演讲被安排在会议的最后一天(就在电影导演詹姆斯·卡梅隆之前)。所以当我抵达会场时,我还有5天痛苦难熬的日子,要在聆听其他演讲者发言中度过,这使我越发焦虑。”

因此,越是不确定或者超出自己能力的事情,焦虑的情绪就越容易产生,而越是这样,从这种焦虑情绪正挣脱的信心就越低,不安全的感觉就越强。

哪样的程序员更有安全感

每个人都有一个自己的舒适区域,结合内部舒适区域和外部期待,下图能说明一些问题:

根据上图所示,具有安全感的程序员一般长这样:

跃跃欲试,接受挑战, 扩展自己的舒适区。我们的身边总是不乏这样的人,他们跃跃欲试,脸上总是挂着自信的笑容,总是各种场合中的焦点,从来不满足现状,每每有新挑战时,总会看到他们的身影。 如果用动态的眼光来看待他们的话,我们会发现他们的舒适区域始终处于一个动态的过程——始终在扩张之中,或者说他们在不断GET新技能。随着舒适区域的扩张,个人追求不断实现,而个人追求的实现,又带动其自身的扩张,还有什么比实现自己目标多带来的自信和成就感更足呢。等待的,将是社会期待的增加,也就是你的同事,领导对你有了认可,并提升了他们对你的期待,随之而来的将是更有挑战的工作,又一个扩展自己舒适区域或者GET新技能的机会便发生了。

快速学习, 迅速减小社会期望和舒适区的差别。程序员的一个非常厉(ku)害(bi)的技能就是学习能力。除去被逼迫的成分外,这是一个非常实用,堪称看家本领之一。因为IT行业技术迭代速度之快令人发指,当某一项技术还没有熟悉的时候,关于该技术的缺陷以及改进方案已经吵的很热了;当你刚刚为掌握某个软件开发实践而洋洋得意时,突如其来的xxx已死之说,真是让你死的心都有了。其中的例子数不胜数,我们不妨看看(一个例子说明)。ThoughtWorks对员工有这么一个要求,每年至少学习一门编程语言,其实真是不多,实际上每年学习的都要远远多于要求。因此,强悍的快速学习能力,能够快速武装自己,胜任新的工作,提神核心竞争力,迅速扩大舒适区同时减小社会期望与其的差别。当然,并非所有新技术都值得学习,但是有两点值得提出:1. 新技术的思想能够扩展自己的视野,拓宽自己的思路;2.新技术的获取,能够大大提升自己的学习能力,你会越学越快,这个加速度会一直保持到你的大脑达到生理水平的巅峰。

很强的执行力, 减小不确定性. 它的反义词大概是“拖延症”,俗称懒病。某百科上给出了这样的解释:

严重的拖延症会对个体的身心健康带来消极影响,如出现强烈的自责情绪、负罪感,不断的自我否定、贬低,并伴有焦虑症、抑郁症等心理疾病,一旦出现这种状态,需要引起重视。

看到这里,相信很多人都中招了吧。无限的拖延,无法正面改变即将发生的事情,但是它却能极大的增加事情的不确定性,并且随着事情的临近,这种不确定性在内心中的焦虑反应呈指数级增长,反过来,这种情绪又反哺拖延,除非有强大的外部力量介入,强行打破这种负能量闭环。说的这么高端,有没有实际的例子呢。不仅有,而且非常多,很多人大概都有这样的经历吧,在年终总结的截止日期的前一天晚上,奋笔疾书加班加点的写总结,又或者在做演讲的前一天晚上,开始写PPT。

获取安全感

Rule #1: 学习那些自信满满地程序员们

当然也需要甄别一下啦,有的人可能只是看起来很自信。不过上面提到的三个特征应该是妥妥的能够提升你的安全感的办法。其实我在写这条建议是,很是纠结。纠结在哪呢?我觉得内心没有安全感的程序员极度“肤浅”的分成两类:懒和其他。据非常不负责任统计(看看周围的人),其实很多时候还是因为懒,如果是真的懒,那就没救了。

Rule #2: 通过焦虑情绪公式来提升安全感

发动数学天赋,当某人或事情让人感到焦虑时,这两件事情能够帮忙:

制作一张平衡表列出你知道的和你能影响的,它可以帮助你消除不确定性,去掉你对不知道的事情的神秘感,明确你所面临的是什么。因为焦虑只会潜藏在黑暗中,人们对不了解的事物有一种天然的恐惧,就好比美味的螃蟹在一开始的时候并不是每个人都敢吃的。然而黑暗中的不明事物也有可能真的是你所恐惧的事物也说不定,但这又有什么关系呢!当你知道原来在黑暗之中潜藏了一个恐怖猎人——霸王龙,你的对手已经清晰了,接下来要考虑的是你是否有能力对付的了它。你的焦虑情绪现在全部由无力感组成了。

当你把所有的相关因素归类到这四个象限后,也就意味着能够帮助你消除的计划产生了:你不需要对不能影响的事情做出任何反应,因为只是徒劳而已;你需要做两件事情,弄清楚那些不知道的因素,做一些能够对解决当前问题产生正面影响的行动。

想想最极端的结果,降低无力感,如果最快的结果也是能够承受的,那还有什么是输不起的呢,更何况通常最坏的结果都不是最坏的,最坏的是由最坏的结果所引发的内心恐惧,焦虑和不安的负面情绪。当然每个人的无力感是不同的,因为每个人的舒适区域是不同的,舒适区域越大,无力感想对会越小。这很好理解,因为从概率的角度来讲,你能处理的问题范围,把握度会随着舒适区域的增大而增强。但直面极端结果是一个普适的方法。一方面,往往当最坏的事情发生时,你却释然了,反而一身轻松,能够坦然面对。这正是该公式所表达的核心思想之一,当结果发生时,不确定性为0,焦虑的情绪得到了释放,你当然会前所未有的轻松,这也是为什么人们到了让TA抓狂的事情发生时,却能坦然处之,临危不乱。另一方面,想想最极端的结果,有助于你评估失败的代价,很多时候人都是被自己或者他人吓怕了,一旦评估的结果并没有那么不可接受,自然也就没有必要战战兢兢的过着了。

Rule #3: 匹配外部期待和个人能力

左图是一张耶基斯-多德森定律图,其中包含三个要素:效率,动机和任务难易程度。在一般情况下,动机愈强烈,工作积极性愈高,潜能发挥的愈好,取得的效率也愈大;与此相反,动机的强度愈低,效率也愈差。因此,工作效率是随着动机的增强而提高的。然而,心理学家耶基斯和多德森的研究证实,动机强度与工作效率之间并不是线性关系,而是倒U形的曲线关系。具体体现在:动机处于适宜强度时,工作效率最佳;动机强度过低时,缺乏参与活动的积极性,工作效率不可能提高;动机强度超过顶峰时,工作效率会随强度增加而不断下降,因为过强的动机使个体处于过度焦虑和紧张的心理状态,干扰记忆、思维等心理过程的正常活动。

因此,你需要做的是让别人更好的了解自己,如果你觉得自己很厉害但是确没能让别人知晓,那么别人对你的期待就会低于你的预期,你将要做的工作的难度也不太可能匹配你所掌握的技能,当然面对这样的工作,估计大部分人也没有新鲜,激动,亢奋,大鸡血的感觉吧。另外一方面,如果你给别人的感觉是很牛X,结果有可能让你面临超出自己技能很多的任务,这会增加你的焦虑,降低你的效率,影响个人的名声。

Rule #4: 焦虑,焦虑着也就没那么焦虑了。

说了这么多,感觉焦虑是一种要完全消灭,即便不能消灭也叫尽量避免的情绪,但凡事没有绝对,完全没有焦虑这种情绪也是不可取的,程序员需要适时地扩大自己的舒适区,而且焦虑也有它正能量的一面。

走出舒适区会增加人的焦虑程度,从而产生应激反应,其结果是提升对工作的专注程度。在这个区域中被称作最佳表现区——在这个区域之中,人的工作表现将会得到改善,并且他们的技巧也会被优化。但是罗伯特 耶基斯(1907)的报告中提到“焦虑可以改善工作表现,但是当超过某一最佳激励状态之后,工作表现就开始恶化”,如果一个人离开最佳表现区,他将进入一个危险区,在危险区中焦虑程度的上升或者舒适程度下降会带来工作表现的快速恶化。

所以在绩效管理之中管理者,或者是教练应该让人进入最佳表现区,并且维持一段足够的时间,从而达到更好的工作表现,提升他们的技巧,并且将这些表现和技巧固定下来。同样的道理,在目标设定之中改变焦虑的程度就会改变工作表现。