走少有人走的路:学编程真TM难

Coding Girls Club 第一期学员们:

我们一起相伴六周,每日Daily Topic,每周一次线下Meetup以及每周一次Online Meetup,时间真快。今天是第一期的最后一次meetup,有些掏心窝的话,要跟你们说说。

你是编辑,来学编程干嘛呢?
你是律师,来学编程干嘛呢?
你是要找HR工作的毕业生,来学编程干嘛呢?你是测试人员,来学编程干嘛呢?
你是旅游攻略达人,来学编程干嘛呢?你是市场,六周都在外出差,来学编程干嘛呢?
你已经在用世上最好的语言,来学Ruby干嘛呢?
你创业当合伙人,那么忙,来学编程干嘛呢?
你出差那么忙,一直在香港,来学编程做啥呢?

这是你们需要自问的问题,而且是你们自己来回答的问题,是解决学编程路上所有问题的基本前提。不想去搞清楚这个问题,甚至认为「这不是我的问题」,一点好处都没有;指望别人解决,也一点用处都没有。唯一 的解决办法 -- 你应该勇敢地说「这是我的问题,这应该也必须由我来解决!」

六周,大家到现在都经历过了什么?

最先开始,相比大家对于学习编程抱着极大的热情:我要把我业余的时间全部投入在编程上面、我一定要学会编程,甚至有同学购买新的Mac等等;大家从对编程什么都不知道开始,第一次打开Terminal、第一次自己苦心琢磨安装环境、第一次跑通自己的小程序,学习Git/ CLI/Ruby基础知识,你们的能力(�Competence)获得增长,在此过程中,你们有你们的小确幸。我相信,犹如我自己开始学习编程一样,每一次依靠自己的智慧和努力解决每一个学习上面的bug和疑惑,我都能获得十足开心,我在进步,我能感受到升华。 Running program successfully often made my day!

但是,更多的是其他的情绪,焦虑、挫败、迷茫、不自信,想放弃、觉得自己不是学习编程的料子、以至于回归到刚刚开始的问题:我干嘛来学习编程了?我的初心是什么,学了一遭,我还是啥都不会,依然不能自己独立作出网站,写出程序;离开依葫芦画瓢的教程和TA的指导,我依然不会编程。

对的, 学习从来都不是一件容易的事情,传统的教育系统培养学生十几年,企业才招收你;就编程而已,更是: 真TM难学

我曾经当过Rails Girls 三年志愿者,论及我直接和间接组织的workshop 共18次:北京6次、上海1次;做过一次6个城市同一天workshop的总协调人员、7个城市7周的总调度人;每次按50人估算(北京有时候多一点,最后一次有120个参与者),有让差不多让1000+的女孩子接触编程,那么你们知道最后有多少个人真正成为有编程能力的人吗?

两个。

一位是若水,这是她的故事( http://www.ituring.com.cn/article/202161 ); 还有一位是北京去年Workshop的学员,她原本在传统行业,受RG影响,后来自学了Python(故事转弯有点大,我们教的可是Ruby)。对,千分之二的转化率。难不难呢?挺难的呢。

1 推迟满足感,认清蜜月期

很难去责怪那另外千分之九百九十八:当初她们开始都抱着极大的热情来学习编程,却没有几人学成。

一方面是就像我们小时候听到的「狼来了」的童话故事,只是现在童话故事中的老狼换成了编程,让人望而生畏。大家周边从小也不乏这样的声音:女孩子学什么理科、搞什么计算机呢、学点文科找份踏实的工作就行了。这种社会声音制造莫须有的恐惧,吓退了很多人学习编程。

另一方面, “学习编程”的运动在世界各国兴起,各种学习资料和教程,打破了学习的边界,而且也证实学习编程确实无害。例如Codecademy Code School, Edx/Coursera的各种免费公开的MOOC课程,从入门到高级,比比皆是。跟着教程作出东西会制造一种我已经会编程的假象。

但,新问题也出现了。有时候不再是害怕开始踏入学习编程,对于现在的你们,你们已经开始学习编程,应当已经克服「狼来了」这部分这种恐惧。新问题是过高的期望和急功近利。

过去六周,CGC给你们设计的路线、介绍各种工具和教程,就像扶着小孩子走路一样,学习变量、基本语法、完成小程序的挑战、制作简单的网页,你们一步一步建立起个人成就感,自信心开始增长:你觉得自己基本上具备一个程序员的基本素养。编程哪有那么难呢?你们开始在朋友圈晒你们的“学习成绩”。

这就是问题所在,你们处于称之为「蜜月期」的时期:尽管你感觉处于学会编程的转角,但实际上才刚刚敲门,门还没有推开。

想一想,假如你打算重新学习一门外语。拿日语来说吧,从前,你只知道有这门语言,从日本动画片《柯南》或者是日剧《白夜行》等学会了两句,然后你打算开始学习日语。每周利用自己的业余时间加入学习班,跟着一个教程学习了六周,会了基本的语法、句式、也能日常对话,可是你能说你会日语吗?

学习一门普通语言尚且如此,更何况是编程语言呢?

况且我们的日常语言是模糊语言,大脑比计算机高级太多,能够处理的模糊模式也多很多,试着第一次读读下图:

走少有人走的路:学编程真TM难_第1张图片
disordered_characters.png

再仔细看一遍上图,语序全都是乱的,却也一点都不影响你的大脑识别其中信息。但计算机不行,计算机必须语法、算法等丝毫不差,否则就会报错出bug。

因此,在享受蜜月期的同时,必须清醒地认识到「推迟满足感」的意义:

编程真正的快乐绝不在于跟着教程按部就班完成别人设置的任务,而是重新设置快乐与痛苦的次序:认清自己目前对于编程「You know nothing」的事实并感受痛苦;然后解决接踵而来的新问题并享受更大的快乐,这是唯一可能让你前行的方式。

【插入曲】编程路上的四个时期

对编程了解愈少,思维就越是混乱。虚假、错觉和幻觉,只能让我们不知所措。我们对编程实际情况的观念就像一张地图,凭借这张地图,我们同我们前进路上的障碍不断协调和谈判。

地图准确无误,我们就能确定自己的位置,知道要到什么地方、怎样到达那里;地图漏洞摆出,我们就会迷失方向。

在进入阶段二之前,我们先来看看 The Bigger Picture

coding_is_hard_confidence_competence_by_hand.jpg

上图画出了编程旅途上典型的四个阶段,下面从可获得资源密度(解决问题的可能性)以及所需知识范畴(需要解决问题的难度)来详细定义说明这四个阶段。

编程旅途中学习的快乐与你的自信心相关联,而信心源于编程能力,对应上图坐标系中的XY轴。

  1. 手把手蜜月期是充满快乐且拥有丰富优质学习资源的时期,看起来你掌握不少tricky的技能,但其实完全是在老师(书、MOOC课程、CGC的TA)的刻意支持下做一些do-ables, 实际上并不tricky。
  2. 悬崖迷茫徘徊期是痛苦的觉醒,当蜜月期结束时会异常痛苦。是的,你会发现一个痛苦的事实:离开教程和教练,实际上,你完全无法独立依靠自我解决任何问题。在此期间,你需要不停地debug,以及依靠自己那点稀薄且不太靠谱的编程知识问自己正确的问题、请教达人正确的问题,直到你用自己的方法实实在在地完成你自己的to-do list。
  3. 绝望沙漠之旅漫长而且孤独,恍如进入无人之境,好像每条路都能到罗马,尝试之后被挫败,不停地绕圈子,同时又极其渴望资源。此阶段,容易走入歧途,犹如海市蜃楼。
  4. 上升膨胀期 最终你走出荒野沙漠,不管你是一带一路还是西天取经。终于你把所有你会的的语法(syntax)、模式(pattern)、算法(algrithm)、想法(idea)、实践(practice)搭建出你自己的网站。但你的代码依然很脆弱,宛如纸房子。你膨胀,因为你自我感觉良好:你的网站尚在运行,你运用有用的模式,你的朋友觉得你的界面很漂亮。 但离CGC所言成为真正有编程能力的人,还有很大差距。

2 承担责任,纵身一跃度过迷茫期

从你们报名加入的那一刻起,你们就超越绝大多数人。

6周的时光,前四周是蜜月期,你们创立了粽子理论来理解面向对象思维、用Ruby语言来写诗、用律师的概念跨界类比理解Ruby的设计思维,你们获得甜蜜的感觉。

最后两周是实战,CGC把你们推向悬崖,从Idea出发,设计功能,描绘 User Story,绘画Page Flow,设计数据库。

此时此刻,你们蒙圈了,即使你们当中潜在的优质同学也在悬崖边上徘徊,你们充满沮丧:「还没有学会如何展翅飞翔。」

此时此刻,你有几种选择:

  • 自己不是这个料,打退堂鼓,退回去,原来干什么继续干什么。
  • 管他的,纵身一跃,摔得遍体鳞伤,继而对编程深恶痛绝。
  • 对自己负责,勇于承担责任。在悬崖边上一边担惊受怕,一边锻炼自己,观测风向,选择适合自己的恰当时机,纵身一跃 -- 终于开始展翅

如何对自己负责,如何承担责任呢? 回到最开始的问题,这是你自己的责任吗?这是你自己的问题吗?造成你现在没有足够能力飞翔的原因是CGC课程设计的问题?是教练辅导不好的问题?还是无法控制的社会因素造成的?这个问题应该别人和社会来帮我解决,还是应该我自己主动解决呢?

加入CGC的时候,我们有一项必要条件:每周至少投入10-15个小时,大家需要问问自己,都有做到吗?

如果你决心让自己成为有编程能力的人, 从 悬崖迷茫徘徊期 生存下来,是时候在这个点让自己 All-in了,

要有足够的勇气和判断力,承担责任,也要拒绝不该承担的责任和拒绝当下不该有的享乐。

放弃人生中的某些东西,一定会给心灵带来痛苦。放弃夜晚去跟朋友KTV、放弃周末去跟恋人游山玩水、放弃抱着薯片看韩剧。当然,你也可以回避放弃这些东西,那就是永远原地踏步,不让自己展翅飞翔。

相当多的人都没有选择放弃,因为他们不想经受「放弃的痛苦」。放弃可能带来不小的痛苦,需要放弃的部分,有着不同的规模和形态。上面这些都是小规模的放弃:放弃暂时当吃货、放弃暂时当旅游达人、放弃暂时当社交达人、放弃享乐其他诱惑。其实这些放弃并不会带来太大的痛。

更大的放弃是固有人格、放弃根深蒂固的行为模式或者意识形态甚至整个人生理念,其痛苦可想而知。一个人要有所作为,在人生旅途中不断迈进,或早或晚,都要经历需要放弃的重大时刻。

拿我自己近期来说,我去年放弃了我用三年一手养大的孩子Rails Girls,年轻人的两三年就是一辈子,我放弃了我上辈子,可想其中之痛。回想我在其中的乐趣和成就:给7个城市1000+的人免费提供workshop,多么实实在在的奉献;上南方都市报和环球时报鼓励更多女性来编程,多么实在的认可;可我放弃了,为此还哭了几次。妈蛋,现在回想起来,不免伤感,心中还那么痛。那些朋友、那些人、那些故事,都历历在目。

只有当你有All-In的决心和勇气,你才能才这个阶段生存下来,你才能进入下个阶段。

但这仅仅是编程生涯的开始,对,这才算入门而已。 想要越过这个阶段, 你可以:

  1. 找个学习伙伴,即使是另外一个是初学者,你会惊讶发现两双眼睛更容易发现bug。
  2. 阅读她人的代码,学习别人的设计思维、模式。学习的开始,应该对老师的方法全盘接受,不应有批判精神,要是你已经具备批判的框架,你还要模仿人家干嘛呢?
  3. MVP迭代。Minimum Viable Product,大家在周后两周都有一个相对宏大的想法,但你应该从小处入手,不停地练习。

3 尊重事实,逃脱海市蜃楼

什么是海市蜃楼?

本质地讲,就是你知道某个地方是你的终点、你的目的地,但不知道如何走向目的地,且被困在沙漠当中,缺水、环境恶劣危险,出现致命地幻觉。

要理解为什么在All-in获得了从悬崖纵身一跃的勇气和能力之后,从悬崖跃起还会进入海市蜃楼的困境,需要继续从资源密度所需知识的范畴讲起

资源密度

搜索Google Learn to code, 有帮助的工具、教材、视频等等有1.09亿,这是我们这个时代的礼物。

走少有人走的路:学编程真TM难_第2张图片
learn_to_code_Google_Search.png

越在初级阶段,资源越多,这是为什么大家开始的时候会有蜜月期;越往后面,资源越少,这是为什么大家会有进入资源稀缺的沙漠之旅。

资源密度表
蜜月期 迷茫期 沙漠之旅 膨胀期
Codecademy
Khan Academy
Treehouse
Code School
GA Dash
Udacity
edX
Coursera
W3 School
Code Combat
and so on
Stack Overflow
Tutorials
The Odin Project
Free Code Camp
RailsApps Project
Textbooks
The Docs
MOOC courses
Railscasts
Professional blogs
Corporate tech talks
The Docs
Conference speakers

所需知识范畴

与知识密度正好想法,入门起步阶段所需知识较少,越往后面系统范围、所涉及的层面越多,所需知识范围越广。

所需知识范畴表
蜜月期 迷茫期 沙漠之旅 膨胀期
Basic Syntax Building
Debugging
CS fundamentials
Object-orientation
Agile development
Moduarity
Frameworks
Code smells
Method decomposition
How to ask for help
and so on
Testing
Best practices
Optimization
Architecture
Data modeling
Systems

综合以上两点,就容易在资源稀缺(资源密度角度)的沙漠,遭遇知识诅咒(所需知识范畴角度),产生海市蜃楼的学习现象:

你不知道你不知道什么

怎么办呢?怎么走出沙漠呢?

尊重事实, 绘制尊重事实的地图。你必须独自走过这一遭,尝遍火焰山的滋味,过一过几天不喝水的日子,发现绿洲的欣喜。

前面说过,如果我们有一张准确无误的地图,我们就能知道自己的位置,就能走出沙漠,到达目的地。

可这张地图需要自己绘制,我们生来并不携带地图。在为人的经历中,过程中,我们探索,绘制自己的地图。当我们对事实认识越多,我们地图的准确性就越高。

绘制地图很难,不在于我们要重新开始,而在于:

  • 科技变化太快,尤其是编程技术,一两年就一个语言被淘汰。
  • 因为地形变化快,另一个难点在于我们要不断修订自己的地图,放弃原有的知识和看法。

下面有几个绘制地图的原则:

  1. 与他人聊天请教,找到一条适合你的最强路线。 地图是死的,资料也是死的,世界编程技术日新月异,只有已经掌握了这些地图绘制办法的人是活的。信息不重要,承载信息的人才是关键中的关键。
  2. 在 Google 搜集需要学习的资料 沙漠中搜索资料的指南针,虽然没有明确的路线,却能让你更接近目标。
  3. 看需要看的图书,保持专注避免东看看西看看 系统化地建立知识系统,即使是古代的看星星识别方位依然有效,哪怕比不上现代社会的GPS。
  4. 设定一个自己真正感兴趣的目标,自己反复实践和尝试 内化知识,找到自己地图缺陷的唯一最佳实践(best practice);反复意味着失败,若是没有强目标做指引,极易中途中断。

学习是一个知识管理的过程,而知识管理的可度量标准就是:你能否自己把这个知识传授给别人,你能会绘制一张地图,让后来闯进这个沙漠的新手依你的图走出来。这也是我们宣言中的一条。

4 保持平衡,防止膨胀

终于你走出前面三个时期,能够独立建立程序,且像模像样,外部对你一致好评。但你自己心里明白:金玉其外,败絮藏其内。意味着,你知道你的程序不够好,有安全隐患,但危险的地方在于隐患起来,而你还不具备火眼金金的能力。

这也叫躁郁期,一方面你觉得自己是一个标准的程序员,另外一方面你自己某些领域很薄弱。一条腿跑得很快,却又另外一条腿脱你后腿,因此会焦躁。随着时间的推进,你经历上升下降,波谷式前进,你会发现原来你很无知,因此会郁闷。

当你能力并不匹配表现出来的自信心,这叫膨胀。

但你终究会摆脱躁郁这种情绪,情绪让你难受,难受你就会学习,学会越多知识你对地级别的困扰就会越少。而且随着时间的推移,躁郁的情绪对你影响越来越小,你越能在平和的心情下调整自己的方向。终于,你上路了,而且是飞奔在路上,比以前的任何时候学东西都快而且学得好。

保持平衡,天秤的砝码要摆在中间。中国的文化管这叫中庸,在这个要求人人奋进拼搏的时代中庸并不太被提倡。但对于膨胀期的你来说,你需要保持一颗谦卑的心,把自己的姿态放低,海纳百川。对,度过这个时期最重要的方法是获得反馈:用户的反馈、同学同事的反馈、高级程序员的反馈等等。

这听起来让人很沮丧,原来学习编程这么难。我想这些旅程,程序员都应当经历过。对于你们,刚刚完成最初级的Club,而Coding Girls Club针对每一条成长路线都设计了进阶路线,初级中级高级,你接下来应当想法设法投入更多的时间到自学编程中去,将来以不同的角色加入到未来的高级Club,或许中级你还是学员,再往后,你就可以是初级club的助教: Capable of teaching is the primary measure of learning progress.

为什么要走这条少有人走的路?

是的,这真是一个问题。你们都已经有一份工作,生活也无大忧患,为什么要费那么多心力去学编程呢?我还在要你们放弃一些已有的东西,经历磨难和痛苦。

你们学编程确实挺难的,但我做的事情呢?Coding Girls Club的使命呢?好像更难一点,走的人似乎更少:赋予自我驱动型女性自学编程的元学习能力。自己学编程都已经很难了,却还要做这样更难的事情?

生命力。

大多数人,朝九晚五按部就班,暮气沉沉,缺乏实践的欲望,也害怕痛苦的感受。他们其实也相信可以实现某种目标,却不愿因此经受痛苦。

反观你们,已经选择一件很难的事情开始折腾,越难你就越痛苦,痛苦就要与就我割裂,经历各种折磨九九八十一难之后,超越自我,新生!

少有人走的路,有了领路的人,自然走的人会多起来,路也没有那么难走。你们,会给未来三年、五年、十年踏入编程领域的女性树立榜样,做吃螃蟹的人。是的呢,你们不光在超越自己获得新生,也在为女性这个群体谋福利,我们就安安静静地学、安安静静地做,不死命嘶喊,为平权,为新生。

小结

这是结束,这是开始!


下一期将于7月24日开始,欲报名请扫描下方二维码添加微信,或直接加微信 codingirls(只有一个g)


走少有人走的路:学编程真TM难_第3张图片

你可能感兴趣的:(走少有人走的路:学编程真TM难)