c++学习进程

c++学习历程
          我的学习技术历程主要为书本知识学习,项目经验积累。从最初的课堂上学习《c语言程序设计》,然后自学《c++ primer》,对c++的语法有了较清晰的认识之后,开始着手研究c++编程效率的书籍,类似于《effective C++》和《more effective C++》,《c++编程思想》等。学习完了这些之后,有时我会对比同一段代码在不同的编译器下得出的不同结果,这令人困惑的结果在《深度探索C++物件模型》得到了一定的解答。学习了这么多关于c++的知识,在实际的项目开发中,仍然遇到了一些关于软件工程的问题。程序越来越臃肿,程序改动会出现牵一发而动全身的情况,程序离不开原作者,最终导致自己陷入了泥潭。改还是不改,还是推倒前面的代码重新写程序,这是个艰难的选择。这种问题可能长期会困扰程序员,幸亏在这个世界上总有人比我早些经历这种痛苦,并且他们能够给我答案。他们总结了这种问题的答案,并汇集成册。在这种驱动下,我阅读了《设计模式》、《代码大全》、《实现模式》《C++ Template Metaprogramming : Concepts, Tools, and Techniques from Boost and Beyond》、《代码整洁之道》、《重构与模式 = Refactoring to patterns 》等相关书籍,给我一种醍醐灌顶,如释重负的感觉。不断的学习、总结,我开始注意在软件的架构上,将功能进行划分,时刻牢记解耦、聚合、封装等思想,在复杂的问题巧妙运用设计模式中的方法;在程序的编写过程中,注意代码的编程规范,同时恰当地运用STL和开源库;而在维护上注意代码的重构,不断的精简代码,提高代码的复用率(其实这一步与程序的编写过程是不会分开的)。在这个学习过程中,个人真正体会到码农与高级软件工程师之间的差别。高级工程师写出的高质量代码就是在格式上整洁,这里整洁既包含了格式又包含了代码的内容简单而不冗余。c++语言发明者Bjarne Stroustrup对高质量代码的定义有个概括:代码逻辑应用直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没规矩的优化,倒导致一堆混乱。

          程序编写不可避免的会接触到算法和数据结构的问题,两者相辅相成。在算法的学习过程中,主要是参考了《算法导论》,以及《算法设计》两本书籍,以及《计算机程序设计艺术 . 第1卷 , 基本算法》。在研究生阶段,为了实现人脸识别的算法——SVM,专门参考了数据《数据挖掘中的新方法 : 支持向量机 》,学习了SVM的基本原理,开始领略到机器学习领域的神奇。

           c++学习不止!针对c++11最新的特征,还在研习过程中,暂且不表。