网络编程毕业生总结的上学和工作期间的一些经验教训(受益匪浅)

来源:互联网 发布:赵云武力知乎 编辑:程序博客网 时间:2024/05/25 18:09

各位同学大家好:

应李老师的邀请,我在这里谈谈自己上学和工作期间的一些经验教训,希望对大家以后的发展有一点儿帮助。

主要想在两方面分享一下自己的经验:一是日常生活行为习惯方面,二是学习工作尤其是技术方面。

首先来谈谈行为习惯方面。

一是希望大家养成保持学习的习惯。

现在的世界是真正的日新月异的世界。前不久谷歌创始人佩林说过:现在的世界2天产生的信息量等于2003年一年产生的信息量。按我理解,这里有两个意思:一是变化快,需要我们不断学习去跟进,这样才能有机会去超越和引领;二是信息量大了,需要我们有选择的去学习,有智慧的去选择。谷歌有世界上最多的服务器数量,大概100万多台(腾讯估计有20万台左右),它分析的数据还是可信的。希望大家对学习有紧迫感,要有时不我待的感觉。我在大学期间周一到周五,基本每天晚上都要去上自习,六点半到九点半,人家来打扫卫生了我们才离开。现在想想,很是怀念当年的晚自习。要想在某方面比较精通,要抓紧时间学它的方方面面。大家都学过C/C++,但是如果认为学过2本课本、考了八九十分,就是“不错了”、“熟悉了”,那这样的想法未免太简单了。

提问:

l C++对象的内存布局是怎样的?

l Overload/override/overwrite有什么样的区别?

l 模板为什么不能分离式编译?

l 头文件的作用?预防头文件重复包含的方法和原理?

l Stlmap是怎么实现的?

l 怎样预防stl容器的迭代器失效?

l 如何预防和避免C++内存的泄露?

...........

等等这些问题,不知道各位同学可曾思考过?但有一点可以肯定,那就是你读的两本课本不可能有上述问题的答案。

我在学校期间,研究过的C++著作大概有以下: 

l 《深度探索C++对象模型》

l 《C++ Primer

l 《C++标准库—自学教程与参考手册》

l 《Effective C++

l 《Effective STL

l 《大规模C++程序设计》

......

大家可能有听过或看过这些著作,这些都是千锤百炼的杰作,认真研读一定会令你功力大增!

计算机科学,更新这么快,信息量这么大,但是最重要的还是四门基础课:《操作系统》、《数据结构》、《计算机网络》、《计算机组成》。有心想往计算机方面继续深造的同学,不应该仅仅把这四本课本读完就行了,还要研读一下国外大家的作品:斯特灵的《操作系统》,科曼等人的《算法导论》,库罗斯等人的《计算机网络--自顶向下方法》,布莱恩特的《深入理解计算机系统》等。打好这几方面的基础,一定能使你在未来发展的路上无往不利。好像《射雕》中的郭靖,刚开始练全真派的正宗内功,开始很吃苦、进展慢,但积累到一定量,配合降龙十八掌,那就威力无穷。反看杨康,急于求成不打好内功基础,练九阴白骨爪,开始貌似走了捷径,结果越走路越窄,没有了上升的余地。所以希望大家要沉住气,打好这个基础。

乔布斯05年在斯坦福大学的演讲非常不错,我建议大家有时间看看。里面有一句话,我觉得很好,送给大家:stay hungrystay foolish . 中文意思大概是:求知若饥,虚心若愚。

 

二是不要抱怨

这个阶段的社会风气给本来就年轻的我们带来不少浮躁。于是经常可以看到,我们在不停抱怨:上到抱怨国家社会,下到抱怨学校老师家长同学。总是能找到抱怨别人和放纵自己的理由,结果就是自己毫无进步、一事无成。我想起了一句话:我们总是高估自己没有的,而低估自己拥有的。希望大家遇事不要抱怨,多找自己的不足之处,要心平气和,这样才能进步。这个世界当然有不公平之处,如果我们只盯着这些不放,那么你什么都得不到。天道酬勤,我们通过自己真正的努力,就一定会取得应有的成就,这是这么多年来我毫不动摇的看法。在腾讯,好像每个人的毕业学校都比我好:中山大学、华中科技大学、华南科技大学、南京邮电大学、中国科技大学......作为中原工学院的毕业生,我凭什么能和这些同事一起工作?正是不断的努力积累。我们不能坐井观天,要多看到自己的不足之处,要不断学习、进步。

蚂蚁缘槐夸大国,蚍蜉撼树谈何易。送给大家以为戒。

 

再来谈谈技术方面。

根据我工作以来的思考,未来技术方面还是两部分:前后和后台。后台主要是Linux平台大规模并发服务器开发+海量数据库,这个为了考虑性能方面的因素,主要还是用C++。前后就比较多样了,分为移动手机平台的前台开发和传统桌面PC的前台开发。因为做前台客户端开发,要根据不同的平台进行选择,比如Windows客户端、AndroidIOS等,需要熟悉这个平台的方方面面。前台开发的另一个趋势是大一统:利用HTML5+JavaScrip技术,一次开发,通过浏览器在各个平台运行。这毫无疑问是非常吸引人的,有志之士可以研究这方面的开发内容。

因为我们还是学C++多一些,所以着重谈谈C++。有人说成也C++,败也C++。意思是你如果不能完全掌握C++,你用C++去解决问题的过程中,所带来的新问题比解决的问题还多。中国有句古话:不尽知其弊,难知其利。我们要先清楚C++的缺陷以及它适用的场合,然后才可以更好发挥它的优势。C++未来的趋势是Linux并发服务器开发以及一些要求高效率的客户端、链接组件的开发。现在很多客户端也是由C++开发的,比如QQ、迅雷、360等,因为这些客户端从界面到功能,要求很高,只有C++才能实现。至于企业级开发,大家都很清楚,一般用JavaC#

一直有C++Java之争。这个完全没有必要,因为适用场合不同。我们应该透过语言看到更本质的东西:用计算机解决问题的思维逻辑。比如算法和设计模式,用什么语言都无所谓,都能实现,关键你要理解它的思想本质。

可以说,C/C++的发展本身,就是计算机科学发展的历史。C最初是作为开发Unix操作系统和编译器实现的,而Unix又是Linux的前身,Linux又是Android的前身。还有世界上十大超级计算机用的都是Unix/Linux操作系统,你们应该懂了吧。

如果时间条件允许,建议大家深入地学习C/C++。学好了C/C++,再学JavaC#Python等语言,就感觉很随意了。

怎么学好C++?按我的经验,分为以下几个层次:

一是要学好面向对象的本质:封装、继承、多态。要特别注意C++对象的内存布局,以及虚函数到底怎么实现?多态到底怎么实现?这里面涉及到编译器的一些知识,你们应该花时间去了解一些。

二是要学好STL。主要通过STL掌握核心的数据结构和算法,以及容易被大家忽视的模板技术。模板是C++未来发展的方向。侯捷的《STL源码剖析》建议大家看看。如果研究完了STL,可以看看BOOST方面的内容。

三是要注意C++与设计模式、idioms的结合。当C++idioms完美结合后,它释放出的威力是难以想象的。大家可以多注意这方面的内容。

四是要把其他语言和C++结合起来。一些脚本语言,比如Python等,和C++混合起来用,各自发挥自己的优势,这是未来的发展趋势。

 

我想起了在腾讯的笔试题,大概有以下这些:

l 用一种技术实现类似宏函数如MAX那样的效果

l 实现一个字符串类

l 大文件操作 

l 大数运算

记得不全了,感兴趣的可以去网上搜搜,有很多可供参考的面试题。

 

最后,我要祝贺大家有李老师这样的好老师!

他为了同学们以后更好的发展,特别邀请我谈谈自己的一些经验,我也很开心可以和大家有这样的交流!

雄关漫道真如铁,而今迈步从头越。祝愿大家取得更大的进步!

 

 

2013-09-07

于深圳

(此文非本人所写,学长大作,临表涕淋,感激不尽)

原创粉丝点击