蒙古青年论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 751|回复: 19

给在校计算机专业学生的建议

[复制链接]
发表于 2006-9-1 13:27:43 | 显示全部楼层 |阅读模式
今天在msn上跟一个在校学生聊天,深深感到如果过来人能给这些学生一点
学习或个人发展方向上一些建议,是对人生发展有很大的影响。

现在回想起来如果自己在读大学时候如果有人能指点一下,就不会浪费那么多大学时光了。
如果看到这个帖子的过来人,有对学生好的建议,就请说出来。比如某个专业方向,个人发展方向等等。


在软件方面就我个人的理解简单说说,如果有不对的地方,请指出。

计算机专业的学生可以有两个发展方向,一个是考言研博,然后到学校或研究所从事
教学理论研究工作。另一个是到公司从事技术开发工作。

首先不管哪个方向一定要学好英语,不管你从事哪个方向外语都很重要。
第二是数学基础, 离散,组合(好像是研究生的课)要学好,通过数学可以使你的逻辑思维更严密。
考虑问题更周到。

专业基础课来说  数据结构,编译原理,算法(不知道本科生上不上),计算机系统结构

语言: c/c++

如果你想做技术的话,应该掌握下边的一些东西。
windows sdk    只要你做的是windows上的软件,最终都会调用sdk的东西,因为这是windows唯一的编成接口。
你想实现什么功能,先看看sdk中提供了什么接口,如果没有接口就很难做出来。
windows ddk windows硬件开发接口,你想做跟os内核打交道的软件或驱动程序,就必须熟悉这个了。

如果这两个工具你都熟悉的了,在windows下开发软件就没有问题了。但是你要想做的比比人好
那就要看你的数学基础和专业基础课掌握的有多深了。

其实写软件就是运用编程接口实现一个功能,编程接口是需要不断积累的经验,
而功能实现是你的数学和专业课上掌握的能力。

搞技术上述两个一个都不能少。
高研究不太需要前一个。

还有网络和unix/linux部分的知识我没有说,因为有些方向,我也不熟悉。

[ 本帖最后由 ganjike 于 2006-9-2 08:33 编辑 ]
发表于 2006-9-1 13:45:27 | 显示全部楼层
不错的建议。支持!
发表于 2006-9-1 13:53:19 | 显示全部楼层
发表于 2006-9-1 14:24:55 | 显示全部楼层
在我毕业的学校,组合,算法、人工智能之类是本科生课程。研究生阶段上的大概是形式语言、画法几何、高级算法分析,还有诸如图形学、神经网络、高级人工智能等东西。这所学校最有名气的是计算机图形学,前校长就是专门做这个的,还有国家重点实验室,有兴趣的可以考虑报考。
发表于 2006-9-1 15:57:41 | 显示全部楼层
那估计是浙江大学了。
 楼主| 发表于 2006-9-2 08:16:23 | 显示全部楼层
其实我觉得很多理论课对实践很有帮助。但是在学校的教学确使学生们觉得枯燥无味。
所以如果哪位对理论与实践能够联系起来给正在学校的学生们讲讲,对他们会有很大的帮助。

还有就是把工作经验中的一些知识讲解一下,对学生们同样帮助很大。
 楼主| 发表于 2006-9-2 08:20:36 | 显示全部楼层
形式语言与自动机理论对计算机专业的学生很重要,我们这边的一个老师说过,
计算机专业之所以敢称做计算机科学就是因为有了这个理论。(图灵和乔姆斯基的功劳)
否则计算机只能称之为工程了。
 楼主| 发表于 2006-9-2 08:26:12 | 显示全部楼层
技术开发方面的普通技术你需要掌握以下方面
(通用技术用那种编程工具实现都可以)
1、了解进程线程的概念,在写程序的时候知道根据需要创建进程或线程。这里需要一定的操作系统的理论基础。
掌握进程间通讯和线程间数据交换。
      举个例子:1、如何让一个程序不能运行两个实例(不能运行两次)
                          2、当你有需要(比如为了保证主程序的稳定性)把部分功能放到一个独立其他程序中。而且你
                                需要根这个程序通讯(进行数据交换)怎么实现。具体说你写两个程序,第一个程序启动第
                                二个程序,然后第一个程序接收按键,按键的内容在第二个程序中显示出来。
                        3、在一个进程中启动两个线程,这两个线程读写同一个全局变量,如何处理。
2、文件操作,保存中间结果,读取配置信息用。包括ini文件,注册表操作。
       标准c库中的文件操作,c++类库中文件操作,操作系统sdk中提供的文件操作函数。读写二进制文件,
      按结构体方式读写文件。

3、UI 界面操作(包括web方式的),windows下各种输入控件怎么使用,怎从中取数据,怎样往里赋值数据。
        windows消息循环是怎么回事。利用线程方式保证界面不发生没有响应。
          例子:把标准控件重新实现一下,给他们加上背景图片。

4、网络编程
      多线程方式的tcp/udp编程,tcp一对多的实现,udp广播,根据不同硬件上提供的拓扑结构使用相应的协议。
     mfc 提供的soket类,与socket sdk编程的区别。非soket windows/linux api 的使用,如snmp 库,windows下的
    sdk中提供的网卡信息,收发包数等api的使用.
           例子:1、写一个程序实现网上邻居的功能。可以看到局域网上有哪些机器,叫什么名字,共享了哪
                       些目录,机器的网络节点类型(windows)和工作组。
                       2、点对点的网络聊天程序,局域网内可以利用广播实现多点对多点的聊天程序。
                       3、客户端/服务器(c/s)模式实现聊天程序,需要登录,跟qq/msn类似。这个程序再
                             用b/s模式实现。

5、数据库编程
      管理员:数据库安装,建库建表建索引,编写存储过程,触发器触发器,
      开发人员:数据库开发接口 ado, oledb,dao,odbc, bde, jdbc, oci, 各种数据库提供的头文件和库文件。
                           使用标准sql语句通过数据库开发接口实现数据库的增删改查询。
                           会用select * from sysobjects;(ms sql server),  select  * from tab;(oracle)
            例子:写一个通信录程序,可以使用任何数据库和相关开发接口实现增加修改删除查询,表报功能。
                        
6、硬件编程
      串口编程,注意使用环形队列保存数据。driverstudio,声卡录音放音,摄像头驱动。
       例子:在网络部分的聊天程序的基础上增加录音放音,显示摄像头,取出摄像头图像发送给对方,
                   实现音频视频聊天功能。

以上功能不论用什么工具都可以,你能自己独立的实现出来的话,到国内任何一家公司应该都没有问题。
薪水嘛,怎么也中等偏上水平。、
如果这些技术你理解的比较透,就基本上能脱离开发语言的束缚,不论什么开发工具你都能很快学会并
能实现这些功能。

技术开发中的高级技术
这种技术与平台密切相关或者与计算机理论密切相关。
1、理论方面:
      有穷状态机的实现,比如网络协议中TCP中的状态机的实现。
      数据结构中栈与递归函数这种结构的灵活运用。我在写编译器时感觉到,实现一个编译器语法分析
              部分主要就是状态机加栈加递归函数实现。

2、平台方面
     各种文件的格式,包括可执行文件的,cpu的工作方式,常用硬件的接口以及操作系统的接口。
      汇编语言。高级语言与汇编转换中的一些知识如函数调用方式(cdecl pascal stdcall )。
     
     这些知识windows下可以从sdk/ddk中获得部分。linux下看内核源码。

这些高级技术你掌握的非常透的话,写个编译器操作系统只是体力活。(只能说实现一个,不能做到
比别人强,要想超过别人,一个方向不做5年以上很难做到。除非你是天才)

(没有写完,继续完善中....)
以上都是个人经验的总结,可能不对,希望大家多指教。

[ 本帖最后由 ganjike 于 2006-9-6 14:31 编辑 ]
 楼主| 发表于 2006-9-2 09:15:42 | 显示全部楼层
如果有其他学科的朋友也有想法的话,在这里回答或单开帖子回答都行。
适当的时候我会整理一下的。
发表于 2006-9-2 09:41:53 | 显示全部楼层
这么说来 机组 是不是也是一个比较有用的学科?
 楼主| 发表于 2006-9-2 10:01:41 | 显示全部楼层
原帖由 Hargui 于 2006-9-2 09:41 发表
这么说来 机组 是不是也是一个比较有用的学科?


不好意思,我不知道    机组   指什么。
发表于 2006-9-2 12:13:11 | 显示全部楼层
原帖由 ganjike 于 2006-9-2 10:01 发表


不好意思,我不知道    机组   指什么。


计算机组成原理
发表于 2006-9-2 16:52:00 | 显示全部楼层
Mash ih bayarla!
发表于 2006-9-4 08:46:06 | 显示全部楼层
原帖由 Hargui 于 2006-9-2 12:13 发表


计算机组成原理


这个只是专业基础课,是作为计算机体系结构的基础来上的。我们以前是大二时上过的,用的是Stanford的那本教材,不知道这本在国内用得多不多。没听说过有专门方向。
 楼主| 发表于 2006-9-4 10:27:40 | 显示全部楼层
计算机组成原理是计算机系统结构的逻辑实现。计算机实现是计算机组成的物理实现。
体系结构是计算机系统的软硬件的界面。(摘自计算机系统结构  郑伟民)

我看来组成原理是偏向硬件的。体系结构更适合软件开发。
发表于 2006-9-4 10:50:24 | 显示全部楼层
这个见地不错。
我们当初学计算机组成时,除了学习理论和MIPS指令集外,只是用MAXIIPLUS设计了一个小型机而已,然后就弄弄板子,看输入输出和解析指令。并没有深入到很实质的东西。体系结构倒是实现了一个CPU PIPELINE(流水线)仿真系统。
 楼主| 发表于 2006-9-4 13:18:32 | 显示全部楼层
原帖由 死机了怎么办 于 2006-9-4 10:50 发表
这个见地不错。
我们当初学计算机组成时,除了学习理论和MIPS指令集外,只是用MAXIIPLUS设计了一个小型机而已,然后就弄弄板子,看输入输出和解析指令。并没有深入到很实质的东西。体系结构倒是实现了一个CPU PI ...


我们这里的学生只是用  cpld (具体用哪个软件就不知道了)实现了一个加法器或减法器, 相当于类似的实现了cpu功能。

[ 本帖最后由 ganjike 于 2006-9-6 13:26 编辑 ]
 楼主| 发表于 2006-9-6 13:26:12 | 显示全部楼层
对第8贴进行了完善。

想了好久,觉得应该说,      
原帖由 死机了怎么办 于 2006-9-4 10:50 发表
这个见地不错。
我们当初学计算机组成时,除了学习理论和MIPS指令集外,只是用MAXIIPLUS设计了一个小型机而已,
   千万不要说设计了个小型机,只能说是个小型的cpu。
就连某某心也只是用别人的核流片成的cpu,基本上能修改cpu核的人(如果经过你的修改cpu的性能不下降)
的水平到intel 做cpu设计是没有问题的。
国内所有做cpu的人都是我们某些老师的师兄。

[ 本帖最后由 ganjike 于 2006-9-6 14:28 编辑 ]
发表于 2006-9-6 14:13:15 | 显示全部楼层
其实就是个小型CPU,小型机只是叫习惯了而已,赫赫
 楼主| 发表于 2006-9-6 14:27:07 | 显示全部楼层
我用过小型机 ibm的h80, 高170cm  长宽100cm。两个cpu。很古老的。(税务淘汰的)
曾经就在我的旁边,可惜没有磁盘阵列,只有8G的两个硬盘。跑的是aix.
不知道你见没有见过小型机,它没有bios设置界面,就是说你不能设置从光盘或硬盘启动。
我用的时候在aix里打一个命令设置下次从光盘启动,然后才能重装系统。
如果系统坏了,不能启动的话我都不知道怎么重装。或者裸机怎么装系统。

文档上说有个钥匙孔,把它转到另一个位置,可是我的型号的小型机上没有这个孔。

最好的用过8个cpu的,没见着只是远程登录后在上面写程序。(电信处理数据正在用的)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|蒙古青年论坛

GMT+8, 2026-7-16 12:26 , Processed in 0.013901 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表