红联Linux门户
Linux帮助

回答“在校C++学生之困惑”的几个问题。

发布时间:2009-07-25 18:05:44来源:红联作者:刘冲
王富涛的笔记,原文章在此《在校C++学生之困惑与讨论----欢迎讨论》。7月9号发表,当时我在马桶上用手机上网看到(出差在外,只能这么抽空上网),今天有空,简单写几句我的想法。 有些话可能会重一点,但不是针对具体哪个人,更不是指原文作者,原作者在学习C++上,在我看来非常对路和扎实,比如:《练习使用模板》等等都做得认真。

问题一:
“今天翻开《Thinking in C++》第二卷,傻眼,第一章就是异常,我最害怕的东东了。。往后翻,防御性编程。。运行时类型识别,设计模式……等太多的东西了……这些东西作为学生我们有必要深究吗”

1、如果是编程初学者,挑书要特别讲究。《Thinking in/ C++》不适合初学者。

2、异常、防御性编程、运行时类型识别,设计模式……这些都不是C++特有的,学习Java,C#,Python、Delphi,也有这些知识点,并且在这些语言中的重要度更高。比如“异常”就很好玩,在C++中它属于“高级知识”,在Java中,它变成基础知识。很多C++项目可以不使用异常许多年,但在Java项目中,请试试。再如运行时类型识别,在C++中,RTTI(Run-Time TypeIdentification/Information)是非常薄的一层,在Java或Delphi或C#中呢?是厚厚的一层。

防御性编程呢?属于基础,差不多在你学会把代码排版得漂亮一些之后,就应该开始接触这个概念了。(参看《代码大全》)

所以一句话:现在的编程专业的大学生在毕业前,无论你是学的是C++还是Java,还是C#还是Delphi还是Python等,刚好这里提到的几个知识点:“防御性编程呢”“异常”、“RTTI”、“设计模式”,存在一个你还没有“学过”它们,那就是你对不起自己这个专业和自己的大学时光了----这句话回答“这些东西作为学生我们有必要深究吗”。

问题二:
“……学的肯定越多越深越好啦,可是作为学生的我们毕竟时间有限。……”

唉,围城吧。你可能不知道,毕业以后的人,10有9个会反过来觉得,当学生的时候,没钱没势没女人,唯一有,并且多得长草的就是时间,特别是可以安排来学习的时间。老板有时会批我们没有进步,不思进取……回答吧:“其实作为一个要养家糊口的程序员,毕竟时间有限……”。

问题三:

“我们的首要目标肯定是找到一个和自己本专业对口的工作,然后在工作期间继续深造……”

这个是事实,但不能做为一个想法。更合理的想法还是尽量多学,然后在面试中脱颖而出。可能会想起庄子一句话:“吾生也有涯,知也无涯,以有涯随无涯,殆已。”一时间感觉悲凉无限,但庄子虽然不会编程,在当时却也是个大学问家。这感叹不适合于大学毕业时发的。你要上午学C,中午学C#,晚上学C++,那没话说,但认准一门语言方向,先粗通(不是精通)语言基本语法,然后去机房买100小时的机时,一头扎下去,出来时你还说“第一章就是异常,我最害怕的东东了”,那我们约好去找Bjarne Stroustrup理论一下,看看能不能在下一版C++的标准里,把“异常”给它去掉。

问题四:

“……所以我这里想问的就是作为学生的我们学习掌握C++的哪些东西找工作就足够了呢?”

找工作时有时像谈恋爱(严肃的那种),想找一个女人作为人生伴侣,其实比找工作更难,也更严肃,但要口袋里有多少钱,才可以找到真爱呢?现在是经济社会,没有人会认为钱是俗气的,相反,准备好更充足的钱才去考虑爱一个女人,其实也是体现“真爱”和“责任”的一种表现。

但,到底要口袋有多少钱了,才能开始找女朋友呢?这问题得一分为三:

第一种情况,你丫的穷得天天在街头翻垃圾桶,却痴心地在学校门口候到一位妹妹,真诚地向人家求爱:“嫁给我吧,我会还你一个美好的人生……”,然后人家礼貌地拒了你,你就在心里大骂:“这物欲横流的社会!连在校妹妹的心都只认钱了!”。

第二种情况,你又丫的一次,但这次简直就是衔着金勺出生,大学刚毕业就开公司,两个月后进入全球Top500。于是乎天天有女人来追你,包括N多学生妹,于是乎你又在心里不屑:“这物欲横流的社会!连在校妹妹的心都只认钱了!”

找工作不也这样吗?如果你的大学时光全部奉献给和学习无关的事业,两手空空走出学校大门,然后一脸真诚地对着面试官说:“给我一个机会吧,我一定还您一个称职的员工……”。人家肯定要礼貌地拒了你,你就别骂什么了嘛。

再一种极端,基本你就是一个才华横溢的天才,于是有一大帮公司抢着要你,你虽然有权利,但最好别因此把自己摆成特别超凡脱俗的样。

最后是中间情况了----多少钱适合谈恋爱啊?在此时,这个问题基本是伪命题了。谈恋爱不是有钱就行的。大体上,钱越多越好,但你以为掏出一叠钱就想去拍人家的头,那你就等着挨刀吧。女孩还会看你上进不上进,性格好不好?孝顺父母吗?人聪明吗?还有,长得帅吗等等因素。她要和你过一辈子,现在虽然你还不是很有钱,但她相信自己的眼光,相信你有这个发展空间与潜力。如果你钱比别人是多一些,但又赌又嫖,谁理你啊。这些没问题了,余的下就是不太可控的东西了,比如“机会”啊,“缘份”啊……

对应到找工作,学会多少知识适合找工作呢?你可以说女孩是势利的,也可以说女孩子是纯洁的。全看你的感受。同样,别把一家公司只往势利了去想。大体上,拥有越多真本事,就有越多公司喜欢,但公司面对两个人,淘汰掉知识多的那位的情况,也比比皆是(否则招聘工作也太简单了)。

掌握C++的哪些东西找工作就足够了呢”,这个问题就这样了:我甚至认为大学四年至少要熟练两门语言,千万别在存款只有4位数时,就很忧伤地说:“亲爱的,我们要这么多钱干嘛呢”。

问题五:

“……关键:在有限的时间里的我们需要学习多门技术(一门熟练的编程语言,操作系统,网络……)”

关键是,一门熟练的编程语言、操作系统(我知道是原理课),网络……这些都是大学计算机(软件)专业的主修课程,干嘛老说“在有限的时间里”呢?

问题六:

“我想我们每一位学习C++的同学身边都不乏有学JAVA,Delphi,VB,VC,C#的同学吧。看他们经过一段努力就可以做出一个漂亮的xxx系统来,羡慕吗?而学习C++很长一段时间效果总是不明显。真不知在面试的时候我们的工作简历上该写些什么上去才能吸引考官的眼球呢。”

那些“漂亮”的XXX系统,它的作用基本上就是让简历看起来丰满一些(是盐水?还是硅胶?),招聘时,没有哪个技术面试官,会觉得一个刚毕业的学生能“经过一段努力就可以做出一个漂亮的系统”。以100分算,一个毕业生在纸上写着他完成(通常是参与完成)一套“成绩管理系统”、“图书馆管理系统”等等,能添点得分,但就是到1~3分,打死了就是加5分。但如果因为这些资料,面试官会深入问一些问题,结果回答得有问题,可能是直接砍掉10分。

问题七:

“看着同学们一个个XXX管理系统写上去,自己却不知如何下笔。因为实在没有可写的东西。。对于这点我们又该如何去学习C++呢?我们目前可以用C++去做哪些东西,那些项目去吸引考官的眼球呢,去作为大公司的敲门砖呢?”

光批判的回答,不是好回答。对于C++新毕业生,你觉得你没有时间学习做GUI界面的,是会被减分(因为“没有时间”)。但你接下来说,我没时间,是因为我觉得《编译原理》这门很有意思,就比别的同学花了比较多的时间在上面了,我做过一个程序,可以计算普通的四则运算。于是主考官开始问你一些词法解析和语法分析的问题,你答上,直接被加10分。主考又问:你是用递归实现还是自己写栈结构实现?你说是后者,于是再加20分……

问题八:
前两天看了一位老师发表的笔记,上面列出了好多大的软件基本上主流编程语言都是C++,甚至一些全部是用C++写出来的。心中不免有一丝的得意。但这些软件对于作为学生的我们只能望而兴叹哈。我们可以拿何作为练手的项目呢。貌似C++都是来做大软件的。DOS下的程序就不说了。关键::C++程序员用何项目去练技术?(书上的那些DOS程序就不说了。这里说的是可以称得上是项目的,小项目也OK)。

《C++ Primer》上的习题就是很可以加分的小项目。“貌似C++都是来做大软件的”说这话有点感情用事了。我个人还是建议学习C++,既要“功”,也要“武”。大学时光,就算是自学C++也完全够打下不错基本功,并且!掌握大量的“武”。这一点详细内容,建议点击本段的链接看我另一篇笔记吧。或者请关注我即将出版的《白话 C++》,这里可以试读

问题九:

“目前市面上的公司可以说是成群,几人,十几人就可以成为一个公司,我想这样的公司招程序员就 是为了编码的。来了不能立即上手的。他们一般都不会考虑,相比而言学生只能退后了……并且这些公司都是为了做些小软件的……”

这个简单,就业行势是不好(原因主要还是僧多粥少),所以大家可能真的遇上过挫折,或者没真的遇上,但看到听到别人遇上,于是心理有些紧张……所以会有些判断失误。前面你说的“貌似C++都是来做大软件的”就是错的。中小公司需要C/C++也很多。并且同样是新毕业生,学C++的人数少,熟练的更少,所以进入公司后,拿的钱起点就比使java或C#的毕业生高(200~2000),这也是事实。

问题十:
“……而对于那些做大软件的公司,像微软中国,谷歌中国,腾讯等都是好多C++程序员的一个梦。当然可以实现的哈。努力就OK了。看人了……”。

也是我的一个梦……一边做梦,一边生活吧。

问题十一:

“去看了好多C++公司的招聘广告,模式就那一个,第一个就是精通C\C++.何为精通?这真不是一个确定的标准,但也总有一个大概的界线,对作为学生的我们这个标准又是什么呢?”

问题四的回答可以用上。至于学习C/C++何为精通,我教你,永远(我说的永远是指一生)不要在简历上写自己“精通C\C++”,谦虚不是原因,而是因为如果不这样,极可能会引发众怒(面试你的人,陡然将问题的难度系统提两个档,而你却不知道为什么)。

问题十二:

“熟悉STL。对于STL,很多人都理解成就是容器,像vector什么的。但有些人说不是那么简单。这就糊涂了。对这方面接触少。不太明白。请帮忙解析。”
C++标准都10年了,STL几乎就是C++的上半身。除非有一天,女孩会喜欢一个只爱她下半身的男人,否则学C++不懂STL,你还是改口说你比较懂C,C++只是偶尔用用,这样会赢得更多尊重。

问题十三:

“……众所周知要想作为一个优秀的程序员,操作系统,网络。数据结构和算法可谓是必须基础……”

操作系统、网络、数据结构与算法,这些都是咱学校里开的课。有人爱骂中国大学了教育如何不行,但我认为只能骂一半,咱们大学里安排的基础类课程,都还是不错的(我说的“不错”,并不是以学完以后能不能用上作标准),相对差一些倒是在应用类课程上差了些。当然,这倒不是在表扬教育官员们多们重视基础教育,只能说是“基础课程”本来就不容易过时。
文章评论

共有 8 条评论

  1. seoshagua 于 2009-07-27 23:52:19发表:

    一心学 C 或者直接点搞个 汇编语言得了。LINUX 正合吾意!

  2. ccj 于 2009-07-27 18:31:01发表:

    唉,惭愧…………

  3. 刘冲 于 2009-07-27 15:51:28发表:

    引用:
    (e:e2s不错~问题很傻B,回答很耐心很风趣~~这种提问水平就是当今大学生水平的体现~
    小普林斯 发表于 2009-7-26 22:40
    ):o:s

  4. 小普林斯 于 2009-07-26 22:40:18发表:

    (e:e2s不错~问题很傻B,回答很耐心很风趣~~这种提问水平就是当今大学生水平的体现~

  5. onlyll0521 于 2009-07-26 09:25:52发表:

    嗯。。写的不错啊!!!

  6. wangyu 于 2009-07-25 22:17:49发表:

    问题挺多的,还好我不干这行

  7. 微宝贝 于 2009-07-25 19:38:20发表:

    怎么老c++???》。
    很少用c++还是asm C 牛X

  8. jiehe 于 2009-07-25 18:18:58发表:

    怎么你又回来了?