❶ 如何成为Google软件工程师
招聘的流程?在线申请简历筛选电话访谈现场面试Offer发放面试包括哪些内容?简短介绍介绍你的专长或进行技术评估提出你的问题面试没有益智类问题(因为益智问题并不能反映你的编程能力)如何对申请人的工程技能进行评估?我们会根据以下四个方面来进行评估:编程语言的语法,关键库函数,编程风格,对程序性能的考虑等算法和数据结构分析能力合理设计如何准备面试?复习基础知识复习算法与数据结构练习写代码 在白板上或在纸上练习不要使用伪代码你可以选择你最擅长的编程语言认识Google员工?
和他聊聊他在Google的经历。让他成为你的推荐人,或者让招聘者知道谁可以成为你的推荐人。在实际面试过程中:我们希望了解你解决问题的能力我们会向你提出一个有深度的问题,我们想了解你对复杂问题的解决方法不一定要得到正确答案,你的思考过程比正确答案更加重要我是在校生,离毕业还有两三年的时间,应该怎么努力?打好专业基础学习编程语言:C、C++、Java、Perl、Python参加课堂之外的活动参加计算机俱乐部或社团参加编程竞赛争取尽可能多的实习生机会参与开源项目(不要忘记参加Google编程之夏-Google Summer of Code)博士生的面试会有所不同么?我们会根据每个人的情况安排有针对性的面试面试内容包括标准算法,设计,编码能力论文讨论所有的面试官都具有博士学位Google软件工程师如是说: 问:在Google工作,最担心的一点是什么? 答:公司的零食太多了,在Google工作要防止长胖 问:在Google工作,最轻松的事情是什么? 答:坐在桌子上跟老板说话 问:在Google上班,着装有什么要求? 答:穿总比不穿好。 问:Google工程师几点上班? 答:Google工程师的工作比较自由,没有固定考勤,允许Work from home。但由于需要和其他办公室的同事交流,有可能一大清早就爬起来开会,或者一直工作到深夜。 问:在Google工作,最让你欣喜的事情是什么? 答:在Google工作,有机会与许多大牛共事,一起交流技术。 问:出差的机会多吗? 答:取决于项目安排,可能需要去美国东西海岸、伦敦、苏黎世、悉尼、东京等地出差 问:怎么才能获得上万台计算机来做大规模并行计算实验? 答:到Google工作,你随时可以做到。 问:在Google可以做开源软件吗? 答:可以,很多著名的开源软件程序员加入了Google,包括Google中国也有很多著名的开源软件程序员 问:你们的梦想是什么? 答:我们的梦想是:技术改变世界,do good things that matter in the worldGoogle 非软件工程师如是说: 问:听说在 Google 吃的很好,如果胖了怎么办? 答:公司有健身房,瑜伽房,吃多了下去跑两圈。 问:Google 员工有保险么? 答:有,很好的员工保险,还包括员工家属呢。 问:Google员工有带薪假期么? 答:员工在入职的第一年有15天的带薪假期。在Google工作每多一年,带薪假期就多一天。所以,如果你在Google 工作满235年,就可以全年休假啦! 问: Google对于非技术性职位的要求是什么? 答:用户至上,无论是对终端客户还是内部用户,都将是最重要的标准之一。 问:面试Google非技术性职位有什么技巧? 答:陈述事实,善用数据,如果你经验足够丰富!你懂的。:) 问:Google的销售工作压力大吗? 答:我们欢迎敢于接受挑战的人加入销售团队,按摩椅,健身房,瑜伽室是你最好的减压伙伴。
❷ 软件工程师需要具备什么条件
一,良好的编程能力。编程能力直接决定了项目开发的效率。这要求软件工程师至少精通一门编程语言,熟悉它的基本语法、技术特点和 API( 应用程序接口 ) 。 二,自觉的规范意识和团队精神。随着软件项目规模越来越大,仅仅依靠个人力量已经无法完成工作,因此,现代软件企业越来越重视团队精神。一般来讲,软件 企业中的程序员可以分为两种,一种是 " 游击队员 " ,他们可能对编程工具很熟,能力很强,编写的程序简洁高效,却缺乏规范和合作的观念;另一种程序员个人能 力不一定很强,但程序较为规范,合作意识良好。第二种人更适合现代软件企业发展的潮流。对于基础软件工程师来说,他们在企业中的角色决定了他们必须具有良 好的规范意识和团队精神。 三,认识和运用数据库的能力。信息以数据为中心,因此与数据库的交互是必不可少的,了解数据库的操作和编程是软件工程师需要具备的基本素质之一。 四,较强的英语阅读和写作能力。程序世界的主导语言是英文,编写程序开发文档和开发工具帮助文件离不开英文,了解业界的最新动向、阅读技术文章离不开英 文,与编程高手交流、发布帮助请求同样也离不开英文。作为基础软件工程师,具有一定的英语基础对于提升自身的学习和工作能力极有帮助。 五,具有软件工程的概念。基础软件工程师从事的工作相对于系统分析师和高级程序员要单纯一些,但是 他们仍然是整个软件工程中重要的一环,他们同样需要具有软件工程的概念:从项目需求分析开始到安装调试完毕,基础软件工程师都必须能清楚地理解和把握这些 过程,并能胜任各种环节的具体工作。 六,求知欲和进取心。软件业是一个不断变化和不断创新的行业,面对层出不穷的新技术,软件人才的求知欲和进取心就显得尤为重要,它是在这个激烈竞争的行业中立足的基本条件。软件工程师应具有较强的学习总结能力、需求理解能力以及对新技术的敏感性。 上述这些能力不可能凭空产生,而是通过培训和教育的过程逐步获得的。目前,社会上的软件工程师培训很多,但良莠不齐。有些好的培训,能够从知识到技能、 从技能到应用、从应用到项目,多层次多角度地对学员进行培训,不仅关注技术层面,同时关注项目规划的实施、团队合作、技术文档的编写等在认证培训过程中无 法顾及、但在实际工作中又不可或缺的能力的培养,可以使学员在理论上掌握和理解面向对象的软件工程方法和组件化的软件设计思想。还有一些培训中心,针对软 件设计人员,通过对经典设计模式的理论实践,使学员掌握、运用其思考和解决问题的方法,总结技术经验,构造自己的设计模式库,使软件设计人员能系统地掌握 面向对象的方法。 与信息技术领域先进的基础理论教育相比,我国高校软件人才培养模式在实践技能的培养、 IT 前沿技术 的获取与沟通、具有国际水平和标准的软件项目开发等方面的培养存在极大不足。为解决这一问题,有必要在高校推出 " 软件教育产品 " 的人才培养模式。 " 软件教 育产品 " 是一种培养中、高级软件人才的教育产品化解决方案,其根本目的可以归结为 -- 培养掌握 IT 技术发展方向、熟悉国际开发准则和标准,并且具有丰富项 目管理经验的高级软件项目管理人员。 " 软件教育产品 " 包含了教学方案的设计、课程选取与设置、教材的引进与二次开发、教学管理流程的监控、教学实践环节的 落实等等。 仅有技术是远远不够的 产业变动快速,复合型的概念也适用于信息技术相关科系,软件工程师若能软 / 硬件兼修或略通电信,再通晓某一行业的相关知识,在职场上就会比单纯写程序的工程师吃香,工作选择机会也比较多。而要想成为复合型的软件工程师,至少要做到以下几点: 第一,培养自己的市场意识。市场需求决定着软件产业的发展方向,软件工程师要就市场论技术,即便是 " 天衣无缝 " 的技术,如果没有市场需求也只能 " 孤芳自 赏 " 。绝大多数软件都是商品,任何商品的成就大小首先都取决于应用需求规模。比尔 o 盖茨能够成为软件业第一人物的基本前提,乃是他抓住了 PC 时代软件业最 大的应用需求。 第二,培养全局角度的应变能力。用友靠财务软件起家,但王文京最近却表示,两年之后不会再有专门的 财务软件公司存在: " 财务是企业管理的核心,但企业的供销存、客户关系管理的需求必然会越来越大,所以,最好忘掉我们是一个财务软件公司,我们要的是企业 管理软件市场。 " 同样,对软件工程师个人来说,自身的定位也不可能一劳永逸。善于审时度势、合纵连横,有良好应变能力是软件工程师必不可少的基本素质。在 风声鹤唳之时,善于辨别哪里是最不可替代的用户需求关口,然后再结合自身技术特点进行转型,才能在软件行业有所成就。 第三,培养某一行业的专业知识。 IBM 有一份《中国银行业加入 WTO 的新纪元》白皮书, IBM 做银 行业咨询顾问的最终目的还是推销自己的整体解决方案,占领中国金融业软 / 硬件服务市场。但 IBM 的行动告诉我们,要想让技术和产品介入某一行业,仅有大批 专业技术人员还不够,还需要一种对行业的认知和把握能力。软件教育要摒弃培养单纯的技术开发人员的旧观念,要着眼未来的需求,大力培养复合型软件工程师。 最后,熟练掌握英语。英语是 IT 世界的主流语言,它对软件工程师技能和业务水平提高的重要性不言而 喻,软件工程师总是需要在第一时间学习业界最流行、最先进的编程工具的使用方法,但软件工程师不可能马上就能找到这种软件的中文说明或帮助文档。北京软件 行业协会推出的软件工程师培训项目中,重点强调了软件工程英语的重要性,增加了英语教学课时,结合科技英语和编程工作的特点,撰写有针对性的教材,突出实 用性。通过对培训学员的调查和学习效果的检查,这种方法已经取得了良好的效果。
❸ 看到很多科技公司都有一个职位叫做工程师,比方说谷歌软件工程师,他们是做什么的呢
软件工程师是一个认证考试,具体地说是从事软件职业的人员的一种职业能力的认证,通过它说明具备了工程师的资格。软件工程师是从事软件开发相关工作的人员的统称。它是一个广义的概念,包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位,工作内容都与软件开发生产相关。软件工程师的技术要求是比较全面的,除了最基础的编程语言(C语言/C++/JAVA等)、数据库技术(SQL/ORACLE/DB2等)等,还有诸多如JAVA SCRIPT、AJAX、HIBERNATE、SPRING等前沿技术。此外,关于网络工程和软件测试的其他技术也要有所涉猎。
对于软件工程师,不太重视学历,但并不是对学历没有要求,重点关注项目的经验和学习知识的能力,能否利用软件工程专业知识来解决问题,根据岗位不同,对软件工程师的要求也有所不同。具体能力要根据岗位和自己的兴趣爱好选定自己的职业规划方向,一方面要详细了解软件工程师的要求,可以关注企业的招聘信息;一方面自己要贮备通用的知识技能,广泛阅读相关的计算机材料对自己以后的发展大有帮助。可以确定的是软件工程师的前途在未来的发展依然是不断升温的职业,比较需要有技术和良好前景的专业之一。
下面列举一些企业的要求:
,NET方面的开发
⒈熟悉.net开发体系,熟悉C# ASP .NET
⒉熟悉SQLServer,Oracle数据库开发
⒊以上要求至少3年开发经验。
⒋具有企业管理系统项目经验。5.了解企业ERP及财务管理软件(用友,金蝶)者优先。6.善于沟通,能独立撰写方案。为人诚实,善于学习,做事认真负责,积极主动,具有敬业精神,有团队精神
JAVA应用程序开发
技能要求:
熟练使用Struts2+Spring+Hibernate
掌握Jquery
掌握Java
熟悉Oracle
掌握xml/webservice
掌握OOD、OOP
基本文档写作能力
web、数据库方面的开发
⒈计算机或相关专业本科以上学历;
⒉有4年以上开发经验,有良好的代码编写习惯,熟悉软件开发规范;
⒊熟练掌握ASP,NET;等编程语言,熟悉.Net开发环境,理解.Net Framework,理解并能熟练使用WebService、O/R mapping、Remoting、多线程等技术;
⒋热衷于互联网WEB开发,热衷于钻研最新的前沿技术,精通XML,Javascript,CSS,AJAX等WEB前端技术;
⒌熟练的技术文档编写能力,熟练使用Rose,Power Design,Visio等建模和设计软件,有一定的架构设计能力;
⒍精通SQL server数据库技术,了解数据库性能调优者优先.
C#项目开发
⒈计算机专业本科以上学历,一年以上C#/ASP NET开发经验,熟练使用SQL数据库,有欧美项目开发经验者优先;
⒉大学英语四级以上,具有较强的听、说、读、写能力,尤其是听、说能力;
⒊工作认真细致,踏实肯干,具有较好的团队协作精神和沟通能力;良好的逻辑思维,能够承受一定的工作压力并可以按时完成工作且保证质量
php项目开发
⒈使用PHP语言开发互联网应用程序;
⒉网站产品和网站功能模块的开发与维护;
⒊与页面设计师协调沟通,编写部分Javascript和HTML;
⒋参与底层MVC框架的编写与维护。
程序员和软件工程师的区别是:软件工程师不但要有编写程序代码的能力而且更重要的是要懂得如何去开发一个软件,怎样去学习实际的UI的观念。
就是工厂里面技术员和工程师的区别。技术员是熟练工人,工程师是设计者。
❹ 在谷歌工作需要什么学历而且具备什么能力
谷歌认为以下几点特质比文凭更重要:
1、解决问题能力。也就是认知能力,处理问题的能力。谷歌公司认为,优秀人才都很好却没有完美人才。谷歌公司有许多数据需分析,因为,解决问题的能力比较重要。
2、领导力 。谷歌公司说,如果你在大学期间是学生会主席或学生干部,在工作中,当发现问题时,是否具有领导力,领导大家一起解决问题,让别人接手,给别人空间。亿万富翁家得宝创始人肯兰贡说,我们更喜欢用那些具有领导力的人才。
3、谷歌精神。主要包括激情、诚信、专业精神、工作态度等。即使有一个顶级大学文凭,也不能替代好的态度,教育固然重要,但诚信、职业道德、工作态度这类品质更重要。美联储主席耶伦告诉银行家们,激情和能力对成功来说意味更多,也是雇主所要寻找的。
4、谦逊品质,包括谦虚态度和责任感。谦逊的人是一种智慧,谦虚让人进步。
5、团队合作。在一个注重创新、强调团队合作的时代,软技能更加重要。
谷歌公司人力资源总监表示,合作精神、解决问题能力、领导能力、谦逊态度、适应能力和学习欲望等这些是更加重要的特质。
❺ 软件工程师所要具备的条件是什么
软件工程师所要具备的条件是:
对于软件工程师,不太重视学历,但并不是对学历没有要求,重点关注项目的经验和学习知识的能力,能否利用软件工程专业知识来解决问题,根据岗位不同,对软件工程师的要求也有所不同。
具体能力要根据岗位和自己的兴趣爱好选定自己的职业规划方向,一方面要详细了解软件工程师的要求,可以关注企业的招聘信息。
一方面自己要贮备通用的知识技能,广泛阅读相关的计算机材料对自己以后的发展大有帮助。可以确定的是软件工程师的前途在未来的发展依然是不断升温的职业,比较需要有技术和良好前景的专业之一。
软件工程师的技术要求是比较全面的,除了最基础的编程语言(C语言/C++/JAVA等)、数据库技术(SQL/ORACLE/DB2等)等,还有诸多如JAVASCRIPT、AJAX、HIBERNATE、SPRING等前沿技术。此外,关于网络工程和软件测试的其他技术也要有所涉猎。
(5)谷歌招聘软件工程师的要求扩展阅读:
软件工程师发展前景:
当今社会不论什么职业的都需要一个不断学习的环节,软件工程师也一样。虽然软件工程师的工作不同于程序员但是一个软件工程师其前身必定是一个优秀的程序员,软件的开发工具、开发技术在不断地发展。
在校学生所能学到的东西很难跟得上发展的需要但是也不能说那些东西完全没有用,只有在完全理解了相应的基本技能之后你才能很轻松地掌握新的技能,软件技术都是一个循序渐进的过程。所以学好学校所能提供的专业课程是相当重要的。
我国软件出口2010年规模达到215亿元,软件从业人员达到72万人,在中国十大IT职场人气职位中,软件工程师位列第一位,软件工程人才的就业前景十分乐观。毕业生主要在各大软件公司、企事业单位、高等院校、各大研究所、国防等重要部门从事软件设计、开发、应用与研究工作。
有关数据显示,目前我国对软件人才的需求已达20万,并且以每年20%左右的速度增长,而高校计算机毕业生中的软件工程人才还很缺乏,尤其是高素质的软件工程人才的极度短缺。
参考资料来源:网络—软件工程师
❻ 如何成为一名 Google 软件工程师
招聘的流程?在线申请简历筛选电话访谈现场面试Offer发放面试包括哪些内容?简短介绍介绍你的专长或进行技术评估提出你的问题面试没有益智类问题(因为益智问题并不能反映你的编程能力)如何对申请人的工程技能进行评估?我们会根据以下四个方面来进行评估:编程语言的语法,关键库函数,编程风格,对程序性能的考虑等算法和数据结构分析能力合理设计如何准备面试?复习基础知识复习算法与数据结构练习写代码 在白板上或在纸上练习不要使用伪代码你可以选择你最擅长的编程语言认识Google员工? 和他聊聊他在Google的经历。让他成为你的推荐人,或者让招聘者知道谁可以成为你的推荐人。在实际面试过程中:我们希望了解你解决问题的能力我们会向你提出一个有深度的问题,我们想了解你对复杂问题的解决方法不一定要得到正确答案,你的思考过程比正确答案更加重要我是在校生,离毕业还有两三年的时间,应该怎么努力?打好专业基础学习编程语言:C、C++、Java、Perl、Python参加课堂之外的活动参加计算机俱乐部或社团参加编程竞赛争取尽可能多的实习生机会参与开源项目(不要忘记参加Google编程之夏-Google Summer of Code)博士生的面试会有所不同么?我们会根据每个人的情况安排有针对性的面试面试内容包括标准算法,设计,编码能力论文讨论所有的面试官都具有博士学位Google软件工程师如是说: 问:在Google工作,最担心的一点是什么? 答:公司的零食太多了,在Google工作要防止长胖 问:在Google工作,最轻松的事情是什么? 答:坐在桌子上跟老板说话 问:在Google上班,着装有什么要求? 答:穿总比不穿好。 问:Google工程师几点上班? 答:Google工程师的工作比较自由,没有固定考勤,允许Work from home。但由于需要和其他办公室的同事交流,有可能一大清早就爬起来开会,或者一直工作到深夜。 问:在Google工作,最让你欣喜的事情是什么? 答:在Google工作,有机会与许多大牛共事,一起交流技术。 问:出差的机会多吗? 答:取决于项目安排,可能需要去美国东西海岸、伦敦、苏黎世、悉尼、东京等地出差 问:怎么才能获得上万台计算机来做大规模并行计算实验? 答:到Google工作,你随时可以做到。 问:在Google可以做开源软件吗? 答:可以,很多著名的开源软件程序员加入了Google,包括Google中国也有很多著名的开源软件程序员 问:你们的梦想是什么? 答:我们的梦想是:技术改变世界,do good things that matter in the worldGoogle 非软件工程师如是说: 问:听说在 Google 吃的很好,如果胖了怎么办? 答:公司有健身房,瑜伽房,吃多了下去跑两圈。 问:Google 员工有保险么? 答:有,很好的员工保险,还包括员工家属呢。 问:Google员工有带薪假期么? 答:员工在入职的第一年有15天的带薪假期。在Google工作每多一年,带薪假期就多一天。所以,如果你在Google 工作满235年,就可以全年休假啦! 问: Google对于非技术性职位的要求是什么? 答:用户至上,无论是对终端客户还是内部用户,都将是最重要的标准之一。 问:面试Google非技术性职位有什么技巧? 答:陈述事实,善用数据,如果你经验足够丰富!你懂的。:) 问:Google的销售工作压力大吗? 答:我们欢迎敢于接受挑战的人加入销售团队,按摩椅,健身房,瑜伽室是你最好的减压伙伴。
❼ 软件工程师要求
软件工程师要求?对于软件工程师,学历次要,最主要的是看有多少项目的经验,根据岗位不同,对软件工程师的要求也有所不同。要详细了解软件工程师的要求,其实看看企业的招聘就知道了,呵呵。现在对于软件工程师分的也很细,方向不同,要求就不太一样,但是总的素养基本都是差不多的,还有软件工程师的确是一个很好的职业。
下面举几个例子:
1.熟悉.net开发体系,熟悉C#/ASP.NET
2.熟悉SQLServer,Oracle数据库开发
3.以上要求至少3年开发经验。
4.具有企业管理系统项目经验。5.了解企业ERP及财务管理软件(用友,金蝶)者优先。6.善于沟通,能独立撰写方案。为人诚实,善于学习,做事认真负责,积极主动,具有敬业精神,有团队精神
web应用程序开发
技能要求:
熟练使用Struss2+Hiberate
掌握Jquery
掌握Java
熟悉Oracle
掌握xml\webservice
掌握OOD、OOP
基本文档写作能力
1.计算机或相关专业本科以上学历;
2.有4年以上开发经验,有良好的代码编写习惯,熟悉软件开发规范;
3.熟练掌握ASP.NET等编程语言,熟悉.Net开发环境,理解.Net Framework,理解并能熟练使用WebService、O/R mapping、Remoting、多线程等技术;
4.热衷于互联网WEB开发,热衷于钻研最新的前沿技术,精通XML,Javascript,CSS,AJAX等WEB前端技术;
5.熟练的技术文档编写能力,熟练使用Rose,Power Design,Visio等建模和设计软件,有一定的架构设计能力;
6.精通SQL server数据库技术,了解数据库性能调优者优先.
1.计算机专业本科以上学历,一年以上C#/ASP.NET开发经验,熟练使用SQL数据库,有欧美项目开发经验者优先;
2.大学英语四级以上,具有较强的听、说、读、写能力,尤其是听、说能力;
3.工作认真细致,踏实肯干,具有较好的团队协作精神和沟通能力;良好的逻辑思维,能够承受一定的工作压力并可以按时完成工作且保证质量
一般就是上面这些要求了。
至于多少时间可以达到上班的水平,现在一般的培训机构说的差不多就是9个月左右。勤奋点,时间可以短些。如果要培训,个人推荐威迅教育,质量很好,价格比其他机构低。
❽ 如何成为一名Google工程师
谷歌也曾经录用过一位没受过正规大学教育、连本科文凭都没有、基本全靠自学成才的草根码农,大家会不会觉得不可思议?但是,这事儿真的可以有——曾就职于谷歌、Square、DoubleHelix 等公司的资深软件工程师及创业者大卫·比托(DavidByttow)日前撰文介绍了他从一介草根到被谷歌录用的经历,故事绝对励志!
文章摘要: 第一,鼓起勇气挑战很牛的事情,做着做着自己也就变牛了。
第二,与业界“大拿”为友,能改变解决问题和看待世界的方式。
第三,勤能补拙,在大量实践中弥补基础知识方面的差距。
第四,抹去简历中的教育背景,意外得到面试机会;做足准备,谷歌面试也能变得乐趣十足。事实证明,谷歌对优秀的人才并不完全拘泥于学历。
其实,我当年非常非常想上大学。我选择申请加州大学洛杉矶分校(UCLA),但是很不幸,我在高中的平均绩点(GPA)只有可怜巴巴的 2.45,所以我也就没法被大学录取了。然后,我在普渡大学盖莱默校区(PureUniversityCalumet)进修计算机课程,同时盼望自己有朝一日能顺利转学或者另谋出路。过了将近两个学期之后,出路来了——我得到了一个令人无法拒绝的录用通知。
第一步:假装自己很牛,直到真的变牛 上大学时,我曾经给印第安纳州格里菲斯市的一家小公司打工,工作内容是帮助本地公司建网站,时薪 12 美元。这份工作与我所梦想的未来职业相去甚远,但也不算太糟糕。
我埋头苦干、不说大话,把好几个项目做得超乎预期。这为我建立了很好的声誉,也让那家公司获利颇丰。与此同时,我还在并不充裕的业余时间里尝试游戏开发。后来我孤注一掷,请求公司管理层给我三个月时间和一点点钱来开发一款能在网上销售的游戏。我做出了漂亮的电子表格和丰富多彩的图表,向他们展示了共享软件模式的原理和游戏的光明“钱途”。当时我也不大清楚自己在做什么,但他们还是买了我的账,可能是因为我做的东西颜色很漂亮吧。
开发了两个多月之后,我在网上发布了一段演示,引起了加州初创企业 CodeFire 的注意,因为他们做的也是一模一样的太空射击游戏,类似于非 3D 的 SubSpace。但引起关注未必就是好事——很不幸,他们向我发出了勒令停止通知函。于是我也只能回复曰:“没问题,我会到此为止——前提是你们得雇我开发你们的游戏。”他们回以一份录用通知,而我笑纳了它。
注意:这家公司持有这款游戏的原始版权,而我在离职前也按照规定提前三周通知了老东家。
第二步:与“大拿”交朋友 这或许是你能做的最重要的事情之一——找到你们行业中的大拿,让他们做你的导师,切记学无止境。在 DoubleHelix 工作时,我遇到的大拿是内森·亨特(NathanHunt),他是我见过的最聪明、最谦逊的牛人之一,而且他对我提出的所有问题都极具耐心,无论这些问题有多么初级。我成百上千次走进他的办公室,随意提出诸如“我如何才能把一个旋转矩阵顺利插入另一个?”之类的问题。多年之后,他比我晚一个月加入了谷歌。
我的每一位导师都在一定程度上改变了我解决问题或看待世界的方式,我在此就不一一赘述了。
第三步:弥补差距 我没有正式的计算机学位,因此我明白自己缺乏很多基本知识,例如我曾经用物理引擎解决一个动态编程问题,结果总也不成功。为了弥补这些差距,我实践过我所听闻或读到过的几乎所有最常见的数据结构和算法。你肯定能找到自己需要的信息,但是通过观察“知其然”与通过实践“知其所以然”之间存在着巨大的差距。
随着时间的推移,你需要做到以下事情:
1. 精通C、C++、Objective-C、Java、PHP、Python 或 Ruby 当中至少一门编程语言,熟练使用至少一种其他语言,并且熟悉 Scala、Haskell 或 Lisp。
2. 学习数据结构,实践大多数常用数据结构,了解它们的复杂性。
3. 解决编程问题,多看多练多思考。
4. 构建自己的已完成(未完成)项目作品集(例如编程框架、移动或 Web 应用、小游戏,等等)
第四步:找到自信 离开印第安纳六年后,我已经在多个平台上推出了大约 6 款游戏。我开始感到无聊,需要寻求新的挑战。我申请了谷歌的职位,觉得被谷歌雇佣能让我成为“真正的工程师”——对于我这个没有一纸文凭的人来说,这就是我为之奋斗已久的理想。但是,我一直没有收到谷歌的回音,而我对此并不感到惊讶。
一年之后,我重新提交了自己的简历,但是这一次索性把“教育背景”一栏整个儿去掉了。令人哭笑不得的是,一名招聘人员居然打来了电话并为我安排了一次技术方面的电话面试。我问她能否把电话面试安排在两周之后,她同意了。我需要那段时间——我分秒必争地临时抱佛脚,最大限度地向自己的脑袋里填装各种算法和数据结构,每天编程 12 到 14 个小时,解了数百道编程题目。我如痴如醉地投入其中,直到我对谷歌面试的恐惧感变成了自信和兴奋。
我依然记得在谷歌面试过程中遇到的每一个人,与他们打交道实在是一种乐趣。面试官们说起话来风趣幽默,而我相信他们一定看到了我的兴奋和对面试问题的期待。
以下是我遇到的一些面试题目: 1)给出一组二维点,计算出它们的 skyline。此题很简单,解法有好几种,而我使用了一种叫做“最大堆”(maxheap)的常用数据结构。
3)讲一讲你最看重的软件优点。这是一次“开放性”讨论面试,我讲到了各种测试以及它们发挥价值的时候(例如单元、整合、验收),还讲到了利于代码可维护性的一致风格,等等。这些内容能在《CodeComplete》和《EffectiveJava》等图书中找到。
我真的非常享受每一轮面试和解答各种题目的过程。如果我不是有备而来,情况肯定就会大不相同。面试之后,我自我感觉很好,但是我听说即便招聘委员会最终决定发放录用通知,也需要 CEO 拉里·佩奇亲自签字才有效。我很担心他一看到我在教育背景方面的不足,我就立马完蛋了。
但是,这样的悲剧终究没有发生——一天中午,我在圣克拉拉市(SantaClara)吃寿司时接到了电话,然后欣喜若狂地接受了录用通知。从那天起,我终于可以确信我再也不用回学校念书了。
正如孙子曰:“是故胜兵先胜而后求战,败兵先战而后求胜。”
注:我在谷歌度过了精彩非凡的五年,作为一名工程师不断学习和成长,但是现在我已经不在谷歌工作了。