一名在校大学生的疑惑

lhw7791086 2012-12-06 10:16:37
说真的,读大学别打听这个大学什么什么专业好,自己的兴趣才是最重要的;自己混得好不好不是看你学的专业好不好,而是你自己学得好不好。俗话又说了:兴趣才是最好的老师。。。

当年就手贱,听信他人报了个通信类专业,结果现在一直纠结在信道编码、解码、滤波器、数字信号处理,我&#……¥%#*@。。。。 期间偶尔会用到C++或C,不过很少了。

以上都是吐槽,前辈们就当做是废话吧。。。

自己打算向软件这方面走走,自己对C和C++兴趣还比较浓(大一课程上学了谭浩强老师的C,基础还是有一些的吧)
目前一直在自学状态(谭浩强老师的C++和C++ primer plus;前者看的比较浅,过了一遍;后者看的很仔细,目前仍然在啃。。。)

疑问一:都说学习C++要多敲代码、多做题。但是是做什么题呢?现在书上的题目基本都是算法,数据结构有关的题目,是否一直坚持做算法、数据结构的题?还是自己多编写一些小项目(类似于什么图书借阅系统之类的?)自己感觉目前还没有体会到C++的真正用处,因为比如像MFC、VS之类的做界面很方便,很容易就可以做出一个界面比较漂亮的网站或者可视化程序;而C++比较偏向于最基础的层次?(不知道理解的对不对)

大学期间也跟着老师做了一些东西,都是一些乱七八糟的,很粗浅;比如ASP.NET做小型网站(自己学院用),为了做网站又了解了一些js,html,css知识;用MFC实现简单的示波器功能(期间借阅了大量书籍、观看了大量教学视频。。。),还有用AD画原件封装(我去,最讨厌硬件方面的东西了,虽然搞硬件有前途)。。。了解了很多东西,但是没有一个是深入的。

疑问二:现在我学的东西真的很杂,但是又没有一个是很深入的。属于那种需要用到什么东西,就去现学什么东西(做网站的时候就是这样:ASP.NET-》HTML-》CSS-》JS)感觉很被动,但是现在的IT行业要求一个人不可能只会一种东西对吧?难道各位IT工作人员都是等到了需要用什么而去现学吗?也不可能把所有的都了解啊,这样深度就不够了。对于在校大学生来说,广度和精度该怎么取舍呢?

疑问三:每次我在用C++调试程序一筹莫展的时候,旁边就会过来一个JAVA哥们,对我说:C++是世界上最难学的语言,用JAVA方便多了,很容易做出东西来,干脆你来学JAVA吧(省略若干字)。请教C++和JAVA区别有这么大么?就现在的IT趋势来说,C++和JAVA的目前状况是怎样的?


各位前辈们,请鞭笞我吧,请打击我吧,我需要清醒的认识。本人不才,没多少分了,20行不行?
...全文
385 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
不再三重门 2013-03-25
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 英语也是一门计算机语言的说。 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 关于自己是……
我跟你的感觉刚好相反,越仔细说明"咬文嚼字","钻牛角尖",编程应该是思想的东西,何必拘泥于文字呢?
meadow 2012-12-08
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 英语也是一门计算机语言的说。 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 关于自己是……
尼玛,又出来了,还是那一句,虽然很牛B的样子。。。这些东西看着就别扭 另外, A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全。。。。 尼玛,感觉在胡说八道有木有!!!
Star-light 2012-12-08
  • 打赏
  • 举报
回复
引用 14 楼 ZLhy_ 的回复:
引用 13 楼 zdarkalone 的回复:1,数据结构类的代码不要多敲,理解就行。以后想做什么就敲什么。如果不知道以后要做什么,就先学stl全部的类, 然后boost。boost按照这样的顺序:smart_ptr, array, optional, variant, tuple, filesystem, lexical_cast, format, flyweight,……
注释太多了,累不累。。。函数名挺清楚的就不用再写了 数据结构其实没那么重要,会用,给算法能实现就O.K。 找一个有意思的想法然后去实现,然后翻翻书看看有什么数据结构能用。
疯狂的红豆 2012-12-08
  • 打赏
  • 举报
回复
引用 13 楼 zdarkalone 的回复:
1,数据结构类的代码不要多敲,理解就行。以后想做什么就敲什么。如果不知道以后要做什么,就先学stl全部的类, 然后boost。boost按照这样的顺序:smart_ptr, array, optional, variant, tuple, filesystem, lexical_cast, format, flyweight, bind, thread, enable_i……
您好,我数据结构爱的代码都是配合着模板一起用的,下面是一段有关模板的代码,您给评一下:
#pragma once
#include"VertexNode.h"
#include"F:\QQPCmgr\documents\visual studio 2010\Projects\Graph\MinSpanTree\MSTEdgeNode.h"
#include<iostream>
#include<fstream>
using namespace std;
const int DefaultVertexNum = 30; //默认顶点最大数目 常量

template<class T, class E> //因为顶点是一个类型 边上的权值又是一个类型 所以声明了两个类型的模板
class GraphAdjList
{
protected:
	int maxVerticseNum; //最大顶点数目
	int numVertices; //当前顶点数目
	int numEdges; //当前边数目 
	VertexNode<T,E> *nodeTable; //顶点顺序表
	const T nullVertex; //顶点类型的NULL 用于找不到指定顶点的时候的返回值 在GraphAdjList类中是常量
	const E nullEdge; //边类型的NULL(用边的权值表示边是否存在,如果是在正常范围内的E类型的值就说明存在边,否则就用一个很大很大的数据表示不存在边或是边是无穷远的)
	static const int s_NULLidx = -1; //用来标示无法找到指定正确索引,返回-1 此写法是在C++2003标准出现的 在以后的编译器中均识别

public:

	int GetVertexPos(const T &targetValue); //内部提供服务,根据传进来的参数返回该顶点所在的索引,如果失败则返回-1
	int GetNullIdx(); //获取空索引标示
	GraphAdjList(T nullver, E nulled, int vertexsize = DefaultVertexNum); //配置一个图
	~GraphAdjList(); //析构
	void MakeEmpty(); //销毁一个基于邻接表的图

	T GetVertexValue(int vertex_idx); //获取指定索引的顶点的值 没有则返回nullVertex
	T GetFirstNeighbor(const T &target_vertex); //获取以vertex为顶点的第一个邻接顶点值
	T GetFirstNeighbor(int idx); //根据顶点索引获取顶点值
	T GetNextNeighbor(const T &vertex, const T &adj_vertex); //获vertex的邻接顶点adj_vertex的下一个邻接顶点
	T GetNextNeighbor(int idx, int adj_idx); //根据索引值获取指定邻接顶点的下一个顶点值
	E GetEdgeWeight(const T &begvtx, const T &endvtx); //获取目标顶点begvtx,endvtx之间的权重值
	E GetEdgeWeight(int begidx, int endidx); //重载

	int GetVerticesNum(); //获取定点数目
	int GetEdgesNum(); //获取边数目
	T GetNullVertex(); //获取顶点空类型
	E GetNullEdge(); //获取边空类型
	
	bool InsertVertex(const T &target_vertex); //插入一个顶点 返回布尔值
	bool InsertEdge(const T &begvtx, const T &endvtx, const E &weight); //在顶点begvtex,endvtx之间插入一条边(插入权重值) 返回布尔值
	bool RemoveVertex(const T &target_vertex); //删除指定顶点,返回布尔值
	bool RemoveEdge(const T &begvtx, const T &endvtx); //删除指定顶点之间的边,返回布尔值

	void print(); //无参标准输出
	void print(ostream &output); //输出这个图的信息
	template<class T, class E> friend ifstream& operator>>(ifstream &fin, GraphAdjList<T,E> &G); //文件输入流重载
	template<class T, class E> friend ofstream& operator<<(ofstream &fout, GraphAdjList<T,E> &G); //文件输出流重载
	template<class T, class E> friend istream& operator>>(istream &input, GraphAdjList<T,E> &G); //标准输入流重载
	template<class T, class E> friend ostream& operator<<(ostream &output, GraphAdjList<T,E> &G); //标准输出流重载

	//template<class T, class E> friend void DepthFirstSearch(GraphAdjList<T,E> &targetG, const T &begigVertex, void(Fun *)(VertexNode<T,E> &));
	//template<class T, class E> friend void Sub_DPS(GraphAdjList<T,E> &targetG, int local_idx, bool * &visit);
	void GetAllEdgesInformation(MSTEdgeNode<E> * &arr); //返回所有的边信息
};
还有啊,就是很多人都说数据结构很重要,重要在哪里我有一些了解,可是怎么学习的过程中怎么才算把数据结构学好了呢?我所有的结构都是自己手敲一遍而且觉得都是用的模板,自己的泛型编程也了解了点。这样子配合学怎么样啊?那个STL在学C++的时候仅仅是用过一些基本容器,现在用基本的数据结构,但是用的不多。
Star-light 2012-12-07
  • 打赏
  • 举报
回复
1,数据结构类的代码不要多敲,理解就行。以后想做什么就敲什么。如果不知道以后要做什么,就先学stl全部的类, 然后boost。boost按照这样的顺序:smart_ptr, array, optional, variant, tuple, filesystem, lexical_cast, format, flyweight, bind, thread, enable_if, mpl, preprocessor, serialization, asio, fusion. 剩下的看兴趣。记住:模板比面向对象更重要!能用模板的不要用虚函数,熟练掌握模板特化,lambda function, RAII,SFINAE,CRTP等编程技巧。 2,看喜好,我只会C++,但是混的也还可以。学的精,不容易被替代,但是合适的工作少。 学的广,工作好找,但是核心内容接触的少。自己拿捏。 3, C++和java工作内容不一样,java事务处理型的偏多,适合性能要求不高的任务。 各种企业管理软件,一般应用软件前台都用java。 C++比较底层,多是搭框架,造基础设施用。适合逻辑复杂且性能要求高的任务。 但是国内需求相对不多,游戏公司,服务器后台,多媒体处理才要C++人才,就业窄。 C++之所以比java难写是因为C++写法众多。 虽然随便写写就能媲美java的最优性能,但是会不自觉地寻找最优的设计,这会花去很多不必要的时间精力。但是一但设计出来,程序的性能极好,通用性极广,扩展性极佳,安全可靠。 这种优越感不是java能比的。
疯狂的红豆 2012-12-06
  • 打赏
  • 举报
回复
引用 5 楼 q191201771 的回复:
自古二楼出NB,你这是用生命在回帖啊。
LZ说的对,可能是引起共鸣了吧,曾经遇到过一样的问题,就把自己怎么走过来的分享一下,也没什么。 看到你工作不到三年就月薪上W,还是税后的,你才是牛人啊!
lhw7791086 2012-12-06
  • 打赏
  • 举报
回复
引用 8 楼 zhao4zhong1 的回复:
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 英语也是一门计算机语言的说。 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 关于自己是……
我去。。。
lhw7791086 2012-12-06
  • 打赏
  • 举报
回复
引用 5 楼 q191201771 的回复:
自古二楼出NB,你这是用生命在回帖啊。
这是因为经历相同,引起共鸣了。。。
lhw7791086 2012-12-06
  • 打赏
  • 举报
回复
引用 1 楼 ZLhy_ 的回复:
首先我说一下我的情况吧,我也是一名在校大学生,今年大二,大一学的是C与C++,这个学期学的是数据结构与算法,数据库,网络。自己也在CSDN上混了几个月了吧,加上自己的实践经验总结一些话吧,分享一下,也算是对自己的认识的一次总结吧。有不好的或是价值观冲突的勿喷哈,我们求同存异吧。 你的第一个问题: 不说C了,直接说C++,学习语言本身,这是最基本的了,我当时也是用的谭浩……
的确,兄弟你和我的情况很相像啊。
赵4老师 2012-12-06
  • 打赏
  • 举报
回复
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构…… 英语也是一门计算机语言的说。 对学习编程者的忠告: 眼过千遍不如手过一遍! 书看千行不如手敲一行! 手敲千行不如单步一行! 单步源代码千行不如单步对应汇编一行! 关于自己是否适合编程的很简单的测试: 在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案: A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感 A不适合编程(理由:打字准确度偏低、粗心大意) B初级程序员(理由:打字准确度很高、认真细致、自信、理解全角半角概念) C高级程序员(理由:在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证) D软件项目经理(理由:能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业!) 如果想从A变成B的话,到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”
pengfoo 2012-12-06
  • 打赏
  • 举报
回复
二楼这样的学习态度和回帖态度还是值得肯定和赞赏的,顶一个,赞一个
pengfoo 2012-12-06
  • 打赏
  • 举报
回复
如果通信的学生真准备做软件的话,那么计算机专业的课程你都得补上,数据结构,算法,编译原理,计算机体系结构,当然,有的有了一定基础,例如通信的学过数电,微机原理等等,这些都不是白学的。 另外,C/C++,JAVA,UNIX,LINUX,数据库,等等都是很经典的技术,必须要掌握。。
就想叫yoko 2012-12-06
  • 打赏
  • 举报
回复
自古二楼出NB,你这是用生命在回帖啊。
pengfoo 2012-12-06
  • 打赏
  • 举报
回复
通信业会计算机行业的对立没有这么强烈,实际上他们都是科技产品中的分支,都满足一般科技行业的产业规律,通信专业的学生毕业做计算机没什么不好,如果是做软件,编程的思想和程序语言是相同的,做硬件也是如此。如果将来做管理,组建团队和团队文化建设的方法也是相同的。如果做算法——要知道,矩阵论,概率论和随机过程,那是很多门学科的基础,互联网中搜索或数据挖掘等很多领域都会用到。 举一个不恰当的例子,当年通信业奇才李一男最后也去了互联网公司,而且没见他做得不好。
pengfoo 2012-12-06
  • 打赏
  • 举报
回复
我想说的是,我和楼主是一个专业的,我本科和现在都是通信类专业,我也深知楼主的困惑,而且我现在走的也是偏向于上层应用方向。但是,作为一个学通信的,我想说的是,如今各类互联网应用,还是移动互联网,都离不开通信的基础作用,没有通信,各类应用没地方跑。。就像高速公路,上面可以跑各种车辆,而通信的作用就相当于路基,而各类应用则相当于车辆,没有一个稳定的,宽阔的路基,就没有了各种各样丰富多彩的车辆。。通信很好,不要认为填了个通信就是怎么滴,当然你现在可以选择软件方向,这和通信并不矛盾,其实,通信,包括的内容也很广。。可以看下面我转载自知乎上面的一个分析吧。。。
loveheronly 2012-12-06
  • 打赏
  • 举报
回复
数据结构和算法很重要啊
疯狂的红豆 2012-12-06
  • 打赏
  • 举报
回复
首先我说一下我的情况吧,我也是一名在校大学生,今年大二,大一学的是C与C++,这个学期学的是数据结构与算法,数据库,网络。自己也在CSDN上混了几个月了吧,加上自己的实践经验总结一些话吧,分享一下,也算是对自己的认识的一次总结吧。有不好的或是价值观冲突的勿喷哈,我们求同存异吧。 你的第一个问题: 不说C了,直接说C++,学习语言本身,这是最基本的了,我当时也是用的谭浩强C++入门的,国人的书,作为新手理解起来就是容易些。谭浩强的看完后就开始看<C++ Primer>了,这个没有很系统的学。在学习最基本学法的时候就要不断地实践了,我记得当时每天100行C++代码,就是把自己学的知识,通过代码的形式展现出来,虽然没什么具体的应用。后来到类的部分时候,就开始尝试着去设计一个类啊什么的,这时候每天的代码量也明显多于100行了。在不断的实践中,自己对C++的语言有了深刻的认识,也对调试有了学习。C++学完后,就开始用C++面向对象的思想去设计一个小的应用了,比如计算器,图书馆借书系统啊,选课系统啊,客服系统啊,成绩管理啊,模拟ATM机工作啊等等大大小小的吧。大一下学期C++大概敲了不到2W行代码吧,不算多,但也不算少吧。你说C++不知道做些什么题目,有时候别人问我每天都在敲什么代码呢?比如说曾经C的代码用C++封装一下,练习一下面向对象的思维,再或者一个具体的小应用去用C++实现了。这里面就多了,如何去定义一个类的成员变量与函数是一件需要面向对象思维的事情,这要考虑的就是是否面向对象,是否容易扩充,是否容易修改,是否容易重用,这些虽然是设计模式要考虑的,但是把C++的面向对象思想学到了,这些都是可以去思考的了,这才是真的学到C++了。 我们这个学期是数据结构,数据库,网络。很庆幸的是我们数据结构是用C++描述的,所以在学习的过程中不断的敲代码,写算法,都是在练习C++的,另外这个学期的所有代码我还都用了模板,也学了很多STL中的东西。数据结构的重要性不赘述了,我花了几乎一半的学习时间在这上面,把所有的结构都是自己看书,思考,亲手敲一遍的,敲的时候会有更多的思考。现在分析问题,设计的时候不仅要考虑类的界面了,还要考虑数据的存储方式了,这就把数据结构的东西用上了,还会有某些算法的吧。网络与数据库的算次要吧,就不详细说了。 至于C++的用途,我想百度一下肯定有很多的。主要是偏底层的吧,比如小型系统的开发,比如图形引擎,游戏的引擎,以及PC端的游戏,很多后台等等吧。因为C++是静态文本语言,没有像Java与C#那样的内置COM,所以学习完C++后还要去学VC++,也就是C++可视化开发了,这个就是要和Windows编程结合了,我们还没学,具体不清楚。 第二个问题: 关于在大学期间学习深度广度的问题,我曾经也迷茫过,自己纠结于C/C++的时候发现C#很简单的就可以做出一个漂亮的界面出来炫耀一下,我们的数据库,网络大作业就是用到了C#,虽然我很早就写好了,别人觉得很厉害的样子,其实只有自己知道,为了具体的需求去学的C#知识少的可怜,根本就不能算是学C#了。关于深度与广度,其实深度里面也有一个广度的,相反也是。比如我可以在大学期间把C/C++投入少点,数据结构,操作系统,计算机组成原理,编译原理,Windows编程,以及设计模式等等这些基础课程投入的少点,这些课程学好是可以写出界面的东西来,但是没有C#,java这样子来的快。所以我把大量的精力放在了学习C#上,根据需求做一个什么东西的,比如我做的一个网络实验,及时聊天工具,类似于QQ的。用到什么学什么,看书,看教程什么的,做出来了。然后再找一个什么东西啊,我的数据库作业是一个公司的信息管理系统,也是用C#作的。这些我不管C++学的再好都是做不来的,但是我可以在一个月的时间里用C#做出来两个。曾经的我也因为这个有过转C#的冲动,心自己在这苦逼的学C++是为了什么啊。那是因为自己太浮躁了,没有沉下心去学习,所以会很容易偏离自己的原始的目标与方向,见一个喜欢一个的。后来把两个作业做完后,就还是专注于数据机构的学习了,11月份我只做一件事,那就是学习数据结构,因为知道他很重要,虽然我现在不是有多大的体会。所以我的认识是,专注于基础课程的学习,不去学那些新鲜的时髦的。前面列举的课都是我要重点学的,很多还没学到呢。当然我也认识一个同学,他是广泛学习的那种,没有专注于这些基础课程,但是他确实能做一些很好的东西,都是用C#做的,在发展发展应该很厉害吧。 第三个问题: 语言没有好与坏,只有使用语言的人的好坏之分,Java虽然可以快速做出界面的东西,可如果你同学仅仅是停留在拖几个控件的层面上,那几乎也没有真正的学Java吧,如果你深入的学习C++,能把C++的威力施展出来那也是很厉害的。另外,计算机能做的事情,C++都可以做到,就看C++的程序员行不行了。我虽然学习的是C++,但是我也不会有语言之间的偏见,因为我在CSDN上看到很多非C++的牛人,真的是大牛,看他们也是很厉害的,看样子都是混的很好的。所以,不管学什么,只要自己坚持,坚持到最后,深入到底,你就是赢家。 最后说一下我的目标吧,我是想走3D网络游戏开发的。所以学C++与数据结构会比较多。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧