美国一半程序员靠自学成才 美国程序员调查近半没学位。美国的程序员交流网站Stack Overflow在去年的开发者调查中想要了解,码农们是否都有大学的计算机专业学位。有26086名程序员参与了这项调查,其中有近一半受访者的答案是,没有学位。
大量程序员非科班出身的原因有很多方面。一方面,美国大学的学费正日益高涨。私立四年制大学一年学费平均接近4.5万美元,其中还没有包括生活费。另一方面,网上课程和培训班吸引了很多人。有志于成为程序员的人士可以在做中学,而不必“浪费”几年时间去完成大学学业。
关于非科班出身的程序员,有几点建议可供参考:
闭门造车要不得
编程时的闭门造车会带来几方面问题:
没有人给你答疑。编程时你会面临许多疑问,但却无法找到人给你答疑解惑。解决这类问题的过程通常需要求助于高级程序员,或是将自己的代码与别人的去对比。
软件评审。大型软件公司都会设置软件评审环节,即让同事之间互相评审对方的代码。无论是国外还是国内,数据显示,代码评审能多发现60%的错误和漏洞。即使你自己干,也需要找人去评阅自己的代码。
与他人一同工作有助于拓展人脉,在职业生涯初期尤其如此。
目前,国内许多众创空间都在面向小团队乃至个人开放申请。这将会是不错的选择。
多读书,尤其是大学专业内容
大学培养人才的重要之处是训练基本功和思维方法,而不是让你实际参与工程项目。如果没有上过大学,那么这些方面很可能会有缺失。你可能知道如何根据架构师的设计文档去写代码,但却不知道算法为什么是这样。在实际面试中,笔者还曾发现,有许多非专业出身的人士甚至都不能准确解释,什么是面向对象的编程。而这本应是C++的基础。
非科班出身的人士需要通过多读书来补充基础知识,无论是离散数学、算法设计,还是软件测试的基本理论。
另一方面,如果你希望通过网上课程或培训班去学习,那么最好从基础开始学,尤其是在没有编程经验的情况下。
大企业培养新程序员的方式有两种。一种是自顶向下的模式。在这种模式中,应用或框架已经搭好,对程序员的期望是他们直接上手,补足欠缺的部分或是去改漏洞。另一种是自底向上的模式。在大企业中,通常只有新项目才会这样做。这时程序员可以先打基础,随后慢慢入手,从架构设计、代码的顶层设计、细节设计,再到实际编程。
如果你是非科班出身,希望自己干,那么应当采用自底向上的模式。这将帮你弄清许多基本概念。一上手就接触庞大的代码将会令人摸不着北。
多练习,多做项目
对新人来说,多参与项目能帮助积累更多经验,有利于未来的职业发展。而如果想要单干,那么所做的项目将成为简历上的主要经历,是对能力的证明。
个人从事项目最好的选择是开发移动应用。相对于大型软件项目,例如系统软件或企业级应用,移动应用的开发相对简单,很容易出成果,而也会有许多用户提供反馈,相当于免费帮你做测试。移动应用开发使用的语言包括Swift或Objective C(iOS平台)、Java(Android平台),以及C#和VB(Windows平台)等等。此外,Phonegap等通用型技术也可以考虑。
对个人程序员来说,GitHub是个好工具。GitHub上有许多开源项目可以参与,也有许多其他程序员可以提供帮助。你也可以自己创建软件项目。这一切都是免费的。
职业发展的选择
非科班出身程序员在找工作时可能会受到局限,因为大公司的招聘中学历是个门槛。许多知名科技公司用大学学历作为条件去过滤求职者。例如,谷歌在招聘初级工程师时就是这样。
相对来说,一些创业公司更看重个人能力,而非学历。对于需要什么样的程序员,什么样的程序员是够格的,它们有自己的标准。在创业公司里找工作时,你不一定需要有大型软件的成功开发经历,通常只要证明你能开发出用得起来的软件。
如果觉得自己的能力稍弱,那么还可以考虑软件公司中的QA(质量工程师)职位。QA的工作通常是统计问题,找出趋势,以及建议如何改进。这也是一项程序员的基础能力。而许多公司对QA工程师的招聘门槛要低于软件工程师。
简而言之,大学学位,或者说计算机专业的学位,并不是成为程序员的必要条件。但如果这类人群希望成为程序员,那么将要在学习和实践方面付出更多的努力。