走少有人走的路:學編程真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給你們設計的路線、介紹各種工具和教程,就像扶著小孩子走路一樣,學習變量、基本語法、完成小程序的挑戰、制作簡單的網頁,你們一步一步建立起個人成就感,自信心開始增長:你覺得自己基本上具備一個程序員的基本素養。編程哪有那么難呢?你們開始在朋友圈曬你們的“學習成績”。

這就是問題所在,你們處于稱之為「蜜月期」的時期:盡管你感覺處于學會編程的轉角,但實際上才剛剛敲門,門還沒有推開。

想一想,假如你打算重新學習一門外語。拿日語來說吧,從前,你只知道有這門語言,從日本動畫片《柯南》或者是日劇《白夜行》等學會了兩句,然后你打算開始學習日語。每周利用自己的業余時間加入學習班,跟著一個教程學習了六周,會了基本的語法、句式、也能日常對話,可是你能說你會日語嗎?

學習一門普通語言尚且如此,更何況是編程語言呢?

況且我們的日常語言是模糊語言,大腦比計算機高級太多,能夠處理的模糊模式也多很多,試著第一次讀讀下圖:

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,設計數據庫。

此時此刻,你們蒙圈了,即使你們當中潛在的優質同學也在懸崖邊上徘徊,你們充滿沮喪:「還沒有學會如何展翅飛翔?!?/p>

此時此刻,你有幾種選擇:

  • 自己不是這個料,打退堂鼓,退回去,原來干什么繼續干什么。
  • 管他的,縱身一躍,摔得遍體鱗傷,繼而對編程深惡痛絕。
  • 對自己負責,勇于承擔責任。在懸崖邊上一邊擔驚受怕,一邊鍛煉自己,觀測風向,選擇適合自己的恰當時機,縱身一躍 -- 終于開始展翅

如何對自己負責,如何承擔責任呢? 回到最開始的問題,這是你自己的責任嗎?這是你自己的問題嗎?造成你現在沒有足夠能力飛翔的原因是CGC課程設計的問題?是教練輔導不好的問題?還是無法控制的社會因素造成的?這個問題應該別人和社會來幫我解決,還是應該我自己主動解決呢?

加入CGC的時候,我們有一項必要條件:每周至少投入10-15個小時,大家需要問問自己,都有做到嗎?

如果你決心讓自己成為有編程能力的人, 從 懸崖迷茫徘徊期 生存下來,是時候在這個點讓自己 All-in了,

要有足夠的勇氣和判斷力,承擔責任,也要拒絕不該承擔的責任和拒絕當下不該有的享樂。

放棄人生中的某些東西,一定會給心靈帶來痛苦。放棄夜晚去跟朋友KTV、放棄周末去跟戀人游山玩水、放棄抱著薯片看韓劇。當然,你也可以回避放棄這些東西,那就是永遠原地踏步,不讓自己展翅飛翔。

相當多的人都沒有選擇放棄,因為他們不想經受「放棄的痛苦」。放棄可能帶來不小的痛苦,需要放棄的部分,有著不同的規模和形態。上面這些都是小規模的放棄:放棄暫時當吃貨、放棄暫時當旅游達人、放棄暫時當社交達人、放棄享樂其他誘惑。其實這些放棄并不會帶來太大的痛。

更大的放棄是固有人格、放棄根深蒂固的行為模式或者意識形態甚至整個人生理念,其痛苦可想而知。一個人要有所作為,在人生旅途中不斷邁進,或早或晚,都要經歷需要放棄的重大時刻。

拿我自己近期來說,我去年放棄了我用三年一手養大的孩子Rails Girls,年輕人的兩三年就是一輩子,我放棄了我上輩子,可想其中之痛?;叵胛以谄渲械臉啡ず统删停航o7個城市1000+的人免費提供workshop,多么實實在在的奉獻;上南方都市報和環球時報鼓勵更多女性來編程,多么實在的認可;可我放棄了,為此還哭了幾次。媽蛋,現在回想起來,不免傷感,心中還那么痛。那些朋友、那些人、那些故事,都歷歷在目。

只有當你有All-In的決心和勇氣,你才能才這個階段生存下來,你才能進入下個階段。

但這僅僅是編程生涯的開始,對,這才算入門而已。 想要越過這個階段, 你可以:

  1. 找個學習伙伴,即使是另外一個是初學者,你會驚訝發現兩雙眼睛更容易發現bug。
  2. 閱讀她人的代碼,學習別人的設計思維、模式。學習的開始,應該對老師的方法全盤接受,不應有批判精神,要是你已經具備批判的框架,你還要模仿人家干嘛呢?
  3. MVP迭代。Minimum Viable Product,大家在周后兩周都有一個相對宏大的想法,但你應該從小處入手,不停地練習。

3 尊重事實,逃脫海市蜃樓

什么是海市蜃樓?

本質地講,就是你知道某個地方是你的終點、你的目的地,但不知道如何走向目的地,且被困在沙漠當中,缺水、環境惡劣危險,出現致命地幻覺。

要理解為什么在All-in獲得了從懸崖縱身一躍的勇氣和能力之后,從懸崖躍起還會進入海市蜃樓的困境,需要繼續從資源密度所需知識的范疇講起

資源密度

搜索Google Learn to code, 有幫助的工具、教材、視頻等等有1.09億,這是我們這個時代的禮物。

learn_to_code_Google_Search.png

越在初級階段,資源越多,這是為什么大家開始的時候會有蜜月期;越往后面,資源越少,這是為什么大家會有進入資源稀缺的沙漠之旅。

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

所需知識范疇

與知識密度正好想法,入門起步階段所需知識較少,越往后面系統范圍、所涉及的層面越多,所需知識范圍越廣。

所需知識范疇表
蜜月期 迷茫期 沙漠之旅 膨脹期
Basic Syntax Building</br>Debugging CS fundamentials</br>Object-orientation </br>Agile development</br> Moduarity</br> Frameworks</br> Code smells </br>Method decomposition</br>How to ask for help </br>and so on Testing</br> Best practices </br>Optimization </br>Architecture</br> Data modeling</br> 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)


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容