ACM 与 软件开发

有同窗提问:
==================================================
杨中科老师你好,我想向你咨询下工做的事情。
先介绍个人状况 普通本科大二学生,,以前一直在练acm的题,也得到了一些大赛的奖项,有一天有我的问我,叫我作一个小软件,我发现我不会。。更惨的就是我好像什么软件都不会作(这里指的是基于c/c++的开发),,除了console的一些算法题,,而后我和本身说练acm够了,应该开始学开发工具的运用和一些库类(函数)的使用了,,这样2个星期下来,我翻了不少关于商业程序开发资料,我发现商业程序代码真的不多涉及到高效算法和一些特殊的数据结构,并且我也问了几个如今在公司上班的师兄,他们也说工做中真正用到acm的知识是不多不多的。如今一系列的ACM比赛又差很少开始了,我如今一直没准备。。
老师我想问的就是 以你多年的工做经验来看,具备ACM背景的人的优点在哪,,还有优点大吗?还有假如我若是如今(大二)拿ACM的获奖证书和带上以前开发一些小软件的实例 去找工做的话,,人家会很轻易的接受我吗?
===================================================
个人回复:
你说的“商业程序代码真的不多涉及到高效算法和一些特殊的数据结构”这是实际状况,由于并非全部的公司的产品都是理论性很强的产品,就像造山寨手机的人不须要懂太多芯片设计等方面的知识,只要会把大公司制造的手机芯片拼装起来,而后装一个外壳就能够了。“高效算法和一些特殊的数据结构”已经由IBM、微软等大公司解决了,制形成了一些类库、应用服务器、数据库服务器之类的“零件”,商业程序开发者只要把这些零件按照须要拼装起来就能够了。在大公司工做的人是少数的,因此你问的师兄估计也都不是在这些大公司工做的,因此他们说“工做中真正用到acm的知识是不多不多的”也是能够理解的。
ACM被誉为计算机界奥林匹克,每一年的获奖者都几乎被google、微软、IBM、百度等大公司哄抢一空,不少大公司赞助ACM赛事的目的就是“近水楼台”,可以比其余竞争对手笼络更多的人才。
ACM能够看作是“聪明者的游戏”,在ACM题目研究深刻的人一般有很是高的数学素养、计算机算法素养以及很是强的分析问题、解决问题以及动手的能力,可以处理各类高精尖的难题,这是各大公司哄抢ACM人才的主要缘由。
ACM的程序开发和开发商业软件的不一样点就在于写ACM程序是研究(Research),而写商业程序是开发(Development),这就是研发(Research&Development)两个字的含义,“研发”就是“研究开发”,像微软、IBM等这样的公司都将研发人才分为两种:研究性人才和开发性人才。以微软为例,在中国,微软设立了微软亚洲研究院,同时微软亚洲研究院下设微软亚洲工程院,微软亚洲研究院中的人主要的工做就是出paper(论文),根据微软总部下达的研究方向进行核心技术的研究,而后将研究成果转换为能够实施的方案,由微软亚洲工程院的工程师进行实际的开发,简单的讲就是微软亚洲研究院的人负责研究课题,而后由微软亚洲工程院的工程师根据研究结果开发出实际可用的商业化产品。所以微软亚洲研究院的人都是拥有很强科研实力的人,而微软亚洲工程院的人 则是有很强开发能力的人。像google、IBM等大公司也有相似的部门职位划分。对于一些次一级的大公司来讲,好比百度、网易等,也在职位上进行着相似的划分。
他们的区别就像研究动力学的人和设计汽车的人的差异同样,研究动力学的人只负责从研究一些理论,不负责实际的汽车设计,而是由专门的汽车设计工程师来负责根据研究成果进行实际的产品设计。好比对于作搜索引擎来讲,研究性人才负责研究检索方面的理论,得出一些公式、算法、理论,而后由开发性人才负责根据这些研究成果写程序,而后变成能够实际使用的搜索引擎。
研究性人才对智商要求比较高,处于人才金字塔的顶端,所以收入、待遇各方面都更高一些,职业发展就是“科学家”;而开发性人才的优点则在于理论转化为产品的能力,所以开发性人才中独立创业的比例更高。
看了公司的职位划分你就能明白白商业化软件开发和写ACM题的区别在哪里了,你就知道作ACM题背景的人和掌握商业程序开发技能的人的不一样定位了。若是ACM成绩很是好,那么进入这些国际性大公司的几率会很是高,哪怕去不了大公司,中小型公司也很是欢迎这种基础理论扎实的人才,由于他们能够解决别人解决不了的难题,可是这类人才一般要价比较高,不少中小型公司难以承受,同时中小型公司并无独立的研究部门,因此这类人才进入公司之后一般都是兼有研究和开发两重责任,固然也是处于公司人才金字塔的顶端,享受特殊待遇;开发性人才则是各个类型的公司都须要的,相对来讲选择面广一些,可是初始阶段的收入会比研究性人才低一些。你须要根据你的状况来给本身定位,若是是作研究性人才,那么就继续把ACM弄好,多参加ACM大赛,特别是正式的国际性ACM大赛,争取拿奖,同时作好进行研究生学习的的准备(ACM成绩好的话通常都会被科研院所免试录取),在研究生阶段进行进一步的理论研究和培养本身的科研能力,这种方向的话不须要管什么java web开发、Windows程序开发这类的实现性技术,只须要把算法、模式识别等理论课程学好便可;若是你的定位是开发性人才则把主要精力放到java web开发、Windows程序开发等上边来,若是从事这个方向,由于你已经有必定的ACM的基础了,因此应付面试笔试中的那些算法难题不在话下,那么就在把一部分精力继续投入在ACM的学习上的同时,把更多的精力投入到这些商业程序开发的技术上去。
相关文章
相关标签/搜索