写这篇文章之前我的顾虑非常多,因为它很得罪人而我却捞不到一点好处。但反过来说我写这篇文章并不是针对说「达○」这样的培训机构,或者「李○○」老师的一些言论,也不是针对说 Ruby China 上最新一些类似的培训帖。我是说在座的,都是○○。

我要针对的甚至都不是培训行业,反过来,我认为对于整个软件行业而言,培训整件事情就不靠谱。这不是说我心血来潮,我想诸位的公司只要不是沙丁鱼罐头类型的外包公司,对于培训这件事本身都多少抵触。至于高端的培训班,我想你们也有自己的看法,只是有时候不方便说出来。但我最近了解了一些底层劳苦人民悲惨的事实,使我实在看不下去,只能出来批判一番了。

丢人玩意,退群吧

我们先抛开培训班的问题,我们先来讨论一个经典的面试题,它叫做「FizzBuzz」。输出数字 1-100,逢 3 的整倍数输出 Fizz,逢 5 的整倍数输出 Buzz,又是 3 又是 5 的整倍数输出 FizzBuzz。那么稍有常识的人都知道,无论你学习什么语言,学的水平有多糟糕,这道题都很容易实现。但我们来看一下最常见的一些错误是怎么出现的:

for i in 1..100
  if i / 3 == # 写不下去了
for i in 1..100
  if i % 3 == 0
    puts 'Fizz'
  elsif i % 5 == 0
    puts 'Buzz'
  elsif i % 15 # 写不下去了...
for i in 1..100
  if i % 3 == 0
    puts 'Fizz'
  elsif i % 5 == 0
    puts 'Buzz'
  elsif i % 15 == 0
    puts 'FizzBuzz'
  else
    puts i
  end

很多培训班会告诉你这些算法的基础知识毫不重要,但事实上严格来说这都算不上是一道算法题,这没有任何已有的算法模板来解决,这只是一个最简单的循环和条件分支语句,有超过 9 成的开发者没法正确写对这道题。我认为,这些人压根就不该也不适合来写代码。

令人惊讶的是,这些人并非不能写业务逻辑,比如说让他们写个 CRUD,他们甚至不比你写得慢。但它们的问题在于连理解文字、理解需求的基本能力都不具备。当你说「整倍数」的时候他们无法想到用余数,当你先提到 3 和 5 的整倍数时,他们无法想到 15 应该放在他们两个之前判断。

对程序最基本的逻辑的考察没有通过,并不代表他们无法进行日常的开发,就好像数学应用题不会做也不一定会挂科一样。他们通常会写出非常糟糕的抽象,常见的例如在一个社交网络里给每种类型的 UGC 内容单独建表,然后再为每种类型单独建回复和点赞的表;将用户重置密码和管理员重置密码完全拆成两个方法来实现;无法正确判断自己方法在边界条件下的情况等等。

培训班对于培训这样的程序员来说是容易的,而且市场上需要这些程序员。各位可能很难相信,今天的互联网应用大多都没有什么鲁棒性可言,市面上至少一半的产品都存在高危的漏洞只不过是没有人想要攻击他们而已。市场需要这些能用的垃圾来建一个原型、骗一笔投资或者交付一笔外包。

培训班能教你的归根结底解决的问题是「如何使用一个工具」,而不是「解决问题的方法」。然而在使用工具这件事上,你无论如何都无法描述清所有的场景,就好像你在通过人为地输入一些逻辑,来让汽车学会自动驾驶一样是不完整的。然而在这层嘴脸上,无论是低端的还是所谓的高端的培训班都会用一种方式来糊弄过去,那就是「老师教给你的东西是有限的,更重要的是,你从老师这学到了代码的基本方法,你要上进才能更好学习」。但我们平心而论,老师真的教你们代码的基本方法了吗?他带着你们去学习如何阅读官方文档了?还是教你们程序背后的基本原理了?都没有,他明明在教你语法和一些非常弱智的场景。「解决问题的方法」是学不来的,是你大量日常的工作积累的,所以什么号称两个月掌握别人两年知识的都是骗子,你以为人家两年都在那里划水呢?你以为你两个月真能干出来什么吗?

承认吧,如果有人真的写好了代码,就算他没报班,自学也不会比现在差。

暗示了,明抢了

我觉得从某种角度来说所谓低端的培训班和高端的培训班都是一丘之貉,都在宣传时给你过高的期望,而毕业后这个期望永远是落空的。低端的培训班告诉你培训后你们就可以月入上万的工程师,主要面向的是二线和是三线城市学业失败的人。毕业后通常需要通过伪造简历才能进入一家沙丁鱼罐头外包公司,拿着三四千的薪水,成天干着重复而无用的最底层的编码工作。

而高端的培训班则面对一线城市的中产阶级,宣传时让他们认为通过培训后他们能大大改善现在的生活,甚至利用自己的技术成为创业公司的 CTO,成为自己财务自由的垫脚石。然而毕业后他们能找到的工作也不过如此,根本没有脱离他们中产阶级的生活。

如果单单是这样,我其实并不会写今天这篇文章,因为他们至少是无害的。但事实上,低端的培训班通常伴随贷款出现,可以先上课后付款,学员因此被卖身;而高端培训班高昂的学费常常消耗掉一个中产家庭的全部积蓄,使其最少的财富积累化为乌有。可以说,培训班是坐庄稳赚,而学员们在培训后大多都变得更拮据和悲惨。这种资本驱动下的套路,就和卖老年保健品的那些灰色产业一样灰色。他们通过给你看到一个事物的片面使你盲信,从而满足了他们自己的利益。

放弃吧,如果你没有能力自学,培训班根本帮不了你。

黑暗剑,不存在的

如果反过来回忆一下我们自己学习代码的历程,你会发现都是类似的,是螺旋上升的,是循序渐进的。你是从先会一些最简单的逻辑,到开始写一些能用但不好的代码,慢慢自己通过阅读文档、阅读别人的源码来慢慢提升。如果你一上来就来看 Rails 的实现,你肯定根本看不懂嘛。你对于一项技术的理解,也一定是先认为这是黑盒,这是魔法,再到了解其技术细节,最后和人说这东西其实很简单。

我相信不少 Ruby 程序员都是从 Java 程序员过来的,对于这些程序员来说,他们很容易理解 Ruby 的面向对象的机制,但对于开类和模块注入的一些方法却觉得很魔法。而如果你是从一门 FP 语言过来的程序员,比如说 Lisp,那你会对 Ruby 的 Block 机制感到很亲切,对于开类和注入觉得很容易理解。相反对于一些面向对象的一些手段感到不是很熟练。

这些都是人类「迁移学习」的能力,你将已知的东西来做类比从而理解新的未知的技术。全栈工程师之所以成为全栈工程师,是因为他一开始精通一部分,随着不断学习新技术,不断将已知的迁移上去,从而对技术栈拥有非常全面的大局的认识。然而一些培训班甚至能号称自己能培训「全栈工程师」,你连基础都没有,就相当于同时学习操作十台机器,你想想那可能吗?所以出来的那个不叫全栈工程师,那个叫全栈 Hello World 工程师。你可以在简历上写上:精通各种语言 Hello World 写法、掌握各种数据库的安装、熟练各种操作系统开机。你其实什么都不会。

写代码一方面需要灵性,需要实践经验的积累,另一方面需要打好基础。这些东西本应该是由本科教育提供给你的,但不得不说国内大多数大学的本科教育也没有提供合适的基础教育,而培训班在拮据的时间内也不可能教你这些基础教育的部分。举例来说,如何计算一段程序的时间复杂度、空间复杂度,如何理解栈、队列等数据结构,了解网络协议的基础。这些东西就像是 RTS 或者 MOBA 游戏的经济一样,当前的经济并不会直接影响到当前的局势,但发展一段时间之后,特别是后期和大后期就会立刻成为你的局限之处。如果你连时间复杂度都不会算,你怎么知道两段程序谁的性能更好,又是甚至性能差到根本不能工作的时候你又去求助谁。

醒醒吧,写代码没有捷径,如果你希望在这条路上继续走下去,你必须打好基础,不断学习新的知识才有可能。

RUA

有位大佬曾告诫我,如果不是触及到自己的利益,那么就不要去断别人的财路。但也就是这样,业界和学界都充斥着一股药丸的气息。所有人做教育都是想着帮你卖出去,而你自己学习的目的也是把自己卖出去。所以大学连「SICP」都不上了,培训班才越来越猖狂;所以越来越多的人相信基础知识无用,认为存在让自己成功的捷径;所以加班昏天黑,干不到 35 岁就被退休了;所以发的 paper 申请的专利都是为了完成指标;所以学术上造假,商业上抄袭,技术上停滞;所以你只有跑不起来的代码,快不起来的程序,加不上的薪资,届不到的恋

与其说这些培训机构在骗你,不如说是你贪小便宜的心态正中了这些培训机构的计。

愿世界少一些套路。

更新

在此篇文章发出后的几个小时内,我的微信上已收到了 9 篇不同公司对于某价格不菲的 Ruby 培训营的吐槽,内容竟还高度重合。现整理如下:

  1. 连 SQL 是什么都不知道
  2. 不知道什么是 group_bycount
  3. MVP 模式的 CRUD 写得很熟练
  4. 面试面到无话可问
  5. 写一个简单的循环都写不出,并称是该届优秀的学生
  6. 已加入该公司面试的黑名单
  7. 在未经允许的情况下,将录取学员的公司的 Logo 挂至其官网进行宣传
  8. 给一个月时间写一个最简单的 Rack 中间件,最后回复不会写

虽然此贴不是针对这个培训营,但这个营确实是在收智商税,并且暴露出来的问题还是很明显的。很多人报名的时候考虑到这个营是李○○办的,老师是 xd○○○。便认为这些背书可以成为帮助他们找到好工作的捷径。然而事实上这些背书确实起了作用,在第一批学员刚毕业的时候,社区里大多数的公司都抱着非常友好和鼓励的态度欢迎他们。但是随着时间的发展,大家越发认识到这些毕业生基础知识薄弱、学习能力低下的特点,哪怕一些已录取的员工也被转岗,开始出现了不少牢骚,对于这个营毕业的学生开始抵触。可见也就是这些人自己已经彻底毁掉了这个背书本身的价值了。

评论里还有反应这个营在培训时曾主张通过不断练习形成「肌肉记忆」。我从未在编程这件事上听说过这种词,如果说一件事情是「重复性」的,那当然就把它封装抽想起来,或者注入进脚手架,哪里有形成「肌肉记忆」这种说法。而这种错误的训练方式也解释了上述企业对于这些人的印象。

当然也不少人质疑说,光骂培训班,那受过高等教育毕业的学生技术就一定好了吗?当然也不是这样的,事实上我国大多数高等学府的计算机教育也是无用的,甚至是有害的。中国大学在多次扩招后,除了少数几个学校,专业教育的大部分也不靠谱。许多学校安排了四年的课程,确实涉及了不少基础知识,但结果却本末倒置,觉得学生听不懂课上得简单,学生也没有好好学好。我甚至见到过某 985 学校算法课期末考默写,因为好好考试会有太多人挂科。我也很难相信这种专业毕业的学生究竟是在给行业输送人才还是压力。

希望所有在这行业里奋斗的同学们能沉下心多钻研,不要相信有所谓的捷径。

余下全文(1/3)

本文最初发表在ruby-china.org,文章内容属作者个人观点,不代表本站立场。

分享这篇文章:

请关注我们:

《量产型炮灰程序员》有11个想法

  1. Frank&&Doji 对这篇文章的反应是敬佩
  2. 康华安 对这篇文章的反应是俺的神呀敬佩
  3. 其实这就是中国IT行业的现状,非常正常,
    根本原因就是教育的体制出了问题.

  4. 15为什么要放在之前判断呢……为啥我感觉根本就不用判断15……那个又是3又是5的目的应该只是限制了要先判断3后判断5 😀

  5. 胡磊 对这篇文章的反应是俺的神呀
  6. 王飞龙 对这篇文章的反应是赞一个
  7. 对你的内容很认同,但是对你解题思路费解(为何要判断15?),作者估计也没几年经验吧,优越感来的有点早。。。

  8. 我的培训老师一直带着我们学生读源码,上官网读英文文档,我那会儿都想死,英语TMD看不懂啊,不过现在看来,老师的做法还是对的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注