无论你再怎么努力,和科班出身的程序员你还是差了四年的距离

我在本科的时候就开始编程,很多计算机专业的朋友和我在一起玩耍之后,普遍觉得自己不如我,说自己四年浪费在了撸管上面。然而,今天同事的一句话却提醒我,即便我再怎么努力,和计算机专业毕业的程序员,还是差了一些距离,如果一定要在这个距离上加上一个期限,那应该就是四年本科的时间。

专业环境造就即使打游戏也比你懂代码

重点是科班出身。很多计算机专业的人四年就是撸管过来的,毕业的时候去华为去腾讯,看上去刁刁的,实际上啥都不会,全部重新学过。可是就是这样一帮五大三粗的人,却有着比其他专业的学生在代码的理解上更加先天独厚的优势。就算他们四年是打游戏过来的,也比那些非计算机专业毕业的人在之后的代码生涯中更加顺利,说他们打了四年游戏,好像说的其他专业的人不是一样。

为什么说专业环境很重要?我大学的时候,一个看上去嬉皮笑脸,拿什么事情都不当回事的老师,天天炒股,根本不关心本学科的发展,就是这样一个看上去不那么认真的人,却说了这样一句话:你毕业以后,无论做什么工作,都会对我们专业有一种情怀。

专业情怀这个事情,说实在,也是然并卵的事情,可是在一些特定的情况下,它真的就是决定一个人在某项事业或者职业上,是否能够发展到一定高度的条件。现在是个讲情怀的世界,即使是那些穿背心打游戏的人,也会对这个世界指指点点,也是有情怀的。一旦在专业这件事上认真起来,谁不会狠下心要大干一番呢?

而其他专业的学生,即使很早就开始编程,也会因为总有退路,在编程这个事情上的决心总没有只能靠写代码为生的科班学生那么强烈。

四年的时间,不会写代码也会review了

都说写代码是一件创造性的事情,可是实际上,那些踩着人字拖毕业的计算机学生,常常花更多时间在码代码,因为他们实在很少有人能创造点什么东西。可是,研究代码这回事却比别人花的时间多。因为要不断的重复,所以他们会考虑代码复用性的问题。因为想偷懒,所以他们会考虑用更加便捷的工具来处理问题。而这些能力来自哪里?当然是学校那些不会教书的老师了。即便上课的这个老师再挫,也会介绍很多有用的工具、模式、方法,甚至很多写代码的“潜规则”都是在这些课堂上传授的。

这对于其他专业毕业的学生而言,只能用零来代替。要入门,要走的弯路太多了。从确定自己要从事哪方面的编程,到学习什么语言,解决环境问题,就要花上很长的时间。而且,入错了门是很悲催的,一旦选择了一个必然被淘汰的领域钻进去,出来的时候就会发现世界都变了。

我在开始的时候,只要是和计算机方面的东西,都去抓一把,各种软件装一遍,各种系统刷一遍,各种入门视频教程看一遍,那时还没有安卓开发,连web前端框架都还没有。可是,一晃6年过去,到我研究生第二年的时候,我才突然顿悟了一样,知道自己在编程这个领域应该如何去发展,以及自己应该专注什么,避免什么。

和科班出身的童鞋相比,自学成才的同学起码浪费了很多时间来确定自己的职业道路。

领悟编程思维精髓的天大差异

有这么一句话曾经风靡全球:“兴趣是最好的老师”!然而,今天来看,这完全就是扯淡。我作为一个从专业外入坑的同学,可以很负责人的告诉后来者,写代码绝对不是你想的那样高大上,高薪又有nice老板,团队氛围特别好什么的,这些YY请保留。每一个人认真对待自己的工作就好了。

回到正题,在编写代码过程中,非专业同学必然遇到的两个问题:效率,质量。

写代码的效率在刚开始入行时,差别非常大,专业的同学写起代码来不会胡思乱想,一般是写完再修bug,而非专业的同学常常会在写代码之前纠结一会儿,然后在写的过程中不断怀疑自己,最后,还是全部重构一遍吧。这个问题的根源是,非专业的同学在编程这件事上的缺乏自信,而缺乏自信的根源则是专业水平低的体现,即没有一种思想可以确保非专业的同学确信自己的这种写代码的方法或风格一定的对的。而专业的同学完全没有这个问题,因为在课堂上,那个带着抑扬顿挫腔调的老师,一定会突然改变声调,要求同学们今后写代码的时候一定要怎样怎样。

但是,效率问题在工作经验和实践时间的积累基础上是可以被慢慢解决的。我遇到一些非专业的同学,工作了5-6年后,写代码的速度极快,已经和科班出身的同学没有区别了。

第二个问题就是代码的质量。其实在我看到的一些情况中,我去阅读一些科班出身的同学和非科班出身的同学的代码,发现科班出身的同学代码比较乱,而半路入门的同学的代码往往比较整齐。可是这种整齐并不能代替代码的效率和可复用可扩展能力。科班出身的同学天然的具备一种设计系统时,某个模块,某个字段,某个机制,是理所应当的。他们的理念中似乎存在一种本能的系统概念。

今天,我的同事在跟我谈javascript的重载的时候,建议我去读《设计模式》,我以前有了解过设计模式,可是让我去读,真的提不起兴趣。

这里到底发生了什么?对于非科班出身的人,你有想过当初他们是因为哪一股冲动而跳进开发大坑的吗?难道是因为工资比较高,泡妹子更容易,还是因为极客范儿很酷,互联网创业忽悠泡沫大?我想都不是,当初那些跳入该坑的同学,很有可能是因为想要解决一个自己一直不能解决的问题而逐渐接触到了编程,并且初期放弃了打游戏撸管的时间,而在编程上面投入了超乎常人想象的精力实现了编程能力的华丽转身。可是问题在于,从个人问题出发而从事编程的人,大多是抱着创造性思维来处理代码问题的,在他们的思想里,编程是为了解决问题,凡是能解决的问题,何必去深专背后的机理,甚至更勿谈编程的哲学。

这就是我为什么说,即使一个非科班出身的同学,再怎么努力,也不可能在短期,甚至终其一生,赶得上科班出身的程序员在编程方面的造诣。当然,我们不排除有些科班渣渣,如果你认真对待生活和工作,我们这帮非科班出身的同学,或许更应该思考一些创造性的编程问题,而不是在内存、模式、算法上去争论。

2016-03-01