野生程序员生成状况与深思

所谓“野生程序员”,就是没有计算机基础知识和相关教育经历,靠着对计算机开发的兴趣进入这个行业,虽然知识面比较广,但是各方面都一知半解的开发者。

什么是“野生程序员”

所谓“野生程序员”,就是没有计算机基础知识和相关教育经历,靠着对计算机开发的兴趣进入这个行业,虽然知识面比较广,但是各方面都一知半解的开发者。

这几年我从一个求职者,转变成一个招聘者,有一个感受就是,中国高等教育与市场需求不接轨。学校不了解市场究竟需要什么样的人才,其设立的课程和技术往往比市场技术现状落后了 5 年以上。我在大学学习用 ASP 建站,但是现在已经几乎没有人用 ASP 建站了。一个直接的后果是,很多高校毕业生不能满足企业的要求。

与此同时,中国互联网市场蓬勃发展,特别是移动互联网的发力,让中国跳过“WAP 时代”,直接进入“App 时代”。市场的热钱都投入到互联网行业,“BAT”等大公司不断扩张,创业公司也如雨后春笋,整个市场对软件工程师的需求缺口巨大,所以很多公司在招人的时候,没法招聘到“专业”的计算机专业毕业生。

在美国,因为教育与市场稳定发展了很多年,供求关系相对平衡,计算机相关专业本科已经成为基本要求。举例而言,美国的硅谷公司(如 Google)绝大部分前端开发招聘岗位都有一个最低要求——本科学历,计算机相关专业。

相比而言,从中国的大公司(如腾讯)的招聘网站上可以看出,有一些前端开发岗位没有对学历的要求,也有一些要求“本科及以上学历”,少数才会要求“本科学历,计算机相关专业”。我们的团队中就有一些成员是大专学历。许多企业在招聘的时候往往放松了对学历的要求,只看重项目和经验,而不看重学历。这是一件好事,代表市场在高等教育的规模和质量都跟不上市场要求的情况下,给予更多有兴趣和能力的年轻人进入 IT 领域的机会,也填补了人才市场的空缺。

美国硅谷,是世界互联网公司的中心,是所有求职者梦寐以求的圣地。在最开始,硅谷之所以名字当中有一个“硅”字,是因为当地企业多数是从事加工制造高浓度硅的半导体行业和电脑工业。随后,互联网公司和软件公司渐渐取代传统的硬件公司,让硅谷获得了新的生命,但硅谷这个名字保留了下来。在硅谷从诞生到发展壮大的整个生命周期中,斯坦福大学起到了很大的作用,我认为称之为硅谷的母亲也不为过。

在中国,由于政策、环境、历史原因,还有大学教育投入上的差异,导致大学在整个互联网发展中起的作用没那么大。中美两国 IT 人才市场供求关系上的这些差别,也反映在整个行业文化中。

一个直观的反映就是软件工程师的“草根”化。其实很多软件工程师的收入都很高,处于中上层水平,相比金融行业的白领也毫不逊色,但是一谈起程序员,大家的印象还是“一年四季的T恤(在行业展会上免费拿的)牛仔裤,平时也喜欢宅在家里,不会像同样收入的金融白领,平时爱好听歌剧打高尔夫球”。这种差异一方面是外部人士对软件工程师职业的偏见,另一方面也是程序员行业的自黑习惯。在招聘时岗位要求就已经放到最低:不要求学历、上班不要求着装、上下班时间灵活,这样才好更方便地招聘。而金融行业有意识地塑造一种“精英”文化,从学历就设置高门槛,即使有些工作根本不需要那么高的学历。

回到毕业生的话题,很多跨专业的学生发现自己兴趣在互联网和计算机方向的时候,就开始了自学之路,基本上学习方式有这样几种。

书:在计算机图书领域,技术难度跟图书销量是成反比的,从标签教起的 HTML/CSS 基础书籍卖得最好,其次是关于 JavaScript 和 jQuery 的书,Angular 和 Node.js 之类的就没那么畅销了。

互联网:得益于全世界都在互联网上共享的资源,现在的学习者有了更多的选择,比如关于 Web 开发基础教学的 W3CSchool,还有海量的技术博客。我个人喜欢订阅一些英文大站,比如 Smashing Magazine(http://www.smashingmagazine.com/)、tuts+(http://tutsplus.com/)等。我在读大学的时候,Google Reader 还没有永久关闭,那时候我很喜欢用 RSS 来关注这些站点的更新情况。Google Reader 下线后,就基本上废弃了 RSS 阅读的习惯,转而用一些社交网站来追踪更新情况,但是有时还是会淹没在大量无用的信息里面。

社团:学校的网站社团也孕育了许多能力很强的开发者,社团经过历届的传帮带,技术有所积累,比如师兄会教师弟用 Sublime 编辑器,这就比还在用 Dreamweaver 的同学更有优势。此外,学校社团有一些定点客户,比如学校教务处、周边商户,所以有更多的实战经验,在毕业时作品集也丰富了不少。

因为有这样一些自学渠道,所以不一定只有计算机专业毕业的学生才有机会进入互联网行业。毕业之后,这些计算机爱好者进入不同的工作岗位,不同的是,有些进入大公司,有些进入小公司。这两者的成长轨迹往往会不太一样。

小公司有很多野生程序员

流水线工作流程有诸多优点,但一般来说,大公司才需要很多专精某种技术的工程师,组成一个 Web 开发团队。创业公司只需要几个技术全面的人来做开发和技术支持,有时候甚至只有一两个人而已。

当然,最主要的原因就是成本和回报的问题。招聘和维持庞大的 IT 研发团队需要一笔不小的开支,小公司并没有那么多 Web 服务的需求,一般企业可能只需要一个公司站点就可以了,现在甚至完全不需要 Web 站点,可以用微信公共账号或者淘宝这样的大平台来完成。如果招聘一个完整的 Web 研发团队,从用户研究到交互设计、从 App 开发到数据库管理,直接后果就是整个团队大部分时间都空闲着,无事可做。与之相比,聘请一个或多个全栈工程师会更高效、更省钱。

第二个原因是,很多传统线下公司并不会特别依赖 IT 技术,有些时候线下渠道占据了公司大部分收入来源,所以公司不需要架设十分完善的线上服务。由于线上服务的用户量少,所以 Web 服务对稳定性、承受压力、用户体验的要求都没有那么高。此外,由于没有太多重要的用户数据,所以异地容灾也不需要。

因为公司的开发团队小,所以网站无论出现什么问题,都需要他们去解决。从域名到服务器,从前端到后台,从设计到内容,都是一人包揽。野生程序员了解的知识越来越多,但是样样都不精通。我认识几个小公司的程序员,他们没有明确的职称,开发者都统称为程序员,设计师都统称为美工。

在 Web 技术的任何方向,比如前端开发或者服务器端开发,他们既没有很强的经验,也没有明确的兴趣。那么当他想跳槽到大公司的时候,会发现大公司对岗位和职责的细分非常明确,而自己的能力达不到某个细分岗位的要求。所以他们很难在专业上继续进步,从而陷入原地踏步的窘境。

大公司还是创业公司

在许多论坛上,常常会看到毕业生提出这样的问题:现在有一个大公司和一个创业公司的机会摆在我面前,我应该选择哪一个?

其实每个人有不同的想法、不同的风险偏好,旁人没办法针对这个宽泛的问题给出标准的答案。但是既然提问者是毕业生,这种情况下我还是建议选择大公司,因为会选择创业公司的人往往有自己的主见,已经接受创业公司的邀请去工作了,不会去发帖询问大家的意见。

当然这是开玩笑,真正的原因是,在大公司的头两年,是从学生到职场人士的一个转变,您可能会从大平台学习到一些规范的流程方法,养成一些足以影响您一生的习惯,认识更多的能对您职场有帮助的人脉。

大公司能给您的

较小的风险

每个公司都有倒闭的可能,但是,显然大公司比小公司的风险低多了。如果您的风险承受能力较低,那么不得不考虑这个因素。

技术最佳实践

在大公司,对代码质量和一致性的要求很高,所以一般在最终发布前会有代码审查(Code Review)流程和项目总结会等。如果您完成了一个任务,但是没有采用最佳实践,只是 hack 了一下,那么其他同事可能都会指出您的问题,并且要求您改正之后再提交。小公司或者创业公司人力比较紧张,在他们看来,快速实现和上线,比优雅地上线更重要,所以对于一些最佳实践类的问题,只能睁一只眼闭一只眼啦。

[所谓 hack,就是不优雅的解决方案。比如一个界面的调整,如果采用最佳实践,需要用 MVC 架构来分离出界面相关的代码,并且把有可能相关的变量提取出来,合理命名并且放在合理的位置。如果是 hack,可能就不管这么多,看见哪里需要修改就原地修改了,表面上看很快解决了问题,可是这会给后面跟进的同事造成很大的困扰。]

垂直专精的技能

大公司专业分工很细,而且有更多技术沟通和沉淀的氛围,所以容易让人在垂直专精的技术方向有足够的发展。在小公司更能锻炼技术的广度,深度上缺乏锻炼的环境。但是其实二者的利弊,都是外界的,技术人员的个人成长除了工作时间的锻炼,还要靠下班后的时间,外界只是给予一个环境或者机会。

服务海量用户的经验

同样是做一个网站,服务少数用户量和服务海量用户量时需要考虑的事情是完全不同的。小网站遇到的问题,大网站一定遇到过,而大网站遇到的问题,小网站就不一定遇到过了。当一个网站发展到业内最强时,它的问题没有人遇到过,这时候就不能凡事问百度、Google 或 Stack Overflow 了,而要自己去探索解决方案。

软技能

硬技能是指每个职位需要的专业技能,软技能则是通用的技能,比如沟通、影响力、项目管理和演讲等。越是大公司,越是看重影响力,所以会有很多培训教您如何提高影响力。

我在面试一些来自小公司的应聘者时,就发现他平时的工作中,周边环境很少有分享和沉淀的习惯。沉淀和总结是很重要的,在腾讯,设计师做完一次设计定稿之后,就会把设计的思路,包括整体的设计风格、设计规范和色彩的确定等都总结成一封邮件或者 PPT,发送给部门同事。每个人都要有意识地维护自己的作品集,它在半年一次的考核、晋升面试甚至以后的跳槽中都非常有用。但是小公司的设计师不太会总结个人作品集,时间紧急是一方面原因,另一个主要原因是环境不需要他这样做,因此就缺乏了这方面的锻炼。

人脉

每年都有不少人从大公司离职去创业,这是非常自然的事情。对于大公司出来的人来说,之前积累的人脉资源这时候会起到很大的作用,比如创业期间的一些合作机会或者资源的互利,等等。万一创业失败,也不会很惨,因为您之前接触的人脉可以给您提供工作机会。但如果您刚毕业就选择创业,创业失败之后没有人能给您提供工作机会。

心态

其实大公司能给予毕业生最大的优势,就是提供一个心智培育的土壤。之前参加面试官培训的时候,我大概了解过公司招聘一个毕业生投入的成本。从校园招聘,到安排面试官面试候选人,再到封闭培训和一些课程培训,再给一段时间熟悉项目,最后 3 个月试用期后可能还要淘汰掉一些。如果把成本平摊到每一个人身上,这些投入要一年才能收回来。而小公司不会有这么大的耐心去培育一个新人。如果没有足够的时间去学习和成长,可能在一两年后,员工的能力也比较全面,但是样样都不精通,也说不清楚自己的目标是什么,于是就变成了“野生程序员”。

综合来讲,在大公司中,从硬技能到软技能都会有很多经验丰富的前辈能够教您,您会在大平台上学习到很多东西。工作几年之后,员工的选择也很多,要么走技术路线继续发展下去,做高级工程师;要么学习管理和领导力;要么出去创业。

所以,我的个人建议是,从毕业生自己前途发展的角度来看,先加入一家上市大公司是个不错的选择。

一、中国目前的大学教育就一个字:渣。我的大学在当时不比后来的什么211之类的差,但还是一个字:渣!从学习风气到成绩考试,从课程设置到师资力量,都是一个字:渣!我并非针对任何人,大环境如此,信不信由你。(有兴趣可以关注“金旭亮”老师的文章,他是高校的老师,对高校计算机教育提出过严厉而中肯的批评。然而,大环境如此,他不过在现实四处碰壁而已。我这里没链接了,欢迎大家提供。)

二、大学本科的所有知识都可以自学获得。这些知识都是烂大街的大路货,又不是什么国家机密核心技术,只要你想学,没有学不到的。图书馆里的书琳琅满目,很多引进的国外书籍深入浅出,比什么东拼西凑的“21世纪高等院校规划教材”强一百倍。

三、目前大学教育的课程设置陈旧腐朽,建议选择性学习。当然,开卷有益,技多不压身,你有兴趣也不会有人拦你。但是,要想有所成就,必须全方面的超越大学本科科目!就以《野生程序员的故事》里的故事为例,大学课程里有前端优化措施?会教你用Git?会告诉你CSS不要写在html页面里?

四、计算机科学和软件工程是两码事。前者,是以科学研究为导向的,按说学了就应该是开发芯片、操作系统、发明计算机语言之类的,目前我国的大学本科教育也是以此为方向,当然最终结果大家都看在眼里;后者,是以工程应用为导向的,就是利用已有的语言框架等开发面向最终用户的软件系统。目前我们绝大多数人从事的都是工程应用。走哪条路,要心中有数。两条路,方向不同而已,没有高低贵贱之分。工程里面的学问博大精深,不是啃两本《数据结构》、《windows核心编程》就可以NB哄哄的吹神话的。想想我国六十年代就爆了原子弹,为什么现在还没有航空母舰,甚至连一台像样的汽车都造不出来?

五、很长一段时间,英语是相当重要的。要学会吸收一切先进文明为我所用,不要以为整个汉字编程就是中华民族伟大复兴了。

六、如果你是大学都没考上的学渣。中国的大学教育再烂,没考上也是你没本事!纵然是既往不咎,但也要引以为戒。从此端正态度,踏踏实实的学习,才是正道。说葡萄酸,要在你能吃到葡萄的时候。

阅读余下内容

发表评论

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


京ICP备12002735号