这是发到我邮箱里面的一封信,嗯,类似的信有好几封,春节期间呢,我主要陪笑笑,呵呵,不办公,就一直压着没有回答,有点delay了,现在给这几位同学抱个歉哈,对不住了。
这几封信呢,普遍问到一个问题,就是C++以后的就业方向,C++以后有什么用?以及怎样学习才能做好明天的知识储备?
这个问题我先说句话哈,见仁见智,很难有一定之规,我也只能就我看到的方面,做一点说明,不一定准确,大家参考一下好了。
还是那句话:一家之言哈,欢迎拍砖。
原文如下:
肖老师,您好:
     收到您的回信,特别高兴。我是xxxx大学的一名大三学生,专业是信息与计算科学。
     我想给您多说一点。我高考时,知道这是学数学的,那时很喜欢数学,就报了这个专业。大一的时候,我们的老师,都很好。数学分析老师是我们公认的教授。但之后就慢慢不行了。我和大学就慢慢发生冲突了,我们的考试,就是画下重点,这很没意思。老师的水平也下了不少,这不是我一个人的观点,这是我们公认的。
    老师有念课本的,有翻幻灯片的,有在讲台上只自已讲的。当然,这是大多数。还有几个老师是很好的,我们的近代史老师,让我们知道什么是学者。软件工程老师,特让人佩服,讲课很有激情。我们的微观经济学老师,是理论联系实际的高手(我也不明白我们怎么还要学宏观经济学和微观经济学),可能是为了考研吧。这两个课占了很多学时,宏观就是看了幻灯片。我们学校的课,有些有点莫名其妙。
      我大二的时候想学信息安全,就自已去图书馆看书,看些科普性的书,后来接解并自学了汇编语言。(现在都忘记了,呵呵)从这里开始学计算机了。我们也开了数据结构,可是没有实验课。就是听老师讲一讲。我大二下学期买了电脑。想学编程,可课开的太多了,想兼顾一下。所以总是断。我们的课太多,一大部分是这样的,刚有了感觉,就结课了。老师说是扩大知识面。我觉的这对,可也认为这对我们不负责任。我们什么都没有学精。学的很少,就为扩大知识面了。
     我大三的时候,通过CSDN,在如鹏网上看了杨中科老师的C语言也能做大事。自已跟着做了一些,贺卡,计算器等。觉的很有趣。想学WINDOWS编程。无意中看到了,孙鑫老师的《VC++深入详解》,还有视频(前10讲是界面,后面还有一些网络,多线程,文件等,比较全面,入门的),学着容易点。我就看完了。动手实验了一部分。对C++的语法,又加深了一点了解。我的数据结构还没有打过一次。我在招聘网站上看到STL,BOOST这些知识,现在在家就看这方面的书。想回校后,好好再巩固打扎实数据结构的基本功。我觉得不能说我们学院不对,可是这的确对我们不负责任。学院往年很多成绩特别好的学生,毕业后要么考研,要么找工作,有做英语的,营销的,基本都转行,很少与数学有关的。
     同学们,有的没事就打游戏,等考研。我们学校的采矿等就业很好吧,现在。考这的比较多,难度小一点。还有一些同学是努力学习的。不过同学们在一起交流都表现的很无奈。很多都是这样的心态,不努力学的话,感到空虚。可静下来想一想。觉得努力这些都没有用。都有一点矛盾。我觉得不能再按学校的安排去扩大知识面了。当我们毕业,找不到工作,学院也不会管。我们要对自已负责。走上社会很有压力,而我们没有一技之长,难以在社会上立足。
   肖老师,我现在大三了,还有一年多的时间。我对计算机方向了解不多,想从事C++开发一些应用软件这些方面的。现在面临考研与就业。我没有体会到考研的必要性,所以不想考研,可怕找不到工作,同许多同学一样难免被动考研。肖老师,您能否介绍一些,C++方向的职位,和相关的那些比较重要的知识,技能,除了要打扎实数据结构的基本功外,还要注意那些方面的知识积累,才能够找到一个相应的合适的工作。
   谢谢!
   提前祝老师新年快乐!虎年大吉!
我的回答:
这位同学你好,你的问题其实有点泛,我也想了很久,只能试着答一下,你自己参考吧。
其实,从我在大本营做老师以来,很多时候,都遇到类似的问题,就是我们学习一门语言,要学到什么程度,才好找工作,即,未来的工作究竟需要我们做什么样的知识储备?
呵呵,我也说句话,很难讲。原因很简单,不同的地区,不同性质的企业,不同的工作岗位,其实对于我们的知识储备都有不同的需求,一个人很难说,通过大学短短几年,就能掌握一辈子需要的所有知识。
注意哦,是一辈子哦,我们的寿命通常比很多公司都长,这意味着,我们大多数人,一生中至少要跳一次槽,很多人还远远不止一次。我一直认为,这个世界上不可能有两份一模一样的工作,就好比不可能有两个一模一样的人一样,双胞胎还有差异性呢。
比如华为和迈普,两个都是做通信设备的,我敢说,就算是他们同样做网管软件的部门,用的语言,平台,设计的理念,使用的算法技术,其实都不一样,一个工程师,在华为可能做不太好,但到了迈普就是精英,反过来也一样,大家想可不可能?
这说明什么问题呢?我
我这里提一个提法,我们在大学中,究竟是学尽可能多的知识?还是学,注意啊,有点绕,学习“学习知识”和“使用知识”的能力?
我想后者更重要,无数的成功书籍,都说明了一个问题,这个世界,归根到底还是会“学习”的人,更容易成功一点。大家说对不对?
而学习,我的理解,首先要有意识,同学们在玩的时候,自己能不能想着该去看书了,坐车大家都无聊,能不能找本书出来看?大家拿着电脑打游戏,你能不能写个小游戏出来自己打?别人上网看视频是看电影,你能不能看讲座?其实这些都是学习。
学习一定要有意识,因为到大学中,大家会发现,自己被“管”得少了,更多时间和精力,可以自由支配,但是,很多人就乱支配,瞎玩,这样好不好?大家自己想。其实肖老师本人大学就是瞎玩一族,呵呵,说来惭愧,我大学学建筑的,但是,建筑我要说,自己学得真的很烂,我都跑去看C语言编程去了,呵呵,典型的不务正业。应该说,肖老师我的本职学业,是没有完成得太好的。建议大家不要学我哈。
但光有意识够不够?我觉得不够,还要有“习惯”,一件事情,今天兴趣来了,做一下,明天没兴趣了,就放下了,这肯定不行,这叫“三天打鱼两天晒网”,所谓习惯,就是一定要有循环不断做一件事情的兴趣和动力,不断去做,因此我一直强调,关键是养成习惯。
嗯,这位同学,我看到你的信中的描述,应该说你还是比较认真学习的,并且也有学习的习惯,我觉得很好,其实,你只要能坚持这一点,我觉得,你已经是一个成功的准程序员了,明天的工作,谁说得清楚,也许你学了一大堆C++,明天有个老板找你做汇编,你还不是得做?记住,走出社会第一步,先赚钱养活自己,养不活自己,什么理想,爱好,抱负,都是假的。你说对吧?
你说你学了杨中科老师的《C语言也能做大事》讲座,还有孙鑫老师的VC++讲座,其实这都是很好的教材,我自问这两位老师水平比我高的,我都讲不了他们那么好,建议坚持学习。尤其是杨老师,我很佩服的,自己不但做博客,还自己投资做公益性质如鹏网,人品和技术都令我佩服,建议你和杨老师好好讨教讨教。
ok,讲完学习,我们谈谈你的重点问题,C++以后的工作方向,这个问题啊,说实话,我也有点看不清楚。
我一直理解,我们以后到企业中进行商用开发,很难说哪个系统是用同一门语言,很“纯洁”地完成的。一个商用程序员,很可能需要精通一门到两门语言,理解多门语言,才做得好。这在我的《0bug-C/C++商用工程之道》一书中专门有讲,一个项目需求下来,大家最开始很可能是先挑选运行平台,再根据平台挑选合用的语言,一个系统,通常是多个语言的结合体,不太可能单一语言研发,不信的话,大家想想,QQ整个系统的开发,里面可能会用到多少种语言?C?C++?Java?PHP?Html?。。。
单一语言的开发需求我想有,但不多,比如说嵌入式系统,小规模的工业控制应用,如51C,arm linux下的驱动开发,这类场景由于系统资源有限,且缺乏大型脚本环境,很多应用也不适合用脚本开发,因此,用纯C比较多,嗯,就这样都可能内嵌汇编语言,以应对某些高速场合。
因此,我这么多年,发现一个很奇怪的结论,其实C++语言应用面并不广。说应对底层需求,讲究高效性,比如说做驱动,通常这类项目要求代码短小精悍,都不太大,不存在大型工程组织需求,C语言足以,最多加点汇编提升效率,而大型工程组织,目前更多的开发模型是底层用C实现高速功能模块,上层则使用Java等脚本语言来开发,因此脚本语言开发直观,对程序员要求低,公司更能节约成本。
这就冒出一个问题,C++能做什么?我论证了一下,非得是大型的,而且贯穿整个工程,从头至尾都既需要讲效率,又需要讲大型工程组织能力,且不太适合脚本语言的工程项目,可能C++比较合适。那就简单了,我们看看,除了大型视频游戏,大型网游,以及一些大型专有软件,比如说神舟飞船上的某个子系统,可能会全程需要C++,而大多数工业场合,实现的需求不是那么高的设计场合,公司出于降低开发成本起见,一般都是混合编程,这时候,C++反而没有太多用武之地。
你现在明白你这个问题我为什么说难以回答了吧?
不过呢,我也要说,C++要学,我在前不久的演讲《明日世界--云端计算模型下的程序员设计需求》中,特别强调,一个现代程序员,要学一门到两门语言,OO和OP各一门,大多数程序员,还是要学习一下C的,那OP就有了,顺便再学习一点C++,都不用太深入,关键是掌握OO的思想,则基本可以应对明天大多数程序设计需求。哪怕那天碰到一个新的嵌入式设备,学一门新汇编,或者工作需求,要临时用点Java,PHP,有了上述的知识储备,临时学起来也快。
为什么这么说?
我这里说句话,OP代表动作优先,通常指控制程序恰当地发出动作,实现具体的动作,这可以说是我们程序设计的目的和核心,而OO代表组织能力,表示我们能组织庞大的工程,可以使多个动作模块协调地工作,这个实做能力和组织能力,我认为是未来程序员必不可少的两个能力,都要有。这叫做“做程序员也做得,做项目经理也做得,既懂实战操作,也懂组织管理”,你说这种人才以后的职业道路会不会很宽广?
因此,这里我总结一下本文最重要的一个话题:“学语言不是写程序!
我们其实都是从学习一门语言走进程序员这个职业的,但是,经过了这么多年的职业生涯,我也反思过一点,写程序和学语言到底是什么关系?
我通常喜欢拿小学生写作文来举例子,学语言,好比我们认识了很多中国字,很多词汇,同时呢,也有了一点简短造句的能力,但是,即使我们把一门语言的各种规约,特性背的滚瓜烂熟,是不是就说明我们是一个好程序员呢?
我认为不是。
为什么,我们长大了会发现,大家学习语言,更多的目的是为了以后在工作和生活中,与人交往时,可以自如表达自己的意思,也能听懂别人的意思,这个组织词句,描述意思的能力,其实并不是学语言学来的,而是通过大量的练习和实践,训练出来的,不信,大家想想自己或朋友有没有口头禅,还有一些俗语,短语,成语,很多都不是教科书上有的,但大家约定俗成,用起来方便,对不对?
所以我一直说,学软件开发,学的是这种“描述自己意思”的能力,而不是一个纯粹的语言。
不过很不幸,目前我看到有很多朋友,确确实实在沉迷于语言,忽视了对这种“描述能力”的培养,这在大学中还很多。
我们经常听说,“熟读唐诗三百首,不会作诗也会吟”,有吧,可是,我问个问题,这辈子都背别人的东东了,自己一点创新都没有,能做好一个程序员吗?我觉得那不叫程序员,叫“Copy机”。
这里我说第二句话,请你关注,学程序设计,更多的是要在对基础知识熟练的基础上,培养自己的创新能力,计算机软件开发,哪怕是硬件开发,你看哪家公司靠“炒剩饭”能活的很好的?好的公司,大的公司,一定是创新力很强的公司。
因此,如果你以后需要找到一个理想的工作,我建议,首先关注学习,学习注意学习能力,而不是背诵,同时,你去想一个问题,如果今天我做一段代码,我有没有创新?
什么叫创新,我也提一个概念,你自己去想,就是我今天有没有解决一个“有无”问题,就是说,是不是有个东西,以前世界上没有,现在,因为我今天的工作,有了,这就是创新。
我建议你按照上述思路去思考和学习,那么,我相信,以后你不太可能会遇到职业危机,也不太可能找不到工作。你说呢?
呵呵,好,先到这里,有问题欢迎继续问。
=======================================================
在线底价购买《0bug-C/C++商用工程之道》
(直接点击下面链接或拷贝到浏览器地址栏)
http://s.click.taobao.com/t_3?&p=mm_13866629_0_0&n=23&l=http%3A%2F%2Fsearch8.taobao.com%2Fbrowse%2F0%2Fn-g%2Corvv64tborsvwmjvgawdkmbqgboq---g%2Cgaqge5lhebbs6qzlfmqmttgtyo42jm6m22xllqa-------------1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20---40--coefp-0-all-0.htm%3Fpid%3Dmm_13866629_0_0
肖舸