写给计算机的大学生
首先说一说进入计算机专业的目的,我个人是因为十分喜欢IT业,很喜欢折腾电脑,所以在填报志愿是毫不犹豫的在报了的所有的学校都填写的计算机专业,梦想着进入计算机专业后能遇见很多高手,能交到几个知己,谁之进来后却大失所望。计算机专业的学生有很多以前对计算机不怎么了解,而且还有部分人进大学前连计算机摸都没摸过,对计算机很熟悉的很少,高手更是凤毛麟角,大多数人是服从了父母之命,显而易见,目前社会最热的行业是IT业,工资最高的也是IT业,抱着这个因素,大多数考生的父母都让自己的孩子进入了计算机专业,而大多数学生也天真的认为从计算机专业毕业后就能够像电视里演的大多数白领一样每天只用坐在办公室里和同事们聊聊天,和老板吃吃饭,每天签几个字然后就有高工资等着你去拿。进校后他们发现其实他们在专业课方面什么都听不懂,自己也一点兴趣都没有,没有兴趣那就没有学习的动力,而且这个专业是要靠悟性的,而兴趣是培养悟性的第一步,然后他们会发现越往后学专业课越难,也越听不懂,好一点的就会狠下心来,硬着头皮苦学一通,有可能也就能走出一片路来,而不好的就会就此放弃,只需要混着考试通过,混毕业,找个单位安心上班。有些人上了几年学连自己上哪些课都不知道;拿个程序他分不清是用C语言写的还是用PASCAL写的;不小心进了DOS不知道怎么再回到WINDOWS。但说起游戏来头头是道,好像每个都是职业玩家一样,有的每天只知道泡在网吧。这就是中国计算机人才下一代的悲哀!再说现在计算机专业大学生的学习和生活。大多数计算机专业的学生对本专业的发展及前景一无所知,每天都是看小说、玩游戏、看电影、打牌、喝酒、睡觉等等很有"前途"的事情。偶尔看见一两个同学看看与计算机专业有关的书,跑去拿来一看,全是什么"游戏攻略"、"黑客秘技"等此类书籍。还有的人连C语言和C++谁是谁都还没搞清楚,就拿本VC的书"刻苦钻研",真不知他们看懂了没有。好多学生都买了电脑,但用处都是游戏机+碟机+音响,每天都在用电脑玩着各种流行的游戏、看着最新的大片、听着时尚的音乐,就是不用电脑学习。有的学生甚至问我电脑除了玩游戏还能干什么,我问他你为什么这么问,他告诉我他觉得电脑只能用来玩游戏,不知道还能不能干干别的什么。据我了解,近几年在国内好几所高校的计算机专业的毕业生的毕业设计竟然是做网页,在大学了四年,学完了《数据就构》、《软件工程》、《C语言》等专业课后,竟然交了一个没有学过计算机的人自学一两天就能做好的东西!这就是大多数计算机专业的学生,在我在大学玩了两年之后,我突然明白该为自己的未来打算打算了,但还有许多人仍然还什么都不明白,所以就有了这篇文章。如果你是以上我说的那种受父母之命来学计算机的学生,如果你看了《计算机应用文摘》第15期的《写给想当程序员的朋友》一文后,发现自己没有当程序员的欲望,那么我这里有几条路给你选择: 1、学习网页制作,将来去网站工作! 2、学习3D MAX等软件,去作动画! 3、学习美术设计!4、学习网络,将来考个CCNA,去专业组网!5、在保证能顺利毕业的前提下,去疯狂玩游戏,做个职业玩家或做一个或几个网络游戏的GM。(我身边就有这样的人)6、以上五条都与计算机有关,要有一定的专业知识,但比起你的专业课简单多了。如果你看到这里还不觉得有适合你干的,那这条最适合你:在你们学校去修双学位,修一个自己感兴趣的专业,计算机真的不适合你!如果以上几条有适合你的,那么你就努力去做适合你的那一片天地,去看杂志的下一篇文章,下面的文字你看了只会浪费你的时间。如果你是计算机专业的在校大学生,而且想当程序员,那么请往下看:1、大学生活丰富多彩,会令你一生都难忘,但难忘有很多种,你可以学了很多东西而难忘,也会因为什么都没学到而难忘!2、计算机专业是一个很枯燥的专业,但即来之、则安之,只要你努力学,也会发现其中的乐趣的。3、记住:万丈高楼平地起!基础很重要,尤其是专业基础课,只有打好基础才能学得更深。4、C语言是基础,很重要,如果你不学好C语言,那么什么高级语言你都学不好。5、C语言与C++语言是两回事。就象大熊猫和小熊猫一样,只是名字很像!6、请先学习专业课《数据结构》、《计算机组成原理》,不要刚开始就拿着一本VC在看,你连面向对象都搞不清楚,看VC没有任何用处。7、对编程有一定的认识后,就可以学习C++了。(是C++而不是VC,这两个也是两码事!C++是一门语言,而VC教程则是讲解如何使用MFC类库,学习VC应建立在充分了解C++的基础之上。看VC的书,是学不了C++语言的。) 8、学习编程的秘诀是:编程,编程,再编程;9、认真学习每一门专业课,那是你的吃饭碗。10、在学校的实验室就算你做错一万次程序都不会有人骂你,如果你在公司你试试看!所以多去实验室上机,现在错的多了,毕业后就错的少了。11、从现在开始,在写程序时就要养成良好的习惯。 12、不要漏掉书中任何一个练习题--请全部做完并记录下解题思路。13、你会买好多参考书,那么请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码。14、VC、C#、.NET这些东西都会过时,不会过时的是数据结构和优秀的算法!15、记住:书到用时方恨少。不要让这种事发生在你身上,在学校你有充足的时间和条件读书,多读书,如果有条件多读原版书,你要知道,当一个翻译者翻译一本书时,他会不知不觉把他的理念写进书中,那本书就会变得像鸡肋!16、我还是强调认真听专业课,因为有些课像《数据结构》、《编译原理》、《操作系统》等等,这种课老师讲一分钟能让你明白的内容,你自己看要看好几个月,有的甚至看了好几年都看不明白。 17、抓住在学校里的各种实践的机会,要为自己积累经验,就业时经验比什么都有用。18、多去图书馆,每个学校的图书馆都有很多好书等你去看! 19、编程不是技术活,而是体力活。20、如果你决定了要当一个好的程序员,那么请你放弃游戏,除非你是那种每天只要玩游戏就能写出好程序的天才!21、你要有足够的韧性和毅力!有个高手出了一道题测试你的韧性和毅力:找个10000以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。 22、找到只属于你自己的学习方法!不要盲目的追随别人的方法,适合自己的才是最好的!23、请热爱程序员这项工作!以上的话有些是我的经验,有些是我从高手那里直接COPY来的,但他们都很有用,记住他们,并遵守他们,那你们一定会成功!对于大多数初学者来说,好多人有这种问题存在:我到底先学什么?学C/C++?还是学VC?还是学Borland C++Builder呢?还是Delphi?哪一个更好呢?学习程序设计和学习程序设计语言究竟是怎么一个关系?初学者究竟应该如何取舍呢?就这些问题,我从一个高手那里看了一下的这段话,可以帮助在这方面有问题的人:学习程序设计就好比学习射击,而程序设计语言就对应射击中的气枪、手枪、步枪等各种枪械。学习射击必须要选择一种枪械,不可能没有枪还能学好射击的,也不可能同时学会使用所有的枪械。但是,如果掌握一种枪械的射击,再学别的也就触类旁通了。因为在熟悉一种枪械的同时,也学习了射击技术本身。再学其他的,自然事半功倍。学习程序设计也是一样,必然要从学习一门程序设计语言开始入手。在学会系统的编程理念之后,用什么工具都一样!之所以写这篇文章呢是因为自己眼看身边那么多的同学一个个都"不务正业",荒废了学业,心急如焚,自己也荒废了好几年,眼看微软的Windows从3.X到现在的2003Server,而中国的软件业还是在原地踏步,难道我们真要每年等微软给他的操作系统换一次名字,我们给他交一次钱吗?这么大的利润为什么不留给我们自己,为什么不让别的国家给我们交钱呢?这是广大中国程序员的一个共同的梦,要实现这个梦的人是现在还在大学里的"准程序员"们,他们是中国软件明天的希望!希望广大计算机业的大学生看到这篇文章后,睡觉的能醒来,玩游戏的能停下来,在网吧的能出来,一起拿起课本,坐在电脑前,用程序写出中国软件业明天的辉煌!:计算机与软件工程知识
1.计算机科学基础
1.1 数制及其转换
? 二进制、十进制和十六进制等常用制数制及其相互转换
1.2 数据的表示
? 数的表示(原码、反码、补码、移码表示,整数和实数的机内表示,精度和溢出)
? 非数值表示(字符和汉字表示、声音表示、图像表示)
? 校验方法和校验码(奇偶校验码、海明校验码、循环冗余校验码)
1.3 算术运算和逻辑运算
? 计算机中的二进制数运算方法
? 逻辑代数的基本运算和逻辑表达式的化简
1.4 数学基础知识
? 命题逻辑、谓词逻辑、形式逻辑的基础知识
? 常用数值计算(误差、矩阵和行列式、近似求解方程、插值、数值积分)
? 排列组合、概率论应用、应用统计(数据的统计分析)
? 运算基本方法(预测与决策、线性规划、网络图、模拟)
1.5 常用数据结构
? 数组(静态数组、动态数组)、线性表、链表(单向链表、双向链表、循环链表)、 队列、栈、树(二叉树、查找树、平衡树、线索树、线索树、堆)、图等的定义、存 储和操作
? Hash(存储地址计算,冲突处理)
1.6 常用算法
? 排序算法、查找算法、数值计算方法、字符串处理方法、数据压缩算法、递归算法、 图的相关算法
? 算法与数据结构的关系、算法效率、算法设计、算法描述(流程图、伪代码、决策表 )、算法的复杂性
2.计算机系统知识
2.1 硬件知识
2.1.1 计算机系统的组成、体系结构分类及特性
? CPU和存储器的组成、性能和基本工作原理
? 常用I/O设备、通信设备的性能,以及基本工作原理
? I/O接口的功能、类型和特性
? I/O控制方式(中断系统、DMA、I/O处理机方式)
? CISC/RISC,流水线操作,多处理机,并行处理
2.1.2 存储系统
? 主存-Cache存储系统的工作原理
? 虚拟存储器基本工作原理,多级存储体系的性能价格
? RAID类型和特性
2.1.3 安全性、可靠性与系统性能评测基础知识
? 诊断与容错
? 系统可靠性分析评价
? 计算机系统性能评测方式
2.2 软件知识
2.2.1 操作系统知识
? 操作系统的内核(中断控制)、进程、线程概念
? 处理机管理(状态转换、共享与互斥、分时轮转、抢占、死锁)
? 存储管理(主存保护、动态连接分配、分段、分页、虚存)
? 设备管理(I/O控制、假脱机)
? 文件管理(文件目录、文件组织、存取方法、存取控制、恢复处理)
? 作业管理(作业调度、作业控制语言(JCL)、多道程序设计)
? 汉字处理,多媒体处理,人机界面
? 网络操作系统和嵌入式操作系统基础知识
? 操作系统的配置
2.2.2 程序设计语言和语言处理程序的知识
? 汇编、编译、解释系统的基础知识和基本工作原理
? 程序设计语言的基本成分:数据、运算、控制和传输,过程(函数)调用
? 各类程序设计语言主要特点和适用情况
2.3 计算机网络知识
? 网络体系结构(网络拓扑、OSI/RM、基本的网络协议)
? 传输介质、传输技术、传输方法、传输控制
? 常用网络设备和各类通信设备
? Client/Server结构、Browser/Server结构
? LAN拓扑,存取控制,LAN的组网,LAN间连接,LAN-WAN连接
? 因特网基础知识以及应用
? 网络软件
? 网络管理
? 网络性能分析
2.4 数据库知识
? 数据库管理系统的功能和特征
? 数据库模型(概念模式、外模式、内模式)
? 数据模型,ER图,第一范式、第二范式、第三范式
? 数据操作(集合运算和关系运算)
? 数据库语言(SQL)
? 数据库的控制功能(并发控制、恢复、安全性、完整性)
? 数据仓库和分布式数据库基础知识
2.5 多媒体知识
? 多媒体系统基础知识,多媒体设备的性能特性,常用多媒体文件格式
? 简单图形的绘制,图像文件的处理方法
? 音频和视频信息的应用
? 多媒体应用开发过程
2.6 系统性能知识
? 性能指标(响应时间、吞吐量、周转时间)和性能设计
? 性能测试和性能评估
? 可靠性指标及计算、可靠性设计
? 可靠性测试和可靠性评估
2.7 计算机应用基础知识
?信息管理、数据处理、辅助设计、自动控制、科学计算、人工智能等基础知识
? 远程通信服务基础知识
? 常用应用系统
3.系统开发和运行知识
3.1 软件工程、软件过程改进和软件开发项目管理知识
? 软件工程知识
? 软件开发生命周期各阶段的目标和任务
? 软件开发项目管理基础知识(时间管理、成本管理、质量管理、人力资源管理、风险 管理等)及其常用管理工具
? 主要的软件开发方法(生命周期法、原型法、面向对象法、CASE)
? 软件开发工具与环境知识
? 软件过程改进知识
? 软件质量管理知识
? 软件开发过程评估、软件能力成熟评估基础知识
3.2 系统分析基础知识
? 系统分析的目的和任务
?结构化分析方法(数据流图(DFD)、数据字典(DD)、实体关系图(ERD)、描述加 工处理的结构化语言)
? 统一建模语言(UML)
? 系统规格说明书
3.3 系统设计知识
? 系统设计的目的和任务
? 结构化设计方法和工具(系统流程图、HIPO图、控制流程图)
? 系统总体结构设计(总体布局、设计原则、模块结构设计、数据存储设计、系统配置 方案)
? 系统详细设计(代码设计、数据库设计、用户界面设计、处理过程设计)
? 系统设计说明书
3.4 系统实施知识
? 系统实施的主要任务
? 结构化程序设计、面向对象程序设计、可视化程序设计
? 程序设计风格
? 程序设计语言的选择
? 系统测试的目的、类型,系统测试方法(黑盒测试、白盒测试、灰盒测试)
? 测试设计和管理(错误曲线、错误排除、收敛、注入故障、测试用例设计、系统测试 报告)
? 系统转换基础知识
3.5 系统运行和维护知识
? 系统运行管理基础知识
? 系统维护基础知识
? 系统评价基础知识
3.6 面向对象开发方法
? 面向对象开发概念(类、对象、属性、封装性、继承性、多态性、对象之间的引用)
? 面向对象开发方法的优越性以及有效领域
? 面向对象设计方法(体系结构、类的设计、用户接口设计)
? 面向对象实现方法(选择程序设计语言、类的实现、方法的实现、用户接口的实现、 准备测试数据)
? 面向对象程序设计语言(如C++、Java、Visual、Bsasic、Visual C++)的基本机制
? 面向对象数据库、分布式对象的概念
4.安全性知识
? 安全性基本概念
? 防治计算机病毒、防范计算机犯罪
? 存取控制、防闯入、安全管理措施
? 加密与解密机制
?风险分析、风险类型、抗风险措施和内部控制
5.标准化知识
? 标准化意识、标准化的发展、标准制订过程
? 国际标准、国家标准、行业标准、企业标准基本知识
? 代码标准、文件格式标准、安全标准、软件开发规范和文档标准知识
? 标准化机构
6.信息化基础知识
? 信息化意识
? 全球信息化趋势、国家信息化战略、企业信息化战略和策略
? 有关的法律、法规
? 远程教育、电子商务、电子政务等基础知识
? 企业信息资源管理基础知识
7.计算机专业英语
? 掌握计算机技术的基本词汇
? 能正确阅读和理解计算机领域的英文资料
二:软件设计
1.外部设计
1.1 理解系统需求说明
1.2 系统开发的准备
? 选择开发方法、准备开发环境、制订开发计划
1.3 设计系统功能
? 选择系统结构,设计各子系统的功能和接口,设计安全性策略、需求和实现方法,制 订详细的工作流和数据流
1.4 设计数据模型
? 设计ER模型、数据模型
1.5 编写外部设计文档
? 系统配置图、各子系统关系图、系统流程图、系统功能说明书、输入输出规格说明、 数据规格说明、用户手册框架
? 设计系统测试要求
1.6 设计评审
2.内部设计
2.1 设计软件结构
?按构件分解,确定构件功能规格以及构件之间的接口
? 采用中间件和工具
2.2 设计输入输出
? 屏幕界面设计、设计输入输出检查方法和检查信息
2.3 设计物理数据
? 分析数据特性,确定逻辑数据组织方式、存储介质,设计记录格式和处理方式
? 将逻辑数据结构换成物理数据结构,计算容量,进行优化
2.4 构件的创建和重用
? 创建、重用构件的概念
? 使用子程序库或类库
2.5 编写内部设计文档
? 构件划分图、构件间的接口、构件处理说明、屏幕设计文档、报表设计文档、文件设 计文档、数据库设计文档
2.6 设计评审
3.程序设计
3.1 模块划分(原则、方法、标准)
3.2 编写程序设计文档
? 模块规格说明书(功能和接口说明、程序处理逻辑的描述、输入输出数据格式的描述 )
? 测试要求说明书(测试类型和目标、测试用例、测试方法)
3.3 程序设计评审
4.系统实施
4.1 配置计算机系统及其环境
4.2 选择合适的程序设计语言
4.3 掌握C程序设计语言,以及C++、Java、Visual、Basic、Visual C++中任一种程序设计语言,以便能指导程序员进行编程和测试,并进行必要的优化
4.4 系统测试
? 指导程序员进行模块测试,并进行验收
? 准备系统集成测试环境和测试工具
? 准备测试数据
? 写出测试报告
5.软件工程
? 软件生存期模型(瀑布模型、螺旋模型、喷泉模型)和软件成本模型
? 定义软件需求(系统化的目标、配置、功能、性能和约束)
? 描述软件需求的方法(功能层次模型、数据流模型、控制流模型、面向数据的模型、 面向对象的模型等)
? 定义软件需求的方法(结构化分析方法、面向对象分析方法)
? 软件设计(分析与集成、逐步求精、抽象、信息隐蔽)
? 软件设计方法(结构化设计方法、Jackson方法、Warnier方法、面向对象设计方法)
? 程序设计(结构化程序设计、面向对象程序设计)
? 软件测试的原则与方法
? 软件质量(软件质量特性、软件质量控制)
? 软件过程评估基本方法、软件能力成熟度评估基本方法
? 软件开发环境和开发工具(分析工具、设计工具、编程工具、测试工具、维护工具、 CASE)
? 软件工程发展趋势(面向构件,统一建模语言(UML))
?软件过程改进模型和方法
方法就是你要看书!建议你要学有专攻!在一个领域说我是专家!
你是想终身从事计算机行业呢?还是等着考试过了,混毕业证学位证呢?
如果是前者,按照你感兴趣的语言也好 方向也好,努力的走下去吧,江明杀毒软件的开发者就是一名大学生,由于专注于自己感兴趣的杀毒领域,差点没毕业,但是不耽误人家NB啊。
如果是后者,想想你高中时时怎么学习的,拿出一半的精力也够你考到60了。
回答者: 半是火焰 - 二级 2010-1-18 23:49
我是信息工程系的,对这个颇有感触啊,大学平时稍微一学,临考突击一把,想挂都难。
要想走这条楼就好好学下基础课,没基础再新的技术你也跟不上的。
给你篇文章看看,我一直保留了年没删,反正对我帮助很大的,从哪摘的不记得了,
一、给计算机专业的同学
1.首先请你热爱这个专业。只有这样,你才会从抽象的理论中找到实实在在的快乐。如果你不热爱她,或者只因为这是个热门专业,那么极力要求你放弃这个专业,因为计算机是一把双刃剑,学好了你会飞黄腾达,学不好你毕业后会极其痛苦,高不成低不就,没有发展潜力,如同学英语专业的人到了美国一样。
2.不要用功利眼光对待这个学科,这绝对不是点点鼠标就能挣钱的专业。不要去想做网站挣钱,不要想靠点击率增加广告,这个在4年前已经过时,如果你现在仍然这么想,千万别说出来,因为我会觉得你很土。计算级专业的成就感总是伴随着身体上的痛苦而来,肩周炎,颈椎病,眼睛干涩,掉头发,腰椎间盘突出,关节炎,不夸张,这么帅的我工作了两个月以后发现开始掉头发了。
3.搞明白计算机“科学”与“技术”的含义。做网页,做图片,做flash,玩游戏,上网,听歌,录mp3,搞电影字幕,装windows,改注册表,为软件皮肤……这通通不叫计算机科学与技术,如果你是计算机的学生,会做以上事情,那是你应该的,不会做,也没什么丢人的,我们需要的不是让别人称作“高手”。
4.明确你最终的专业方向是软件还是硬件。方向是网络?网络不是专业方向。网络是最优秀的软件工程师、最优秀的硬件工程师与最优秀的通信工程师的智慧结晶。如果你是软件方向,请你在学精一揽子数学、数据结构、算法设计、数值分析、汇编语言、操作系统、编译原理、数据库原理、软件工程之类课程后,仔细的听一听硬件课程,他对你有用。软件工程绝对不是背背就能过的课,计算机理论可能是一个人就能研究出来,软件工程是成千万网软件工程师几十年来失败的教训凝结成的结晶,请认真听课。不要问我应该学什么语言,计算级专业的人必须具备任何语言1小时上手的能力,最起码要在10分钟把"hello world"做出来。如果说有必须学的两种语言,那他们是c++与java,学他们不是在学语言,而是在学thinking in c++,thinking in java,一个是软件的基础理论,一个是面向对象的基础理论,从来没有人听说过“thinking in basic”。如果你说c++过时了,那么千万别告诉别人你的名字,因为很丢人。山科大的老师只会教给你c,不会教给你++,所以不要被他蒙蔽,大胆的问他++,如果他不会,干脆换老师。学硬件的同学在认真听听以上课程后,学精除了政治以外的其他课程。
5.即使你学好了以上课程,我们仍然差得很远,我们只弄清学什么了,但是还不知道做什么。我们的课程设计太小儿科了,别对你在国外的同学说,否则会被笑话,所以我们要尽可能的多做设计,别一个人们闷着头做,两三个人合作一个项目,不会交流的计算机人员30岁以后肯定会下岗。题目呢,尽量是一些简单的底层开发,可以去国外大学网站上搜一搜,要自信你一定能做出来,毕竟不是什么难题,而是我们应当具备的素质。
6.如果你对网络有意,在具备了一定动手能力后从协议或者底层硬件的角度去学习它。否则你是自甘从一名高贵的计算机专业人员堕落为做着沉重机械体力劳动的民工。对网络安全感兴趣,那么你就在学会使用各种工具的一个月后从编程的角度深入学习网络协议和操作系统吧!只会用工具攻击无知人员的漏洞是一种意淫的行为。网上呼吁中美、中日黑客战时,希望你安心学习课程,或者睡觉休息,或者去运动娱乐,不要给祖国抹黑。
7.正确对待认证。绝大部分认证不是高薪的敲门砖,而是你上岗前的智商水平测试。如果你考过了认证,别对别人说这个认证是垃圾,请告诉别人你在学习中懂得了那些知识,如果你没有懂得知识,那么你是个paper,认证不是垃圾,你是垃圾。如果你连认证都没考就到处喊它垃圾,那么你就亲自考考试试,考过了,懂了,那么你随便;如果过了但是不懂,认证不是垃圾你是垃圾,如果没考过,那么看这个贴子的所有人都知道你是什么了。MCSE、CCNA、CIW等等都有它存在的意义,只要你有钱都值得一学,他们是最正规的知识来源,是经过理论、实践、时间与市场考验的产品。
二.给非计算级专业的同学的一点建议
1.热爱你的原专业,尤其是自然学课和基础学科,为了计算机放弃他们就如同为了10张一元钱扔掉了一张100元一样。
2.计算机是具有学术性和工具性的双重属性学课。架设一做计算级专业与你本专业的桥梁,那对两个专业都是做出了贡献,如果你真的很牛,把计算机学的很深很好,那么你真的值得尊敬。
3.再次记住做网页,做图片,做flash,玩游戏,上网,听歌,录mp3,搞电影字幕,装windows,改注册表,为软件皮肤……这些不是计算机专业,也挣不到钱 不要让浮躁余功利蒙蔽你的双眼,毁掉你光明的前程