https://zhuanlan.zhihu.com/p/26114277node
*****************************************python
在舊金山舉行的 erlang/elixir 2017 大會上週結束。此次,我並未參加 —— 權衡再三,我選擇了這周的 complete OTP 培訓,畢竟大會的視頻 youtube 上找得見,能夠慢慢補,培訓錯過了就沒了。程序員
參加一次技術培訓,代價每每不菲,像這樣一個四天的培訓,價格是兩千多刀,你很難說出它有多值 —— 培訓的主題有一半都是我已經瞭解或掌握的內容,在過去的一兩個月,我還給個人 team 培訓過;另外一半,其實給我空出來四天的時間,我本身看書或者讀 erlang 的文檔,獲取到的知識也未必比參加培訓少,那麼,花這樣的大價錢參加的意義是什麼?微信
本身先想一想看。app
尋找合適的,志同道合的工程師?No。經過參加培訓達到這樣的目的,既不規模,也不經濟,還不如去相關的 meetup 上勾搭呢。oop
跟講師套磁,創建關係?hmmm... 你以爲四天能套出什麼結果?你們都是實誠的程序員,講究以德胡人,活好的天然互相傾慕(我跟講師約了五月份他來灣區有機會喝個咖啡聊聊);活很差,培訓完就是路人。ui
朝着這些方向想,too simple, sometimes naive。編碼
其實,花錢參加培訓的終極意義是(敲黑板):你購買了一次 附帶培訓的諮詢服務。3d
(此處應該有黑人問號臉)code
就拿我參加的 complete OTP 培訓來講吧。講師 Francesco 是 Erlang Solutions 的 founder。Erlang Solutions 是一個諮詢公司,不少著名的開源項目(好比:RabbitMQ,Riak,MongooseIM)來源於他們,他們仍是 erlang/elixir 大會的發起人。考慮到這樣的 profile,你去 Erlang Solution 買個四天的諮詢服務試試看?不定給你派個什麼水平的諮詢師來,並且起價沒個幾萬確定下不來。兩千?作夢去吧。
惋惜彷佛沒人懂這個理。也幸虧沒人懂這個理,這樣一門課程,冷清到全世界的 erlang/elixir 程序員(雖然基數很小)加起來,包括我也就只有九我的參加。而時時刻刻都在提問的,只有我和一個 apple 的工程師(是的,apple 內部有項目在用 elixir 作,yeah,erlang/elixir 程序員能夠嗨森一下,而後該幹嗎幹嗎去了)。而提問的方向聚焦在平時工做中遇到的問題的,和公司業務相關的,基本就是我。
這個 complete OTP 的課程內容不算特別緊湊,其中,作一個 ebank 項目的練習時間,快佔了一半。這個寶貴的問各類二逼問題的時間,你造麼 —— 絕大多數工程師都在寂靜無聲地吭哧吭哧寫代碼,偶爾遇到問題了問問 Francesco 這怎麼回事,那裏爲何編不過去?
這就比如你守着扁鵲,不讓他給你問診,卻讓他給你剪指甲。
或者,說個程序員熟知的段子:妹子對序員說你要是能讓論壇的人都吵起來,我今晚就歸你。序員在論壇裏說:PHP 是世界上最好的語言。。。
暴殄天物啊。
exercise 沒有價值麼?非也。這個培訓使用的 exercise 很是經典,從 gen_server,gen_fsm,gen_event,一路練習到 supervisor,application,以及使用 sasl 深刻了解 release 的過程,若是誰能把整個 exercise 獨立完成,我以爲他/她就能擊敗 80% 的 elixir 程序員,真能夠在簡歷上號稱一下掌握 OTP 了。
頗有價值,但實現這個價值的時機不對。
全班同窗彷彿只有我預先(或者以後)把 exercise 作完,而在 exercise 的時候,問課程中各類沒有來得及問的問題,以及工做中踩到的各類坑。
你看我都問了哪些很 "silly" 的問題:
爲何說 start_link 是個同步的過程?
application 爲何會起兩個 process,再啓動 supervisor?(其實這個問題我在書中看到答案,只是爲了引出更多的問題來確保我理解對了)
group_leader 的意義何在?(我以爲我懂了,但我不知道我是否是真的懂了)
使用 global process 是否是個好的作法(此次我乾脆無恥地打開我工做中寫的 auto compiler 的代碼跟他探討)
我這樣這樣這樣用 ansible provision vm.args 和 nodes.config,究竟對不對?有沒有更好的作法?
等等。在 Francesco 的推薦下,我甚至還讀了一些 OTP 的源碼,和他探討源碼裏的細節。
這纔是有效地利用這樣的「附帶培訓的諮詢服務」。
若是你以爲我說的對,那麼接下來咱們看看如何從一次培訓中收到最大的收益?
選擇合適的講師
若是抱着上述所說的目的,那麼,培訓的內容實際上是次要的。既然把它當作是「諮詢」,那麼,咱們須要選擇合適的「諮詢師」。
前面說了,此次的講師是 Francesco Cesarini,咱們前面介紹過他是 Erlang Solutions 的 founder(這個身份暫且放在一邊不提),他的其餘身份(吸引個人身份)是:Designing for Scalability with Erlang/OTP 一書的做者,erlang/OTP R1 的開發人員。
也就是說,可能除了 erlang 的幾個 founder 外,若是在全球範圍內海選十個有資格講 OTP 的人,他一定是其中之一,並且排位靠前。
我知道大部分讀者不知道 erlang/OTP,大概也搞不清 Francesco 和 San Francisco 有什麼區別。咱們換個角度說 ——
若是你作微信服務,你平日燒香供着的姓張的舅舅開個小班培訓,談談如何作微信下的服務,票價一萬;而程序君也同時作幾乎相同的培訓,吐血白菜價一百,你參加哪一個?
搞清楚了這道選擇器後,咱們再出一道題:Rich Hickey 有個 clojure 的 培訓,或者 Guido van Rossum 講 dive into Python,面向中級水平的程序員,而做爲 clojure 或者 python 的高手高手高高手,你參不參加這個培訓?
作足功課
培訓上可能講到的內容,是否是先本身過一遍,把全部本身沒搞明白的問題整理出來,在培訓的過程當中隨時發問呢?
工做中,咱們在一個方向上工做久了,業務熟悉了,就會成爲所謂的「專家」,若是周圍的人在你的領域都遠不如你,便會自覺得是。是否是能夠趁着這樣的機會把本身工做中遇到的問題,不懂的,似懂非懂的,覺得本身懂的,覺得本身對的,都拎出來跟講師辯一下呢?
用這樣的機會跨越平臺期
程序員估計都知道一萬小時理論 —— 足夠長時間(一萬是個約數)在某個領域的刻意訓練(deliberate training)可以讓你成爲專家。咱們據此堅信,24小時學會 C++ 是錯誤的,膚淺的;相反,只要功夫深,就能學精 C++。
也彷佛不太對。
由於我遇到太多幹了十幾年的平庸程序員了。他們彷佛困在一個不管怎麼努力也很難跨越的平臺期 —— 這是一萬小時理論裏的禁飛區。
此次培訓,同窗們的 erlang/elixir 的工做經驗都遠高於我 —— 我 elixir 三個月,三千行代碼經驗,erlang 零工做經驗。在作 exercise 前,我都搞不清楚寫代碼的時候何時該用分號,何時該用逗號。
但四天下來,我以爲我寫 erlang 代碼的水平(雖然仍是比較慢,還會漏句號)已經並不比有好幾年 erlang 經驗的同窗差多少了。
這是爲啥?
我想,不少人誤解了 deliberate training 的含義了 —— 朝着目標頭懸梁錐刺股是對的,但要知道該如何跨越平臺期而進階。我最近每週六晚都帶着小丫頭溜冰。我知道她跟我溜得再努力,每次一刻都不停歇一個小時滑一百圈也不可能成爲下一個關穎姍。個人上限就決定了她的上限;但是,她要是有幸跟着關穎姍滑上一年,接受指點,一樣的努力程度,往大了不敢說,一年後制霸 Cupertino 同年齡段應該不成問題。
因此 deliberate training 很重要的組成部分是 feedback loop。對,我又要灌 build - measure - learn 的雞湯了。你光是機械地 build build build,沒有 measure,哪來 learn 呢?measure 很重要。更重要的是,怎麼 measure,誰來 measure?用什麼 criteria 來 measure?這頗有講究。
跟着一個高手學幾天,即使不能功力大漲,但起碼知道本身應該突破的脈門何在。咱們不是都讀過令狐沖和風清揚在思過崖上的故事麼?
善用你的老師。老師不光是有血有肉的,由碳基構成的那些位,還有無色無味的,從 0 和 1 演化而成的源代碼們。
Linus 說:read the F**KING code!
咱們讀一本優秀的書,就像是和做者在進行心與心的交流;咱們讀一段美妙的源代碼,如同長輩和晚輩間的薪火相傳。這世上,也許只有寫做和編碼,可以像無崖子渡讓內力給虛竹那樣,並不太費力就能完成知識和經驗的傳承。
我問的好些問題,Francesco 建議我去 xxx 目錄下讀源碼。好比 application master,好比 gen_server,我就着源碼,在紙上畫着流程,嘴裏喃喃自語道:bravo!
(app master 和 x process)
(gen server)
讀到不通處,再和他探討。
你看,傻小子郭靖,不就在七公手下,這麼成長的麼?
就寫這麼多。此致,敬禮。
Head fake 1: 你覺得這文章是寫給你的?不不不,是寫給個人同事的。
Head fake 2: 你覺得這文章是在告訴你看清培訓的意義,以及如何選擇培訓?不不不,請看思考題。
思考題:趙丹陽 08 年 211 萬美金拍得和巴菲特共進午飯的機會。他是真的爲了和巴老聊天套磁尋覓投資機會麼?