分享 無編程經驗的新手,如何在四周開發實戰等級產品 (長文)

xdite · 2016年09月16日 · 最后由 Azaki 回复于 2016年09月30日 · 11869 次阅读
本帖已被管理员设置为精华贴

本篇文章原载于我的博客:http://blog.xdite.net/posts/2016/09/16/newbie-with-no-experience-programming

分享一下最近两个月的教学生活与体悟。 =====

昨天是中秋节,也是我们全栈班的最后一天。全班大多数同学都更新了自己的心得,我自己也决定来更新自己的结业心得。

14264017_10154553983263552_7480305297505545218_n.jpg

我过去几个月都没有更新博客,有一些人应该纳闷,我干嘛去了?

这两个月呢?我把台湾的班都停了。跑去北京搞 新生大学全栈营 去了。

全栈营的起因是这样:李笑来老师,某天在网路上发了一个感悟「一年可以成长为全栈工程师」。但莫名其妙的这句话,就在大陆被黑出了翔。

在我这个外人看起来很莫名其妙的原因,其实是因为在矽谷呢,说这句话根本没多少人会大惊小怪,甚至是把你黑出翔,但在中国莫名其妙的就变成了政治不正确。

随便找了一下 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

rocket-1 (1).png

学生作品 2

HackSchool https://hackschool.herokuapp.com

screencapture-hackschool-herokuapp-1473969049718.png

学生作品 3

GrowthHackCN http://growthhackcn.herokuapp.com

growth-hack-cn-1.png

学生作品 4

约霸 http://online-ask.herokuapp.com (留学咨询项目)

online-ask-1.png

2 天 Hackathon 作品

在毕业那一周,同学还干了一件更疯狂的事:两天 hackathon 又搞一个真实产品出来(含 landing page 与 onboarding)。

浓缩书:http://nongsuoshu.herokuapp.com/ ( by 人才火箭队组员)

screencapture-nongsuoshu-herokuapp-1473969217868.png

你说这帮同学,两个月前没人会写代码(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: 进行项目管理,只做「有价值的功能」

要做一个有价值的项目,是需要很多道加工的。

真实的世界,很多时候,用户虽然喜欢你能够解决的方案,但市场窗口是不等人的。必须得在市场窗口关闭之前,做出来并且上线。

DSCF6580.jpg

所以:

  • 小组进行 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

rocket-1 (1).png

乃至于这组最后一周,还花了两天的时间跟又硬干了一个小专案当 Hackathon 打,在毕业典礼上展示。两天能做出的成果真是相当披敌当年我去打 Hackathon 的功力。 。 。 。 。 。

浓缩书:http://nongsuoshu.herokuapp.com/ ( by 人才火箭队组员)

screencapture-nongsuoshu-herokuapp-1473969217868.png

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

结语

分享这篇文章,其实真不是想炫耀这个班多牛逼,自己又多会教云云。说实话,我教学的技术并没有多厉害,我只是教同学:

  • 一般公司应该就得这样做专案的方式
  • 一个好的程序员,做事基本的态度
  • 分享、检讨,才是前进的加速器
  • 做任何产品与功能应该基于价值
  • 自学的功夫,才是真正应该带走的精华

我的初衷是:

  • 培养对这世界能做出贡献的程序员
  • 学编程不该这么难,这么花时间。我觉得这世界应该有更有效的方式。
  • 学生「努力」与使用「正确方法」的学习,远比有没有计算机背景更重要。

我更感谢同学愿意花这么多时间赌在这个班上,认真的一起搞这个实验的 Project。

更让我见识了大陆同学的认真与狠劲,这个班要是办在台湾,我真不知道有没人愿意一起玩命的这样「认真投入学习」。

最后,为什么会分享这一篇文章所谈到的教学技术?用膝盖想都知道我耗费了洪荒之力,才证明出来这个实验结果。我再会教,也量产也量产不出个什么鬼。

我只关注 更在乎这个世界的编程教学法,是否能够被大幅改变

与其关注教学技术是否可以独占,我更在乎这个世界的编程教学法,是否能够被大幅改变。有更多的程序员诞生出来,这世界会变得更加有趣。我更希望人家 clone 我的教学法,一起去改变这个世界。

  • 谢谢耐心看完这篇文章。若有兴趣交流,加我的微信号 xxddite

P.S. 2016/09/15 中秋节,这是人生当中过得最开心的一个中秋节。

14264017_10154553983263552_7480305297505545218_n.jpg

Slide(全栈班毕业赠语)

https://speakerdeck.com/xdite/quan-zhan-ban-bi-ye-zeng-yu

学生的优秀博客

(周记每周更新)(基本上我们有 20 个博客,全发大家估计看不完...)

daniel 說我应该写一篇我是如何被这帮学生的认真给吓到,这样才更正能量。我这几天会花时间写一下續篇。

lgn21st 将本帖设为了精华贴。 09月16日 14:11

上午跟 @xdite 聊起这个事情,她说自己被这帮学生吓得不轻,弄的压力很大。

@xdite 照片里,我都被挡到了。。。😂

@xdite 最后一句

我希望你们 33 岁时,比现在的我更优秀

就是我接下来奋斗的目标了,😁 😁

@xdite 很棒的分享,谢谢!

我试了一下 online ask,虽然发现一些小 Bug 和 500, 但完成度已经非常高了,还只用了四个星期,这样的教学和实践实在令人佩服。

有个小问题,不知道有没有人和我一样,没有搞清 online ask 这个项目的“偷听”功能? @chenyunli http://online-ask.herokuapp.com

首先网站上缺乏必要的帮助文档,另外,在一个用户付款并偷听后,用另一个用户登录好像不付费就可以查看。有点让人费解。

从个人的角度,觉得偷听这个功能可以让每个用户每天不付费偷听一条或两条,才有“偷”的感觉,其它的时候应该付费才能查看,或者称做“打赏”功能。

理念很不错!

除了价格,其他都是完美!

#9 楼 @FrankFang 我觉得如果只花 500 块肯定是达不到这种执行力的。。。

看了相关的几个帖子,感觉还算是靠谱。

虽然一开始有点像软文,但是后续的事情让我相信这真的是来分享成功经验的。给发起者和第一批吃螃蟹的人点个赞。

非常支持 Ruby on Rails 的教育普及,这是我们 Ruby 社区相对其他语言社区所缺乏的东西。一个技术社区的成长一定要靠基础教育培训的不断普及,包容更多才是正确的方向。 他们能够在短期内下决心并做好这些事情已经非常不容易,给予他们多一点鼓励才是最重要的! Ruby 社区就应该让更多的人参与进来,而不是固步自封。

#10 楼 @kabie 我觉得砍半,3W 差不多

仔细看了一下,教的是这 3 方面的内容

  1. 基本的 Rails 编程,包括自学的方法
  2. Workflow, 两方面,一方面是敏捷开发(kanban, standup meeting, retrospective meeting),另一方面是 git 开发协作
  3. 产品与 growth,包括 Landing Page, user onboarding, user story.

我觉得是很有价值的,我觉得,正确的自学方法,应该是就是“以问题、例子为导向”,而不是基础概念为导向? 我自己基本也是按这套走的,自己的总结在https://www.douban.com/note/467363697/

太棒了!!

非常棒的分享!最近也在教朋友入门。受教了~ 实战是最好的教学,分组进行团队协作的方法很赞!

支持!实战是最好的教学!

支持。 教学领域的创新之举。

支持!目前大学有的教育存在很大问题,效率低,学生有兴趣的都被教到一头雾水。 创新是很有必要的,学习一门新语言首要解决的问题就是迟迟不肯开始动手,通过实战解决实际问题来整合知识是不错的方法。

支持,钱不重要嘛,再说也不多,只比我大学几年学费多点。

的确很好。

超赞,让 rails 圈子更普及更扩大。

#13 楼 @FrankFang 😓 如果老师定价是 8 万,你又该觉得,嗯,砍半,4 万就好了,哈哈。。。。

@xdite

笑老师您好,我对培训也比较感兴趣,有几个有关于培训的问题希望能请教一下您。

一般社会上的培训班,为了多赚点钱,在人员上总是兼收并蓄。导致整个培训班鱼龙混杂,难以把控整个学习氛围。以前我曾经参加过一个单片机的培训班,培训费也不低。但是班上各种人员很多,记得有一个当领导的,总是有一个小跟班在给他端茶倒水。我也不知道那人为什么会来参加培训,反正各种看不上工程师,还说搞单片机的都是神经病。除他之外还有各种奇葩,课堂上学习氛围并不浓烈。所以我觉得 5 万的学费,是否不仅仅是一种收费,更是一种筛选。即肯花五万来学习的人,大致都是下定决心的,这样就排除了许多来打酱油的人。又或者在甄选学员的时候,您会观察他的哪些方面,来判断他是否适合参与培训?

每个人的注意力曲线、原来的知识结构以及学习效率各不相同。比如说一个人还能专注的时候,另一个学员的注意力已经透支。另外每个学生原来的知识结构都是不一样的,如果要保证学习效率,就要让每个人都稳定在学习区。即布置给他的任务,正好是他可以花费一定的精力学习就可以解决的。像之前我在单片机学习班的时候,不得不跟着上了好几节 C 语言基础课程,虽然相关的课程我已经在学校里学习过了。在你的培训班里,所有的学员的任务和进度都是一致的吗?或者你是如何平衡不同的学员之间的个体差异的?

最后就是我想问,发帖那个妹子,在那个贴子里,其实说的都是培训班如何改变了她的思维模式。您觉得一个培训班可以即教授知识,又教授思维模式吗?两者的比例一般是怎么样的,哪个更加重要?我个人觉得,思维习惯的养成是一个漫长的过程,和学习科学知识是不同的。我觉得那个妹子之所以有这样的体会,是她自身处于一个求变的拐点上,而不是单纯靠培训班的感染。究竟您的培训班能够在多大程度上改变人的思维习惯?

来做广告的吧…

26 楼 已删除
27 楼 已删除

妹子刚录取了金数据。(我们班刚上了一个彩程,三个金数据,一个云币),其它的还在面。

我们入学录取率低于 20%。

#24 楼 @adamshen

详细的我晚点回你。的确每个人的学习区都是不同的,我用了很多方式让大部分人能够跟上。

此外我觉得思维模式,特别是优秀程序员的思维,是最难得的,有些人花了很多年才练得。但却也没那么难,只要有幸到了优质协作团队,那也可以很快。所有的难与长这些感受,在与人生有没有机缘遇到或自主激发。

我当初自己也花了很多时间,所以这正是我想努力缩短的原因。

这个班这部分我下了很多功夫培养,毕竟 rails 功夫能够上网查,这些却是很难上网得到的。

很想参加这样的课程学习,目前木有这么多钱,那么目前如果不能参加到这样的课程,请问有什么建议去学习的呢?你们下一期课程是什么时候。

xdite 全栈营感想 提及了此话题。 10月06日 02:35
rebecca9201 全栈营感想 提及了此话题。 10月06日 18:00
xdite 关闭了讨论。 10月07日 22:37
需要 登录 后方可回复, 如果你还没有账号请 注册新账号