写这篇文章之前我的顾虑非常多,因为它很得罪人而我却捞不到一点好处。但反过来说我写这篇文章并不是针对说「达○」这样的培训机构,或者「李○○」老师的一些言论,也不是针对说 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 内容单独建表,然后再为每种类型单独建回复和点赞的表;将用户重置密码和管理员重置密码完全拆成两个方法来实现;无法正确判断自己方法在边界条件下的情况等等。
培训班对于培训这样的程序员来说是容易的,而且市场上需要这些程序员。各位可能很难相信,今天的互联网应用大多都没有什么鲁棒性可言,市面上至少一半的产品都存在高危的漏洞只不过是没有人想要攻击他们而已。市场需要这些能用的垃圾来建一个原型、骗一笔投资或者交付一笔外包。
培训班能教你的归根结底解决的问题是「如何使用一个工具」,而不是「解决问题的方法」。然而在使用工具这件事上,你无论如何都无法描述清所有的场景,就好像你在通过人为地输入一些逻辑,来让汽车学会自动驾驶一样是不完整的。然而在这层嘴脸上,无论是低端的还是所谓的高端的培训班都会用一种方式来糊弄过去,那就是「老师教给你的东西是有限的,更重要的是,你从老师这学到了代码的基本方法,你要上进才能更好学习」。但我们平心而论,老师真的教你们代码的基本方法了吗?他带着你们去学习如何阅读官方文档了?还是教你们程序背后的基本原理了?都没有,他明明在教你语法和一些非常弱智的场景。「解决问题的方法」是学不来的,是你大量日常的工作积累的,所以什么号称两个月掌握别人两年知识的都是骗子,你以为人家两年都在那里划水呢?你以为你两个月真能干出来什么吗?