- 论坛徽章:
- 9
|
本帖最后由 wonghoifung 于 2013-10-26 17:28 编辑
关于c++
我不是那种小学就开始编程的天才型程序员,我起步于大学,属于典型土鳖程序员。大学我们首先学了c语言,尤其记得课后作业就是做一些针对数学的解题小程序,虽然c语法学得津津有味,以为精通c语言就能工作了,但是实际当时我只能应付这种小代码,心中固然不满足,于是网上跟人胡诌,得悉c++这门c的超集语言,很快又学完,还是不知道自己能做什么,于是又求助于网上热心人士,当时流行一句话,会vc的才是真正程序员,现在听起来很傻,但是当时我十分迷信,于是开始学win32编程,最后终于写出一些小界面程序,当时我的水平就是认为有界面的程序才是高级货,并且以为有界面的才叫软件,傻里傻气,但很奇怪,听人说c++很难,从一开始我就不觉得c++本身有难度,c++对当时那么幼稚的我来说就只是一堆规则,记得了就行,好像还是大二,突然火起来两个语言,一个叫c#,一个叫java,舆论说他们比c++更高级,当时我把这个高级理解成更高档的意思,于是就放下了vc,一门心思跳进java的学习,java好些面向对象的概念对当时的我来说其实比c++更难理解,所以我更加认为java真的更高档,甚至毕业设计都是一个java网站,跳出来工作之后竟然又鬼使神差地涉足了linux c++服务器的开发,就是没有界面的,不是高档语言的c++,转眼就五六年过去了,可能当时我潜意识就认为这些没界面的东西应该更原始更简单吧,莫名地我更愿意去接受c++的各种陷阱及其对应的处理,每知道一个陷阱就觉得又充实了一点,这也可能是c++让我上瘾的原因。
关于c++ primer
此贴主要是关注c++ primer这本书的,很可惜我没有在入门的时候就接触这本书,要是这本书放在大学那时那个充满牛劲的我的床头,保证很快将它读完,在我第一份工作的时候我接触到了这本书,是那本红色的中译本,是一个同事送给我的,当时他准备转行了,办公室里有他这本翻到残旧的书,那时我对此书真心没兴趣,因为它名字叫primer,我觉得自己已经全懂了c++语言,只需按照惯用法,遵循规范,定能写出可靠的代码,事实却证明,工作需要,当我接触的开源代码越来越多,我对一些语法真的是很陌生,举个简单例子,我读再多其他c++教程也不知道explicit这个关键字,果然要知道所有c++语法,还是得读大部头,当然,事实上你还要读stl和模板方面的专著才能知道c++的其他方面知识,就是同事转行这样的机缘,我得到一本c++ primer,我断断续续在工作的空档翻完了这本书,这本书循循善诱的,真的如沐春风,时至今日,跟许多有经验的c++程序员一样,如果门外汉问我怎么入门c++,我都会很自然地说,看一遍c++ primer吧。
关于c++学习
c++11再一次完善了这个让人痴迷的语言。。。很多人对这语言的偏爱到一定程度非要掌握语言的方方面面,普通语法,OO,函数式编程,泛型,模板元编程,等等等。。。各个语言都有自己的一套编程规范,但很少有像c++这样陷阱多到要出几本书来规范和教导已经学习了语法的人如何去正确使用你已经知道的语法,没错,你学了语法还不够,你还要学习很多惯用法,对于同一个功能的实现,别的语言可能只要懂了语法就能写出高可用性的代码,而c++真的不能,你必须了解各种语法的弊端才能写出高可用的代码,不然一些大牛就不会谴责c++了,因为他们觉得很多不及格的程序员在用c++。。。所以对c++程序员进行面试是最容易出题的了,因为可选择面极广。。。好了,等你模熟了这个语言的脾气之后,等待你的将是铺天盖地的需求及代码量或者维护量,这里就涉及到语言的可调适性,众所周知,c++是不及c容易调试的,所以针对c++调试又可以出几本书来让大家学习了。。。事情还没有结束,当你学习了很多惯用法和熟悉了公司产品的业务之后,你或者已经成为一个小领导了,那新进来的程序员怎么写代码让你满意或者让项目成功呢??
关于c++11
福音倒是来了,c++11改进了这个语言的很多地方,获得性能优势,move语义,简单的说,它是优化复制的一种方式,临时对象这种受其他语言势力抨击的角色终能抬头挺胸了。。。通过使用类别属性(type traits,如is_floating_point)和模板元编程(template metaprogramming,如enable_if template),你可以为某些特定的类型定制模版,这可以实现优化,而不是像以前那样用上过度复杂的模板技巧。。。哈希表现在已经是标准实现的了,它提供更快速的插入、删除和查找,这在处理大量数据时很有用。以前你要用某些非标准的stl版本才能用上哈希表而不用重新造轮子,你现在可以随便使用unordered_map, unordered_multimap, unordered_set 和unordered_multiset这几种在boost已经有的数据结构了。。。提高效率不仅都是在代码性能方面,开发时间也是宝贵的,没人想延期任务被人质疑的,c++ 11可以让你的代码更短、更清晰、和更易于阅读,这可以让你的效率更高,auto关键字可以自动推断类型,lambda表达式提供了一种方法来定义匿名方法对象(闭包,实际上就是functor),这是代码更加线性和有规律可循,这在和stl算法结合使用时很方便。。。新的智能指针(smart pointer,强弱单一)替换了有问题的auto_ptr,你可以不用担心内存的释放并移除相关释放内存的代码了,这让代码更清晰,并杜绝了内存泄露和查找内存泄露的时间,还可参见陈硕的书,里面讲了很多该指针在多线程环境中的用处。。。把方法作为first class object是一个非常强大的特性,这让你的代码变得更灵活和通用了,c++的std::function提供了这方面的功能,方法提供一种包装和传递任何可调用的东西-函数指针, 仿函数(functor), lambda表达式等,抛开一些过时的靠继承靠虚函数实现的设计模式,依靠fco写出先进的c++代码吧。。。还有许多其它小的功能,如override、final关键字和nullptr让你的代码意图更明确,对很多人来说,相信减少视觉混乱,让代码能够更清楚地表达自己意图,会更让人高兴和让开发更高效。。。c++ 11提供了一种方法来检查先决条件并尽早的在可能的时机捕获错误-编译过程中,在你运行代码前,对,编译器断言。。。最后,c++11在并发方面的改进也是相当让人着迷,尤其是对内存模型的准确定义,让程序员从高层语言角度实现以前要嵌入汇编的功能。。。我说完了吗??
关于c++ primer第五版
其实c++11将出未出之时,已经有一些编译器偷步,实现了个别新特性,刚好当时新项目,美国的同事让大家用最新的g++环境,因为他们那边已经为新环境升级了基础库,初时不以为意,美国的同事也没有刻意告诉我们新环境有什么与别不同,是 后 面 项 目 迭 代 开 发 的 过 程 中 (为何这里要空格那么多才能提交?)某国内同事发现了可以用auto类型推断关键字,我大感新奇,于是竞相挖掘新环境有的c++11新特性,譬如哈希表有了,智能指针有了,这些在boost中用熟悉的东西自然手到拿来,最记得当时我比较喜欢用stl算法尽量减少代码,所以开发过程用了不少functor,知道c++11提供lambda之后,跃跃欲试,可惜当时开发环境还不支持,一写就报错,而且vim插件也不认这种c++语法,红红的,极为难看。当时网上看到国内程序员讨论c++11时还说什么谁敢先吃螃蟹什么的,我都跳出来说我们生产环境就在使用了,对方都将信将疑。直至今天,我还在庆幸当初在老外同事的带领下用上了十分贴近潮流的各种开发手段,譬如我们很早就用了protobuf,很早就尝试各种nosql实践,很早就用上git,等等。当时我有关注某新浪某研发人员的微博,记得一天他突然分享了c++ primer第五版的英文版pdf,据说全面覆盖c++11新特性,我马上就下载来看了,虽然早前已经通过wiki看过很多新特性,但是生怕有遗漏,还是很紧张就开始看了,虽然我们工作环境是英文环境,而且英文原版的文法难度也不大,但是始终看书的时候需要经过一层英文到中文的处理才到内容本身的理解,所以阅读英文始终比中文要慢,因此对此书中文版的面世一直抱着急切的期盼,直至早前博文出了英文版,终于看到曙光,刚好之前认识一个博文的编辑,虽然不太相熟,但是他很热情地送了我一本英文版,甚为感激,不过如前所述,阅读起来仍觉不及以前优秀的中译本那样畅快,本来我是要等双十一再大举将中文版拿下的,现在看到chinaunix赠书活动中竟然是此书,斗志被激发,回帖越改越长,盼望能得到青睐,赠我此书。话说此前我也在此获赠了陈硕的新书和一本项目管理的书籍,实在应该感恩。作为一个c++的偏执型程序员,毫无疑问地我将会继续期待c++更完美的进化。。ps:求签名本 |
|