概述
【学生来信】
老师好,我对于大学阶段搞acm以后能做什么有些疑问。现在周围的同学有的在做android,有的在做网页,有的在专心学photoshop,flash,有的在研究数据库,好像他们都对以后的工作有了明确的方向,而对我来说,现在主要搞的还是ACM,平常的时候会把大部分时间花在上面,而没有非常明确的工作方向,虽然经常听人说,大学里搞ACM以后出来的很有优势找到一个好工作,ACM搞得好的话去谷歌,微软,百度等大公司不成问题,但是真的不清楚现在研究的这些题目,算法在以后的工作中能够用在哪里,针对这个问题我也在网上搜索过了,说是搞ACM可以提升自己的编码素养,问题分析解决能力,以后从事的是技术底层的工作,而不是表面上的。有的还说,以后的工作也许和ACM那些问题一点关系都没有,只要在大学阶段通过ACM有了良好的编码素养,到公司里也可以从事其他方面的工作,哪怕是从0开始学起。对这些话,我还是不很理解,真的是那样吗?我还需不需要像身边的同学那样,除了ACM还要专门地精通的去学习一门技术。还是只专注于ACM,以后找工作什么的都先不要想,顺其自然呢?
【迂者回复】
基础和实践并重的学习的两种路线
在CSDN对我的专访中,我比较全面地阐述了我带领学生开展的以实践为主线的编程学习过程。有人发表了评论:“大学重点学的应该是基础,不是你那些所谓的为了完成工作而学的项目经验。什么是基础?重点是数学、英语、接下来是计算机组成和操作系统。这个老师太重点强调企业需要的东西,而不是作为一个大学生本质应该学习的东西”
另一段话是跟贴:“我完全赞同你的观点,我之前是一名计算机专业的专科生,大家都知道专科生与本科生的差距就在于基础知识(数学,英语)与计算机理论知识(操作系统原理,编译原理,计算机网络等)。大学期间做过不少项目,当时自认为不会比本科生差,但随着学习的深入,越来越发现到基础的重要性。有时候看一些别人写的源码,发现如果我自己写的是多么繁琐,而人家用到了数学的知识,一个繁琐的算法原来可以这么简洁优雅。有时候一个问题硬是不懂,去网上问别人原来涉及到一些内存管理和操作系统的知识。记得又一次听一个大公司项目架构师的演讲说道:‘写代码,做项目你们与一个高中生甚至一个初中生没什么区别,区别是你们大学学得知识以及锻炼的逻辑思维和自学能力’。如果你只想当一名coder,基础知识你甚至可以不学。如果你想当一名软件系统的设计师和架构者,数学,和计算机基础你必须要会。”
评论中还有一些难听的话我没有摘出来,但是,说实话,我也赞成他们的观点。在IT界能够高薪,能够不惧技术进步和发展,能够站在重要位置上的人,就是基础扎实的人。在基础中吸取了抽象之精华的人,心中有放之四海皆可用的知识和思维,这比任何的具体技术、技能更重要。
然而,在我的课程当中,我还是带领我的学生热情地投入了实践,在我的咨询当中,也不遗余力地推动大学生将以实践为主线的自学进行下去。我期望用这种手段,让学生们能够快乐地进入到这个圈子,快速地了解行业中的话题,了解专业和方法,最重要的是,要知道编程背后还需要什么。我推动实践,但不轻视理论,大学生有了充分的实践,才能够注意到基础知识和思维训练的重要意义,才可以将理论视为非常鲜活的知识。如果没有深入实践的过程,对大多数人而言,学习理论将是个枯燥困难的事情,没有经过亲自体会获得的感性认识,理论学习的效果也不能得到保证。必须找到一种途径,让每一位学生都能自发地认识到基础的重要性,找到理论学习的入口。这条途径就是实践。
至此,应该理清的思路就是:大学生应该要打好基础,但学习目标还是实践能力;为了保证基础学习的效果,需要用实践打开通道。将基础和实践两方面都做好,做到“两手都要抓,两手都要硬”,这是一个现实的选择。然而在有限的时间内,这两方面需要投入大量时间和热情的学习应该如何安排,是个大问题。如果前述学习的方式、学习内容只是在战术层面的问题的话,基础和实践的学习节奏的合理安排,可以是一个战略层面的问题。课内的学习是由培养方案规定好的,这样一种战略的设计焦点就设在课外的自主性学习上面。
大学生从中学走进大学,由完全由别人管着学,要过渡到完全能由自己安排学习。在大学低年级,学习的主要内容是专业基础课程,可以由别人管得多一些,而高年级重在于应用能力的学习,需要更个性的成分多一些。根据这样的特点,我给出第一条自主性学习的路线:先重基础,再重应用,如图5.3所示。由于我们是希望获得“双丰收”的,所以用两个重,也暗指要兼顾。重基础的阶段,并不完全弃实践,而重应用的学习中,基础同时也在融合,基础好的优势会体现出来。我提议入学时专业学习兴趣本身就很浓,以及起步学习顺利的学生走这一条路子。由于先期并不多投入相对更为“热闹”的应用,这样做的同学要更耐得住寂寞,知道这样做的价值。由于基础扎实,一旦开始在后期重实践的历程,马上能表现出更快的学习速度以及质量更高的应用成果。从时间角度,我建议大一大二重基础,标志是参加过一次ACM竞赛,不管是学校组织的选拨赛,还是有机会代表学校对外参赛。有些同学选择在高年级参赛以求获得好成绩,但可以在低年级时打足基础。到了大三,转入重应用开发的阶段,由于眼界相对开阔,入手点可以与感兴趣的专业方向结合,甚至与未来求职中有意愿的岗位结合起来了。
图5.3 先重基础,再重应用的自主性学习路线
第二条路线,先重应用,再重基础。这不是说课内学习的基础可以先不必重视,我们此处所说的是课外的自主性学习安排,是建立在认真完成课内学习要求的基础上的。在现实中,有些同学在对专业了解不深的情况下,一定想迫切知道计算机这玩意到底能做些什么,有一大批所谓迷茫的同学就在这条槛上徘徊,那就在先重应用的课外学习中获得体验好了。应用的内容可以始于做一个个人主页、班级主页之类的,可以借助一些外部的目标,如参加学院组织的网页设计大赛之类的初级的竞赛,以及像在山东省很热的“齐鲁软件设计大赛”之类的门槛不算高的竞赛,逐渐可以考虑参加像微软、阿里巴巴等企业组织的应用大赛。走这一条路线的同学,不要忘记,适当的时候可以往基础理论的提高的路子上走一走,方式可以是将疯狂做应用期间有些应付了的专业基础课复习一遍,或者也去做做ACM题目,做一做一些大企业,如微软、谷歌的面试题等。一段时间的“淡定”,将换来丰厚的回报。我的学生中,有不少的优秀学生就是在这样做的。在大一刚刚学习程序设计后不久,觉得编程语言很能干,试图做一个能用的程序出来,发现不少功能的实现需要API的支持,开发出的应用激发了学习的兴趣,也找到了信心,眼界大开之后,意识了算法的重要意义,转而沉下心来,自主学习开始在专业基础方面发力。基础重要之类的话老师经常讲起,但我的学生说“只有自己亲自体会到了,才有如此的激情投入”。
图5.4 先重基础,再重应用的自主性学习路线
在我的观察中,有些学生的自学路线以学期或更短的周期,根据实际情况在基础和应用之间交叉安排;有些学生,喜欢开发应用程序,他们的自学中,不断尝试不同的技术,在不同的领域中开展体验,毕业求职时选择面很宽,在工作中也是个多面手;有个学生一直喜欢计算机科学,他的自主学习的主要内容就是专业基础理论,并且将触角伸到了本科生常不关注的复杂性理论层面,他也写了不少代码,但以操作系统层面的代码为主。大学中需要有自主性学习,这些都是不错的安排。在大学,把握住了课堂,课外又能有效安排好,这样学出来的,都是人才。
在课外的自主性学习,最忌讳的就是,常想学,但总不起步,或者在走出第一步时就顾虑重重,让自己总是停留在是否要走出第一步的阶段。只要起步了,视野拓宽,就会不断有新的想法产生,能触摸到适合你的“下一步”学习的内容,从而能够一直走下去。
还有一些同学,在迷茫与放纵中停留过久了,以至于到了高年级,在别人基础扎实开始明明白白地在自己喜欢的领域中左右逢源之时,他才开始起步。面临着即将到来的就业压力,开始感觉到了恐慌。这时,重应用的自学路线成了唯一的选择。时间已经等不及补上足够的专业基础,再去学习应用的节奏了。由于基础差,实践不能够太深入,入职时选择岗位的自由度会减小,这就是代价所在。至于专业基础方面的缺陷,只能寄望于工作以后的自主学习了。
最后
以上就是任性方盒为你收集整理的搞ACM,以后能干什么的全部内容,希望文章能够帮你解决搞ACM,以后能干什么所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复