写给一心刷ACM题目的学生

【来信】

  老师你好,我大2013级大二的学生。大一时自学了数据结构,大二的时候参加了ACM。 现在寒假在家里刷题。可是我还想学习些东西,比如深入C 的学习,或者java。但是感觉除了刷题之外,就很迷茫,不知道以后出去工作是C 好还是java好。其实我更喜欢C ,但是如何去深入学习C 呢,我对C 的深入学习也是很迷茫的,因为对于C/C 除了用来刷题,我都不知道他们能够干什么?

  

【回复】

  你没有说你的专业,我猜想应该是计算机类的专业。下面就基于这个前提,谈谈我的想法。
  很高兴你能找到一个提高编程能力、打扎实专业基础的方式。参加ACM竞赛对于专业学习的好处,我不说了,这个事情可以继续深入。
  你找我,我该说你的问题所在。
  我先提几个问题,你想一想?
  1. 为什么在学习过程中我们要做题目?做题目的目的是什么?题目是怎么来的?
  2. 我们学习的最终目标是什么?
  关于这个问题,正确回答绝对不是做题目。简单讲,我们是要去解决问题,更直观地,是要去做项目。
  于是,我们要面临的第3个问题有了:
  3.如何在学习中,由做题目过渡到做项目?
  这几个问题解决了,你应该就明白了。我下面将会谈我的看法,不过,也还需要你自己再我的回答上补充,结合上你自己的学习体验。
  关于题目。题目是针对某些知识点,编制出来的供初学者实践,以达到掌握知识的目的。由于学习者所处的阶段性,题目不宜“大”,且一般针对性强。题目再大,就隐约会有点“项目的影子了,尤其对于综合性的题目。但再综合的题目,也可能会将项目中需要考虑的一些效率、成本、组织等问题忽视掉,以便于起步阶段的人能顺利学习下去。所以,做题目是为了掌握知识点(包括具体知识、运用知识的方法学层面的知识,以及一些必要的技能)。题目是人为编出来的,但仔细品味,题目中含着的,就是项目中用着的知识。你现在参加的ACM,所刷的题目实际已经突破了课程框架的约束,正在练就解决核心问题的能力。但我发现,你没有去发现这些。例如,你掌握了动态规划的方法,应该要看到其普适的价值:生产管理、资源分配……,多少问题都在用它去建模、求解。
  而到做项目,需要考虑的因素将会很多。例如做一个Web项目(设规模比较大、目标是要让很多很多人用的那种),需要有项目经理、架构师、程序员、美工等一套的人马。对于一名IT学生而言,至少在目前,我们的目标就是要通过做技术岗位的工作进入行业(无论大学毕业就进入还是上研生之后),所以要学习做项目的技术。这些东西在你高年级的时候,会学习相关的课程,但也应该做课外自己有所体验。一个人不可能精通做项目中的所有环节,在实际工作中也还会进步的空间,你目前主要精力投入学习利用算法和程序设计解决问题,是一个着眼长远的选择。
  如何学做项目,以及由做题目到做项目的过渡,请参考我在《逆袭大学》中的“9.1 一切让代码行数说话”。这是一个留待日后解决的问题,也可以现在就自主地做些体验。
  从你信中,我稍有不安的是,你应该进入“算法”的阶段了,但似乎还是将语言看得太重。无论C还是Java,都不足以支持你度过整个职业生涯。在现阶段,C就用来刷题好了。可以用C做点通信录、学生成绩管理之类的纯在DOS窗口中运行的应用做些体验。而如果想深研C的指针之类的硬骨头,你实际上是在计算机组成、操作系统的层面上开展学习,只是用的是C这样的一个载体。从计算机系统的角度,看你正在学习的内容,你会发现自己一路玩着C,学的就是计算机。这样学下去,你将不会迷茫。
  给你的建议:刷题之余,看一些IT人文类的书籍。我一时想不到更多的,但首先想到最适合你的是,由吴军博士写的《数学之美》和《浪潮之巅》。其他可以参考当当的榜单,也可以开学后到图书馆借。书很多,哪本顺眼看哪本,你会由阅读而不惑。

  就说这些,希望你能充实地走出你的每一步。

时间: 2024-11-03 11:59:27

写给一心刷ACM题目的学生的相关文章

有一种acm题目叫做,奇葩!

本文全然没有技术含量,纯粹是娱乐. 我事实上想写点东西.可是近期好像做计算几何做得太多了,一种想说说不出东西的感觉,唯有写一下一些奇葩的题目了. HDU3337:Guess the number pid=3337"> http://acm.hdu.edu.cn/showproblem.php? pid=3337 题目意思: 猜数字!(32位整数范围内) 正确答案: <span style="font-size:18px;"> #include "s

有五个学生,每个学生有3门课(语文、数学、英语)的成绩, * 写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩)

/* * 3. 有五个学生,每个学生有3门课(语文.数学.英语)的成绩, * 写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩), * 然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中. * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息 * */ import java.io.*; import java.util.*; public class Test3 { publi

杭电ACM题目分类

杭电ACM题目分类 基础题:1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028. 1029.1032.1037.1040.1048.1056.1058.1061.1070.1076.1089.1090.1091.1092. 1093.1094.1095.1096.1097.1098.1106.1108.1157.1163.1164.1170.1194.1196. 1197.1201.1202.1205.1219.1234.123

超强的ACM题目类型总结

转:初期: 一.基本算法:       (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.       (4)递推.       (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法:       (1)图的深度优先遍历和广度优先遍历.       (2)最短路径算法(dijkstra,bellman-

我的ACM题目测试数据产生方法

到网上搜了下ACM题目产生方法,却没有搜索到有用的资料,那只能自己钻研一下了,下面把钻研出的结果给大家分享一下. 我们知道,ACM的题目对算法要求很高,OJ上而如何评判一个算法的复杂度靠的是测试数据.一般地,题目需要数据量比较大,不可能人工地去产生,只能借助计算机产生测试数据,而为了避免数据出现规律性,那应该尽量让数据随机.接下来,我们就研究最一般的问题,如何产生int,long long ,大整数,以及字符串? 我们知道,C语言提供了我们一个随机函数rand(),可惜的是它只能产生(1~2^1

ACM题目-Who&#39;s in the Middle

#这题主要用到了sort函数去简化排序的过程(需要声明#include <algorithm>) 描述 FJ is surveying his herd to find the most average cow. He wants to know how much milk this 'median' cow gives: half of the cows give as much or more than the median; half give as much or less. Give

Python 写 ACM 题目的一些技巧

目录 输入输出 input() 输入 split() 用于输入 strip() 输入清理 print() 输入 输入输出 input() 输入 Python3 中 input() 函数接受一个标准输入数据,返回为 string 类型.以换行(\n)结束. input([prompt]) prompt: 提示信息. split() 用于输入 split() 做输入处理,通过指定分隔符对字符串进行切片,默认为所有的空字符,包括空格.换行(\n).制表符(\t)等. str.split(str="&q

ACM 题目分类

转自: http://www.cnblogs.com/ltang/articles/1861284.html#top OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739 ,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期:一.基本算法:     (1)枚举. (poj1753,poj2965)    (2)贪心(poj1328,poj2109,poj2586)    (3)递归和分治法.     (4)递

HDOJ ACM题目分类

模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201 120