如何才能学好历史更好地学好ACM

关于ACM以及如何学习 - 祈 - 博客园
随笔 - 41, 文章 - 0, 评论 - 0, 引用 - 0

什么是ACM?
想必打开这篇博客的人已经知道什么是ACM了吧,如果不知道,请自行百度或者谷歌
搞ACM需要学习什么知识?
这里不是让你设计一个搜索引擎,而是让你学会正确使用搜索引擎,当你有任何不解的时候(包括阅读下文),问问谷歌或者百度,这不只是ACM才需要的技能。
一门编程语言
虽然现在编程语言总类繁多,有些OJ也支持多种语言,不过C++还是搞ACM不二的选择,另外最好也学会使用java,因为无论在什么地方,什么国家,什么网站的比赛,C++和java都是支持的。ACM是算法的比拼,所以并不需要将编程语言钻研过深,毕竟语言只是工具。
良好的英语
ACM是国际比赛,英文交流能力是无可后非的。英文差,但是想搞怎么办?对于这样的问题,我的答案是:请自行学习英语,世上无难事,只怕有心人。
算法算法,无论怎样都脱离不了数学。我认为,几何学、线性代数、离散数学、初等数论和微积分是必须掌握的。太多了怎么办?这点请放心,你可以在不断的比赛中积累这些知识。
在哪里可以训练/做题?&
可以在OJ上训练
全球有非常多非常多的OJ,即Online Judge,在线评测平台,他们可以将你的代码进行在线评测,来判断正误。推荐的国内的OJ有CDOJ(电子科技大学),POJ(北京大学),HDUOJ(杭州电子科技大学),BNUOJ(北京师范大学)。
如何提交我的代码
我不打算详细讲解,所以可以的话,请看每个OJ的F.A.Qs,英文怎么办?自己想办法。
有没有线上的比赛
国内的线上比赛有HDU的bestcoder,这个是有奖金的比赛,国外的推荐codeforces,会不定期的进行比赛,比赛的难度适合新手(英语较好),另外就是Topcoder,这个是相当有名的比赛,不过入手较为困难,你可以百度或者谷歌相关教程,这里就不详细解释了。这些比赛都有着积分的规则,简单说,你打得好,积分就会上涨,否则下跌。高排名总是被各大公司相中,如Google、阿里等,特别是Topcoder,在这里的高排名相当有价值。
推荐的书籍?
英语我就不推荐了,自己想办法。下列书籍中的任何习题,都推荐去完成。
编程语言类
《C++大学基础教程》作者是Deitel,这个作者所著的编程书籍都是值得学习的。
算法入门类
《挑战程序设计》,《算法竞赛入门经典》作者刘汝佳。
《组合数学》,《算法导论》,《具体数学》
常见的问题
算法无法理解
多看书,多想,细细琢磨,别人能懂,你也可以。问问老师同学,周围的大牛肯定有人知道。
这道题怎么做,完全不会
碰到不会的题是很正常的事,此时你就需要搜索题解,怎么搜索?当然谷歌百度。
那些家伙为啥那么厉害
勤能补拙,每个大神的背后都有着辛勤的付出。凡事靠坚持,每个人都有着无限的潜能,也许你会看见比你更厉害的大神,但只要你努力,你就是下一个大神。
学习这个会不会占用我很多时间
有得便有失,投入和专注是获得成绩的充要条件。
时间不会因为你的犹豫而止步,既然你决定了搞ACM,那么就应当立马开始行动,要知道有很多人已经在你的前面走了很远。如何学好编程
10月份一直在忙上一个项目,每天都淹没在一大堆英文文档里,不断的实验、总结,就是晚上回到家里还是在思考着一些解决方案。博客也就闲置了整整一个月,北京的冬天来了,也一直找不到写东西的心情。现在项目告一段落,也重新进入了学习探讨的状态,于是觉得该写点什么了。听一些学弟学妹在述说这学院发生的事情,回忆自己学习各种技术一路走来的各种迷惘,决定写下一些个人经验下来,算是给所有在校的大学生一点建议吧。
记得在学校学得第一门语言是C++,饶有兴致的去写了不少代码,出了能在ACM竞赛中看到一点点效果之外,也不明白在现实社会中到底能用来干什么。后来又接触了Java和数据库,一般都会分组去做一些所谓的模拟项目,借书系统或者订餐系统之类的,开始发现能做出来的东西跟超市的收营系统有那么一点相似之处。再后来又接触了J2EE,开始做很多Web项目,这一下挖得可够深的,把学校不太重视的CSS/Javascript什么的一顿猛学……一直到现在,研究完BEA
Tuxedo和BEA
Weblogic之后,感触还是挺深的,回忆起来走了不少的弯路,但还算幸运的是以前打下的许多基础,都渐渐的在深入技术学习的过程中起到了关键作用!
首先我非常理解刚进入大学就凭借不错的智商,迅速学习编程,能写得一手好代码的那些哥们,马上就希望通过做真实的项目把自己的代码转化成真实世界的应用这种想法。也许在某些老师的帮助下,确实还真做出了一些东西来。但其实这时候最大的误区就是根本还不知道计算机世界是多么的庞大,自己的理论体系是多么的残缺不全,坦白的说,如果没进大学前没有学习过计算机相关知识的话,1~2年内是不可能去理解自己写的程序是如何能在现实世界中发挥作用的。
很多人曾经讨论过到底学习C好还是Java好?无数经典的回答无非都是一句话:各有所长!无论你从拿一种语言开始,当你真正深入到一定程度之后,你都会发现一种思想上的统一。现实社会上某些需求更适合C语言做,某些更适合Java做,如果暂时无法理解的话,就大概记住这么一句话吧:Java语言随着互联网一起诞生并壮大的。(不过千万不要认为自己理解这句话,如没有系统的整理过历史线索,又没经历过那个时代的,还是就简单的当作一句话记住吧)
其实编程语言只是一种工具而已,在熟练操作这种工具前,不妨问问自己对计算机世界有多了解?比如可以尝试着回答以下这些问题:
1、一台PC机不装任何系统的时候都包含了那些硬件和程序?当安装一个操作系统的时候,依次在PC机中加入了哪些程序?硬盘的组成结构是什么样的?可否在一块硬盘上放两个操作系统?硬盘启动又如何引导去启动哪一个操作系统呢?
2、学校分配了IP给你,你通过这个IP是如何连接上互联网的?需要什么样的设备才能接入互联网?速度又如何?在互联网中,你的标识又是什么?有哪些访问限制,是否可以突破这些限值?如果你们寝室有使用路由,不防看看路由器设置里的DMZ、Upnp、Firewall、Broadcast这些设置都是干什么用的?
3、等你安装了一个操作系统,大部分恐怕还是Windows吧,有没有想过这个OS如何控制你的硬件资源,这些硬件资源在OS里又转化成哪些指标。如果这个OS是这样构造文件系统的,那么另外一个OS又是否使用着另外一种思路去构造文件系统和控制硬件资源呢?
其实以上的这些只是计算机知识体系的不同方面的小细节而已,但是笔者也是在工作第1年期间,分别在不同的时期才找到这些问题的答案,这些知识又对笔者深入学习编程和软件开发起到至关重要的作用。想想刚进大学啥也不顾埋头猛写程序而忽略了整个知识体系的行为,现在觉得满稚嫩的!
接下来回到编程语言上吧,笔者在大三选择了Java深入学习的,后来接触了很多哥们,有在学校的成绩佼佼者,也有做了很多项目的所谓经验牛人,都声称是Java高手吧,似乎代码也写得非常好了。可是笔者却认为学好一门语言,比如Java吧,光靠写代码是远远不够的,许多辅助的能力和习惯最终才能帮助你真正成为一门语言的高手,笔者总结一共需要以下几点:
1、大量的代码编写,这是基础,不必多说
2、大量的代码阅读,源码阅读也好,前辈的代码阅读也好,不光读好的,还要读不好的
3、计算机基础知识,比如SSL概念、NAT协议、编译原理、TCP/IP细节等等
4、英文阅读和思考能力,这似乎是中国的程序员永远的痛啊
5、不断的总结思考,观察分析能力,简而言之就是不断更新自己的理解,否定那些误区
这些都是相辅相成的,至少笔者认为缺一不可。也许你用Java做了很多项目,其实一些规模还挺大,可你却说不清楚Java虚拟机的构造,工作原理,和内存回收机制;也许你做了很多网站,可你很可能说不出来Js的内存管理方式,HTTPS协议的内容和TCP/IP每次握手的步骤;也许你的代码经验越来越多,可是你却一直不知道数据库索引如何带来正面或负面的影响的,缓存、连接池、中间件,还有所谓的集群,从本质上都是怎么回事。这些欠缺最终都导致了你只能重复的去做一些项目,却永远无法再提升一个层次,虽然可能还是被人吹捧着,但这个社会有多浮躁,相信无需笔者多说。
可能听很多老师也说过,学软件很累,新的技术层出不穷,要不断的翻新,不断的学习。其实如果真的热爱这个行业,你会发现那些技术之间都有着千丝万缕的联系,本质上他们都是建立在同样的知识体系之上的。如果你学透了Java,你再看C语言,会轻易的发现C语言也很简洁、某些地方远比非常强大;如果你把Javascript学透了,你可能会发现groovy、ruby、perl等等脚本也各自有自己的优势和特点。再进一步,如果你对数据库、操作系统都掌握得很好了,你会发现自己忽然就多了很多关于系统架构、性能瓶颈、故障分析上的经验。从这个意义上来说,笔者认为很多经验本身就来自于知识体系本身,而非现实世界。
最后,笔者希望给那些还在学校学习的学生们一些学习计算机软件的忠告:
1-在学校最好不要急功近利的盲目的追求写代码做项目,时刻记得充实自己的知识体系
2-在写代码的过程中时刻保持好习惯,因为笔者见过太多例子,经验不足可以慢慢积累,习惯一旦坏了,就几乎不可能再改过来了,千万不要为了省事写出不负责任的代码
3-永远不要放松英语,因为你在学校如果不好好学上来,工作之后就更加难补习,最终很可能会成为你技术上升的瓶颈
4-学校课堂和老师只能带你入门而已,图书馆才是你充实各种理论最好的地方,毕业之后再难找齐那么多珍贵的资源学习了
5-千万不要去认为自己已经懂很多了,看到听到的任何经验都尽量自己去求证,因为在这个浮躁的社会里,信息的价值和正假都参差不齐
6-到实习工作之后,也要保持不停的思考和总结,要分清楚公司的模式是看重结果,而学习技术的模式永远是过程更重于结果,所以也决定了学习大多都在工作之余进行,保持好习惯
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何学好代数?_百度知道
如何学好代数?
个几何和函数学得都挺好的人为什么代数学得很烂,根式和方程都学的不好。这是怎么回事?怎样能改善呀。比如说
我有更好的答案
升入中学,开始接触代数这门课程,你一定会问:代数和算术有什么区别?怎样才能学好中学代数?课本第一章——代数初步知识的学习,就是对小学学过的代数知识的复习、巩固和提高,也是为以后学习做些准备。应注意以下几个方面:
一、深刻理解用字母表示数的意义。
代数与算术的根本区别是它引入了字母进行运算。用字母表示数是代数学的基本思想之一,也是从算术过渡到代数的桥梁。
用字母表示数能够简明地表示出事物的规律和特征,具有简捷、普遍的优越性。a+b=b+a表示加法的交换律,其中a,b分别表示任意两个数,因此,用字母表示数具有任意性;一旦字母所代表的数确定了,它所表示的数又具有确定性,例如x+3表示比x大3的一切数,但当x=5时,x+3表示8。
用字母表示数时,要注意:
(1)同一问题中...
首先要有兴趣,兴趣从哪来?从一种优越感而来。其次要总结,先把知识点总结一遍,初高中的代数都不会很难,知识点都不很多,一张八开的纸足够把所有知识点连写带图弄下来,一定要自己抄写,要条理。抄一遍的目的不只是记一遍,更在于方便做题的时候查阅。然后就可以做题了,不管什么题,都拿来做练习,遇到不会的,先搞清是思路问题,还是知识点问题,思路问题找老师讨论,知识点问题就用得上那张总结的八开纸了,不用担心还没记住,照着用就是了。这样下来,做得多了就会知道知识点都怎么用了,思路也就打开了,有时候,不由自主的一道题会发现可以用几种方法做出来,这就是优越感,会到前面,你就发现,你的兴趣跟着就来了。呵呵,这是我的经验。希望对你有所启发不要丧气!!加油!!!!
多做点题,熟练就好了
其他类似问题
6人觉得有用
为您推荐:
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求教,怎样自学学好C语言的方法_百度知道
求教,怎样自学学好C语言的方法
已经看到数组那章,后面的习题也可以做出来,就是老觉得找不到核心,我想知道自己才能学好C最近在学c, 看的是谭浩强的书
提问者采纳
你得学会看懂编译器的警告,还应该看《UNIX环境高级编程》给你推荐点书、错误信息,原因是:《c primer》。标准的main函数是int main(void)和int main(int argc、调试程序。很多人推荐谭浩强的书,然后自己试着写程序:《c primer》:《深入理解计算机系统》,所以就有这些经验了:谭浩强的书有的东西不标准也不完善。因为很多开源代码写的都很经典,你就明白了程序是如何和系统交互的、《c primer plus》。当然,可以对照知识点看书。通篇用的是main()(这也是用windows学c语言的通病)、《代码大全》第三阶段。最简单的例子就是main函数。初学者应该看的书,还要多看开源代码:第一阶段。我是过来人,因为开源代码很多,可以很好的学习,如果你是在linux下,但记得把代码贴上来,当然,建议你在linux下学C语言。当你写完程序发现有问题的时候,我不推荐,你还得学会怎么编译。多找找题目学任何一门语言多练习才是王道、《unix环境高级编程》第二阶段,或者上百度知道提问、《linux c》:《重构》除了多看书, char *argv[])。因为弄懂了标准的main函数。这些都是最最基础的
提问者评价
谢谢了,我会努力的
其他类似问题
为您推荐:
其他6条回答
也就记住了:比如数组的初始化书上说了几种简化情况,你要自己都去验证一下看书时对照例题自己在电脑上练习,也要尝试一下看是否正确,并验证书上没有写出来的种种情况,每学习一条规则,多记忆,就自己编写对应的小程序去验证。还要多思考。总之是边学习边练习,还有没列出来的。练得多了
你这个是典型的瓶颈期,继续坚持下去,多做一些题目,你马上就要醍醐灌顶了。
一句话:看懂书都是假把式,能在机子上把程序编出来,解决问题才是真学问。
慢慢看,从浅到深,找点东西题目来找,要主动思考。不懂就学。
多读程序和写程序是很重要的
看到数组,是不是循环有点不适应呢?可以去做做acm的水题。
您可能关注的推广
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁怎样才能学好C++啊?_百度知道
怎样才能学好C++啊?
提问者采纳
唯一的秘诀就是不断地练习。订恭斥枷俪磺筹委船莲有时间就去POJ,UVA等等AC几道题目。等成为了高手就能参加ACM大赛啦。如果你才开始学习C++的话,建议先看懂教材并上机实践,具体路线:先看循环,条件,顺序结构的编程,这些一定得弄懂;之后看函数,一步一步来,用函数实现递归,嵌套等。 再运用数组,指针,指针难一点,可以放到后面去学。最后再开始面向对象编程,写类。要成为一个C++程序员需要有兴趣和耐力,希望你能成功,加油。
提问者评价
谢了!我会努力的
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 如何才能学好历史 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信