10 months ago

今天是中秋節,也是我們全棧班的最後一天。全班大多數同學都更新了自己的心得,我自己也決定來更新自己的結業心得。

我過去幾個月都沒有更新博客,有一些人應該納悶,我幹嘛去了?

這兩個月呢?我把台灣的班都停了。跑去北京搞 新生大學全棧營 去了。

全棧營的起因是這樣:李笑來老師,某天在網路上發了一個感悟「一年可以成長為全棧工程師」。但莫名其妙的這句話,就在大陸被黑出了翔。

在我這個外人看起來很莫名其妙的原因,其實是因為在矽谷呢,說這句話根本沒多少人會大驚小怪,甚至是把你黑出翔,但在中國莫名其妙的就變成了政治不正確。

隨便找了一下 Quora,看到這種題目也沒被戰....大家還積極討論? How can I be a full stack web developer in one year?

全棧工程師的定義,以及所需成長時間

  • 一年可不可以成長為全棧工程師?可以!如果你找到夠好的前輩帶你,以及在夠好的實戰環境,肯定可以。
  • 再來是「全棧」,有沒有一個定義?
    • 是在前端、後端、CSS、機器調效都練到大牛等級?
    • 還是在創業公司,可以一個人全搞定這些,產品還可以快速前進?
    • 還是心中想開發一個產品,可以自己一人從零到有生出來順利上線?

好吧。如果我們先不管這些。

若求「一組無經驗新手,是否可以在八週之內搞出一個實戰等級產品並上線」,這件事何以可行?

許多人也許覺得「現實世界不可能發生」。但就我以前帶產品以及帶徒弟的經驗,我卻認為「這應該是有可能的」。(注意,這裡是講「應該有可能」)

快速帶出職業選手,本身就是業界常態

我本身在業界多年,我是知道這幾件事的事實存在:

  • 幾乎稍微成熟的 Rails 公司是有帶徒弟的套路的。(你不可能招一個零經驗新手,手把手教三個月,才能跟資深程序員一起寫,許多公司如 Facebook 甚至有新人 Bootcamp )
  • 所有的互聯網產品,其實都是有開發流程套路的。只是依不同公司的開發團隊資質,需時從 2 個月到 9 個月。
  • 很多厲害的 developer,本身不是計算機本科出身的,公司一樣帶的起來...

所以,理論上、理論上,如果找到「學習上的瓶頸」「開發上的瓶頸」的相關答案的話。理論上、理論上,應該有一套方法,可以讓這件事(「一組無經驗新手,在八週之內學會編程,並搞出一個實戰等級產品上線」)發生。

我自寸已經知道這其中大多數問題的答案。問題是:我真沒試過,是不是能夠把這些答案組起來,放到一個團隊,按照這樣流程跑,就能達到同樣的效果?而且,即便這應該是可行的,可真沒人相信我。

況且,這世界不存在這樣的公司,也不存在這樣的團隊與機會。

如果我說要開個班說能辦到這事呢,估計許多人都會認為這是大忽悠。

全棧營其實是一場教學上的實驗

這個機會起源於:當時在 Twitter 上,當所有人都在罵李老師時,只有我無心的回一句,我認為絕對是可以的(因為這在西方世界很正常嘛)。

所以李老師就把我叫去北京瞭解看看,這到底要怎麼搞?畢竟這事要是幹成了。就是編程教學的一大突破。

而我當然是一口答應這個機會的。因為:

  1. 四周內培養職業 Rails 工程師,能獨立開發個人產品。這事肯定是能幹成的。我在台灣這樣的班就辦了快十期。
  2. 其餘關於做產品所需的相關知識與坑,這幾年來我做了深入的研究。在我的心中反正是這樣想,我已經離所有的答案都只差最後一步了,只差有人自願讓我做實驗而已。

能有人幫我推最後一哩路,我當然是極其開心的。

最後我就接下這個挑戰的任務,甚至還跟李老師大膽的說:

我不需要三個月,我只需要兩個月。

(估計那時候腦子應該是燒壞的)

但是,我想先在這裡先跟大家透露最後的結論:

其實不需要八週,只需要七週。。。。。。。。。。。

我是如何設計課程的

全棧營的課程表,這樣說吧,真是寫好玩的。這個營,在課表上列的知識都會教,只是絕對不是按照課表上的進度走。這個課表只是為了「政治正確」寫的。

這個營真正的課表是這樣的:

  • 前三週,新兵基礎訓練(我有一套特製的教材保證打底,至於運作原理,那就不在這篇文章範疇之內,改天再提)。這段期間,同學會開發好幾個「個人」項目,確保自己最少有辦法做到獨立的開發。
  • 後五週,團體協作訓練。同學要自己想辦法想出有趣的產品,製作 Landing Page,利用 Landing Page 招募至少四個同學一起實作,然後用課堂上教的專案管理技巧,小組進行敏捷開發實作。最後呢,再利用 Onboarding 技巧收尾。

我壓根就不走也不信全世界培訓班都在做的那一千零一套(也就是上課花了大把時間教基礎知識,畢業前兩三週再做一個玩具 project)。這個班,我就打算走我研究認為有效的那一套,而且要做結業 project 就是全玩真的。

而且,我是開學第一天,才跟班上同學說,上課貼的課表都是假的。不算數,我走的是這一套。他們都懵了。(畢竟學費不是小數目)

這幫學生遠超過大家的想像

前三週的進度,我是非常有把握的。我在台灣就已經能夠這樣幹,一點都不擔心。

但後五週的設計,其實我是完全沒把握的,哈哈 XD

我只是猜「應該可以吧......」,就這樣幹了,但不行也得搞看看。所以我就真的這樣做了....

猜猜到第七週學生跟我抱怨什麼?

「老師我們把項目已經做完了,下週要做什麼?」

老師,我覺得班上畢業氣氛太早了,不太好」

……這也太狂了。我壓根沒想過他們能夠提前做完,還提前一個禮拜!!搞得我最後一週,只好臨時去寫一些投影片墊檔講課 -_-|||

學生作品 1:

人才火箭 http://talent-rocket.herokuapp.com

學生作品 2

HackSchool https://hackschool.herokuapp.com

學生作品 3

GrowthHackCN http://growthhackcn.herokuapp.com

學生作品 4

約霸 http://online-ask.herokuapp.com (留學咨詢項目)

2 天 Hackathon 作品

在畢業那一週,同學還幹了一件更瘋狂的事:兩天 hackathon 又搞一個真實產品出來(含 landing page 與 onboarding)。

濃縮書:http://nongsuoshu.herokuapp.com/ ( by 人才火箭隊組員)

你說這幫同學,兩個月前沒人會寫代碼(20人內只有3人有過去編程經驗),誰相信?

我真不怪其他人不相信,因為是我也不相信!但他媽的他們做到了!

全棧營教了什麼

  • (基礎期)基於認知心理學的編程學習法與正確的自學法。可以快速上手 Rails API,並獨立
  • 如何做 Landing Page
  • 如何寫 User Story,以及 run Standup Meeting 以及優先權排序
  • 每天的收尾會議(仿 thoughbot 內部流程)。
  • 每週的 Retrospetive Meeting
  • 如何寫乾淨的代碼以及設計架構
  • 如何做 Onboarding (如何讓 RD 等級的「屍體級」產品,變成運營等級「活人」產品)
  • 仿 Hackathon 的散彈槍開發法

讀到這裡,讀者們如果識貨(有做過編程工作),應該知道這是什麼樣等級的訓練。其實甚至我都害怕他們承受不了這樣高強度的技巧與操練。結果....

讓我覺得果然教編程還是要教新手,新手沒玩過這些東西就不知道害怕....

(P.S. 給沒有做過編程開發的讀者一些背景知識,這是有靠譜 V.P. of Engineering 的 A 級團隊內部才能夠這樣高效的做產品,可以理解成為我在給新手吃人參)

為什麼要這樣教?

  1. 我自己也相當不認可一般培訓營裡面的課表設計,我認為那些課表是相當不靠譜的,一般人根本就記不住那些無聊知識。花了三個月只做出一個玩具,這是在浪費人的生命。
  2. 許多培訓班的教學方法,是仿大學工業教育設計課表,只因為大家普遍認為大學這樣教,竟然社會上就得這樣教。問題是這根本不是業界培養開發者最有效的方式(社會上是師徒制以及做真 project 的帶練)。既然這個方法不有效,為什麼要這樣教?
  3. 培訓班不教真實的場景以及解題思路,以至於培訓班學員畢業了以後,適應困難。社會上許多人對於培訓班學員有幾個印象
    • 1) 沒有辦法按照真實需求,獨立作業,脫離了培訓之後就失憶
    • 2) 在業界真實協作感到困難
    • 3) 這些培訓班學員之前沒有計算機底子,所以自學遠比野生程序員更慢...

種種原因造成了很多人聽到求職者是培訓班學員,就退避三舍。

所以我非常想照自己的思路,設計一個:我自認非常有效的學習途徑(起碼這條路上學的都是業界實務),培養真的社會上所需要的「容易合作以及善自學的好程序員」。而不僅僅是「只能夠 CRUD。。。。。」。

為什麼挑選這些題目教?

在台灣我做了快十期班,也成功帶出很多程序員。其實我的教法已經非常有效率。

但是呢,我卻發現一件事,這些班下來,我僅僅能教出能夠獨立「寫功能」的程序員。

但是我教不出「能夠做出有靈魂產品」的程序員。

所謂「有靈魂產品」的程序員:指的是他們做的產品一上線,就已經是打磨過的產品,而不是「只有功能,但卻沒人知道怎麽使用的屍體」。也不是只會做功能,還要找運營、行銷來回吵架產品一直搞不上線的程序員。

別說「能夠做出有靈魂產品」的程序員了。因為很多時候,產品準時上線都相當困難。

在這個業界,撿到一個能夠達到這樣要求的程序員就是寶了。

所以,我一直在想,這樣的人能不能夠量產。我想要幫世界量產,這世界需要更多這樣的「全棧程序員」。會項目管理,會做運營的程序員。。。。

這個班就是這樣的實驗。

我很幸運的,實驗如我想像的成功,而且比我想像的還要成功(提前一週做完)。

如何在四周開發實戰等級產品

其實我一直在掙扎,我要不要把這些秘笈公開出來。考量的點有幾個:

  • 一旦公開出來,應該就會有競爭者抄我怎麼做。畢竟我在運營一個教學事業。
  • 但是如果不公開出來?這世界明明就應該運營的更有效率,而且很缺程序員。連我自己都希望業界有大量的這樣等級的程序員可以招。不寫出來我內心始終覺得哪裡很怪....

想了很久,最後決定還是把這個秘方寫出來。我想至少至少,這套秘笈,可以讓許多正在做產品的團隊,加速內部產品開發的速度以及少走很多冤枉路。

做產品的步驟 Step 1: 做 Landing Page 吸引用戶

五週的第一週第一天,我教 Landing Page 製作 (以前在 GrowthHack 班有教)。

之所以為什麼一開始教 Landing Page 而不是項目管理。是因為我以前在做產品時,發現一件事,很多程序員或創業者,做產品時往往都是一頭熱的就栽進去寫 code,快上線了就...

  • 直接上線,但是用戶不會用,直接陣亡 。(此稱「屍體級」產品)
  • 請營銷搞了一個 Landing Page。但是營銷寫的文案與產品內裝,差太遠。營銷認知的「產品價值」,與程序員寫出的「產品功能」差得太遠。首頁文案變成詭異的四不像。

所以:

  • 既然是要做有意義的產品。那不就得在第一天就要搞清楚自己能夠 Offer 使用者的價值嗎?
  • 以清楚的價值觀出發的產品,功能方向開發不是才不會歪嗎?
  • 如果連 Landing Page 都做不出來,表示自己根本不清楚這個產品的價值與這個市場的痛點?如果根本吸引不到用戶使用,甚至隊友一起開發?那麼學敏捷,高效開發出一個垃圾有何意義?

學生必須先製作一個 Landing Page,成功吸引同學這是一個誘人的產品,然後同學進行投票,按照志願分發到他想加入的組。

做產品的步驟 Step 2: 進行項目管理,只做「有價值的功能」

要做一個有價值的項目,是需要很多道加工的。

真實的世界,很多時候,用戶雖然喜歡你能夠解決的方案,但市場窗口是不等人的。必須得在市場窗口關閉之前,做出來並且上線。

所以:

  • 小組進行 User Story Mapping,討論什麼是「Must Have」,什麼是「Could Have」。其餘程序員個人的「私心與貪心」全部扔到抽屜裡,有空再做。
  • 利用 Tower 進行項目分派。
  • 利用 Pull Request 進行代碼協作。

做產品的步驟 Step 3 : 建立程序員的公德心

產品團隊為什麼總是 delay 上線?鑑於這十年內我見過了形形色色的程序員,所以對於開發方向進行這樣的閃坑指導:

  • 大家在協作的主幹 develop branch 必須要是「不會爆炸」的代碼。
  • 大家部署到 heroku 的 master branch 必須是「可操作可驗收」的實際產品
  • 每天晚上六點由團隊主力程序員 Merge,部署 Heroku
  • 每天課程助理會收「各組錄製的產品功能 Gif」,確保隊員交出的當天成果是「可用功能」而不是「亂寫的功能屍體...」
  • 每天早上 Standup Meeting,確保今天的主線是正確的
  • 每週五早上有「產品展示會」,每週開發的產品功能要展示給全班同學看,給全班同學玩,讓大家指教。如果週五交「屍體」的組,會被我在展示會時釘在牆上。。。。。
  • 每週五下午 Retrospetive Meeting,重新檢視每週項目版上的功能「什麼是相對重要的」「什麼相對是不重要的」
  • 每週五下午要開「分享會」,同組成員分享「本週自己學到最好的知識」「本週最坑爹的事」

做產品的步驟 Step 4 : 對產品做 Onboarding ,進行最後一道打磨工序…..

鑑於 Step 2 與 Step 3 ,所以同學的進度是很神速的。大概做到第三週快結束,領先組的同學突然就要求我加入他們的例會討論救他們....。(我大概每週只參加他們的 Standup Meeting 一兩次,確保方向不要歪得太誇張)

因為他們發現即使不管再怎麼努力做功能,做出來的網站雖然精緻,看起來還是像屍體。不知道要怎麽往前推進。

所以我教了他們最後一招: Onboarding (以前 GrowthHack 班有教)。

User Onboarding 「用戶引導」,也就是要讓新用戶註冊後,服務可以透過一系列的互動引導,具體的流程決定了用戶是否會回養成使用產品的習慣並成為回頭客。

利用一系列的 Onboarding 問題,抓老公、男朋友、別組同學、課程助理、微信朋友圈的路人,來當真實 User,對這個網站進行以使用者角度的批判。

  • 不管什麼角度都可以寫,至少寫出 50 條
  • 團隊再拿這 50 條,開個檢討會,一一把 solution 寫出來。
  • 重新檢視這些 solution,哪些是可以做的,哪些事不能做的。
  • 哪些功能做得正確,打磨得更為人性。哪些功能是冗余的,毫不留情地砍掉。

然後,他們再花一週,把這些「Bug 全修掉」。

以這樣的步調,同學有一組是四週就把產品上線了....。最後一週就沒事幹了。

人才火箭 http://talent-rocket.herokuapp.com

乃至於這組最後一週,還花了兩天的時間跟又硬幹了一個小專案當 Hackathon 打,在畢業典禮上展示。兩天能做出的成果真是相當披敵當年我去打 Hackathon 的功力。。。。。。

濃縮書:http://nongsuoshu.herokuapp.com/ ( by 人才火箭隊組員)

隊員日記:http://nfreeness.logdown.com/posts/2016/09/16/like-the-moon-not-the-same-mid-autumn-festival-of-9-15-journal

結語

分享這篇文章,其實真不是想炫耀這個班多牛逼,自己又多會教云云。說實話,我教學的技術並沒有多厲害,我只是教同學:

  • 一般公司應該就得這樣做專案的方式
  • 一個好的程序員,做事基本的態度
  • 分享、檢討,才是前進的加速器
  • 做任何產品與功能應該基於價值
  • 自學的功夫,才是真正應該帶走的精華

我的初衷是:

  • 培養對這世界能做出貢獻的程序員
  • 學編程不該這麼難,這麼花時間。我覺得這世界應該有更有效的方式。
  • 學生「努力」與使用「正確方法」的學習,遠比有沒有計算機背景更重要。

我更感謝同學願意花這麼多時間賭在這個班上,認真的一起搞這個實驗的 Project。

更讓我見識了大陸同學的認真與狠勁,這個班要是辦在台灣,我真不知道有沒人願意一起玩命的這樣「認真投入學習」。

最後,為什麼會分享這一篇文章所談到的教學技術?用膝蓋想都知道我耗費了洪荒之力,才證明出來這個實驗結果。我再會教,也量產也量產不出個什麼鬼。

我只關注 更在乎這個世界的編程教學法,是否能夠被大幅改變

與其關注教學技術是否可以獨佔,我更在乎這個世界的編程教學法,是否能夠被大幅改變。有更多的程序員誕生出來,這世界會變得更加有趣。我更希望人家 clone 我的教學法,一起去改變這個世界。

  • 謝謝耐心看完這篇文章。若有興趣交流,歡迎寫信到 xdite@growth.school

  • 若是想報名,請關注我的微信公眾號 xdite-growth。(我們第二期已經滿了。第三期至少估計要等 2017/1,所以這篇真不是什麼招生廣告文 )

P.S. 2016/09/15 中秋節,這是人生當中過得最開心的一個中秋節。

全棧班的最後一個 slide

學生的優秀博客

(週記每週更新)(基本上我們有 20 個博客,全發大家估計看不完...)

← 我開公眾號了。歡迎掃碼關注! 靠譜的項目與項目經理 →
 
comments powered by Disqus