你说的“商业程序代码真的很少涉及到高效算法和一些特殊的数据结构”这是实际情况,因为并不是所有的公司的产品都是理论性很强的产品,就像造山寨手机的人不需要懂太多芯片设计等方面的知识,只要会把大公司制造的手机芯片拼装起来,然后装一个外壳就可以了。“高效算法和一些特殊的数据结构”已经由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的学习上的同时,把更多的精力投入到这些商业程序开发的技术上去。
分享到:
相关推荐
《欧洲ACM问题集》是一本专为 ACM(国际大学生程序设计竞赛)爱好者精心准备的资源集合。这个压缩包包含了PDF格式的文档,涵盖了大量 ACM 比赛中的经典问题,旨在帮助参赛者提升编程技能,熟悉比赛环境,增强算法...
本资源是关于ACM图论问题的经典讲解,涵盖了常见的ACM图论问题,包括最短路算法及其应用、生成树问题、图论中的圈和块问题、简单网络流问题等。 最短路算法及其应用 最短路问题是图论中的核心问题之一,它是许多更...
关于acm青蛙过河的一道题代码acm,请大家参考之,希望有用处
在【标签】"acm"中,我们可以进一步推测这些文件是关于ACM竞赛相关的学习材料,可能包括历年的比赛题目、官方答案、参赛队伍的解题经验分享等。 【压缩包子文件的文件名称列表】中的文件名看似是乱码,但根据ACM...
3. **计算几何**:独立于其他知识点,主要处理图形和空间问题,如线段相交、多边形面积计算、点在多边形内的判断以及凸包算法等。 4. **线性代数、概率论和高等数学**:虽然在ACM竞赛中不像上述分支那样频繁出现,...
这份“ACM常用代码”压缩包很可能是为了帮助参赛者准备比赛而收集的一系列常见问题的解决方案或者模板代码。下面将详细介绍这些常用代码可能涉及的知识点,并给出相关的编程实践建议。 1. **排序算法**:在ACM比赛...
"acmacm经典题库"是一个专门为ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)参赛者准备的学习资源集合。ACM竞赛是全球范围内影响力极大的编程比赛,旨在提升大学生的算法设计、问题...
ACM PRO ACM PROACM PRO ACM PROACM PRO ACM PRO
ACM面试题解析 从给定的文件中,我们可以总结出四个不同的问题,每个问题都有其独特的解决方案和要点。 试题一:青蛙相遇问题 该问题的核心是判断两只青蛙是否能够相遇,并计算出它们相遇所需要的跳跃次数。为了...
"ACM java_pku 1689 rubbery_ppt" 提到的可能是关于 Java 语言在解决 ACM 比赛问题中的应用,特别是针对北京大学(PKU)的一道编号为1689的题目 "rubbery" 的解题策略或解析,PPT 格式意味着是以演示文稿的形式呈现。...
【杭电ACM问题集】是杭州电子科技大学在线评测系统(OJACM)的一系列编程题目,主要针对ACM/ICPC(国际大学生程序设计竞赛)训练。这些题目覆盖了从1001到2000的编号,旨在帮助参赛者提升算法和编程技能。 1001题:...
ACM(Association for Computing Machinery)是全球最大的计算机科学专业组织,成立于1947年,致力于推动信息技术、科学和应用的发展。ACM主办了多种活动,包括出版期刊、杂志,设立特别兴趣组(SIG),组织学术会议...
### ACM程序设计基础知识点 #### 一、ACM竞赛概览 - **组织机构与活动**: 本课程由东北林业大学陈宇老师负责,通过邮箱Lg_chenyu@yahoo.com.cn进行联系。课程的主要目的是介绍ACM程序设计的基础概念及入门技巧。 - ...
在ACM(国际大学生程序设计竞赛)中,参赛队伍需要解决一系列复杂的算法问题,快速而正确地编写程序。上海交大的模板通常会涵盖以下几个核心知识点: 1. **基础算法**:包括排序(快速排序、归并排序、堆排序等)、...
ACM 在线测评第二题,括号配对!表示完全是自己写的,没有参考他人思想!有不足之处请指正!
ACM竞赛的核心在于解决各种复杂问题,这些问题往往需要高效且优化的算法来解答。以下将从几个关键知识点进行深入解析: 1. **基础算法**:ACM竞赛中,基础算法如排序(快速排序、归并排序、堆排序等)、搜索(二分...
C++代码文件"ACM 果树问题算法 c++代码.txt"应该包含了针对这个问题的解决方案,可能包括了对果树数据的处理,如优先级队列、数组或链表等数据结构的使用,以及复杂度优化的技巧。 其次,"票价问题"可能涉及到的...
该题目是一个典型的ACM竞赛中的数字统计问题,通过对给定的代码进行分析,我们不仅可以了解如何解决这类问题的具体算法思路,还可以学习到解决类似问题的一些通用技巧,比如位运算的应用、动态规划思想的体现以及...
在ACM(国际大学生程序设计竞赛)中,RMQ(Range Minimal Query)和LCA(Least Common Ancestor)是两种常见的数据结构问题,通常出现在树形结构或数组中。 RMQ问题指的是在一个数组中,对给定区间进行最小值查询。...
"acm.jar" 包含的Java包"acm" 提供了多种功能,如读取输入、图形绘制、数学运算等,这些都是在解决算法问题时经常需要用到的。下面我们将深入探讨这个包中可能包含的一些重要知识点: 1. **输入处理**: - `acm.io...